// BackForwardList.setCurrentIndex() JNIEXPORT jint JNICALL Java_com_sun_webkit_BackForwardList_bflSetCurrentIndex(JNIEnv* env, jclass z, jlong jpage, jint index) { Page* page = getPage(jpage); BackForwardList* bfl = page->backForwardList(); if (index < 0 || index >= getSize(bfl)) return -1; int distance = index - bfl->backListCount(); page->goBackOrForward(distance); return index; }
void HistoryController::replaceState(PassRefPtr<SerializedScriptValue> stateObject, const String& title, const String& urlString) { Page* page = m_frame->page(); ASSERT(page); HistoryItem* current = page->backForwardList()->currentItem(); ASSERT(current); if (!urlString.isEmpty()) current->setURLString(urlString); current->setTitle(title); current->setStateObject(stateObject); }
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> item = createItemTree(m_frame, false); ASSERT(item->isTargetItem()); // Override data in the target item to reflect the pushState() arguments. item->setTitle(title); item->setStateObject(stateObject); item->setURLString(urlString); page->backForwardList()->pushStateItem(item.release()); }
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->backForwardList()->addItem(topItem.release()); }
void HistoryController::pushState(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 = createItemTree(m_frame, false); ASSERT(item->isTargetItem()); // Override data in the target item to reflect the pushState() arguments. item->setTitle(title); item->setStateObject(stateObject); item->setURLString(urlString); // Since the document isn't changed as a result of a pushState call, we // should preserve the DocumentSequenceNumber of the previous item. item->setDocumentSequenceNumber(m_previousItem->documentSequenceNumber()); page->backForwardList()->pushStateItem(item.release()); }
void WMLDocument::finishedParsing() { if (Tokenizer* tokenizer = this->tokenizer()) { if (!tokenizer->wellFormed()) { Document::finishedParsing(); return; } } bool hasAccess = initialize(true); Document::finishedParsing(); if (!hasAccess) { m_activeCard = 0; WMLPageState* wmlPageState = wmlPageStateForDocument(this); if (!wmlPageState) return; Page* page = wmlPageState->page(); if (!page) return; BackForwardList* list = page->backForwardList(); if (!list) return; HistoryItem* item = list->backItem(); if (!item) return; page->goToItem(item, FrameLoadTypeBackWMLDeckNotAccessible); return; } if (m_activeCard) { m_activeCard->handleIntrinsicEventIfNeeded(); m_activeCard = 0; } }
void HistoryController::updateBackForwardListClippedAtTarget(bool doClip) { // In the case of saving state about a page with frames, we store a tree of items that mirrors the frame tree. // The item that was the target of the user's navigation is designated as the "targetItem". // When this function is called with doClip=true we're able to create the whole tree except for the target's children, // which will be loaded in the future. That part of the tree will be filled out as the child loads are committed. Page* page = m_frame->page(); if (!page) return; if (m_frame->loader()->documentLoader()->urlForHistory().isEmpty()) return; Frame* mainFrame = page->mainFrame(); ASSERT(mainFrame); FrameLoader* frameLoader = mainFrame->loader(); frameLoader->checkDidPerformFirstNavigation(); RefPtr<HistoryItem> item = frameLoader->history()->createItemTree(m_frame, doClip); LOG(BackForward, "WebCoreBackForward - Adding backforward item %p for frame %s", item.get(), m_frame->loader()->documentLoader()->url().string().ascii().data()); page->backForwardList()->addItem(item); }
// Main funnel for navigating to a previous location (back/forward, non-search snap-back) // This includes recursion to handle loading into framesets properly void HistoryController::goToItem(HistoryItem* targetItem, FrameLoadType type) { ASSERT(!m_frame->tree()->parent()); // shouldGoToHistoryItem is a private delegate method. This is needed to fix: // <rdar://problem/3951283> can view pages from the back/forward cache that should be disallowed by Parental Controls // Ultimately, history item navigations should go through the policy delegate. That's covered in: // <rdar://problem/3979539> back/forward cache navigations should consult policy delegate Page* page = m_frame->page(); if (!page) return; if (!m_frame->loader()->client()->shouldGoToHistoryItem(targetItem)) return; // Set the BF cursor before commit, which lets the user quickly click back/forward again. // - plus, it only makes sense for the top level of the operation through the frametree, // as opposed to happening for some/one of the page commits that might happen soon BackForwardList* bfList = page->backForwardList(); HistoryItem* currentItem = bfList->currentItem(); bfList->goToItem(targetItem); Settings* settings = m_frame->settings(); page->setGlobalHistoryItem((!settings || settings->privateBrowsingEnabled()) ? 0 : targetItem); recursiveGoToItem(targetItem, currentItem, type); }