Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp

Issue 2542123002: binding: Removes Document::wrap that must be equivalent to Node::wrap. (2nd try) (Closed)
Patch Set: Fixed test failures. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 dec4bd5fea06c5ce882790166ed7a9e404996d1c..598b9c5c29e5d92788e6210fa0c98cb8cebcaeca 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) {
@@ -115,8 +111,6 @@ void WindowProxy::disposeContext(GlobalDetachmentBehavior behavior) {
MainThreadDebugger::instance()->contextWillBeDestroyed(m_scriptState.get());
}
- m_document.clear();
-
if (behavior == DetachGlobal) {
// Clean up state on the global proxy, which will be reused.
if (!m_globalProxy.isEmpty()) {
@@ -424,35 +418,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());
-
- // Update cached accessor.
+ toV8(frame->document(), context->Global(), m_isolate);
+ DCHECK(documentWrapper->IsObject());
+ // Update the cached accessor for window.document.
CHECK(V8PrivateProperty::getWindowDocumentCachedAccessor(m_isolate).set(
context, context->Global(), documentWrapper));
}
@@ -518,7 +496,7 @@ void WindowProxy::setSecurityToken(SecurityOrigin* origin) {
}
void WindowProxy::updateDocument() {
- ASSERT(m_world->isMainWorld());
+ DCHECK(m_world->isMainWorld());
if (!isGlobalInitialized())
return;
if (!isContextInitialized())
@@ -577,22 +555,24 @@ static void getter(v8::Local<v8::Name> property,
void WindowProxy::namedItemAdded(HTMLDocument* document,
const AtomicString& name) {
- ASSERT(m_world->isMainWorld());
+ DCHECK(m_world->isMainWorld());
- if (!isContextInitialized() || !m_scriptState->contextIsValid())
+ if (!isContextInitialized())
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_world->domDataStore().get(document, m_isolate);
+ // TODO(yukishiino,peria): We should check if the own property with the same
+ // name already exists or not, and if it exists, we shouldn't define a new
+ // accessor property (it fails).
+ 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;
@@ -601,11 +581,11 @@ 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_world->domDataStore().get(document, m_isolate);
+ documentWrapper
+ ->Delete(m_isolate->GetCurrentContext(), v8String(m_isolate, name))
+ .ToChecked();
}
void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) {
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/WindowProxy.h ('k') | third_party/WebKit/Source/core/dom/Document.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698