diff options
Diffstat (limited to 'WebCore/bindings/js/ScriptController.cpp')
-rw-r--r-- | WebCore/bindings/js/ScriptController.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/WebCore/bindings/js/ScriptController.cpp b/WebCore/bindings/js/ScriptController.cpp index 3dcbb0b..5c4bd4c 100644 --- a/WebCore/bindings/js/ScriptController.cpp +++ b/WebCore/bindings/js/ScriptController.cpp @@ -87,6 +87,11 @@ ScriptController::~ScriptController() { disconnectPlatformScriptObjects(); + if (m_cacheableBindingRootObject) { + m_cacheableBindingRootObject->invalidate(); + m_cacheableBindingRootObject = 0; + } + // It's likely that destroying m_windowShells will create a lot of garbage. if (!m_windowShells.isEmpty()) { while (!m_windowShells.isEmpty()) @@ -329,6 +334,18 @@ void ScriptController::updateSecurityOrigin() // Our bindings do not do anything in this case. } +Bindings::RootObject* ScriptController::cacheableBindingRootObject() +{ + if (!canExecuteScripts(NotAboutToExecuteScript)) + return 0; + + if (!m_cacheableBindingRootObject) { + JSLock lock(SilenceAssertionsOnly); + m_cacheableBindingRootObject = Bindings::RootObject::create(0, globalObject(pluginWorld())); + } + return m_cacheableBindingRootObject.get(); +} + Bindings::RootObject* ScriptController::bindingRootObject() { if (!canExecuteScripts(NotAboutToExecuteScript)) |