Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h |
| diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h b/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h |
| index bc0ca27546ad2755bf250fb64e15a136b3ddf7e9..1483749f8f812a3f26ede29b2064c5f30e99d537 100644 |
| --- a/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h |
| +++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMWrapper.h |
| @@ -31,7 +31,6 @@ |
| #ifndef V8DOMWrapper_h |
| #define V8DOMWrapper_h |
| -#include "bindings/core/v8/BindingSecurity.h" |
| #include "bindings/core/v8/DOMDataStore.h" |
| #include "bindings/core/v8/ScriptWrappable.h" |
| #include "bindings/core/v8/V8Binding.h" |
| @@ -125,11 +124,11 @@ class V8WrapperInstantiationScope { |
| public: |
| V8WrapperInstantiationScope(v8::Local<v8::Object> creationContext, |
| v8::Isolate* isolate, |
| - bool withSecurityCheck) |
| + const WrapperTypeInfo* type) |
| : m_didEnterContext(false), |
| m_context(isolate->GetCurrentContext()), |
| m_tryCatch(isolate), |
| - m_convertExceptions(false) { |
| + m_type(type) { |
| // creationContext should not be empty. Because if we have an |
| // empty creationContext, we will end up creating |
| // a new object in the context currently entered. This is wrong. |
| @@ -141,11 +140,7 @@ class V8WrapperInstantiationScope { |
| // context is different from the context that we are about to enter. |
| if (contextForWrapper == m_context) |
| return; |
| - if (withSecurityCheck) { |
| - securityCheck(isolate, contextForWrapper); |
| - } else { |
| - m_convertExceptions = true; |
| - } |
| + |
|
jochen (gone - plz use gerrit)
2017/03/15 19:56:13
if you move this out, you'll want to make sure tha
adithyas
2017/03/28 20:35:41
Added an assertion.
|
| m_context = v8::Local<v8::Context>::New(isolate, contextForWrapper); |
| m_didEnterContext = true; |
| m_context->Enter(); |
| @@ -157,26 +152,25 @@ class V8WrapperInstantiationScope { |
| return; |
| } |
| m_context->Exit(); |
| - // Rethrow any cross-context exceptions as security error. |
| - if (m_tryCatch.HasCaught()) { |
| - if (m_convertExceptions) { |
| - m_tryCatch.Reset(); |
| - convertException(); |
| - } |
| + |
| + v8::Isolate* isolate = m_context->GetIsolate(); |
| + v8::Local<v8::Value> caughtException = m_tryCatch.Exception(); |
| + |
| + m_tryCatch.Reset(); |
| + m_type->securityCheck(isolate, isolate->GetCurrentContext(), m_context, |
|
jbroman
2017/03/15 19:58:41
Do ArrayBuffer/ArrayBufferViews not go through V8W
adithyas
2017/03/28 20:35:41
They do not (they don't call V8DOMWrapper::createW
|
| + m_type->interfaceName, caughtException); |
| + |
| + if (m_tryCatch.HasCaught()) |
|
jochen (gone - plz use gerrit)
2017/03/15 19:56:13
that won't work as you reset the trycatch above
adithyas
2017/03/28 20:35:41
m_type->securityCheck can throw an exception, and
|
| m_tryCatch.ReThrow(); |
| - } |
| } |
| v8::Local<v8::Context> context() const { return m_context; } |
| private: |
| - void securityCheck(v8::Isolate*, v8::Local<v8::Context> contextForWrapper); |
| - void convertException(); |
| - |
| bool m_didEnterContext; |
| v8::Local<v8::Context> m_context; |
| v8::TryCatch m_tryCatch; |
| - bool m_convertExceptions; |
| + const WrapperTypeInfo* m_type; |
| }; |
| } // namespace blink |