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

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: explicit 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(v8::Isolate* isolate,
14 Frame& frame,
15
16 RefPtr<DOMWrapperWorld> world) {
17 if (frame.isLocalFrame()) {
18 return LocalWindowProxy::create(isolate, toLocalFrame(frame),
19 std::move(world));
20 }
21 return RemoteWindowProxy::create(isolate, toRemoteFrame(frame),
22 std::move(world));
23 }
15 } 24 }
16 25
17 DEFINE_TRACE(WindowProxyManager) { 26 DEFINE_TRACE(WindowProxyManagerBase) {
18 visitor->trace(m_frame); 27 visitor->trace(m_frame);
19 visitor->trace(m_windowProxy); 28 visitor->trace(m_windowProxy);
20 visitor->trace(m_isolatedWorlds); 29 visitor->trace(m_isolatedWorlds);
21 } 30 }
22 31
23 WindowProxy* WindowProxyManager::windowProxy(DOMWrapperWorld& world) { 32 WindowProxy* WindowProxyManagerBase::windowProxy(DOMWrapperWorld& world) {
24 WindowProxy* windowProxy = nullptr; 33 WindowProxy* windowProxy = nullptr;
25 if (world.isMainWorld()) { 34 if (world.isMainWorld()) {
26 windowProxy = m_windowProxy.get(); 35 windowProxy = m_windowProxy.get();
27 } else { 36 } else {
28 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId()); 37 IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId());
29 if (iter != m_isolatedWorlds.end()) { 38 if (iter != m_isolatedWorlds.end()) {
30 windowProxy = iter->value.get(); 39 windowProxy = iter->value.get();
31 } else { 40 } else {
32 windowProxy = WindowProxy::create(m_isolate, m_frame, world); 41 windowProxy = createWindowProxyForFrame(m_isolate, *m_frame, &world);
33 m_isolatedWorlds.set(world.worldId(), windowProxy); 42 m_isolatedWorlds.set(world.worldId(), windowProxy);
34 } 43 }
35 } 44 }
36 return windowProxy; 45 return windowProxy;
37 } 46 }
38 47
39 void WindowProxyManager::clearForClose() { 48 void WindowProxyManagerBase::clearForClose() {
40 m_windowProxy->clearForClose(); 49 m_windowProxy->clearForClose();
41 for (auto& entry : m_isolatedWorlds) 50 for (auto& entry : m_isolatedWorlds)
42 entry.value->clearForClose(); 51 entry.value->clearForClose();
43 } 52 }
44 53
45 void WindowProxyManager::clearForNavigation() { 54 void WindowProxyManagerBase::clearForNavigation() {
46 m_windowProxy->clearForNavigation(); 55 m_windowProxy->clearForNavigation();
47 for (auto& entry : m_isolatedWorlds) 56 for (auto& entry : m_isolatedWorlds)
48 entry.value->clearForNavigation(); 57 entry.value->clearForNavigation();
49 } 58 }
50 59
51 void WindowProxyManager::updateSecurityOrigin(SecurityOrigin* securityOrigin) { 60 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) { 61 HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
63 map.add(&m_windowProxy->world(), m_windowProxy->releaseGlobal()); 62 map.add(&m_windowProxy->world(), m_windowProxy->releaseGlobal());
64 for (auto& entry : m_isolatedWorlds) 63 for (auto& entry : m_isolatedWorlds)
65 map.add(&entry.value->world(), 64 map.add(&entry.value->world(),
66 windowProxy(entry.value->world())->releaseGlobal()); 65 windowProxy(entry.value->world())->releaseGlobal());
67 } 66 }
68 67
69 void WindowProxyManager::setGlobals( 68 void WindowProxyManagerBase::setGlobals(
70 const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) { 69 const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
71 for (auto& entry : map) 70 for (auto& entry : map)
72 windowProxy(*entry.key)->setGlobal(entry.value); 71 windowProxy(*entry.key)->setGlobal(entry.value);
73 } 72 }
74 73
75 WindowProxyManager::WindowProxyManager(Frame& frame) 74 WindowProxyManagerBase::WindowProxyManagerBase(Frame& frame)
76 : m_frame(&frame), 75 : m_isolate(v8::Isolate::GetCurrent()),
77 m_isolate(v8::Isolate::GetCurrent()), 76 m_frame(&frame),
78 m_windowProxy(WindowProxy::create(m_isolate, 77 m_windowProxy(createWindowProxyForFrame(m_isolate,
79 &frame, 78 frame,
80 DOMWrapperWorld::mainWorld())) {} 79 &DOMWrapperWorld::mainWorld())) {}
80
81 void LocalWindowProxyManager::updateSecurityOrigin(
82 SecurityOrigin* securityOrigin) {
83 static_cast<LocalWindowProxy*>(mainWorldProxy())
84 ->updateSecurityOrigin(securityOrigin);
85 for (auto& entry : isolatedWorlds()) {
86 auto* isolatedWindowProxy =
87 static_cast<LocalWindowProxy*>(entry.value.get());
88 SecurityOrigin* isolatedSecurityOrigin =
89 isolatedWindowProxy->world().isolatedWorldSecurityOrigin();
90 isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin);
91 }
92 }
81 93
82 } // namespace blink 94 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.h ('k') | third_party/WebKit/Source/core/frame/Frame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698