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

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

Issue 2702273004: bindings: Simplifies WindowProxyManager and its relation to Frame. (Closed)
Patch Set: Did changes in order to keep the exactly same behavior. Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
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 43350caabe273ee755cb9bfda43f13cfea0302c9..77d40f9a13bbdfac65112c57292eeb4340abb014 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxyManager.cpp
@@ -12,7 +12,6 @@ namespace {
WindowProxy* createWindowProxyForFrame(v8::Isolate* isolate,
Frame& frame,
-
RefPtr<DOMWrapperWorld> world) {
if (frame.isLocalFrame()) {
return LocalWindowProxy::create(isolate, toLocalFrame(frame),
@@ -21,68 +20,73 @@ WindowProxy* createWindowProxyForFrame(v8::Isolate* isolate,
return RemoteWindowProxy::create(isolate, toRemoteFrame(frame),
std::move(world));
}
-}
-DEFINE_TRACE(WindowProxyManagerBase) {
+} // namespace
+
+DEFINE_TRACE(WindowProxyManager) {
visitor->trace(m_frame);
visitor->trace(m_windowProxy);
visitor->trace(m_isolatedWorlds);
}
-WindowProxy* WindowProxyManagerBase::windowProxy(DOMWrapperWorld& world) {
- WindowProxy* windowProxy = nullptr;
- if (world.isMainWorld()) {
- windowProxy = m_windowProxy.get();
- } else {
- IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId());
- if (iter != m_isolatedWorlds.end()) {
- windowProxy = iter->value.get();
- } else {
- windowProxy = createWindowProxyForFrame(m_isolate, *m_frame, &world);
- m_isolatedWorlds.set(world.worldId(), windowProxy);
- }
- }
- return windowProxy;
-}
-
-void WindowProxyManagerBase::clearForClose() {
+void WindowProxyManager::clearForClose() {
m_windowProxy->clearForClose();
for (auto& entry : m_isolatedWorlds)
entry.value->clearForClose();
}
-void WindowProxyManagerBase::clearForNavigation() {
+void WindowProxyManager::clearForNavigation() {
m_windowProxy->clearForNavigation();
for (auto& entry : m_isolatedWorlds)
entry.value->clearForNavigation();
}
-void WindowProxyManagerBase::releaseGlobals(
+void WindowProxyManager::releaseGlobals(
HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
map.insert(&m_windowProxy->world(), m_windowProxy->releaseGlobal());
- for (auto& entry : m_isolatedWorlds)
- map.insert(&entry.value->world(),
- windowProxy(entry.value->world())->releaseGlobal());
+ for (auto& entry : m_isolatedWorlds) {
+ map.insert(
+ &entry.value->world(),
+ windowProxyMaybeUninitialized(entry.value->world())->releaseGlobal());
+ }
}
-void WindowProxyManagerBase::setGlobals(
+void WindowProxyManager::setGlobals(
const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
for (auto& entry : map)
- windowProxy(*entry.key)->setGlobal(entry.value);
+ windowProxyMaybeUninitialized(*entry.key)->setGlobal(entry.value);
}
-WindowProxyManagerBase::WindowProxyManagerBase(Frame& frame)
+WindowProxyManager::WindowProxyManager(Frame& frame)
: m_isolate(v8::Isolate::GetCurrent()),
haraken 2017/03/10 12:44:12 toIsolate(frame). Avoid using v8::Isolate::GetCur
Yuki 2017/03/10 15:21:50 blink::toIsolate(frame) is returning the frame's W
haraken 2017/03/11 19:35:24 Can we explicitly pass in the Isolate* parameter?
Yuki 2017/03/13 08:24:30 Currently, the call sites don't have an Isolate.
m_frame(&frame),
m_windowProxy(createWindowProxyForFrame(m_isolate,
- frame,
+ *m_frame,
&DOMWrapperWorld::mainWorld())) {}
+WindowProxy* WindowProxyManager::windowProxyMaybeUninitialized(
+ DOMWrapperWorld& world) {
+ WindowProxy* windowProxy = nullptr;
+ if (world.isMainWorld()) {
+ windowProxy = m_windowProxy.get();
+ } else {
+ IsolatedWorldMap::iterator iter = m_isolatedWorlds.find(world.worldId());
+ if (iter != m_isolatedWorlds.end()) {
+ windowProxy = iter->value.get();
+ } else {
+ windowProxy = createWindowProxyForFrame(m_isolate, *m_frame, &world);
+ m_isolatedWorlds.set(world.worldId(), windowProxy);
+ }
+ }
+ return windowProxy;
+}
+
void LocalWindowProxyManager::updateSecurityOrigin(
SecurityOrigin* securityOrigin) {
- static_cast<LocalWindowProxy*>(mainWorldProxy())
+ static_cast<LocalWindowProxy*>(m_windowProxy.get())
->updateSecurityOrigin(securityOrigin);
- for (auto& entry : isolatedWorlds()) {
+
+ for (auto& entry : m_isolatedWorlds) {
auto* isolatedWindowProxy =
static_cast<LocalWindowProxy*>(entry.value.get());
SecurityOrigin* isolatedSecurityOrigin =

Powered by Google App Engine
This is Rietveld 408576698