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 + -
显示快捷键?