OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 13 matching lines...) Expand all Loading... |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #ifndef ExceptionState_h | 31 #ifndef ExceptionState_h |
32 #define ExceptionState_h | 32 #define ExceptionState_h |
33 | 33 |
34 #include "bindings/core/v8/OnStackObjectChecker.h" | |
35 #include "bindings/core/v8/ScopedPersistent.h" | 34 #include "bindings/core/v8/ScopedPersistent.h" |
36 #include "bindings/core/v8/ScriptPromise.h" | 35 #include "bindings/core/v8/ScriptPromise.h" |
37 #include "bindings/core/v8/V8ThrowException.h" | 36 #include "bindings/core/v8/V8ThrowException.h" |
38 #include "core/CoreExport.h" | 37 #include "core/CoreExport.h" |
39 #include "wtf/Allocator.h" | 38 #include "wtf/Allocator.h" |
40 #include "wtf/Noncopyable.h" | 39 #include "wtf/Noncopyable.h" |
41 #include "wtf/text/WTFString.h" | 40 #include "wtf/text/WTFString.h" |
42 #include <v8.h> | 41 #include <v8.h> |
43 | 42 |
44 namespace blink { | 43 namespace blink { |
45 | 44 |
46 typedef int ExceptionCode; | 45 typedef int ExceptionCode; |
47 class ScriptPromiseResolver; | 46 class ScriptPromiseResolver; |
48 class ScriptState; | 47 class ScriptState; |
49 | 48 |
50 class CORE_EXPORT ExceptionState { | 49 class CORE_EXPORT ExceptionState { |
| 50 STACK_ALLOCATED(); |
51 WTF_MAKE_NONCOPYABLE(ExceptionState); | 51 WTF_MAKE_NONCOPYABLE(ExceptionState); |
52 USING_FAST_MALLOC(ExceptionState); | |
53 public: | 52 public: |
54 enum ContextType { | 53 enum ContextType { |
55 ConstructionContext, | 54 ConstructionContext, |
56 ExecutionContext, | 55 ExecutionContext, |
57 DeletionContext, | 56 DeletionContext, |
58 GetterContext, | 57 GetterContext, |
59 SetterContext, | 58 SetterContext, |
60 EnumerationContext, | 59 EnumerationContext, |
61 QueryContext, | 60 QueryContext, |
62 IndexedGetterContext, | 61 IndexedGetterContext, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 const char* interfaceName() const { return m_interfaceName; } | 125 const char* interfaceName() const { return m_interfaceName; } |
127 | 126 |
128 void rethrowV8Exception(v8::Local<v8::Value> value) | 127 void rethrowV8Exception(v8::Local<v8::Value> value) |
129 { | 128 { |
130 setException(value); | 129 setException(value); |
131 } | 130 } |
132 | 131 |
133 // Might return nullptr. | 132 // Might return nullptr. |
134 v8::Isolate* isolate() const { return m_isolate; } | 133 v8::Isolate* isolate() const { return m_isolate; } |
135 | 134 |
136 #if ENABLE(ASSERT) | |
137 OnStackObjectChecker& getOnStackObjectChecker() { return m_onStackObjectChec
ker; } | |
138 #endif | |
139 | |
140 protected: | 135 protected: |
141 ExceptionCode m_code; | 136 ExceptionCode m_code; |
142 ContextType m_context; | 137 ContextType m_context; |
143 String m_message; | 138 String m_message; |
144 const char* m_propertyName; | 139 const char* m_propertyName; |
145 const char* m_interfaceName; | 140 const char* m_interfaceName; |
146 | 141 |
147 private: | 142 private: |
148 void setException(v8::Local<v8::Value>); | 143 void setException(v8::Local<v8::Value>); |
149 void throwException(); | 144 void throwException(); |
150 | 145 |
151 String addExceptionContext(const String&) const; | 146 String addExceptionContext(const String&) const; |
152 | 147 |
153 ScopedPersistent<v8::Value> m_exception; | 148 ScopedPersistent<v8::Value> m_exception; |
154 v8::Isolate* m_isolate; | 149 v8::Isolate* m_isolate; |
155 #if ENABLE(ASSERT) | |
156 OnStackObjectChecker m_onStackObjectChecker; | |
157 #endif | |
158 }; | 150 }; |
159 | 151 |
160 // Used if exceptions can/should not be directly thrown. | 152 // Used if exceptions can/should not be directly thrown. |
161 class CORE_EXPORT NonThrowableExceptionState final : public ExceptionState { | 153 class CORE_EXPORT NonThrowableExceptionState final : public ExceptionState { |
162 WTF_MAKE_NONCOPYABLE(NonThrowableExceptionState); | 154 WTF_MAKE_NONCOPYABLE(NonThrowableExceptionState); |
163 public: | 155 public: |
164 NonThrowableExceptionState(): ExceptionState(ExceptionState::UnknownContext,
0, 0, v8::Local<v8::Object>(), v8::Isolate::GetCurrent()) { } | 156 NonThrowableExceptionState(): ExceptionState(ExceptionState::UnknownContext,
0, 0, v8::Local<v8::Object>(), v8::Isolate::GetCurrent()) { } |
165 void throwDOMException(const ExceptionCode&, const String& message) override
; | 157 void throwDOMException(const ExceptionCode&, const String& message) override
; |
166 void throwTypeError(const String& message = String()) override; | 158 void throwTypeError(const String& message = String()) override; |
167 void throwSecurityError(const String& sanitizedMessage, const String& unsani
tizedMessage = String()) override; | 159 void throwSecurityError(const String& sanitizedMessage, const String& unsani
tizedMessage = String()) override; |
168 void throwRangeError(const String& message) override; | 160 void throwRangeError(const String& message) override; |
169 }; | 161 }; |
170 | 162 |
171 // Used if any exceptions thrown are ignorable. | 163 // Used if any exceptions thrown are ignorable. |
172 class CORE_EXPORT TrackExceptionState final : public ExceptionState { | 164 class CORE_EXPORT TrackExceptionState final : public ExceptionState { |
173 WTF_MAKE_NONCOPYABLE(TrackExceptionState); | 165 WTF_MAKE_NONCOPYABLE(TrackExceptionState); |
174 public: | 166 public: |
175 TrackExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0,
v8::Local<v8::Object>(), v8::Isolate::GetCurrent()) { } | 167 TrackExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0,
v8::Local<v8::Object>(), v8::Isolate::GetCurrent()) { } |
176 void throwDOMException(const ExceptionCode&, const String& message) override
; | 168 void throwDOMException(const ExceptionCode&, const String& message) override
; |
177 void throwTypeError(const String& message = String()) override; | 169 void throwTypeError(const String& message = String()) override; |
178 void throwSecurityError(const String& sanitizedMessage, const String& unsani
tizedMessage = String()) override; | 170 void throwSecurityError(const String& sanitizedMessage, const String& unsani
tizedMessage = String()) override; |
179 void throwRangeError(const String& message) override; | 171 void throwRangeError(const String& message) override; |
180 }; | 172 }; |
181 | 173 |
182 } // namespace blink | 174 } // namespace blink |
183 | 175 |
184 #endif // ExceptionState_h | 176 #endif // ExceptionState_h |
OLD | NEW |