| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "bindings/core/v8/WindowProxyManager.h" | 5 #include "bindings/core/v8/WindowProxyManager.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/DOMWrapperWorld.h" | 7 #include "bindings/core/v8/DOMWrapperWorld.h" |
| 8 #include "bindings/core/v8/WindowProxy.h" | |
| 9 #include "core/frame/Frame.h" | |
| 10 | 8 |
| 11 namespace blink { | 9 namespace blink { |
| 12 | 10 |
| 13 WindowProxyManager* WindowProxyManager::create(Frame& frame) { | 11 namespace { |
| 14 return new WindowProxyManager(frame); | 12 |
| 13 WindowProxy* createWindowProxyForFrame(Frame& frame, |
| 14 v8::Isolate* isolate, |
| 15 RefPtr<DOMWrapperWorld> world) { |
| 16 if (frame.isLocalFrame()) { |
| 17 return LocalWindowProxy::create(toLocalFrame(frame), isolate, |
| 18 std::move(world)); |
| 19 } |
| 20 return RemoteWindowProxy::create(toRemoteFrame(frame), isolate, |
| 21 std::move(world)); |
| 22 } |
| 15 } | 23 } |
| 16 | 24 |
| 17 DEFINE_TRACE(WindowProxyManager) { | 25 DEFINE_TRACE(WindowProxyManagerBase) { |
| 18 visitor->trace(m_frame); | 26 visitor->trace(m_frame); |
| 19 visitor->trace(m_windowProxy); | 27 visitor->trace(m_windowProxy); |
| 20 visitor->trace(m_isolatedWorlds); | 28 visitor->trace(m_isolatedWorlds); |
| 21 } | 29 } |
| 22 | 30 |
| 23 WindowProxy* WindowProxyManager::windowProxy(DOMWrapperWorld& world) { | 31 WindowProxy* WindowProxyManagerBase::windowProxy(DOMWrapperWorld& world) { |
| 24 WindowProxy* windowProxy = nullptr; | 32 WindowProxy* windowProxy = nullptr; |
| 25 if (world.isMainWorld()) { | 33 if (world.isMainWorld()) { |
| 26 windowProxy = m_windowProxy.get(); | 34 windowProxy = m_windowProxy.get(); |
| 27 } else { | 35 } else { |
| 28 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()); | 36 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()); |
| 29 if (iter != m_isolatedWorlds.end()) { | 37 if (iter != m_isolatedWorlds.end()) { |
| 30 windowProxy = iter->value.get(); | 38 windowProxy = iter->value.get(); |
| 31 } else { | 39 } else { |
| 32 windowProxy = WindowProxy::create(m_isolate, m_frame, world); | 40 windowProxy = createWindowProxyForFrame(*m_frame, m_isolate, &world); |
| 33 m_isolatedWorlds.set(world.worldId(), windowProxy); | 41 m_isolatedWorlds.set(world.worldId(), windowProxy); |
| 34 } | 42 } |
| 35 } | 43 } |
| 36 return windowProxy; | 44 return windowProxy; |
| 37 } | 45 } |
| 38 | 46 |
| 39 void WindowProxyManager::clearForClose() { | 47 void WindowProxyManagerBase::clearForClose() { |
| 40 m_windowProxy->clearForClose(); | 48 m_windowProxy->clearForClose(); |
| 41 for (auto& entry : m_isolatedWorlds) | 49 for (auto& entry : m_isolatedWorlds) |
| 42 entry.value->clearForClose(); | 50 entry.value->clearForClose(); |
| 43 } | 51 } |
| 44 | 52 |
| 45 void WindowProxyManager::clearForNavigation() { | 53 void WindowProxyManagerBase::clearForNavigation() { |
| 46 m_windowProxy->clearForNavigation(); | 54 m_windowProxy->clearForNavigation(); |
| 47 for (auto& entry : m_isolatedWorlds) | 55 for (auto& entry : m_isolatedWorlds) |
| 48 entry.value->clearForNavigation(); | 56 entry.value->clearForNavigation(); |
| 49 } | 57 } |
| 50 | 58 |
| 51 void WindowProxyManager::updateSecurityOrigin(SecurityOrigin* securityOrigin) { | 59 void WindowProxyManagerBase::releaseGlobals( |
| 52 m_windowProxy->updateSecurityOrigin(securityOrigin); | |
| 53 for (auto& entry : m_isolatedWorlds) { | |
| 54 WindowProxy* isolatedWindowProxy = entry.value.get(); | |
| 55 SecurityOrigin* isolatedSecurityOrigin = | |
| 56 isolatedWindowProxy->world().isolatedWorldSecurityOrigin(); | |
| 57 isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin); | |
| 58 } | |
| 59 } | |
| 60 | |
| 61 void WindowProxyManager::releaseGlobals( | |
| 62 HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) { | 60 HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) { |
| 63 map.add(&m_windowProxy->world(), m_windowProxy->releaseGlobal()); | 61 map.add(&m_windowProxy->world(), m_windowProxy->releaseGlobal()); |
| 64 for (auto& entry : m_isolatedWorlds) | 62 for (auto& entry : m_isolatedWorlds) |
| 65 map.add(&entry.value->world(), | 63 map.add(&entry.value->world(), |
| 66 windowProxy(entry.value->world())->releaseGlobal()); | 64 windowProxy(entry.value->world())->releaseGlobal()); |
| 67 } | 65 } |
| 68 | 66 |
| 69 void WindowProxyManager::setGlobals( | 67 void WindowProxyManagerBase::setGlobals( |
| 70 const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) { | 68 const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) { |
| 71 for (auto& entry : map) | 69 for (auto& entry : map) |
| 72 windowProxy(*entry.key)->setGlobal(entry.value); | 70 windowProxy(*entry.key)->setGlobal(entry.value); |
| 73 } | 71 } |
| 74 | 72 |
| 75 WindowProxyManager::WindowProxyManager(Frame& frame) | 73 WindowProxyManagerBase::WindowProxyManagerBase(Frame& frame) |
| 76 : m_frame(&frame), | 74 : m_frame(&frame), |
| 77 m_isolate(v8::Isolate::GetCurrent()), | 75 m_isolate(v8::Isolate::GetCurrent()), |
| 78 m_windowProxy(WindowProxy::create(m_isolate, | 76 m_windowProxy(createWindowProxyForFrame(frame, |
| 79 &frame, | 77 m_isolate, |
| 80 DOMWrapperWorld::mainWorld())) {} | 78 &DOMWrapperWorld::mainWorld())) {} |
| 79 |
| 80 void LocalWindowProxyManager::updateSecurityOrigin( |
| 81 SecurityOrigin* securityOrigin) { |
| 82 static_cast<LocalWindowProxy*>(m_windowProxy.get()) |
| 83 ->updateSecurityOrigin(securityOrigin); |
| 84 for (auto& entry : m_isolatedWorlds) { |
| 85 auto* isolatedWindowProxy = |
| 86 static_cast<LocalWindowProxy*>(entry.value.get()); |
| 87 SecurityOrigin* isolatedSecurityOrigin = |
| 88 isolatedWindowProxy->world().isolatedWorldSecurityOrigin(); |
| 89 isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin); |
| 90 } |
| 91 } |
| 81 | 92 |
| 82 } // namespace blink | 93 } // namespace blink |
| OLD | NEW |