本文整理汇总了C++中JSDOMWindowShell::setWindow方法的典型用法代码示例。如果您正苦于以下问题:C++ JSDOMWindowShell::setWindow方法的具体用法?C++ JSDOMWindowShell::setWindow怎么用?C++ JSDOMWindowShell::setWindow使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JSDOMWindowShell
的用法示例。
在下文中一共展示了JSDOMWindowShell::setWindow方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: restore
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());
}
}
示例2: restore
void ScriptCachedFrameData::restore(Frame* frame)
{
JSLockHolder lock(JSDOMWindowBase::commonJSGlobalData());
ScriptController* scriptController = frame->script();
ScriptController::ShellMap& windowShells = scriptController->m_windowShells;
ScriptController::ShellMap::iterator windowShellsEnd = windowShells.end();
for (ScriptController::ShellMap::iterator iter = windowShells.begin(); iter != windowShellsEnd; ++iter) {
DOMWrapperWorld* world = iter->first.get();
JSDOMWindowShell* windowShell = iter->second.get();
if (JSDOMWindow* window = m_windows.get(world).get())
windowShell->setWindow(window->globalData(), window);
else {
DOMWindow* domWindow = frame->document()->domWindow();
if (windowShell->window()->impl() == domWindow)
continue;
windowShell->setWindow(domWindow);
if (Page* page = frame->page()) {
scriptController->attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
}
}
示例3: clearWindowShell
void ScriptController::clearWindowShell(bool goingIntoPageCache)
{
if (m_windowShells.isEmpty())
return;
JSLock lock(SilenceAssertionsOnly);
for (ShellMap::iterator iter = m_windowShells.begin(); iter != m_windowShells.end(); ++iter) {
JSDOMWindowShell* windowShell = iter->second.get();
// Clear the debugger from the current window before setting the new window.
attachDebugger(windowShell, 0);
windowShell->window()->willRemoveFromWindowShell();
windowShell->setWindow(m_frame->domWindow());
// An m_cacheableBindingRootObject persists between page navigations
// so needs to know about the new JSDOMWindow.
if (m_cacheableBindingRootObject)
m_cacheableBindingRootObject->updateGlobalObject(windowShell->window());
if (Page* page = m_frame->page()) {
attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
// It's likely that resetting our windows created a lot of garbage, unless
// it went in a back/forward cache.
if (!goingIntoPageCache)
gcController().garbageCollectSoon();
}
示例4: restore
void ScriptCachedPageData::restore(Page* page)
{
Frame* mainFrame = page->mainFrame();
JSLock lock(false);
ScriptController* scriptController = mainFrame->script();
if (scriptController->haveWindowShell()) {
JSDOMWindowShell* windowShell = scriptController->windowShell();
if (m_window) {
windowShell->setWindow(m_window.get());
} else {
windowShell->setWindow(mainFrame->domWindow());
scriptController->attachDebugger(page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
}
示例5: restore
void ScriptCachedFrameData::restore(Frame* frame)
{
Page* page = frame->page();
JSLock lock(SilenceAssertionsOnly);
ScriptController* scriptController = frame->script();
if (scriptController->haveWindowShell()) {
JSDOMWindowShell* windowShell = scriptController->windowShell();
if (m_window) {
windowShell->setWindow(m_window.get());
} else {
windowShell->setWindow(frame->domWindow());
scriptController->attachDebugger(page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
}
}
}
示例6: clearWindowShell
void ScriptController::clearWindowShell(DOMWindow* newDOMWindow, bool goingIntoPageCache)
{
if (m_windowShells.isEmpty())
return;
JSLockHolder lock(JSDOMWindowBase::commonVM());
Vector<JSC::Strong<JSDOMWindowShell>> windowShells = this->windowShells();
for (size_t i = 0; i < windowShells.size(); ++i) {
JSDOMWindowShell* windowShell = windowShells[i].get();
if (&windowShell->window()->wrapped() == newDOMWindow)
continue;
// Clear the debugger and console from the current window before setting the new window.
attachDebugger(windowShell, nullptr);
windowShell->window()->setConsoleClient(nullptr);
// FIXME: We should clear console profiles for each frame as soon as the frame is destroyed.
// Instead of clearing all of them when the main frame is destroyed.
if (m_frame.isMainFrame()) {
if (Page* page = m_frame.page())
page->console().clearProfiles();
}
windowShell->window()->willRemoveFromWindowShell();
windowShell->setWindow(newDOMWindow);
// An m_cacheableBindingRootObject persists between page navigations
// so needs to know about the new JSDOMWindow.
if (m_cacheableBindingRootObject)
m_cacheableBindingRootObject->updateGlobalObject(windowShell->window());
if (Page* page = m_frame.page()) {
attachDebugger(windowShell, page->debugger());
windowShell->window()->setProfileGroup(page->group().identifier());
windowShell->window()->setConsoleClient(&page->console());
}
}
// It's likely that resetting our windows created a lot of garbage, unless
// it went in a back/forward cache.
if (!goingIntoPageCache)
collectGarbageAfterWindowShellDestruction();
}