| Index: third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp b/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp
|
| index d73a8213cddbdcdcc2c3f37bb5784c93c98b2a32..96c149f7ef6dde5818835df624d7b2eee1a34b8a 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp
|
| @@ -5,22 +5,30 @@
|
| #include "bindings/core/v8/WindowProxyManager.h"
|
|
|
| #include "bindings/core/v8/DOMWrapperWorld.h"
|
| -#include "bindings/core/v8/WindowProxy.h"
|
| -#include "core/frame/Frame.h"
|
|
|
| namespace blink {
|
|
|
| -WindowProxyManager* WindowProxyManager::create(Frame& frame) {
|
| - return new WindowProxyManager(frame);
|
| +namespace {
|
| +
|
| +WindowProxy* createWindowProxyForFrame(Frame& frame,
|
| + v8::Isolate* isolate,
|
| + RefPtr<DOMWrapperWorld> world) {
|
| + if (frame.isLocalFrame()) {
|
| + return LocalWindowProxy::create(toLocalFrame(frame), isolate,
|
| + std::move(world));
|
| + }
|
| + return RemoteWindowProxy::create(toRemoteFrame(frame), isolate,
|
| + std::move(world));
|
| +}
|
| }
|
|
|
| -DEFINE_TRACE(WindowProxyManager) {
|
| +DEFINE_TRACE(WindowProxyManagerBase) {
|
| visitor->trace(m_frame);
|
| visitor->trace(m_windowProxy);
|
| visitor->trace(m_isolatedWorlds);
|
| }
|
|
|
| -WindowProxy* WindowProxyManager::windowProxy(DOMWrapperWorld& world) {
|
| +WindowProxy* WindowProxyManagerBase::windowProxy(DOMWrapperWorld& world) {
|
| WindowProxy* windowProxy = nullptr;
|
| if (world.isMainWorld()) {
|
| windowProxy = m_windowProxy.get();
|
| @@ -29,36 +37,26 @@ WindowProxy* WindowProxyManager::windowProxy(DOMWrapperWorld& world) {
|
| if (iter != m_isolatedWorlds.end()) {
|
| windowProxy = iter->value.get();
|
| } else {
|
| - windowProxy = WindowProxy::create(m_isolate, m_frame, world);
|
| + windowProxy = createWindowProxyForFrame(*m_frame, m_isolate, &world);
|
| m_isolatedWorlds.set(world.worldId(), windowProxy);
|
| }
|
| }
|
| return windowProxy;
|
| }
|
|
|
| -void WindowProxyManager::clearForClose() {
|
| +void WindowProxyManagerBase::clearForClose() {
|
| m_windowProxy->clearForClose();
|
| for (auto& entry : m_isolatedWorlds)
|
| entry.value->clearForClose();
|
| }
|
|
|
| -void WindowProxyManager::clearForNavigation() {
|
| +void WindowProxyManagerBase::clearForNavigation() {
|
| m_windowProxy->clearForNavigation();
|
| for (auto& entry : m_isolatedWorlds)
|
| entry.value->clearForNavigation();
|
| }
|
|
|
| -void WindowProxyManager::updateSecurityOrigin(SecurityOrigin* securityOrigin) {
|
| - m_windowProxy->updateSecurityOrigin(securityOrigin);
|
| - for (auto& entry : m_isolatedWorlds) {
|
| - WindowProxy* isolatedWindowProxy = entry.value.get();
|
| - SecurityOrigin* isolatedSecurityOrigin =
|
| - isolatedWindowProxy->world().isolatedWorldSecurityOrigin();
|
| - isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin);
|
| - }
|
| -}
|
| -
|
| -void WindowProxyManager::releaseGlobals(
|
| +void WindowProxyManagerBase::releaseGlobals(
|
| HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
|
| map.add(&m_windowProxy->world(), m_windowProxy->releaseGlobal());
|
| for (auto& entry : m_isolatedWorlds)
|
| @@ -66,17 +64,30 @@ void WindowProxyManager::releaseGlobals(
|
| windowProxy(entry.value->world())->releaseGlobal());
|
| }
|
|
|
| -void WindowProxyManager::setGlobals(
|
| +void WindowProxyManagerBase::setGlobals(
|
| const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
|
| for (auto& entry : map)
|
| windowProxy(*entry.key)->setGlobal(entry.value);
|
| }
|
|
|
| -WindowProxyManager::WindowProxyManager(Frame& frame)
|
| +WindowProxyManagerBase::WindowProxyManagerBase(Frame& frame)
|
| : m_frame(&frame),
|
| m_isolate(v8::Isolate::GetCurrent()),
|
| - m_windowProxy(WindowProxy::create(m_isolate,
|
| - &frame,
|
| - DOMWrapperWorld::mainWorld())) {}
|
| + m_windowProxy(createWindowProxyForFrame(frame,
|
| + m_isolate,
|
| + &DOMWrapperWorld::mainWorld())) {}
|
| +
|
| +void LocalWindowProxyManager::updateSecurityOrigin(
|
| + SecurityOrigin* securityOrigin) {
|
| + static_cast<LocalWindowProxy*>(m_windowProxy.get())
|
| + ->updateSecurityOrigin(securityOrigin);
|
| + for (auto& entry : m_isolatedWorlds) {
|
| + auto* isolatedWindowProxy =
|
| + static_cast<LocalWindowProxy*>(entry.value.get());
|
| + SecurityOrigin* isolatedSecurityOrigin =
|
| + isolatedWindowProxy->world().isolatedWorldSecurityOrigin();
|
| + isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin);
|
| + }
|
| +}
|
|
|
| } // namespace blink
|
|
|