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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp

Issue 2620313002: Refactor WindowProxy into Local and Remote subclasses. (Closed)
Patch Set: Cleanup comments 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 unified diff | Download patch
OLDNEW
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698