void HistoryController::updateForCommit() { FrameLoader* frameLoader = m_frame->loader(); #if !LOG_DISABLED if (frameLoader->documentLoader()) LOG(History, "WebCoreHistory: Updating History for commit in frame %s", frameLoader->documentLoader()->title().string().utf8().data()); #endif FrameLoadType type = frameLoader->loadType(); if (isBackForwardLoadType(type) || isReplaceLoadTypeWithProvisionalItem(type) || (isReloadTypeWithProvisionalItem(type) && !frameLoader->documentLoader()->unreachableURL().isEmpty())) { // Once committed, we want to use current item for saving DocState, and // the provisional item for restoring state. // Note previousItem must be set before we close the URL, which will // happen when the data source is made non-provisional below m_frameLoadComplete = false; m_previousItem = m_currentItem; ASSERT(m_provisionalItem); m_currentItem = m_provisionalItem; m_provisionalItem = 0; // Tell all other frames in the tree to commit their provisional items and // restore their scroll position. We'll avoid this frame (which has already // committed) and its children (which will be replaced). Page* page = m_frame->page(); ASSERT(page); page->mainFrame()->loader()->history()->recursiveUpdateForCommit(); } switch (type) { case FrameLoadTypeBackForward: updateForBackForwardNavigation(); return; case FrameLoadTypeReload: case FrameLoadTypeReloadFromOrigin: case FrameLoadTypeSame: case FrameLoadTypeReplace: updateForReload(); return; case FrameLoadTypeStandard: updateForStandardLoad(); return; case FrameLoadTypeRedirectWithLockedBackForwardList: updateForRedirectWithLockedBackForwardList(); return; case FrameLoadTypeInitialInChildFrame: updateForInitialLoadInChildFrame(); return; default: ASSERT_NOT_REACHED(); } }
void HistoryController::updateForCommit(LocalFrame* frame, HistoryItem* item, HistoryCommitType commitType, bool navigationWithinPage) { if (commitType == BackForwardCommit) { if (!m_provisionalEntry) return; // Once committed, we want to use current item for saving DocState, and // the provisional item for restoring state. // Note previousItem must be set before we close the URL, which will // happen when the data source is made non-provisional below m_previousEntry = m_currentEntry.release(); ASSERT(m_provisionalEntry); m_currentEntry = m_provisionalEntry.release(); } else if (commitType == StandardCommit) { createNewBackForwardItem(frame, item, !navigationWithinPage); } else if (commitType == InitialCommitInChildFrame) { updateForInitialLoadInChildFrame(frame, item); } }