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

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

Issue 2630693002: Make ScriptController inherit LocalWindowProxyManager
Patch Set: rebase Created 3 years, 11 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/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) {
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/ScriptController.h ('k') | third_party/WebKit/Source/bindings/core/v8/ToV8.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698