diff options
Diffstat (limited to 'Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp')
-rw-r--r-- | Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp | 100 |
1 files changed, 84 insertions, 16 deletions
diff --git a/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp b/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp index f08bb4694..7071910e4 100644 --- a/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp +++ b/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp @@ -24,15 +24,15 @@ #include <JavaScriptCore/JSRetainPtr.h> #include <WebCore/GUniquePtrGtk.h> +bool WebViewTest::shouldInitializeWebViewInConstructor = true; + WebViewTest::WebViewTest() - : m_webView(WEBKIT_WEB_VIEW(g_object_ref_sink(webkit_web_view_new()))) - , m_mainLoop(g_main_loop_new(0, TRUE)) - , m_parentWindow(0) - , m_javascriptResult(0) - , m_resourceDataSize(0) - , m_surface(0) + : m_userContentManager(adoptGRef(webkit_user_content_manager_new())) + , m_mainLoop(g_main_loop_new(nullptr, TRUE)) { - assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView)); + if (shouldInitializeWebViewInConstructor) + initializeWebView(); + assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_userContentManager.get())); } WebViewTest::~WebViewTest() @@ -47,10 +47,31 @@ WebViewTest::~WebViewTest() g_main_loop_unref(m_mainLoop); } +void WebViewTest::initializeWebView() +{ + g_assert(!m_webView); + m_webView = WEBKIT_WEB_VIEW(g_object_ref_sink(g_object_new(WEBKIT_TYPE_WEB_VIEW, "web-context", m_webContext.get(), "user-content-manager", m_userContentManager.get(), nullptr))); + assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView)); + + g_signal_connect(m_webView, "web-process-crashed", G_CALLBACK(WebViewTest::webProcessCrashed), this); +} + +gboolean WebViewTest::webProcessCrashed(WebKitWebView*, WebViewTest* test) +{ + if (test->m_expectedWebProcessCrash) { + test->m_expectedWebProcessCrash = false; + return FALSE; + } + g_assert_not_reached(); + return TRUE; +} + void WebViewTest::loadURI(const char* uri) { m_activeURI = uri; webkit_web_view_load_uri(m_webView, uri); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); } void WebViewTest::loadHtml(const char* html, const char* baseURI) @@ -60,29 +81,49 @@ void WebViewTest::loadHtml(const char* html, const char* baseURI) else m_activeURI = baseURI; webkit_web_view_load_html(m_webView, html, baseURI); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); } void WebViewTest::loadPlainText(const char* plainText) { m_activeURI = "about:blank"; webkit_web_view_load_plain_text(m_webView, plainText); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); +} + +void WebViewTest::loadBytes(GBytes* bytes, const char* mimeType, const char* encoding, const char* baseURI) +{ + if (!baseURI) + m_activeURI = "about:blank"; + else + m_activeURI = baseURI; + webkit_web_view_load_bytes(m_webView, bytes, mimeType, encoding, baseURI); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); } void WebViewTest::loadRequest(WebKitURIRequest* request) { m_activeURI = webkit_uri_request_get_uri(request); webkit_web_view_load_request(m_webView, request); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); } void WebViewTest::loadAlternateHTML(const char* html, const char* contentURI, const char* baseURI) { m_activeURI = contentURI; webkit_web_view_load_alternate_html(m_webView, html, contentURI, baseURI); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); } void WebViewTest::goBack() { - if (webkit_web_view_can_go_back(m_webView)) { + bool canGoBack = webkit_web_view_can_go_back(m_webView); + if (canGoBack) { WebKitBackForwardList* list = webkit_web_view_get_back_forward_list(m_webView); WebKitBackForwardListItem* item = webkit_back_forward_list_get_nth_item(list, -1); m_activeURI = webkit_back_forward_list_item_get_original_uri(item); @@ -90,11 +131,16 @@ void WebViewTest::goBack() // Call go_back even when can_go_back returns FALSE to check nothing happens. webkit_web_view_go_back(m_webView); + if (canGoBack) { + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); + } } void WebViewTest::goForward() { - if (webkit_web_view_can_go_forward(m_webView)) { + bool canGoForward = webkit_web_view_can_go_forward(m_webView); + if (canGoForward) { WebKitBackForwardList* list = webkit_web_view_get_back_forward_list(m_webView); WebKitBackForwardListItem* item = webkit_back_forward_list_get_nth_item(list, 1); m_activeURI = webkit_back_forward_list_item_get_original_uri(item); @@ -102,12 +148,18 @@ void WebViewTest::goForward() // Call go_forward even when can_go_forward returns FALSE to check nothing happens. webkit_web_view_go_forward(m_webView); + if (canGoForward) { + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); + } } void WebViewTest::goToBackForwardListItem(WebKitBackForwardListItem* item) { m_activeURI = webkit_back_forward_list_item_get_original_uri(item); webkit_web_view_go_to_back_forward_list_item(m_webView, item); + g_assert(webkit_web_view_is_loading(m_webView)); + g_assert_cmpstr(webkit_web_view_get_uri(m_webView), ==, m_activeURI.data()); } void WebViewTest::quitMainLoop() @@ -122,15 +174,12 @@ void WebViewTest::quitMainLoopAfterProcessingPendingEvents() quitMainLoop(); } -static gboolean quitMainLoopIdleCallback(WebViewTest* test) -{ - test->quitMainLoop(); - return FALSE; -} - void WebViewTest::wait(double seconds) { - g_timeout_add_seconds(seconds, reinterpret_cast<GSourceFunc>(quitMainLoopIdleCallback), this); + g_timeout_add(seconds * 1000, [](gpointer userData) -> gboolean { + static_cast<WebViewTest*>(userData)->quitMainLoop(); + return G_SOURCE_REMOVE; + }, this); g_main_loop_run(m_mainLoop); } @@ -217,6 +266,16 @@ void WebViewTest::selectAll() webkit_web_view_execute_editing_command(m_webView, "SelectAll"); } +bool WebViewTest::isEditable() +{ + return webkit_web_view_is_editable(m_webView); +} + +void WebViewTest::setEditable(bool editable) +{ + webkit_web_view_set_editable(m_webView, editable); +} + static void resourceGetDataCallback(GObject* object, GAsyncResult* result, gpointer userData) { size_t dataSize; @@ -274,6 +333,15 @@ void WebViewTest::clickMouseButton(int x, int y, unsigned button, unsigned mouse doMouseButtonEvent(GDK_BUTTON_RELEASE, x, y, button, mouseModifiers); } +void WebViewTest::emitPopupMenuSignal() +{ + GtkWidget* viewWidget = GTK_WIDGET(m_webView); + g_assert(gtk_widget_get_realized(viewWidget)); + + gboolean handled; + g_signal_emit_by_name(viewWidget, "popup-menu", &handled); +} + void WebViewTest::keyStroke(unsigned keyVal, unsigned keyModifiers) { g_assert(m_parentWindow); |