Chromium Code Reviews| 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 1f94c6f472547851aa03ba867ae0b6e9965d2ec7..dcbb2e3f0c2cee7c862c805b4805c5f97408a0c3 100644 |
| --- a/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp |
| +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptController.cpp |
| @@ -78,20 +78,26 @@ |
| namespace blink { |
| -ScriptController::ScriptController(LocalFrame* frame) |
| - : m_windowProxyManager(LocalWindowProxyManager::create(*frame)) {} |
| - |
| -DEFINE_TRACE(ScriptController) { |
| - visitor->trace(m_windowProxyManager); |
| -} |
| +ScriptController::ScriptController(LocalFrame& frame) |
| + : LocalWindowProxyManager(frame) {} |
| void ScriptController::clearForClose() { |
| - m_windowProxyManager->clearForClose(); |
| + LocalWindowProxyManager::clearForClose(); |
| MainThreadDebugger::instance()->didClearContextsForFrame(frame()); |
| } |
| void ScriptController::updateSecurityOrigin(SecurityOrigin* securityOrigin) { |
| - m_windowProxyManager->updateSecurityOrigin(securityOrigin); |
| + // This is a little hacky, but a LocalWindowProxyManager can only hold |
| + // LocalWindowProxy objects, so the downcast to LocalWindowProxy is safe. |
| + static_cast<LocalWindowProxy*>(mainWorldProxy()) |
|
Yuki
2017/01/13 10:41:59
Did you make WindowProxyManagerImplHelper::mainWor
dcheng
2017/01/13 18:57:30
Originally, I wrote it this way for consistency or
|
| + ->updateSecurityOrigin(securityOrigin); |
| + for (auto& entry : isolatedWorlds()) { |
| + auto* isolatedWindowProxy = |
| + static_cast<LocalWindowProxy*>(entry.value.get()); |
| + SecurityOrigin* isolatedSecurityOrigin = |
| + isolatedWindowProxy->world().isolatedWorldSecurityOrigin(); |
| + isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin); |
| + } |
| } |
| namespace { |
| @@ -209,12 +215,6 @@ void ScriptController::executeScriptInMainWorld( |
| InspectorUpdateCountersEvent::data()); |
| } |
| -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(); |
| @@ -235,8 +235,7 @@ TextPosition ScriptController::eventHandlerPosition() const { |
| 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); |
| @@ -244,8 +243,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); |
| @@ -285,15 +283,15 @@ 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(); |
| +void ScriptController::clearForNavigation() { |
|
Yuki
2017/01/13 10:42:00
nit: Could you put clearForClose and clearForNavig
dcheng
2017/01/13 18:57:30
Done.
|
| + // V8 binding expects ScriptController::clearForNavigation() only be called |
| + // when a frame is loading a new page. |
| + WindowProxyManagerBase::clearForNavigation(); |
|
Yuki
2017/01/13 10:42:00
Given LocalWindowProxyManager is a direct base cla
dcheng
2017/01/13 18:57:30
Done.
|
| MainThreadDebugger::instance()->didClearContextsForFrame(frame()); |
| } |
| void ScriptController::updateDocument() { |
| - m_windowProxyManager->mainWorldProxy()->updateDocument(); |
| + mainWorldProxy()->updateDocument(); |
| } |
| bool ScriptController::canExecuteScripts( |