void Page::refreshPlugins(bool reload) { if (allPages().isEmpty()) return; PluginData::refresh(); Vector<RefPtr<LocalFrame> > framesNeedingReload; HashSet<Page*>::iterator end = allPages().end(); for (HashSet<Page*>::iterator it = allPages().begin(); it != end; ++it) { Page* page = *it; // Clear out the page's plug-in data. if (page->m_pluginData) page->m_pluginData = nullptr; if (!reload) continue; for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree().traverseNext()) { if (frame->isLocalFrame() && toLocalFrame(frame)->document()->containsPlugins()) framesNeedingReload.append(toLocalFrame(frame)); } } for (size_t i = 0; i < framesNeedingReload.size(); ++i) framesNeedingReload[i]->loader().reload(); }
void Page::scheduleForcedStyleRecalcForAllPages() { HashSet<Page*>::iterator end = allPages().end(); for (HashSet<Page*>::iterator it = allPages().begin(); it != end; ++it) for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree().traverseNext()) frame->document()->setNeedsStyleRecalc(SubtreeStyleChange); }
void Page::visitedStateChanged(LinkHash linkHash) { HashSet<Page*>::iterator pagesEnd = allPages().end(); for (HashSet<Page*>::iterator it = allPages().begin(); it != pagesEnd; ++it) { Page* page = *it; if (page->m_group != PageGroup::sharedGroup()) continue; for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree().traverseNext()) frame->document()->visitedLinkState().invalidateStyleForLink(linkHash); } }
void Page::willBeDestroyed() { RefPtr<Frame> mainFrame = m_mainFrame; if (mainFrame->isLocalFrame()) toLocalFrame(mainFrame.get())->loader().frameDetached(); // Disable all agents prior to resetting the frame view. m_inspectorController->willBeDestroyed(); if (mainFrame->isLocalFrame()) { toLocalFrame(mainFrame.get())->setView(nullptr); } else { ASSERT(m_mainFrame->isRemoteFrame()); toRemoteFrame(mainFrame.get())->setView(nullptr); } allPages().remove(this); if (ordinaryPages().contains(this)) ordinaryPages().remove(this); if (m_scrollingCoordinator) m_scrollingCoordinator->willBeDestroyed(); #ifndef NDEBUG pageCounter.decrement(); #endif m_chrome->willBeDestroyed(); m_mainFrame = 0; if (m_validationMessageClient) m_validationMessageClient->willBeDestroyed(); WillBeHeapSupplementable<Page>::willBeDestroyed(); }
Page::Page(PageClients& pageClients) : SettingsDelegate(Settings::create()) , m_autoscrollController(AutoscrollController::create(*this)) , m_chrome(Chrome::create(this, pageClients.chromeClient)) , m_dragCaretController(DragCaretController::create()) , m_dragController(DragController::create(this, pageClients.dragClient)) , m_focusController(FocusController::create(this)) , m_contextMenuController(ContextMenuController::create(this, pageClients.contextMenuClient)) , m_inspectorController(InspectorController::create(this, pageClients.inspectorClient)) , m_pointerLockController(PointerLockController::create(this)) , m_historyController(adoptPtr(new HistoryController(this))) , m_progress(ProgressTracker::create()) , m_undoStack(UndoStack::create()) , m_backForwardClient(pageClients.backForwardClient) , m_editorClient(pageClients.editorClient) , m_validationMessageClient(0) , m_spellCheckerClient(pageClients.spellCheckerClient) , m_storageClient(pageClients.storageClient) , m_subframeCount(0) , m_openedByDOM(false) , m_tabKeyCyclesThroughElements(true) , m_defersLoading(false) , m_pageScaleFactor(1) , m_deviceScaleFactor(1) , m_group(0) , m_timerAlignmentInterval(DOMTimer::visiblePageAlignmentInterval()) , m_visibilityState(PageVisibilityStateVisible) , m_isCursorVisible(true) #ifndef NDEBUG , m_isPainting(false) #endif , m_frameHost(FrameHost::create(*this)) { ASSERT(m_editorClient); ASSERT(!allPages().contains(this)); allPages().add(this); #ifndef NDEBUG pageCounter.increment(); #endif }
Page::~Page() { m_mainFrame->setView(0); clearPageGroup(); allPages().remove(this); for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNext()) { frame->willDetachFrameHost(); frame->detachFromFrameHost(); } m_inspectorController->inspectedPageDestroyed(); if (m_scrollingCoordinator) m_scrollingCoordinator->pageDestroyed(); #ifndef NDEBUG pageCounter.decrement(); #endif }