3c40b71eb9075c1a00fd87d810a4b74555abddd2
[WebKit-https.git] / Source / WebCore / dom / SecurityPolicyViolationEvent.h
1 /*
2  * Copyright (C) 2013 Google Inc. All rights reserved.
3  * Copyright (C) 2016-2018 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #include "Event.h"
29
30 namespace WebCore {
31
32 class SecurityPolicyViolationEvent final : public Event {
33 public:
34     static Ref<SecurityPolicyViolationEvent> create(const AtomString& type, CanBubble canBubble, IsCancelable cancelable, const String& documentURI, const String& referrer, const String& blockedURI, const String& violatedDirective, const String& effectiveDirective, const String& originalPolicy, const String& sourceFile, unsigned short statusCode, int lineNumber, int columnNumber)
35     {
36         return adoptRef(*new SecurityPolicyViolationEvent(type, canBubble, cancelable, documentURI, referrer, blockedURI, violatedDirective, effectiveDirective, originalPolicy, sourceFile, statusCode, lineNumber, columnNumber));
37     }
38
39     static Ref<SecurityPolicyViolationEvent> createForBindings()
40     {
41         return adoptRef(*new SecurityPolicyViolationEvent());
42     }
43
44     struct Init : EventInit {
45         String documentURI;
46         String referrer;
47         String blockedURI;
48         String violatedDirective;
49         String effectiveDirective;
50         String originalPolicy;
51         String sourceFile;
52         unsigned short statusCode { 0 };
53         int lineNumber { 0 };
54         int columnNumber { 0 };
55
56         template<class Encoder> void encode(Encoder&) const;
57         template<class Decoder> static bool decode(Decoder&, Init&);
58     };
59
60     static Ref<SecurityPolicyViolationEvent> create(const AtomString& type, const Init& initializer, IsTrusted isTrusted = IsTrusted::No)
61     {
62         return adoptRef(*new SecurityPolicyViolationEvent(type, initializer, isTrusted));
63     }
64
65     const String& documentURI() const { return m_documentURI; }
66     const String& referrer() const { return m_referrer; }
67     const String& blockedURI() const { return m_blockedURI; }
68     const String& violatedDirective() const { return m_violatedDirective; }
69     const String& effectiveDirective() const { return m_effectiveDirective; }
70     const String& originalPolicy() const { return m_originalPolicy; }
71     const String& sourceFile() const { return m_sourceFile; }
72     unsigned short statusCode() const { return m_statusCode; }
73     int lineNumber() const { return m_lineNumber; }
74     int columnNumber() const { return m_columnNumber; }
75
76     EventInterface eventInterface() const final { return SecurityPolicyViolationEventInterfaceType; }
77
78 private:
79     SecurityPolicyViolationEvent()
80     {
81     }
82
83     SecurityPolicyViolationEvent(const AtomString& type, CanBubble canBubble, IsCancelable cancelable, const String& documentURI, const String& referrer, const String& blockedURI, const String& violatedDirective, const String& effectiveDirective, const String& originalPolicy, const String& sourceFile, unsigned short statusCode, int lineNumber, int columnNumber)
84         : Event(type, canBubble, cancelable)
85         , m_documentURI(documentURI)
86         , m_referrer(referrer)
87         , m_blockedURI(blockedURI)
88         , m_violatedDirective(violatedDirective)
89         , m_effectiveDirective(effectiveDirective)
90         , m_originalPolicy(originalPolicy)
91         , m_sourceFile(sourceFile)
92         , m_statusCode(statusCode)
93         , m_lineNumber(lineNumber)
94         , m_columnNumber(columnNumber)
95     {
96     }
97
98     SecurityPolicyViolationEvent(const AtomString& type, const Init& initializer, IsTrusted isTrusted)
99         : Event(type, initializer, isTrusted)
100         , m_documentURI(initializer.documentURI)
101         , m_referrer(initializer.referrer)
102         , m_blockedURI(initializer.blockedURI)
103         , m_violatedDirective(initializer.violatedDirective)
104         , m_effectiveDirective(initializer.effectiveDirective)
105         , m_originalPolicy(initializer.originalPolicy)
106         , m_sourceFile(initializer.sourceFile)
107         , m_statusCode(initializer.statusCode)
108         , m_lineNumber(initializer.lineNumber)
109         , m_columnNumber(initializer.columnNumber)
110     {
111     }
112
113     String m_documentURI;
114     String m_referrer;
115     String m_blockedURI;
116     String m_violatedDirective;
117     String m_effectiveDirective;
118     String m_originalPolicy;
119     String m_sourceFile;
120     unsigned short m_statusCode;
121     int m_lineNumber;
122     int m_columnNumber;
123 };
124
125 template<class Encoder>
126 void SecurityPolicyViolationEvent::Init::encode(Encoder& encoder) const
127 {
128     encoder << static_cast<const EventInit&>(*this);
129     encoder << documentURI;
130     encoder << referrer;
131     encoder << blockedURI;
132     encoder << violatedDirective;
133     encoder << effectiveDirective;
134     encoder << originalPolicy;
135     encoder << sourceFile;
136     encoder << statusCode;
137     encoder << lineNumber;
138     encoder << columnNumber;
139 }
140
141 template<class Decoder>
142 bool SecurityPolicyViolationEvent::Init::decode(Decoder& decoder, SecurityPolicyViolationEvent::Init& eventInit)
143 {
144     if (!decoder.decode(static_cast<EventInit&>(eventInit)))
145         return false;
146     if (!decoder.decode(eventInit.documentURI))
147         return false;
148     if (!decoder.decode(eventInit.referrer))
149         return false;
150     if (!decoder.decode(eventInit.blockedURI))
151         return false;
152     if (!decoder.decode(eventInit.violatedDirective))
153         return false;
154     if (!decoder.decode(eventInit.effectiveDirective))
155         return false;
156     if (!decoder.decode(eventInit.originalPolicy))
157         return false;
158     if (!decoder.decode(eventInit.sourceFile))
159         return false;
160     if (!decoder.decode(eventInit.statusCode))
161         return false;
162     if (!decoder.decode(eventInit.lineNumber))
163         return false;
164     if (!decoder.decode(eventInit.columnNumber))
165         return false;
166     return true;
167 }
168
169 } // namespace WebCore