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

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

Issue 2011553003: Revert of [Binding] Add [OverrideBuiltins] label onto HTMLDocument interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months 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 b74f0d9bab846ddf1c1f1d0cb4cba67677557bbf..7b6d9481037862a9ae2daf4096626ba8ec1464c3 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
@@ -478,6 +478,79 @@
updateSecurityOrigin(m_frame->securityContext()->getSecurityOrigin());
}
+static v8::Local<v8::Value> getNamedProperty(HTMLDocument* htmlDocument, const AtomicString& key, v8::Local<v8::Object> creationContext, v8::Isolate* isolate)
+{
+ if (!htmlDocument->hasNamedItem(key) && !htmlDocument->hasExtraNamedItem(key))
+ return v8Undefined();
+
+ DocumentNameCollection* items = htmlDocument->documentNamedItems(key);
+ if (items->isEmpty())
+ return v8Undefined();
+
+ if (items->hasExactlyOneItem()) {
+ HTMLElement* element = items->item(0);
+ ASSERT(element);
+ Frame* frame = isHTMLIFrameElement(*element) ? toHTMLIFrameElement(*element).contentFrame() : 0;
+ if (frame)
+ return toV8(frame->domWindow(), creationContext, isolate);
+ return toV8(element, creationContext, isolate);
+ }
+ return toV8(items, creationContext, isolate);
+}
+
+static void getter(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value>& info)
+{
+ if (!property->IsString())
+ return;
+ // FIXME: Consider passing StringImpl directly.
+ AtomicString name = toCoreAtomicString(property.As<v8::String>());
+ HTMLDocument* htmlDocument = V8HTMLDocument::toImpl(info.Holder());
+ ASSERT(htmlDocument);
+ v8::Local<v8::Value> result = getNamedProperty(htmlDocument, name, info.Holder(), info.GetIsolate());
+ if (!result.IsEmpty()) {
+ v8SetReturnValue(info, result);
+ return;
+ }
+ v8::Local<v8::Value> prototype = info.Holder()->GetPrototype();
+ if (prototype->IsObject()) {
+ v8::Local<v8::Value> value;
+ if (prototype.As<v8::Object>()->Get(info.GetIsolate()->GetCurrentContext(), property).ToLocal(&value))
+ v8SetReturnValue(info, value);
+ }
+}
+
+void WindowProxy::namedItemAdded(HTMLDocument* document, const AtomicString& name)
+{
+ ASSERT(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);
+}
+
+void WindowProxy::namedItemRemoved(HTMLDocument* document, const AtomicString& name)
+{
+ ASSERT(m_world->isMainWorld());
+
+ if (!isContextInitialized())
+ return;
+
+ if (document->hasNamedItem(name) || document->hasExtraNamedItem(name))
+ 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));
+}
+
void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin)
{
if (!isContextInitialized())

Powered by Google App Engine
This is Rietveld 408576698