| 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 8e7a752720b45b56d834a48b14ccebe4d2bc6a43..c169ef2767828ac4e8ef9f131d025d23de6be4a8 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),
|
| @@ -29,22 +28,6 @@ DEFINE_TRACE(WindowProxyManagerBase) {
|
| 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() {
|
| m_windowProxy->clearForClose();
|
| for (auto& entry : m_isolatedWorlds)
|
| @@ -61,14 +44,16 @@ void WindowProxyManagerBase::releaseGlobals(
|
| HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
|
| map.add(&m_windowProxy->world(), m_windowProxy->releaseGlobal());
|
| for (auto& entry : m_isolatedWorlds)
|
| - map.add(&entry.value->world(),
|
| - windowProxy(entry.value->world())->releaseGlobal());
|
| + map.add(&entry.value->world(), entry.value->releaseGlobal());
|
| }
|
|
|
| void WindowProxyManagerBase::setGlobals(
|
| const HashMap<DOMWrapperWorld*, v8::Local<v8::Object>>& map) {
|
| + // Note: it's important not to initialize the WindowProxy before SetGlobal()
|
| + // is called. Otherwise, the global proxy object the WindowProxy thinks it has
|
| + // and the global proxy object of any actual v8 contexts will not match!
|
| for (auto& entry : map)
|
| - windowProxy(*entry.key)->setGlobal(entry.value);
|
| + possiblyUninitializedWindowProxy(*entry.key)->setGlobal(entry.value);
|
| }
|
|
|
| WindowProxyManagerBase::WindowProxyManagerBase(Frame& frame)
|
| @@ -78,17 +63,27 @@ WindowProxyManagerBase::WindowProxyManagerBase(Frame& frame)
|
| frame,
|
| &DOMWrapperWorld::mainWorld())) {}
|
|
|
| -void LocalWindowProxyManager::updateSecurityOrigin(
|
| - SecurityOrigin* securityOrigin) {
|
| - static_cast<LocalWindowProxy*>(mainWorldProxy())
|
| - ->updateSecurityOrigin(securityOrigin);
|
| - for (auto& entry : isolatedWorlds()) {
|
| - auto* isolatedWindowProxy =
|
| - static_cast<LocalWindowProxy*>(entry.value.get());
|
| - SecurityOrigin* isolatedSecurityOrigin =
|
| - isolatedWindowProxy->world().isolatedWorldSecurityOrigin();
|
| - isolatedWindowProxy->updateSecurityOrigin(isolatedSecurityOrigin);
|
| +WindowProxy* WindowProxyManagerBase::windowProxy(DOMWrapperWorld& world) {
|
| + WindowProxy* windowProxy = possiblyUninitializedWindowProxy(world);
|
| + windowProxy->initializeIfNeeded();
|
| + return windowProxy;
|
| +}
|
| +
|
| +WindowProxy* WindowProxyManagerBase::possiblyUninitializedWindowProxy(
|
| + 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;
|
| }
|
|
|
| } // namespace blink
|
|
|