static char* gtkWebBrowserGetItemHistoryAttrib(Ihandle* ih, int id) { WebKitWebBackForwardList *back_forward_list = webkit_web_view_get_back_forward_list ((WebKitWebView*)ih->handle); WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_nth_item(back_forward_list, id); char* str = iupStrGetMemory(1024); sprintf(str, "%s", webkit_web_history_item_get_uri(item)); return str; }
static char* gtkWebBrowserGetItemHistoryAttrib(Ihandle* ih, int id) { WebKitWebBackForwardList *back_forward_list = webkit_web_view_get_back_forward_list ((WebKitWebView*)ih->handle); WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_nth_item(back_forward_list, id); if (item) return iupStrReturnStr(webkit_web_history_item_get_uri(item)); else return NULL; }
bool BackForwardItem::invoke() const { WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame); if (m_howFar == 1) webkit_web_view_go_forward(webView); else if (m_howFar == -1) webkit_web_view_go_back(webView); else { WebKitWebBackForwardList* webBackForwardList = webkit_web_view_get_back_forward_list(webView); WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_nth_item(webBackForwardList, m_howFar); webkit_web_view_go_to_back_forward_item(webView, item); } return true; }
/* session_save(const char *) {{{*/ gboolean session_save(const char *name, int flags) { if (!name) { if (s_session_name) name = s_session_name; else if (flags & SESSION_FORCE) name = "default"; } if (!s_has_marked && (flags & SESSION_FORCE) == 0) return false; GString *buffer = g_string_new(NULL); for (GList *l = g_list_first(dwb.state.views); l; l=l->next) { WebKitWebView *web = WEBVIEW(l); WebKitWebBackForwardList *bf_list = webkit_web_view_get_back_forward_list(web); if (VIEW(l)->status->deferred) { g_string_append_printf(buffer, "0|%d %s unknown\n", VIEW(l)->status->lockprotect, VIEW(l)->status->deferred_uri); continue; } for (int i= -webkit_web_back_forward_list_get_back_length(bf_list); i<=webkit_web_back_forward_list_get_forward_length(bf_list); i++) { WebKitWebHistoryItem *item = webkit_web_back_forward_list_get_nth_item(bf_list, i); if (item) { g_string_append_printf(buffer, "%d", i); if (i == 0) g_string_append_printf(buffer, "|%d", VIEW(l)->status->lockprotect); g_string_append_printf(buffer, " %s %s\n", webkit_web_history_item_get_uri(item), webkit_web_history_item_get_title(item)); } } } session_save_file(name, buffer->str, (flags & SESSION_SYNC) != 0); if (! (flags & SESSION_SYNC)) g_free(s_session_name); g_string_free(buffer, true); return true; }/*}}}*/
/* session_load_webview(WebKitWebView *, char *, int *){{{*/ static void session_load_webview(GList *gl, char *uri, int last, int lock_status) \ { if (last > 0) webkit_web_view_go_back_or_forward(WEBVIEW(gl), -last); else { WebKitWebBackForwardList *bf_list = webkit_web_view_get_back_forward_list(WEBVIEW(gl)); webkit_web_view_go_to_back_forward_item(WEBVIEW(gl), webkit_web_back_forward_list_get_nth_item(bf_list, 0)); } if (lock_status > 0) { SessionTab *tab = dwb_malloc(sizeof(SessionTab)); tab->gl = gl; tab->lock = lock_status; g_signal_connect(WEBVIEW(gl), "notify::load-status", G_CALLBACK(session_load_status_callback), tab); } }/*}}}*/
static gint luaH_webview_push_history(lua_State *L, WebKitWebView *view) { /* obtain the history list of the tab and get information about it */ WebKitWebBackForwardList *bflist = webkit_web_back_forward_list_new_with_web_view(view); WebKitWebHistoryItem *item; gint backlen = webkit_web_back_forward_list_get_back_length(bflist); gint forwardlen = webkit_web_back_forward_list_get_forward_length(bflist); /* compose an overall table with the history list and the position thereof */ lua_createtable(L, 0, 2); /* Set hist[index] = pos */ lua_pushliteral(L, "index"); lua_pushnumber(L, backlen + 1); lua_rawset(L, -3); /* create a table with the history items */ lua_createtable(L, backlen + forwardlen + 1, 0); for(gint i = -backlen; i <= forwardlen; i++) { /* each individual history item is composed of a URL and a page title */ item = webkit_web_back_forward_list_get_nth_item(bflist, i); lua_createtable(L, 0, 2); /* Set hist_item[uri] = uri */ lua_pushliteral(L, "uri"); lua_pushstring(L, item ? webkit_web_history_item_get_uri(item) : "about:blank"); lua_rawset(L, -3); /* Set hist_item[title] = title */ lua_pushliteral(L, "title"); lua_pushstring(L, item ? webkit_web_history_item_get_title(item) : ""); lua_rawset(L, -3); lua_rawseti(L, -2, backlen + i + 1); } /* Set hist[items] = hist_items_table */ lua_pushliteral(L, "items"); lua_insert(L, lua_gettop(L) - 1); lua_rawset(L, -3); return 1; }
static void test_webkit_web_history_item_lifetime(void) { WebKitWebView* webView; WebKitWebBackForwardList* backForwardList; WebKitWebHistoryItem* currentItem; WebKitWebHistoryItem* forwardItem; WebKitWebHistoryItem* backItem; WebKitWebHistoryItem* nthItem; WebKitWebHistoryItem* item1; WebKitWebHistoryItem* item2; WebKitWebHistoryItem* item3; WebKitWebHistoryItem* item4; GList* backList = NULL; GList* forwardList = NULL; g_test_bug("19898"); webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); g_object_ref_sink(webView); backForwardList = webkit_web_view_get_back_forward_list(webView); g_assert_cmpint(G_OBJECT(backForwardList)->ref_count, ==, 1); /* add test items */ item1 = webkit_web_history_item_new_with_data("http://example.com/1/", "Site 1"); webkit_web_back_forward_list_add_item(backForwardList, item1); item2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Site 2"); webkit_web_back_forward_list_add_item(backForwardList, item2); item3 = webkit_web_history_item_new_with_data("http://example.com/3/", "Site 3"); webkit_web_back_forward_list_add_item(backForwardList, item3); item4 = webkit_web_history_item_new_with_data("http://example.com/4/", "Site 4"); webkit_web_back_forward_list_add_item(backForwardList, item4); /* make sure these functions don't add unnecessary ref to the history item */ backItem = webkit_web_back_forward_list_get_back_item(backForwardList); g_object_ref(backItem); g_assert_cmpint(G_OBJECT(backItem)->ref_count, ==, 2); g_object_unref(backItem); g_assert_cmpint(G_OBJECT(backItem)->ref_count, ==, 1); currentItem = webkit_web_back_forward_list_get_current_item(backForwardList); g_object_ref(currentItem); g_assert_cmpint(G_OBJECT(currentItem)->ref_count, ==, 2); g_object_unref(currentItem); g_assert_cmpint(G_OBJECT(currentItem)->ref_count, ==, 1); webkit_web_back_forward_list_go_to_item(backForwardList, item2); forwardItem = webkit_web_back_forward_list_get_forward_item(backForwardList); g_object_ref(forwardItem); g_assert_cmpint(G_OBJECT(forwardItem)->ref_count, ==, 2); g_object_unref(forwardItem); g_assert_cmpint(G_OBJECT(forwardItem)->ref_count, ==, 1); nthItem = webkit_web_back_forward_list_get_nth_item(backForwardList, 1); g_object_ref(nthItem); g_assert_cmpint(G_OBJECT(nthItem)->ref_count, ==, 2); g_object_unref(nthItem); g_assert_cmpint(G_OBJECT(nthItem)->ref_count, ==, 1); backList = webkit_web_back_forward_list_get_back_list_with_limit(backForwardList, 5); for (; backList; backList = backList->next) g_assert_cmpint(G_OBJECT(backList->data)->ref_count, ==, 1); forwardList = webkit_web_back_forward_list_get_forward_list_with_limit(backForwardList, 5); for (; forwardList; forwardList = forwardList->next) g_assert_cmpint(G_OBJECT(forwardList->data)->ref_count, ==, 1); g_list_free(forwardList); g_list_free(backList); g_assert_cmpint(G_OBJECT(item1)->ref_count, ==, 1); g_assert_cmpint(G_OBJECT(item2)->ref_count, ==, 1); g_assert_cmpint(G_OBJECT(item3)->ref_count, ==, 1); g_assert_cmpint(G_OBJECT(item4)->ref_count, ==, 1); g_assert_cmpint(G_OBJECT(backForwardList)->ref_count, ==, 1); g_object_unref(webView); }