Index: third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp |
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp |
index 1e48d72ae88abe0defac68239a372f59222960a8..97375297de1a69734cdd492d300e05a57ce54bd3 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp |
@@ -77,21 +77,8 @@ |
namespace blink { |
-ScriptController::ScriptController(LocalFrame* frame) |
- : m_windowProxyManager(LocalWindowProxyManager::create(*frame)) {} |
- |
-DEFINE_TRACE(ScriptController) { |
- visitor->trace(m_windowProxyManager); |
-} |
- |
-void ScriptController::clearForClose() { |
- m_windowProxyManager->clearForClose(); |
- MainThreadDebugger::instance()->didClearContextsForFrame(frame()); |
-} |
- |
-void ScriptController::updateSecurityOrigin(SecurityOrigin* securityOrigin) { |
- m_windowProxyManager->updateSecurityOrigin(securityOrigin); |
-} |
+ScriptController::ScriptController(LocalFrame& frame) |
+ : LocalWindowProxyManager(frame) {} |
namespace { |
@@ -160,12 +147,6 @@ v8::Local<v8::Value> ScriptController::executeScriptAndReturnValue( |
return result; |
} |
-LocalWindowProxy* ScriptController::windowProxy(DOMWrapperWorld& world) { |
- LocalWindowProxy* windowProxy = m_windowProxyManager->windowProxy(world); |
- windowProxy->initializeIfNeeded(); |
- return windowProxy; |
-} |
- |
bool ScriptController::shouldBypassMainWorldCSP() { |
v8::HandleScope handleScope(isolate()); |
v8::Local<v8::Context> context = isolate()->GetCurrentContext(); |
@@ -184,10 +165,23 @@ TextPosition ScriptController::eventHandlerPosition() const { |
return TextPosition::minimumPosition(); |
} |
+void ScriptController::namedItemAdded(HTMLDocument* document, |
+ const AtomicString& name) { |
+ initializeMainWorld(); |
+ |
+ mainWorldProxy()->namedItemAdded(document, name); |
+} |
+ |
+void ScriptController::namedItemRemoved(HTMLDocument* document, |
+ const AtomicString& name) { |
+ initializeMainWorld(); |
+ |
+ mainWorldProxy()->namedItemRemoved(document, name); |
+} |
+ |
void ScriptController::enableEval() { |
v8::HandleScope handleScope(isolate()); |
- v8::Local<v8::Context> v8Context = |
- m_windowProxyManager->mainWorldProxy()->contextIfInitialized(); |
+ v8::Local<v8::Context> v8Context = mainWorldProxy()->contextIfInitialized(); |
if (v8Context.IsEmpty()) |
return; |
v8Context->AllowCodeGenerationFromStrings(true); |
@@ -195,8 +189,7 @@ void ScriptController::enableEval() { |
void ScriptController::disableEval(const String& errorMessage) { |
v8::HandleScope handleScope(isolate()); |
- v8::Local<v8::Context> v8Context = |
- m_windowProxyManager->mainWorldProxy()->contextIfInitialized(); |
+ v8::Local<v8::Context> v8Context = mainWorldProxy()->contextIfInitialized(); |
if (v8Context.IsEmpty()) |
return; |
v8Context->AllowCodeGenerationFromStrings(false); |
@@ -221,6 +214,39 @@ PassRefPtr<SharedPersistent<v8::Object>> ScriptController::createPluginWrapper( |
return SharedPersistent<v8::Object>::create(scriptableObject, isolate()); |
} |
+void ScriptController::clearForClose() { |
+ LocalWindowProxyManager::clearForClose(); |
+ MainThreadDebugger::instance()->didClearContextsForFrame(frame()); |
+} |
+ |
+void ScriptController::clearForNavigation() { |
+ // V8 binding expects ScriptController::clearForNavigation() only be called |
+ // when a frame is loading a new page. |
+ LocalWindowProxyManager::clearForNavigation(); |
+ MainThreadDebugger::instance()->didClearContextsForFrame(frame()); |
+} |
+ |
+void ScriptController::updateDocument() { |
+ mainWorldProxy()->updateDocument(); |
+} |
+ |
+void ScriptController::updateSecurityOrigin(SecurityOrigin* securityOrigin) { |
+ mainWorldProxy()->updateSecurityOrigin(securityOrigin); |
+ for (auto& entry : isolatedWorlds()) { |
+ // This is a little hacky, but a LocalWindowProxyManager can only hold |
+ // LocalWindowProxy objects, so the downcast to LocalWindowProxy is safe. |
+ auto* isolatedWindowProxy = |
+ static_cast<LocalWindowProxy*>(entry.value.get()); |
+ SecurityOrigin* isolatedSecurityOrigin = |
+ isolatedWindowProxy->world().isolatedWorldSecurityOrigin(); |
+ isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin); |
+ } |
+} |
+ |
+void ScriptController::initializeMainWorld() { |
+ mainWorldProxy()->initializeIfNeeded(); |
+} |
+ |
V8Extensions& ScriptController::registeredExtensions() { |
DEFINE_STATIC_LOCAL(V8Extensions, extensions, ()); |
return extensions; |
@@ -236,17 +262,6 @@ void ScriptController::registerExtensionIfNeeded(v8::Extension* extension) { |
registeredExtensions().push_back(extension); |
} |
-void ScriptController::clearWindowProxy() { |
- // V8 binding expects ScriptController::clearWindowProxy only be called when a |
- // frame is loading a new page. This creates a new context for the new page. |
- m_windowProxyManager->clearForNavigation(); |
- MainThreadDebugger::instance()->didClearContextsForFrame(frame()); |
-} |
- |
-void ScriptController::updateDocument() { |
- m_windowProxyManager->mainWorldProxy()->updateDocument(); |
-} |
- |
bool ScriptController::canExecuteScripts( |
ReasonForCallingCanExecuteScripts reason) { |