| 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) {
|
|
|
|
|