diff options
Diffstat (limited to 'Source/WebCore/bindings/js/ScriptCachedFrameData.cpp')
-rw-r--r-- | Source/WebCore/bindings/js/ScriptCachedFrameData.cpp | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp b/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp index c4e12f942..1196db791 100644 --- a/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp +++ b/Source/WebCore/bindings/js/ScriptCachedFrameData.cpp @@ -1,11 +1,11 @@ /* * Copyright (c) 2008, Google Inc. All rights reserved. * Copyright (C) 2008 Apple Inc. All Rights Reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: - * + * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above @@ -15,7 +15,7 @@ * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -32,14 +32,17 @@ #include "config.h" #include "ScriptCachedFrameData.h" +#include "CommonVM.h" #include "Document.h" #include "Frame.h" #include "GCController.h" #include "Page.h" +#include "PageConsoleClient.h" #include "PageGroup.h" +#include "ScriptController.h" #include <heap/StrongInlines.h> #include <runtime/JSLock.h> -#include "ScriptController.h" +#include <runtime/WeakGCMapInlines.h> using namespace JSC; @@ -47,18 +50,19 @@ namespace WebCore { ScriptCachedFrameData::ScriptCachedFrameData(Frame& frame) { - JSLockHolder lock(JSDOMWindowBase::commonVM()); + JSLockHolder lock(commonVM()); ScriptController& scriptController = frame.script(); - ScriptController::ShellMap& windowShells = scriptController.m_windowShells; + Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells(); - ScriptController::ShellMap::iterator windowShellsEnd = windowShells.end(); - for (ScriptController::ShellMap::iterator iter = windowShells.begin(); iter != windowShellsEnd; ++iter) { - JSDOMWindow* window = iter->value->window(); - m_windows.add(iter->key.get(), Strong<JSDOMWindow>(window->vm(), window)); + for (size_t i = 0; i < windowShells.size(); ++i) { + JSDOMWindowShell* windowShell = windowShells[i].get(); + JSDOMWindow* window = windowShell->window(); + m_windows.add(&windowShell->world(), Strong<JSDOMWindow>(window->vm(), window)); + window->setConsoleClient(nullptr); } - scriptController.attachDebugger(0); + scriptController.attachDebugger(nullptr); } ScriptCachedFrameData::~ScriptCachedFrameData() @@ -68,29 +72,33 @@ ScriptCachedFrameData::~ScriptCachedFrameData() void ScriptCachedFrameData::restore(Frame& frame) { - JSLockHolder lock(JSDOMWindowBase::commonVM()); + JSLockHolder lock(commonVM()); + Page* page = frame.page(); ScriptController& scriptController = frame.script(); - ScriptController::ShellMap& windowShells = scriptController.m_windowShells; + Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells(); - for (auto it = windowShells.begin(), end = windowShells.end(); it != end; ++it) { - DOMWrapperWorld* world = it->key.get(); - JSDOMWindowShell* windowShell = it->value.get(); + for (size_t i = 0; i < windowShells.size(); ++i) { + JSDOMWindowShell* windowShell = windowShells[i].get(); + DOMWrapperWorld* world = &windowShell->world(); if (JSDOMWindow* window = m_windows.get(world).get()) windowShell->setWindow(window->vm(), window); else { DOMWindow* domWindow = frame.document()->domWindow(); - if (&windowShell->window()->impl() == domWindow) + if (&windowShell->window()->wrapped() == domWindow) continue; windowShell->setWindow(domWindow); - if (Page* page = frame.page()) { + if (page) { scriptController.attachDebugger(windowShell, page->debugger()); windowShell->window()->setProfileGroup(page->group().identifier()); } } + + if (page) + windowShell->window()->setConsoleClient(&page->console()); } } @@ -99,9 +107,9 @@ void ScriptCachedFrameData::clear() if (m_windows.isEmpty()) return; - JSLockHolder lock(JSDOMWindowBase::commonVM()); + JSLockHolder lock(commonVM()); m_windows.clear(); - gcController().garbageCollectSoon(); + GCController::singleton().garbageCollectSoon(); } } // namespace WebCore |