1/* 2 * Copyright (C) 2008 Holger Hans Peter Freyther 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20#include "autotoolsconfig.h" 21#include <glib.h> 22#include <gtk/gtk.h> 23#include <webkit/webkit.h> 24 25static void test_webkit_web_history_item_lifetime(void) 26{ 27 WebKitWebView* webView; 28 WebKitWebBackForwardList* backForwardList; 29 WebKitWebHistoryItem* currentItem; 30 WebKitWebHistoryItem* forwardItem; 31 WebKitWebHistoryItem* backItem; 32 WebKitWebHistoryItem* nthItem; 33 WebKitWebHistoryItem* item1; 34 WebKitWebHistoryItem* item2; 35 WebKitWebHistoryItem* item3; 36 WebKitWebHistoryItem* item4; 37 GList* backList = NULL; 38 GList* forwardList = NULL; 39 g_test_bug("19898"); 40 41 webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); 42 g_object_ref_sink(webView); 43 backForwardList = webkit_web_view_get_back_forward_list(webView); 44 g_assert_cmpint(G_OBJECT(backForwardList)->ref_count, ==, 1); 45 46 /* add test items */ 47 item1 = webkit_web_history_item_new_with_data("http://example.com/1/", "Site 1"); 48 webkit_web_back_forward_list_add_item(backForwardList, item1); 49 g_object_unref(item1); 50 51 item2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Site 2"); 52 webkit_web_back_forward_list_add_item(backForwardList, item2); 53 g_object_unref(item2); 54 55 item3 = webkit_web_history_item_new_with_data("http://example.com/3/", "Site 3"); 56 webkit_web_back_forward_list_add_item(backForwardList, item3); 57 g_object_unref(item3); 58 59 item4 = webkit_web_history_item_new_with_data("http://example.com/4/", "Site 4"); 60 webkit_web_back_forward_list_add_item(backForwardList, item4); 61 g_object_unref(item4); 62 63 /* make sure these functions don't add unnecessary ref to the history item */ 64 backItem = webkit_web_back_forward_list_get_back_item(backForwardList); 65 g_object_ref(backItem); 66 g_assert_cmpint(G_OBJECT(backItem)->ref_count, ==, 2); 67 g_object_unref(backItem); 68 g_assert_cmpint(G_OBJECT(backItem)->ref_count, ==, 1); 69 70 currentItem = webkit_web_back_forward_list_get_current_item(backForwardList); 71 g_object_ref(currentItem); 72 g_assert_cmpint(G_OBJECT(currentItem)->ref_count, ==, 2); 73 g_object_unref(currentItem); 74 g_assert_cmpint(G_OBJECT(currentItem)->ref_count, ==, 1); 75 76 webkit_web_back_forward_list_go_to_item(backForwardList, item2); 77 forwardItem = webkit_web_back_forward_list_get_forward_item(backForwardList); 78 g_object_ref(forwardItem); 79 g_assert_cmpint(G_OBJECT(forwardItem)->ref_count, ==, 2); 80 g_object_unref(forwardItem); 81 g_assert_cmpint(G_OBJECT(forwardItem)->ref_count, ==, 1); 82 83 nthItem = webkit_web_back_forward_list_get_nth_item(backForwardList, 1); 84 g_object_ref(nthItem); 85 g_assert_cmpint(G_OBJECT(nthItem)->ref_count, ==, 2); 86 g_object_unref(nthItem); 87 g_assert_cmpint(G_OBJECT(nthItem)->ref_count, ==, 1); 88 89 backList = webkit_web_back_forward_list_get_back_list_with_limit(backForwardList, 5); 90 for (; backList; backList = backList->next) 91 g_assert_cmpint(G_OBJECT(backList->data)->ref_count, ==, 1); 92 93 forwardList = webkit_web_back_forward_list_get_forward_list_with_limit(backForwardList, 5); 94 for (; forwardList; forwardList = forwardList->next) 95 g_assert_cmpint(G_OBJECT(forwardList->data)->ref_count, ==, 1); 96 97 g_list_free(forwardList); 98 g_list_free(backList); 99 g_assert_cmpint(G_OBJECT(item1)->ref_count, ==, 1); 100 g_assert_cmpint(G_OBJECT(item2)->ref_count, ==, 1); 101 g_assert_cmpint(G_OBJECT(item3)->ref_count, ==, 1); 102 g_assert_cmpint(G_OBJECT(item4)->ref_count, ==, 1); 103 g_assert_cmpint(G_OBJECT(backForwardList)->ref_count, ==, 1); 104 g_object_unref(webView); 105} 106 107static void test_webkit_web_back_forward_list_order(void) 108{ 109 WebKitWebView* webView; 110 WebKitWebBackForwardList* webBackForwardList; 111 WebKitWebHistoryItem* item1; 112 WebKitWebHistoryItem* item2; 113 WebKitWebHistoryItem* item3; 114 WebKitWebHistoryItem* item4; 115 WebKitWebHistoryItem* currentItem; 116 GList* backList = NULL; 117 GList* forwardList = NULL; 118 g_test_bug("22694"); 119 120 webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); 121 g_object_ref_sink(webView); 122 123 webkit_web_view_set_maintains_back_forward_list(webView, TRUE); 124 webBackForwardList = webkit_web_view_get_back_forward_list(webView); 125 g_assert(webBackForwardList); 126 127 // Check that there is no item. 128 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList)); 129 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 130 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 131 g_assert(!webkit_web_view_can_go_forward(webView)); 132 g_assert(!webkit_web_view_can_go_back(webView)); 133 134 // Add a new items 135 item1 = webkit_web_history_item_new_with_data("http://example.com/1/", "Site 1"); 136 webkit_web_back_forward_list_add_item(webBackForwardList, item1); 137 g_object_unref(item1); 138 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item1)); 139 140 item2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Site 2"); 141 webkit_web_back_forward_list_add_item(webBackForwardList, item2); 142 g_object_unref(item2); 143 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item2)); 144 145 item3 = webkit_web_history_item_new_with_data("http://example.com/3/", "Site 3"); 146 webkit_web_back_forward_list_add_item(webBackForwardList, item3); 147 g_object_unref(item3); 148 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item3)); 149 150 item4 = webkit_web_history_item_new_with_data("http://example.com/4/", "Site 4"); 151 webkit_web_back_forward_list_add_item(webBackForwardList, item4); 152 g_object_unref(item4); 153 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, item4)); 154 155 // check the back list order 156 backList = webkit_web_back_forward_list_get_back_list_with_limit(webBackForwardList, 5); 157 g_assert(backList); 158 159 currentItem = WEBKIT_WEB_HISTORY_ITEM(backList->data); 160 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/3/"); 161 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 3"); 162 backList = backList->next; 163 164 currentItem = WEBKIT_WEB_HISTORY_ITEM(backList->data); 165 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/2/"); 166 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 2"); 167 backList = backList->next; 168 169 currentItem = WEBKIT_WEB_HISTORY_ITEM(backList->data); 170 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/1/"); 171 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 1"); 172 g_list_free(backList); 173 174 // check the forward list order 175 g_assert(webkit_web_view_go_to_back_forward_item(webView, item1)); 176 forwardList = webkit_web_back_forward_list_get_forward_list_with_limit(webBackForwardList,5); 177 g_assert(forwardList); 178 179 currentItem = WEBKIT_WEB_HISTORY_ITEM(forwardList->data); 180 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/4/"); 181 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 4"); 182 forwardList = forwardList->next; 183 184 currentItem = WEBKIT_WEB_HISTORY_ITEM(forwardList->data); 185 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/3/"); 186 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 3"); 187 forwardList = forwardList->next; 188 189 currentItem = WEBKIT_WEB_HISTORY_ITEM(forwardList->data); 190 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/2/"); 191 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Site 2"); 192 193 g_list_free(forwardList); 194 g_object_unref(webView); 195} 196 197static void test_webkit_web_back_forward_list_add_item(void) 198{ 199 WebKitWebView* webView; 200 WebKitWebBackForwardList* webBackForwardList; 201 WebKitWebHistoryItem* addItem1; 202 WebKitWebHistoryItem* addItem2; 203 WebKitWebHistoryItem* backItem; 204 WebKitWebHistoryItem* currentItem; 205 g_test_bug("22988"); 206 207 webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); 208 g_object_ref_sink(webView); 209 210 webkit_web_view_set_maintains_back_forward_list(webView, TRUE); 211 webBackForwardList = webkit_web_view_get_back_forward_list(webView); 212 g_assert(webBackForwardList); 213 214 // Check that there is no item. 215 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList)); 216 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 217 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 218 g_assert(!webkit_web_view_can_go_forward(webView)); 219 g_assert(!webkit_web_view_can_go_back(webView)); 220 221 // Add a new item 222 addItem1 = webkit_web_history_item_new_with_data("http://example.com/", "Added site"); 223 webkit_web_back_forward_list_add_item(webBackForwardList, addItem1); 224 g_object_unref(addItem1); 225 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, addItem1)); 226 227 // Check that the added item is the current item. 228 currentItem = webkit_web_back_forward_list_get_current_item(webBackForwardList); 229 g_assert(currentItem); 230 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 231 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 232 g_assert(!webkit_web_view_can_go_forward(webView)); 233 g_assert(!webkit_web_view_can_go_back(webView)); 234 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/"); 235 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Added site"); 236 237 // Add another item. 238 addItem2 = webkit_web_history_item_new_with_data("http://example.com/2/", "Added site 2"); 239 webkit_web_back_forward_list_add_item(webBackForwardList, addItem2); 240 g_object_unref(addItem2); 241 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, addItem2)); 242 243 // Check that the added item is new current item. 244 currentItem = webkit_web_back_forward_list_get_current_item(webBackForwardList); 245 g_assert(currentItem); 246 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 247 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 1); 248 g_assert(!webkit_web_view_can_go_forward(webView)); 249 g_assert(webkit_web_view_can_go_back(webView)); 250 g_assert_cmpstr(webkit_web_history_item_get_uri(currentItem), ==, "http://example.com/2/"); 251 g_assert_cmpstr(webkit_web_history_item_get_title(currentItem), ==, "Added site 2"); 252 253 backItem = webkit_web_back_forward_list_get_back_item(webBackForwardList); 254 g_assert(backItem); 255 g_assert_cmpstr(webkit_web_history_item_get_uri(backItem), ==, "http://example.com/"); 256 g_assert_cmpstr(webkit_web_history_item_get_title(backItem), ==, "Added site"); 257 258 // Go to the first added item. 259 g_assert(webkit_web_view_go_to_back_forward_item(webView, addItem1)); 260 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 1); 261 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 262 g_assert(webkit_web_view_can_go_forward(webView)); 263 g_assert(!webkit_web_view_can_go_back(webView)); 264 265 g_object_unref(webView); 266} 267 268static void test_webkit_web_back_forward_list_clear(void) 269{ 270 WebKitWebView* webView; 271 WebKitWebBackForwardList* webBackForwardList; 272 WebKitWebHistoryItem* addItem; 273 g_test_bug("36173"); 274 275 webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); 276 g_object_ref_sink(webView); 277 278 webBackForwardList = webkit_web_view_get_back_forward_list(webView); 279 g_assert(webBackForwardList); 280 281 // Check that there is no item. 282 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 283 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 284 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList)); 285 g_assert(!webkit_web_view_can_go_forward(webView)); 286 g_assert(!webkit_web_view_can_go_back(webView)); 287 288 // Check that clearing the empty list does not modify counters 289 webkit_web_back_forward_list_clear(webBackForwardList); 290 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 291 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 292 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList)); 293 g_assert(!webkit_web_view_can_go_forward(webView)); 294 g_assert(!webkit_web_view_can_go_back(webView)); 295 296 // Add a new item 297 addItem = webkit_web_history_item_new_with_data("http://example.com/", "Added site"); 298 webkit_web_back_forward_list_add_item(webBackForwardList, addItem); 299 g_object_unref(addItem); 300 g_assert(webkit_web_back_forward_list_contains_item(webBackForwardList, addItem)); 301 302 // Check that after clearing the list the added item is no longer in the list 303 webkit_web_back_forward_list_clear(webBackForwardList); 304 g_assert(!webkit_web_back_forward_list_contains_item(webBackForwardList, addItem)); 305 306 // Check that after clearing it, the list is empty 307 g_assert_cmpint(webkit_web_back_forward_list_get_forward_length(webBackForwardList), ==, 0); 308 g_assert_cmpint(webkit_web_back_forward_list_get_back_length(webBackForwardList), ==, 0); 309 g_assert(!webkit_web_back_forward_list_get_current_item(webBackForwardList)); 310 g_assert(!webkit_web_view_can_go_forward(webView)); 311 g_assert(!webkit_web_view_can_go_back(webView)); 312 313 g_object_unref(webView); 314} 315 316int main(int argc, char** argv) 317{ 318 gtk_test_init(&argc, &argv, NULL); 319 320 g_test_bug_base("https://bugs.webkit.org/"); 321 g_test_add_func("/webkit/webbackforwardlist/add_item", test_webkit_web_back_forward_list_add_item); 322 g_test_add_func("/webkit/webbackforwardlist/list_order", test_webkit_web_back_forward_list_order); 323 g_test_add_func("/webkit/webhistoryitem/lifetime", test_webkit_web_history_item_lifetime); 324 g_test_add_func("/webkit/webbackforwardlist/clear", test_webkit_web_back_forward_list_clear); 325 return g_test_run (); 326} 327