void ScriptCachedFrameData::restore(Frame& frame) { JSLockHolder lock(JSDOMWindowBase::commonVM()); Page* page = frame.page(); ScriptController& scriptController = frame.script(); Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells(); 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) continue; windowShell->setWindow(domWindow); if (page) { scriptController.attachDebugger(windowShell, page->debugger()); windowShell->window()->setProfileGroup(page->group().identifier()); } } if (page) windowShell->window()->setConsoleClient(&page->console()); } }
void ScriptController::updateDocument() { Vector<JSC::Strong<JSDOMWindowShell>> windowShells = this->windowShells(); for (size_t i = 0; i < windowShells.size(); ++i) { JSDOMWindowShell* windowShell = windowShells[i].get(); JSLockHolder lock(windowShell->world().vm()); windowShell->window()->updateDocument(); } }
ScriptCachedFrameData::ScriptCachedFrameData(Frame& frame) { JSLockHolder lock(JSDOMWindowBase::commonVM()); ScriptController& scriptController = frame.script(); Vector<JSC::Strong<JSDOMWindowShell>> windowShells = scriptController.windowShells(); 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(nullptr); }