page.cpp
来自「linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自Web」· C++ 代码 · 共 653 行 · 第 1/2 页
CPP
653 行
} return false;}unsigned int Page::markAllMatchesForText(const String& target, TextCaseSensitivity caseSensitivity, bool shouldHighlight, unsigned limit){ if (target.isEmpty() || !mainFrame()) return 0; unsigned matches = 0; Frame* frame = mainFrame(); do { frame->setMarkedTextMatchesAreHighlighted(shouldHighlight); matches += frame->markAllMatchesForText(target, caseSensitivity == TextCaseSensitive, (limit == 0) ? 0 : (limit - matches)); frame = incrementFrame(frame, true, false); } while (frame); return matches;}void Page::unmarkAllTextMatches(){ if (!mainFrame()) return; Frame* frame = mainFrame(); do { frame->document()->removeMarkers(DocumentMarker::TextMatch); frame = incrementFrame(frame, true, false); } while (frame);}const VisibleSelection& Page::selection() const{ return focusController()->focusedOrMainFrame()->selection()->selection();}void Page::setDefersLoading(bool defers){ if (defers == m_defersLoading) return; m_defersLoading = defers; for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) frame->loader()->setDefersLoading(defers);}void Page::clearUndoRedoOperations(){ m_editorClient->clearUndoRedoOperations();}bool Page::inLowQualityImageInterpolationMode() const{ return m_inLowQualityInterpolationMode;}void Page::setInLowQualityImageInterpolationMode(bool mode){ m_inLowQualityInterpolationMode = mode;}void Page::setMediaVolume(float volume){ if (volume < 0 || volume > 1) return; if (m_mediaVolume == volume) return; m_mediaVolume = volume; for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { frame->document()->mediaVolumeDidChange(); }}void Page::didMoveOnscreen(){ for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { if (frame->view()) frame->view()->didMoveOnscreen(); }}void Page::willMoveOffscreen(){ for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { if (frame->view()) frame->view()->willMoveOffscreen(); }}void Page::userStyleSheetLocationChanged(){#if !FRAME_LOADS_USER_STYLESHEET // FIXME: We should provide a way to load other types of URLs than just // file: (e.g., http:, data:). if (m_settings->userStyleSheetLocation().isLocalFile()) m_userStyleSheetPath = m_settings->userStyleSheetLocation().fileSystemPath(); else m_userStyleSheetPath = String(); m_didLoadUserStyleSheet = false; m_userStyleSheet = String(); m_userStyleSheetModificationTime = 0;#endif}const String& Page::userStyleSheet() const{ if (m_userStyleSheetPath.isEmpty()) { ASSERT(m_userStyleSheet.isEmpty()); return m_userStyleSheet; } time_t modTime; if (!getFileModificationTime(m_userStyleSheetPath, modTime)) { // The stylesheet either doesn't exist, was just deleted, or is // otherwise unreadable. If we've read the stylesheet before, we should // throw away that data now as it no longer represents what's on disk. m_userStyleSheet = String(); return m_userStyleSheet; } // If the stylesheet hasn't changed since the last time we read it, we can // just return the old data. if (m_didLoadUserStyleSheet && modTime <= m_userStyleSheetModificationTime) return m_userStyleSheet; m_didLoadUserStyleSheet = true; m_userStyleSheet = String(); m_userStyleSheetModificationTime = modTime; // FIXME: It would be better to load this asynchronously to avoid blocking // the process, but we will first need to create an asynchronous loading // mechanism that is not tied to a particular Frame. We will also have to // determine what our behavior should be before the stylesheet is loaded // and what should happen when it finishes loading, especially with respect // to when the load event fires, when Document::close is called, and when // layout/paint are allowed to happen. RefPtr<SharedBuffer> data = SharedBuffer::createWithContentsOfFile(m_userStyleSheetPath); if (!data) return m_userStyleSheet; m_userStyleSheet = TextResourceDecoder::create("text/css")->decode(data->data(), data->size()); return m_userStyleSheet;}void Page::removeAllVisitedLinks(){ if (!allPages) return; HashSet<PageGroup*> groups; HashSet<Page*>::iterator pagesEnd = allPages->end(); for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) { if (PageGroup* group = (*it)->groupPtr()) groups.add(group); } HashSet<PageGroup*>::iterator groupsEnd = groups.end(); for (HashSet<PageGroup*>::iterator it = groups.begin(); it != groupsEnd; ++it) (*it)->removeVisitedLinks();}void Page::allVisitedStateChanged(PageGroup* group){ ASSERT(group); ASSERT(allPages); HashSet<Page*>::iterator pagesEnd = allPages->end(); for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) { Page* page = *it; if (page->m_group != group) continue; for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree()->traverseNext()) { if (CSSStyleSelector* styleSelector = frame->document()->styleSelector()) styleSelector->allVisitedStateChanged(); } }}void Page::visitedStateChanged(PageGroup* group, LinkHash visitedLinkHash){ ASSERT(group); ASSERT(allPages); HashSet<Page*>::iterator pagesEnd = allPages->end(); for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) { Page* page = *it; if (page->m_group != group) continue; for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree()->traverseNext()) { if (CSSStyleSelector* styleSelector = frame->document()->styleSelector()) styleSelector->visitedStateChanged(visitedLinkHash); } }}void Page::setDebuggerForAllPages(JSC::Debugger* debugger){ ASSERT(allPages); HashSet<Page*>::iterator end = allPages->end(); for (HashSet<Page*>::iterator it = allPages->begin(); it != end; ++it) (*it)->setDebugger(debugger);}void Page::setDebugger(JSC::Debugger* debugger){ if (m_debugger == debugger) return; m_debugger = debugger; for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree()->traverseNext()) frame->script()->attachDebugger(m_debugger);}#if ENABLE(DOM_STORAGE)SessionStorage* Page::sessionStorage(bool optionalCreate){ if (!m_sessionStorage && optionalCreate) m_sessionStorage = SessionStorage::create(this); return m_sessionStorage.get();}void Page::setSessionStorage(PassRefPtr<SessionStorage> newStorage){ ASSERT(newStorage->page() == this); m_sessionStorage = newStorage;}#endif unsigned Page::pendingUnloadEventCount(){ return m_pendingUnloadEventCount;} void Page::changePendingUnloadEventCount(int delta) { if (!delta) return; ASSERT( (delta + (int)m_pendingUnloadEventCount) >= 0 ); if (m_pendingUnloadEventCount == 0) m_chrome->disableSuddenTermination(); else if ((m_pendingUnloadEventCount + delta) == 0) m_chrome->enableSuddenTermination(); m_pendingUnloadEventCount += delta; return; } unsigned Page::pendingBeforeUnloadEventCount(){ return m_pendingBeforeUnloadEventCount;} void Page::changePendingBeforeUnloadEventCount(int delta) { if (!delta) return; ASSERT( (delta + (int)m_pendingBeforeUnloadEventCount) >= 0 ); if (m_pendingBeforeUnloadEventCount == 0) m_chrome->disableSuddenTermination(); else if ((m_pendingBeforeUnloadEventCount + delta) == 0) m_chrome->enableSuddenTermination(); m_pendingBeforeUnloadEventCount += delta; return; }#if ENABLE(WML)WMLPageState* Page::wmlPageState(){ if (!m_wmlPageState) m_wmlPageState.set(new WMLPageState(this)); return m_wmlPageState.get(); }#endifvoid Page::setCustomHTMLTokenizerTimeDelay(double customHTMLTokenizerTimeDelay){ if (customHTMLTokenizerTimeDelay < 0) { m_customHTMLTokenizerTimeDelay = -1; return; } m_customHTMLTokenizerTimeDelay = customHTMLTokenizerTimeDelay;}void Page::setCustomHTMLTokenizerChunkSize(int customHTMLTokenizerChunkSize){ if (customHTMLTokenizerChunkSize < 0) { m_customHTMLTokenizerChunkSize = -1; return; } m_customHTMLTokenizerChunkSize = customHTMLTokenizerChunkSize;}void Page::setMemoryCacheClientCallsEnabled(bool enabled){ if (m_areMemoryCacheClientCallsEnabled == enabled) return; m_areMemoryCacheClientCallsEnabled = enabled; if (!enabled) return; for (RefPtr<Frame> frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) frame->loader()->tellClientAboutPastMemoryCacheLoads();}void Page::setJavaScriptURLsAreAllowed(bool areAllowed){ m_javaScriptURLsAreAllowed = areAllowed;}bool Page::javaScriptURLsAreAllowed() const{ return m_javaScriptURLsAreAllowed;}} // namespace WebCore
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?