diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp')
-rw-r--r-- | Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp index 65c3d2d7c..fd2fbf5f2 100644 --- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp +++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestBackForwardList.cpp @@ -264,6 +264,140 @@ static void testBackForwardListLimitAndCache(BackForwardListTest* test, gconstpo g_assert_cmpuint(webkit_back_forward_list_get_length(test->m_list), ==, kBackForwardListLimit); } +static void testWebKitWebViewSessionState(BackForwardListTest* test, gconstpointer) +{ + WebKitWebViewSessionState* state = webkit_web_view_get_session_state(test->m_webView); + g_assert(state); + GRefPtr<WebKitWebView> view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + WebKitBackForwardList* bfList = webkit_web_view_get_back_forward_list(view.get()); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_restore_session_state(view.get(), state); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + GRefPtr<GBytes> data = adoptGRef(webkit_web_view_session_state_serialize(state)); + g_assert(data); + state = webkit_web_view_session_state_new(data.get()); + g_assert(state); + view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + bfList = webkit_web_view_get_back_forward_list(view.get()); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_restore_session_state(view.get(), state); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_session_state_unref(state); + + CString uriPage1 = kServer->getURIForPath("/Page1"); + test->m_changedFlags = BackForwardListTest::CurrentItem | BackForwardListTest::AddedItem; + test->loadURI(uriPage1.data()); + test->waitUntilLoadFinished(); + + CString uriPage2 = kServer->getURIForPath("/Page2"); + test->m_changedFlags = BackForwardListTest::CurrentItem | BackForwardListTest::AddedItem; + test->loadURI(uriPage2.data()); + test->waitUntilLoadFinished(); + + CString uriPage3 = kServer->getURIForPath("/Page3"); + test->m_changedFlags = BackForwardListTest::CurrentItem | BackForwardListTest::AddedItem; + test->loadURI(uriPage3.data()); + test->waitUntilLoadFinished(); + + test->m_changedFlags = BackForwardListTest::CurrentItem; + test->goBack(); + test->waitUntilLoadFinished(); + + state = webkit_web_view_get_session_state(test->m_webView); + g_assert(state); + + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_restore_session_state(view.get(), state); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 3); + + BackForwardListTest::checkItem(webkit_back_forward_list_get_nth_item(bfList, -1), "Page1", uriPage1.data(), uriPage1.data()); + BackForwardListTest::checkItem(webkit_back_forward_list_get_current_item(bfList), "Page2", uriPage2.data(), uriPage2.data()); + BackForwardListTest::checkItem(webkit_back_forward_list_get_nth_item(bfList, 1), "Page3", uriPage3.data(), uriPage3.data()); + + data = adoptGRef(webkit_web_view_session_state_serialize(state)); + g_assert(data); + webkit_web_view_session_state_unref(state); + state = webkit_web_view_session_state_new(data.get()); + g_assert(state); + + view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + bfList = webkit_web_view_get_back_forward_list(view.get()); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_restore_session_state(view.get(), state); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 3); + webkit_web_view_session_state_unref(state); + + BackForwardListTest::checkItem(webkit_back_forward_list_get_nth_item(bfList, -1), "Page1", uriPage1.data(), uriPage1.data()); + BackForwardListTest::checkItem(webkit_back_forward_list_get_current_item(bfList), "Page2", uriPage2.data(), uriPage2.data()); + BackForwardListTest::checkItem(webkit_back_forward_list_get_nth_item(bfList, 1), "Page3", uriPage3.data(), uriPage3.data()); + + static const char* invalidSessionData = "invalid session data"; + data = adoptGRef(g_bytes_new_static(invalidSessionData, strlen(invalidSessionData))); + g_assert(!webkit_web_view_session_state_new(data.get())); +} + +static void testWebKitWebViewSessionStateWithFormData(BackForwardListTest* test, gconstpointer) +{ + GUniquePtr<char> htmlPath(g_build_filename(Test::getResourcesDir(Test::WebKit2Resources).data(), "simple-form.html", nullptr)); + GUniquePtr<char> htmlURL(g_filename_to_uri(htmlPath.get(), nullptr, nullptr)); + test->m_changedFlags = BackForwardListTest::CurrentItem | BackForwardListTest::AddedItem; + test->loadURI(htmlURL.get()); + test->waitUntilLoadFinished(); + + webkit_web_view_run_javascript(test->m_webView, "submitForm();", nullptr, nullptr, nullptr); + test->waitUntilLoadFinished(); + + WebKitWebViewSessionState* state = webkit_web_view_get_session_state(test->m_webView); + g_assert(state); + GRefPtr<WebKitWebView> view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + WebKitBackForwardList* bfList = webkit_web_view_get_back_forward_list(view.get()); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_restore_session_state(view.get(), state); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 2); + GRefPtr<GBytes> data = adoptGRef(webkit_web_view_session_state_serialize(state)); + g_assert(data); + state = webkit_web_view_session_state_new(data.get()); + g_assert(state); + view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + bfList = webkit_web_view_get_back_forward_list(view.get()); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0); + webkit_web_view_restore_session_state(view.get(), state); + g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 2); + webkit_web_view_session_state_unref(state); +} + +static void viewLoadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, GMainLoop* mainLoop) +{ + if (loadEvent == WEBKIT_LOAD_FINISHED) + g_main_loop_quit(mainLoop); +} + +static void testWebKitWebViewNavigationAfterSessionRestore(BackForwardListTest* test, gconstpointer) +{ + // This test checks that a normal load after a session restore with a BackForard list having + // forward items doesn't produce any runtime critical warning. See https://bugs.webkit.org/show_bug.cgi?id=153233. + GRefPtr<WebKitWebView> view = WEBKIT_WEB_VIEW(webkit_web_view_new()); + g_signal_connect(view.get(), "load-changed", G_CALLBACK(viewLoadChanged), test->m_mainLoop); + + webkit_web_view_load_uri(view.get(), kServer->getURIForPath("/Page1").data()); + g_main_loop_run(test->m_mainLoop); + webkit_web_view_load_uri(view.get(), kServer->getURIForPath("/Page2").data()); + g_main_loop_run(test->m_mainLoop); + webkit_web_view_load_uri(view.get(), kServer->getURIForPath("/Page3").data()); + g_main_loop_run(test->m_mainLoop); + webkit_web_view_go_back(view.get()); + g_main_loop_run(test->m_mainLoop); + + WebKitWebViewSessionState* state = webkit_web_view_get_session_state(view.get()); + webkit_web_view_restore_session_state(test->m_webView, state); + webkit_web_view_session_state_unref(state); + + // A normal load after a session restore should remove the forward list, add the new item and update the current one. + test->m_changedFlags = BackForwardListTest::CurrentItem | BackForwardListTest::AddedItem | BackForwardListTest::RemovedItems; + test->loadURI(kServer->getURIForPath("/Page4").data()); + test->waitUntilLoadFinished(); +} + void beforeAll() { kServer = new WebKitTestServer(); @@ -271,6 +405,9 @@ void beforeAll() BackForwardListTest::add("BackForwardList", "navigation", testBackForwardListNavigation); BackForwardListTest::add("BackForwardList", "list-limit-and-cache", testBackForwardListLimitAndCache); + BackForwardListTest::add("WebKitWebView", "session-state", testWebKitWebViewSessionState); + BackForwardListTest::add("WebKitWebView", "session-state-with-form-data", testWebKitWebViewSessionStateWithFormData); + BackForwardListTest::add("WebKitWebView", "navigation-after-session-restore", testWebKitWebViewNavigationAfterSessionRestore); } void afterAll() |