Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp |
| diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp |
| index 82db35ef03c2c8806b5f2b29d6e9fbcfb4d90c9d..ef617934cd64a221dac3a7d9787e672cb7cafb9c 100644 |
| --- a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp |
| +++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp |
| @@ -33,6 +33,7 @@ |
| #include "bindings/core/v8/ConditionalFeatures.h" |
| #include "bindings/core/v8/DOMWrapperWorld.h" |
| #include "bindings/core/v8/ScriptController.h" |
| +#include "bindings/core/v8/ToV8.h" |
| #include "bindings/core/v8/V8Binding.h" |
| #include "bindings/core/v8/V8DOMActivityLogger.h" |
| #include "bindings/core/v8/V8Document.h" |
| @@ -73,11 +74,6 @@ |
| namespace blink { |
| -static void checkDocumentWrapper(v8::Local<v8::Object> wrapper, |
| - Document* document) { |
| - ASSERT(V8Document::toImpl(wrapper) == document); |
| -} |
| - |
| WindowProxy* WindowProxy::create(v8::Isolate* isolate, |
| Frame* frame, |
| DOMWrapperWorld& world) { |
| @@ -417,33 +413,19 @@ bool WindowProxy::setupWindowPrototypeChain() { |
| return true; |
| } |
| -void WindowProxy::updateDocumentWrapper(v8::Local<v8::Object> wrapper) { |
| - ASSERT(m_world->isMainWorld()); |
| - m_document.set(m_isolate, wrapper); |
| -} |
| - |
| void WindowProxy::updateDocumentProperty() { |
| - if (!m_world->isMainWorld()) |
| - return; |
| + DCHECK(m_world->isMainWorld()); |
| - if (m_frame->isRemoteFrame()) { |
| + if (m_frame->isRemoteFrame()) |
| return; |
| - } |
| ScriptState::Scope scope(m_scriptState.get()); |
| v8::Local<v8::Context> context = m_scriptState->context(); |
| LocalFrame* frame = toLocalFrame(m_frame); |
| v8::Local<v8::Value> documentWrapper = |
| - toV8(frame->document(), context->Global(), context->GetIsolate()); |
| - if (documentWrapper.IsEmpty()) |
| - return; |
| - ASSERT(documentWrapper == m_document.newLocal(m_isolate) || |
| - m_document.isEmpty()); |
| - if (m_document.isEmpty()) |
| - updateDocumentWrapper(v8::Local<v8::Object>::Cast(documentWrapper)); |
| - checkDocumentWrapper(m_document.newLocal(m_isolate), frame->document()); |
| - |
| - ASSERT(documentWrapper->IsObject()); |
| + toV8(frame->document(), context->Global(), m_isolate); |
|
haraken
2016/11/25 15:52:30
Just to confirm: If someone calls toV8(document) b
Yuki
2016/11/28 06:35:52
Yes, it shouldn't happen for the main world.
|
| + DCHECK(documentWrapper->IsObject()); |
|
haraken
2016/11/25 15:52:30
Shall we call checkDocumentWrapper?
Yuki
2016/11/28 06:35:52
It's meaningless, I think?
documentWrapper =
|
| + m_document.set(m_isolate, documentWrapper.As<v8::Object>()); |
| // Update cached accessor. |
| CHECK(V8PrivateProperty::getWindowDocumentCachedAccessor(m_isolate).set( |
| @@ -511,7 +493,7 @@ void WindowProxy::setSecurityToken(SecurityOrigin* origin) { |
| } |
| void WindowProxy::updateDocument() { |
| - ASSERT(m_world->isMainWorld()); |
| + DCHECK(m_world->isMainWorld()); |
| if (!isGlobalInitialized()) |
| return; |
| if (!isContextInitialized()) |
| @@ -568,24 +550,31 @@ static void getter(v8::Local<v8::Name> property, |
| v8SetReturnValue(info, value); |
| } |
| +void WindowProxy::checkDocumentWrapper(v8::Local<v8::Object> wrapper, |
| + Document* document) const { |
| + DCHECK(!wrapper.IsEmpty()); |
| + DCHECK_EQ(V8Document::toImpl(wrapper), document); |
| + DCHECK(wrapper == |
| + toV8(document, m_globalProxy.newLocal(m_isolate), m_isolate)); |
| +} |
| + |
| void WindowProxy::namedItemAdded(HTMLDocument* document, |
| const AtomicString& name) { |
| - ASSERT(m_world->isMainWorld()); |
| + DCHECK(m_world->isMainWorld()); |
| if (!isContextInitialized() || !m_scriptState->contextIsValid()) |
| return; |
| ScriptState::Scope scope(m_scriptState.get()); |
| - ASSERT(!m_document.isEmpty()); |
| - v8::Local<v8::Context> context = m_scriptState->context(); |
| - v8::Local<v8::Object> documentHandle = m_document.newLocal(m_isolate); |
| - checkDocumentWrapper(documentHandle, document); |
| - documentHandle->SetAccessor(context, v8String(m_isolate, name), getter); |
| + v8::Local<v8::Object> documentWrapper = m_document.newLocal(m_isolate); |
| + checkDocumentWrapper(documentWrapper, document); |
| + documentWrapper->SetAccessor(m_isolate->GetCurrentContext(), |
| + v8String(m_isolate, name), getter); |
| } |
| void WindowProxy::namedItemRemoved(HTMLDocument* document, |
| const AtomicString& name) { |
| - ASSERT(m_world->isMainWorld()); |
| + DCHECK(m_world->isMainWorld()); |
| if (!isContextInitialized()) |
| return; |
| @@ -594,11 +583,10 @@ void WindowProxy::namedItemRemoved(HTMLDocument* document, |
| return; |
| ScriptState::Scope scope(m_scriptState.get()); |
| - ASSERT(!m_document.isEmpty()); |
| - v8::Local<v8::Object> documentHandle = m_document.newLocal(m_isolate); |
| - checkDocumentWrapper(documentHandle, document); |
| - documentHandle->Delete(m_isolate->GetCurrentContext(), |
| - v8String(m_isolate, name)); |
| + v8::Local<v8::Object> documentWrapper = m_document.newLocal(m_isolate); |
| + checkDocumentWrapper(documentWrapper, document); |
| + documentWrapper->Delete(m_isolate->GetCurrentContext(), |
| + v8String(m_isolate, name)); |
| } |
| void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) { |