void HistoryController::updateForStandardLoad(HistoryUpdateType updateType) { LOG(History, "HistoryController %p updateForStandardLoad: Updating History for standard load in frame %p (main frame %d) %s", this, &m_frame, m_frame.isMainFrame(), m_frame.loader().documentLoader()->url().string().ascii().data()); FrameLoader& frameLoader = m_frame.loader(); bool needPrivacy = m_frame.page()->usesEphemeralSession(); const URL& historyURL = frameLoader.documentLoader()->urlForHistory(); if (!frameLoader.documentLoader()->isClientRedirect()) { if (!historyURL.isEmpty()) { if (updateType != UpdateAllExceptBackForwardList) updateBackForwardListClippedAtTarget(true); if (!needPrivacy) { frameLoader.client().updateGlobalHistory(); frameLoader.documentLoader()->setDidCreateGlobalHistoryEntry(true); if (frameLoader.documentLoader()->unreachableURL().isEmpty()) frameLoader.client().updateGlobalHistoryRedirectLinks(); } m_frame.loader().client().updateGlobalHistoryItemForPage(); } } else { // The client redirect replaces the current history item. updateCurrentItem(); } if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame.page()) addVisitedLink(*page, historyURL); if (!frameLoader.documentLoader()->didCreateGlobalHistoryEntry() && frameLoader.documentLoader()->unreachableURL().isEmpty() && !m_frame.document()->url().isEmpty()) frameLoader.client().updateGlobalHistoryRedirectLinks(); } }
void HistoryController::pushState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { if (!m_currentItem) return; Page* page = m_frame.page(); ASSERT(page); // Get a HistoryItem tree for the current frame tree. RefPtr<HistoryItem> topItem = page->mainFrame().loader().history().createItemTree(m_frame, false); // Override data in the current item (created by createItemTree) to reflect // the pushState() arguments. m_currentItem->setTitle(title); m_currentItem->setStateObject(stateObject); m_currentItem->setURLString(urlString); page->backForward()->addItem(topItem.release()); if (m_frame.settings().privateBrowsingEnabled()) return; addVisitedLink(page, KURL(ParsedURLString, urlString)); m_frame.loader().client().updateGlobalHistory(); }
void PageGroup::addVisitedLink(const KURL& url) { if (!shouldTrackVisitedLinks) return; ASSERT(!url.isEmpty()); addVisitedLink(visitedLinkHash(url.string())); }
void HistoryController::pushState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { if (!m_currentItem) return; Page* page = m_frame.page(); ASSERT(page); // Get a HistoryItem tree for the current frame tree. Ref<HistoryItem> topItem = m_frame.mainFrame().loader().history().createItemTree(m_frame, false); // Override data in the current item (created by createItemTree) to reflect // the pushState() arguments. m_currentItem->setTitle(title); m_currentItem->setStateObject(stateObject); m_currentItem->setURLString(urlString); LOG(History, "HistoryController %p pushState: Adding top item %p, setting url of current item %p to %s", this, topItem.ptr(), m_currentItem.get(), urlString.ascii().data()); page->backForward().addItem(WTFMove(topItem)); if (m_frame.page()->usesEphemeralSession()) return; addVisitedLink(*page, URL(ParsedURLString, urlString)); m_frame.loader().client().updateGlobalHistory(); }
void HistoryController::replaceState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { if (!m_currentItem) return; if (!urlString.isEmpty()) m_currentItem->setURLString(urlString); m_currentItem->setTitle(title); m_currentItem->setStateObject(stateObject); ASSERT(m_frame->page()); addVisitedLink(m_frame->page(), KURL(ParsedURLString, urlString)); m_frame->loader()->client()->updateGlobalHistory(); }
void HistoryController::updateForSameDocumentNavigation() { if (m_frame->loader()->url().isEmpty()) return; Settings* settings = m_frame->settings(); if (!settings || settings->privateBrowsingEnabled()) return; Page* page = m_frame->page(); if (!page) return; addVisitedLink(page, m_frame->loader()->url()); }
void HistoryController::addState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { Page* page = m_frame->page(); ASSERT(page); // Get a HistoryItem tree for the current frame tree. RefPtr<HistoryItem> item = HistoryItem::create(); initializeItem(item.get()); item->setTitle(title); item->setStateObject(stateObject); item->setURLString(urlString); page->backForward()->addItem(item.release()); addVisitedLink(page, KURL(ParsedURLString, urlString)); m_frame->loader()->client()->updateGlobalHistory(); }
void HistoryController::updateForClientRedirect() { LOG(History, "HistoryController %p updateForClientRedirect: Updating History for client redirect in frame %p (main frame %d) %s", this, &m_frame, m_frame.isMainFrame(), m_frame.loader().documentLoader() ? m_frame.loader().documentLoader()->url().string().utf8().data() : ""); // Clear out form data so we don't try to restore it into the incoming page. Must happen after // webcore has closed the URL and saved away the form state. if (m_currentItem) { m_currentItem->clearDocumentState(); m_currentItem->clearScrollPosition(); } bool needPrivacy = m_frame.page()->usesEphemeralSession(); const URL& historyURL = m_frame.loader().documentLoader()->urlForHistory(); if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame.page()) addVisitedLink(*page, historyURL); } }
void HistoryController::replaceState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { if (!m_currentItem) return; if (!urlString.isEmpty()) m_currentItem->setURLString(urlString); m_currentItem->setTitle(title); m_currentItem->setStateObject(stateObject); m_currentItem->setFormData(0); m_currentItem->setFormContentType(String()); if (m_frame.page()->usesEphemeralSession()) return; ASSERT(m_frame.page()); addVisitedLink(*m_frame.page(), URL(ParsedURLString, urlString)); m_frame.loader().client().updateGlobalHistory(); }
void HistoryController::updateForRedirectWithLockedBackForwardList() { #if !LOG_DISABLED if (m_frame->loader()->documentLoader()) LOG(History, "WebCoreHistory: Updating History for redirect load in frame %s", m_frame->loader()->documentLoader()->title().utf8().data()); #endif Settings* settings = m_frame->settings(); bool needPrivacy = !settings || settings->privateBrowsingEnabled(); const KURL& historyURL = m_frame->loader()->documentLoader()->urlForHistory(); if (m_frame->loader()->documentLoader()->isClientRedirect()) { if (!m_currentItem && !m_frame->tree()->parent()) { if (!historyURL.isEmpty()) { updateBackForwardListClippedAtTarget(true); if (!needPrivacy) { m_frame->loader()->client()->updateGlobalHistory(); m_frame->loader()->documentLoader()->setDidCreateGlobalHistoryEntry(true); if (m_frame->loader()->documentLoader()->unreachableURL().isEmpty()) m_frame->loader()->client()->updateGlobalHistoryRedirectLinks(); } if (Page* page = m_frame->page()) page->setGlobalHistoryItem(needPrivacy ? 0 : page->backForward()->currentItem()); } } if (m_currentItem) { m_currentItem->setURL(m_frame->loader()->documentLoader()->url()); m_currentItem->setFormInfoFromRequest(m_frame->loader()->documentLoader()->request()); } } else { Frame* parentFrame = m_frame->tree()->parent(); if (parentFrame && parentFrame->loader()->history()->m_currentItem) parentFrame->loader()->history()->m_currentItem->setChildItem(createItem(true)); } if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame->page()) addVisitedLink(page, historyURL); if (!m_frame->loader()->documentLoader()->didCreateGlobalHistoryEntry() && m_frame->loader()->documentLoader()->unreachableURL().isEmpty() && !m_frame->loader()->url().isEmpty()) m_frame->loader()->client()->updateGlobalHistoryRedirectLinks(); } }
void HistoryController::updateForSameDocumentNavigation() { if (m_frame.document()->url().isEmpty()) return; if (m_frame.page()->usesEphemeralSession()) return; Page* page = m_frame.page(); if (!page) return; addVisitedLink(*page, m_frame.document()->url()); m_frame.mainFrame().loader().history().recursiveUpdateForSameDocumentNavigation(); if (m_currentItem) { m_currentItem->setURL(m_frame.document()->url()); m_frame.loader().client().updateGlobalHistory(); } }
void HistoryController::updateForSameDocumentNavigation() { if (m_frame.document()->url().isEmpty()) return; if (m_frame.settings().privateBrowsingEnabled()) return; Page* page = m_frame.page(); if (!page) return; addVisitedLink(page, m_frame.document()->url()); page->mainFrame().loader().history().recursiveUpdateForSameDocumentNavigation(); if (m_currentItem) { m_currentItem->setURL(m_frame.document()->url()); m_frame.loader().client().updateGlobalHistory(); } }
void HistoryController::replaceState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { if (!m_currentItem) return; if (!urlString.isEmpty()) m_currentItem->setURLString(urlString); m_currentItem->setTitle(title); m_currentItem->setStateObject(stateObject); m_currentItem->setFormData(0); m_currentItem->setFormContentType(String()); Settings* settings = m_frame->settings(); if (!settings || settings->privateBrowsingEnabled()) return; ASSERT(m_frame->page()); addVisitedLink(m_frame->page(), KURL(ParsedURLString, urlString)); m_frame->loader()->client()->updateGlobalHistory(); }
void HistoryController::updateForRedirectWithLockedBackForwardList() { #if !LOG_DISABLED if (m_frame.loader().documentLoader()) LOG(History, "WebCoreHistory: Updating History for redirect load in frame %s", m_frame.loader().documentLoader()->title().string().utf8().data()); #endif bool needPrivacy = m_frame.page()->usesEphemeralSession(); const URL& historyURL = m_frame.loader().documentLoader()->urlForHistory(); if (m_frame.loader().documentLoader()->isClientRedirect()) { if (!m_currentItem && !m_frame.tree().parent()) { if (!historyURL.isEmpty()) { updateBackForwardListClippedAtTarget(true); if (!needPrivacy) { m_frame.loader().client().updateGlobalHistory(); m_frame.loader().documentLoader()->setDidCreateGlobalHistoryEntry(true); if (m_frame.loader().documentLoader()->unreachableURL().isEmpty()) m_frame.loader().client().updateGlobalHistoryRedirectLinks(); } m_frame.loader().client().updateGlobalHistoryItemForPage(); } } // The client redirect replaces the current history item. updateCurrentItem(); } else { Frame* parentFrame = m_frame.tree().parent(); if (parentFrame && parentFrame->loader().history().currentItem()) parentFrame->loader().history().currentItem()->setChildItem(createItem()); } if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame.page()) addVisitedLink(*page, historyURL); if (!m_frame.loader().documentLoader()->didCreateGlobalHistoryEntry() && m_frame.loader().documentLoader()->unreachableURL().isEmpty() && !m_frame.document()->url().isEmpty()) m_frame.loader().client().updateGlobalHistoryRedirectLinks(); } }
void HistoryController::updateForClientRedirect() { #if !LOG_DISABLED if (m_frame.loader().documentLoader()) LOG(History, "WebCoreHistory: Updating History for client redirect in frame %s", m_frame.loader().documentLoader()->title().string().utf8().data()); #endif // Clear out form data so we don't try to restore it into the incoming page. Must happen after // webcore has closed the URL and saved away the form state. if (m_currentItem) { m_currentItem->clearDocumentState(); m_currentItem->clearScrollPoint(); } bool needPrivacy = m_frame.page()->usesEphemeralSession(); const URL& historyURL = m_frame.loader().documentLoader()->urlForHistory(); if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame.page()) addVisitedLink(*page, historyURL); } }
void HistoryController::updateForClientRedirect() { #if !LOG_DISABLED if (m_frame->loader()->documentLoader()) LOG(History, "WebCoreHistory: Updating History for client redirect in frame %s", m_frame->loader()->documentLoader()->title().utf8().data()); #endif // Clear out form data so we don't try to restore it into the incoming page. Must happen after // webcore has closed the URL and saved away the form state. if (m_currentItem) { m_currentItem->clearDocumentState(); m_currentItem->clearScrollPoint(); } Settings* settings = m_frame->settings(); bool needPrivacy = !settings || settings->privateBrowsingEnabled(); const KURL& historyURL = m_frame->loader()->documentLoader()->urlForHistory(); if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame->page()) addVisitedLink(page, historyURL); } }
void HistoryController::updateForStandardLoad(HistoryUpdateType updateType) { LOG(History, "WebCoreHistory: Updating History for Standard Load in frame %s", m_frame->loader()->documentLoader()->url().string().ascii().data()); FrameLoader* frameLoader = m_frame->loader(); Settings* settings = m_frame->settings(); bool needPrivacy = !settings || settings->privateBrowsingEnabled(); const KURL& historyURL = frameLoader->documentLoader()->urlForHistory(); if (!frameLoader->documentLoader()->isClientRedirect()) { if (!historyURL.isEmpty()) { if (updateType != UpdateAllExceptBackForwardList) updateBackForwardListClippedAtTarget(true); if (!needPrivacy) { frameLoader->client()->updateGlobalHistory(); frameLoader->documentLoader()->setDidCreateGlobalHistoryEntry(true); if (frameLoader->documentLoader()->unreachableURL().isEmpty()) frameLoader->client()->updateGlobalHistoryRedirectLinks(); } m_frame->loader()->client()->updateGlobalHistoryItemForPage(); } } else { // The client redirect replaces the current history item. updateCurrentItem(); } if (!historyURL.isEmpty() && !needPrivacy) { if (Page* page = m_frame->page()) addVisitedLink(page, historyURL); if (!frameLoader->documentLoader()->didCreateGlobalHistoryEntry() && frameLoader->documentLoader()->unreachableURL().isEmpty() && !m_frame->document()->url().isEmpty()) frameLoader->client()->updateGlobalHistoryRedirectLinks(); } }
/** 出队 */ void LinkQueue::pop(std::string url) { addVisitedLink(url); unvisitedSet.erase(url); }
void PageGroup::addVisitedLink(const UChar* characters, size_t length) { if (!shouldTrackVisitedLinks) return; addVisitedLink(StringImpl::computeHash(characters, length)); }
void PageGroup::addVisitedLinkHash(LinkHash hash) { if (shouldTrackVisitedLinks) addVisitedLink(hash); }
void PageGroup::addVisitedLink(const UChar* characters, size_t length) { if (!shouldTrackVisitedLinks) return; addVisitedLink(visitedLinkHash(characters, length)); }