/** * webkit_web_back_forward_list_set_limit: * @web_back_forward_list: a #WebKitWebBackForwardList * @limit: the limit to set the back forward list to * * Sets the maximum limit of the back forward list. If the back forward list * exceeds its capacity, items will be removed everytime a new item has been * added. */ void webkit_web_back_forward_list_set_limit(WebKitWebBackForwardList* webBackForwardList, gint limit) { g_return_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList)); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (backForwardList) backForwardList->setCapacity(limit); }
/** * webkit_web_back_forward_list_go_back: * @web_back_forward_list: a #WebKitWebBackForwardList * * Steps backward in the back forward list */ void webkit_web_back_forward_list_go_back(WebKitWebBackForwardList* webBackForwardList) { g_return_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList)); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (backForwardList->enabled()) backForwardList->goBack(); }
/** * webkit_web_back_forward_list_add_item: * @web_back_forward_list: a #WebKitWebBackForwardList * @history_item: the #WebKitWebHistoryItem to add * * Adds the item to the #WebKitWebBackForwardList. */ void webkit_web_back_forward_list_add_item(WebKitWebBackForwardList *webBackForwardList, WebKitWebHistoryItem *webHistoryItem) { g_return_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList)); WebCore::BackForwardList* backForwardList = core(webBackForwardList); WebCore::HistoryItem* historyItem = core(webHistoryItem); backForwardList->addItem(historyItem); }
/** * webkit_web_back_forward_list_get_limit: * @web_back_forward_list: a #WebKitWebBackForwardList * * Returns the maximum limit of the back forward list. * * Return value: a #gint indicating the number of #WebHistoryItem the back forward list can hold */ gint webkit_web_back_forward_list_get_limit(WebKitWebBackForwardList* webBackForwardList) { g_return_val_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList), 0); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (!backForwardList || !backForwardList->enabled()) return 0; return backForwardList->capacity(); }
/** * webkit_web_back_forward_list_go_to_item: * @web_back_forward_list: a #WebKitWebBackForwardList * @history_item: the #WebKitWebHistoryItem to go to * * Go to the specified @web_history_item in the back forward list */ void webkit_web_back_forward_list_go_to_item(WebKitWebBackForwardList* webBackForwardList, WebKitWebHistoryItem* webHistoryItem) { g_return_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList)); g_return_if_fail(WEBKIT_IS_WEB_HISTORY_ITEM(webHistoryItem)); WebCore::HistoryItem* historyItem = core(webHistoryItem); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (backForwardList->enabled() && historyItem) backForwardList->goToItem(historyItem); }
/** * webkit_web_back_forward_list_get_nth_item: * @web_back_forward_list: a #WebKitWebBackForwardList * @index: the index of the item * * Returns the item at a given index relative to the current item. * * Return value: the #WebKitWebHistoryItem located at the specified index relative to the current item */ WebKitWebHistoryItem* webkit_web_back_forward_list_get_nth_item(WebKitWebBackForwardList* webBackForwardList, gint index) { g_return_val_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList), NULL); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (!backForwardList) return NULL; WebCore::HistoryItem* historyItem = backForwardList->itemAtIndex(index); return (historyItem ? kit(historyItem) : NULL); }
/** * webkit_web_back_forward_list_get_forward_item: * @web_back_forward_list: a #WebKitWebBackForwardList * * Returns the item that succeeds the current item. * * Returns a NULL value if there nothing that succeeds the current item * * Return value: a #WebKitWebHistoryItem */ WebKitWebHistoryItem* webkit_web_back_forward_list_get_forward_item(WebKitWebBackForwardList* webBackForwardList) { g_return_val_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList), NULL); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (!backForwardList || !backForwardList->enabled()) return NULL; WebCore::HistoryItem* historyItem = backForwardList->forwardItem(); return (historyItem ? kit(historyItem) : NULL); }
/** * webkit_web_back_forward_list_contains_item: * @web_back_forward_list: a #WebKitWebBackForwardList * @history_item: the #WebKitWebHistoryItem to check * * Checks if @web_history_item is in the back forward list * * Return: %TRUE if @web_history_item is in the back forward list, %FALSE if it doesn't */ gboolean webkit_web_back_forward_list_contains_item(WebKitWebBackForwardList* webBackForwardList, WebKitWebHistoryItem* webHistoryItem) { g_return_val_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList), FALSE); g_return_val_if_fail(WEBKIT_IS_WEB_HISTORY_ITEM(webHistoryItem), FALSE); WebCore::HistoryItem* historyItem = core(webHistoryItem); g_return_val_if_fail(historyItem != NULL, FALSE); WebCore::BackForwardList* backForwardList = core(webBackForwardList); return (backForwardList->enabled() ? backForwardList->containsItem(historyItem) : FALSE); }
/** * webkit_web_back_forward_list_get_back_list_with_limit: * @web_back_forward_list: a #WebKitWebBackForwardList * @limit: the number of items to retrieve * * Returns a list of items that precede the current item, limited by @limit * * Return value: a #GList of items preceding the current item, limited by @limit */ GList* webkit_web_back_forward_list_get_back_list_with_limit(WebKitWebBackForwardList* webBackForwardList, gint limit) { g_return_val_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList), NULL); WebCore::BackForwardList* backForwardList = core(webBackForwardList); if (!backForwardList || !backForwardList->enabled()) return NULL; WebCore::HistoryItemVector items; GList* backItems = { 0 }; backForwardList->backListWithLimit(limit, items); for (unsigned i = 0; i < items.size(); i++) { WebKitWebHistoryItem* webHistoryItem = webkit_web_history_item_new_with_core_item(items[i].get()); backItems = g_list_prepend(backItems, g_object_ref(webHistoryItem)); } return g_list_reverse(backItems); }
/*! Clears the history. \sa count(), items() */ void QWebHistory::clear() { //shortcut to private BackForwardList WebCore::BackForwardList* lst = d->lst; //clear visited links WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(lst)->page(); if (page && page->groupPtr()) page->groupPtr()->removeVisitedLinks(); //if count() == 0 then just return if (!lst->entries().size()) return; RefPtr<WebCore::HistoryItem> current = lst->currentItem(); int capacity = lst->capacity(); lst->setCapacity(0); lst->setCapacity(capacity); //revert capacity lst->addItem(current.get()); //insert old current item lst->goToItem(current.get()); //and set it as current again d->page()->updateNavigationActions(); }
static void WebHistoryClose(JNIEnv* env, jobject obj, jint frame) { LOG_ASSERT(frame, "Close needs a valid Frame pointer!"); WebCore::Frame* pFrame = (WebCore::Frame*)frame; WebCore::BackForwardList* list = pFrame->page()->backForwardList(); RefPtr<WebCore::HistoryItem> current = list->currentItem(); // Remove each item instead of using close(). close() is intended to be used // right before the list is deleted. WebCore::HistoryItemVector& entries = list->entries(); int size = entries.size(); for (int i = size - 1; i >= 0; --i) list->removeItem(entries[i].get()); // Add the current item back to the list. if (current) { current->setBridge(0); // addItem will update the children to match the newly created bridge list->addItem(current); /* * The Grand Prix site uses anchor navigations to change the display. * WebKit tries to be smart and not load child frames that have the * same history urls during an anchor navigation. This means that the * current history item stored in the child frame's loader does not * match the item found in the history tree. If we remove all the * entries in the back/foward list, we have to restore the entire tree * or else a HistoryItem might have a deleted parent. * * In order to restore the history tree correctly, we have to look up * all the frames first and then look up the history item. We do this * because the history item in the tree may be null at this point. * Unfortunately, a HistoryItem can only search its immediately * children so we do a breadth-first rebuild of the tree. */ // Keep a small list of child frames to traverse. WTF::Vector<WebCore::Frame*> frameQueue; // Fix the top-level item. pFrame->loader()->history()->setCurrentItem(current.get()); WebCore::Frame* child = pFrame->tree()->firstChild(); // Remember the parent history item so we can search for a child item. RefPtr<WebCore::HistoryItem> parent = current; while (child) { // Use the old history item since the current one may have a // deleted parent. WebCore::HistoryItem* item = parent->childItemWithTarget(child->tree()->name()); child->loader()->history()->setCurrentItem(item); // Append the first child to the queue if it exists. If there is no // item, then we do not need to traverse the children since there // will be no parent history item. WebCore::Frame* firstChild; if (item && (firstChild = child->tree()->firstChild())) frameQueue.append(firstChild); child = child->tree()->nextSibling(); // If we don't have a sibling for this frame and the queue isn't // empty, use the next entry in the queue. if (!child && !frameQueue.isEmpty()) { child = frameQueue.at(0); frameQueue.remove(0); // Figure out the parent history item used when searching for // the history item to use. parent = child->tree()->parent()->loader()->history()->currentItem(); } } } }