diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-25 15:09:11 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-25 15:09:11 +0200 |
commit | a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (patch) | |
tree | b7abd9f49ae1d4d2e426a5883bfccd42b8e2ee12 /Source/WebKit2/UIProcess/API/gtk/tests | |
parent | 8d473cf9743f1d30a16a27114e93bd5af5648d23 (diff) | |
download | qtwebkit-a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd.tar.gz |
Imported WebKit commit eb5c1b8fe4d4b1b90b5137433fc58a91da0e6878 (http://svn.webkit.org/repository/webkit/trunk@118516)
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/tests')
9 files changed, 392 insertions, 9 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am b/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am index 870d68a5b..8fa0cd8d8 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am +++ b/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am @@ -4,6 +4,7 @@ TEST_PROGS += \ Programs/WebKit2APITests/TestBackForwardList \ Programs/WebKit2APITests/TestCookieManager \ Programs/WebKit2APITests/TestDownloads \ + Programs/WebKit2APITests/TestInspector \ Programs/WebKit2APITests/TestLoaderClient \ Programs/WebKit2APITests/TestPrinting \ Programs/WebKit2APITests/TestResources \ @@ -151,4 +152,12 @@ Programs_WebKit2APITests_TestCookieManager_CPPFLAGS = $(webkit2_tests_cppflags) Programs_WebKit2APITests_TestCookieManager_LDADD = $(webkit2_tests_ldadd) Programs_WebKit2APITests_TestCookieManager_LDFLAGS = $(webkit2_tests_ldflags) +Programs_WebKit2APITests_TestInspector_SOURCES = \ + Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp +Programs_WebKit2APITests_TestInspector_CPPFLAGS = \ + -DWEBKIT_INSPECTOR_PATH=\"${shell pwd}/${top_builddir}/resources/inspector\" \ + $(webkit2_tests_cppflags) +Programs_WebKit2APITests_TestInspector_LDADD = $(webkit2_tests_ldadd) +Programs_WebKit2APITests_TestInspector_LDFLAGS = $(webkit2_tests_ldflags) + endif # ENABLE_WEBKIT2 diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp index 6d2ecf528..1ddfd82bf 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestCookieManager.cpp @@ -74,7 +74,7 @@ public: WebKitCookieAcceptPolicy getAcceptPolicy() { m_acceptPolicy = WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY; - webkit_cookie_manager_get_accept_policy(m_cookieManager, getAcceptPolicyReadyCallback, this); + webkit_cookie_manager_get_accept_policy(m_cookieManager, 0, getAcceptPolicyReadyCallback, this); g_main_loop_run(m_mainLoop); return m_acceptPolicy; @@ -100,7 +100,7 @@ public: { g_strfreev(m_domains); m_domains = 0; - webkit_cookie_manager_get_domains_with_cookies(m_cookieManager, getDomainsReadyCallback, this); + webkit_cookie_manager_get_domains_with_cookies(m_cookieManager, 0, getDomainsReadyCallback, this); g_main_loop_run(m_mainLoop); return m_domains; diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp new file mode 100644 index 000000000..9b023f3ed --- /dev/null +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp @@ -0,0 +1,357 @@ +/* + * Copyright (C) 2012 Igalia S.L. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" + +#include "WebViewTest.h" +#include <wtf/gobject/GRefPtr.h> + +static const unsigned gMinimumAttachedInspectorHeight = 250; + +class InspectorTest: public WebViewTest { +public: + MAKE_GLIB_TEST_FIXTURE(InspectorTest); + + enum InspectorEvents { + OpenWindow, + BringToFront, + Closed, + Attach, + Detach + }; + + static gboolean openWindowCallback(WebKitWebInspector*, InspectorTest* test) + { + return test->openWindow(); + } + + static gboolean bringToFrontCallback(WebKitWebInspector*, InspectorTest* test) + { + return test->bringToFront(); + } + + static void closedCallback(WebKitWebInspector*, InspectorTest* test) + { + return test->closed(); + } + + static gboolean attachCallback(WebKitWebInspector*, InspectorTest* test) + { + return test->attach(); + } + + static gboolean detachCallback(WebKitWebInspector*, InspectorTest* test) + { + return test->detach(); + } + + static const unsigned gMinimumAttachedInspectorHeight = 250; + + InspectorTest() + : WebViewTest() + , m_inspector(webkit_web_view_get_inspector(m_webView)) + , m_quitOnBringToFront(false) + { + webkit_settings_set_enable_developer_extras(webkit_web_view_get_settings(m_webView), TRUE); + assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_inspector)); + g_signal_connect(m_inspector, "open-window", G_CALLBACK(openWindowCallback), this); + g_signal_connect(m_inspector, "bring-to-front", G_CALLBACK(bringToFrontCallback), this); + g_signal_connect(m_inspector, "closed", G_CALLBACK(closedCallback), this); + g_signal_connect(m_inspector, "attach", G_CALLBACK(attachCallback), this); + g_signal_connect(m_inspector, "detach", G_CALLBACK(detachCallback), this); + } + + ~InspectorTest() + { + g_signal_handlers_disconnect_matched(m_inspector, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); + } + + virtual bool openWindow() + { + m_events.append(OpenWindow); + g_main_loop_quit(m_mainLoop); + return TRUE; + } + + virtual bool bringToFront() + { + m_events.append(BringToFront); + if (m_quitOnBringToFront) + g_main_loop_quit(m_mainLoop); + return FALSE; + } + + virtual void closed() + { + m_events.append(Closed); + g_main_loop_quit(m_mainLoop); + } + + virtual bool attach() + { + m_events.append(Attach); + return TRUE; + } + + virtual bool detach() + { + m_events.append(Detach); + return TRUE; + } + + void showAndWaitUntilFinished(bool quitOnBringToFront) + { + m_quitOnBringToFront = quitOnBringToFront; + webkit_web_inspector_show(m_inspector); + g_main_loop_run(m_mainLoop); + m_quitOnBringToFront = false; + } + + void resizeViewAndAttach() + { + // Resize the view to make room for the inspector. + resizeView(300, (gMinimumAttachedInspectorHeight + 1) * 4 / 3); + webkit_web_inspector_attach(m_inspector); + } + + static gboolean detachIdle(InspectorTest* test) + { + webkit_web_inspector_detach(test->m_inspector); + return FALSE; + } + + void detachAndWaitUntilWindowOpened() + { + g_idle_add(reinterpret_cast<GSourceFunc>(detachIdle), this); + g_main_loop_run(m_mainLoop); + } + + void closeAndWaitUntilClosed() + { + webkit_web_inspector_close(m_inspector); + g_main_loop_run(m_mainLoop); + } + + WebKitWebInspector* m_inspector; + bool m_quitOnBringToFront; + Vector<InspectorEvents> m_events; +}; + +static void testInspectorDefault(InspectorTest* test, gconstpointer) +{ + test->showInWindowAndWaitUntilMapped(GTK_WINDOW_TOPLEVEL); + test->resizeView(200, 200); + test->loadHtml("<html><body><p>WebKitGTK+ Inspector test</p></body></html>", 0); + test->waitUntilLoadFinished(); + + test->showAndWaitUntilFinished(false); + // We don't add the view to a container, so consume the weak ref with GRefPtr. + GRefPtr<WebKitWebViewBase> inspectorView = webkit_web_inspector_get_web_view(test->m_inspector); + g_assert(inspectorView.get()); + test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(inspectorView.get())); + g_assert(!webkit_web_inspector_is_attached(test->m_inspector)); + g_assert_cmpuint(webkit_web_inspector_get_attached_height(test->m_inspector), ==, 0); + Vector<InspectorTest::InspectorEvents>& events = test->m_events; + g_assert_cmpint(events.size(), ==, 2); + g_assert_cmpint(events[0], ==, InspectorTest::BringToFront); + g_assert_cmpint(events[1], ==, InspectorTest::OpenWindow); + test->m_events.clear(); + + test->showAndWaitUntilFinished(true); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 1); + g_assert_cmpint(events[0], ==, InspectorTest::BringToFront); + test->m_events.clear(); + + test->resizeViewAndAttach(); + g_assert(webkit_web_inspector_is_attached(test->m_inspector)); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 1); + g_assert_cmpint(events[0], ==, InspectorTest::Attach); + test->m_events.clear(); + + test->detachAndWaitUntilWindowOpened(); + g_assert(!webkit_web_inspector_is_attached(test->m_inspector)); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 2); + g_assert_cmpint(events[0], ==, InspectorTest::Detach); + g_assert_cmpint(events[1], ==, InspectorTest::OpenWindow); + test->m_events.clear(); + + test->closeAndWaitUntilClosed(); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 1); + g_assert_cmpint(events[0], ==, InspectorTest::Closed); + test->m_events.clear(); +} + +class CustomInspectorTest: public InspectorTest { +public: + MAKE_GLIB_TEST_FIXTURE(CustomInspectorTest); + + CustomInspectorTest() + : InspectorTest() + , m_inspectorWindow(0) + { + } + + ~CustomInspectorTest() + { + if (m_inspectorWindow) + gtk_widget_destroy(m_inspectorWindow); + } + + bool openWindow() + { + g_assert(!m_inspectorWindow); + m_inspectorWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); + WebKitWebViewBase* inspectorView = webkit_web_inspector_get_web_view(m_inspector); + g_assert(inspectorView); + gtk_container_add(GTK_CONTAINER(m_inspectorWindow), GTK_WIDGET(inspectorView)); + gtk_widget_show_all(m_inspectorWindow); + + return InspectorTest::openWindow(); + } + + void closed() + { + if (m_inspectorWindow) { + gtk_widget_destroy(m_inspectorWindow); + m_inspectorWindow = 0; + } + + return InspectorTest::closed(); + } + + bool attach() + { + GRefPtr<WebKitWebViewBase> inspectorView = webkit_web_inspector_get_web_view(m_inspector); + if (m_inspectorWindow) { + gtk_container_remove(GTK_CONTAINER(m_inspectorWindow), GTK_WIDGET(inspectorView.get())); + gtk_widget_destroy(m_inspectorWindow); + m_inspectorWindow = 0; + } + + GtkWidget* pane; + if (gtk_bin_get_child(GTK_BIN(m_parentWindow)) == GTK_WIDGET(m_webView)) { + GRefPtr<WebKitWebView> inspectedView = m_webView; + gtk_container_remove(GTK_CONTAINER(m_parentWindow), GTK_WIDGET(m_webView)); + pane = gtk_paned_new(GTK_ORIENTATION_VERTICAL); + gtk_paned_add1(GTK_PANED(pane), GTK_WIDGET(m_webView)); + gtk_container_add(GTK_CONTAINER(m_parentWindow), pane); + gtk_widget_show_all(pane); + } else + pane = gtk_bin_get_child(GTK_BIN(m_parentWindow)); + gtk_paned_add2(GTK_PANED(pane), GTK_WIDGET(inspectorView.get())); + + return InspectorTest::attach(); + } + + bool detach() + { + GRefPtr<WebKitWebViewBase> inspectorView = webkit_web_inspector_get_web_view(m_inspector); + GtkWidget* pane = gtk_bin_get_child(GTK_BIN(m_parentWindow)); + g_assert(GTK_IS_PANED(pane)); + gtk_container_remove(GTK_CONTAINER(pane), GTK_WIDGET(inspectorView.get())); + return InspectorTest::detach(); + } + + void destroyWindowAndWaitUntilClosed() + { + g_assert(m_inspectorWindow); + gtk_widget_destroy(m_inspectorWindow); + m_inspectorWindow = 0; + g_main_loop_run(m_mainLoop); + } + + GtkWidget* m_inspectorWindow; +}; + +static void testInspectorManualAttachDetach(CustomInspectorTest* test, gconstpointer) +{ + test->showInWindowAndWaitUntilMapped(GTK_WINDOW_TOPLEVEL); + test->resizeView(200, 200); + test->loadHtml("<html><body><p>WebKitGTK+ Inspector test</p></body></html>", 0); + test->waitUntilLoadFinished(); + + test->showAndWaitUntilFinished(false); + test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webkit_web_inspector_get_web_view(test->m_inspector))); + g_assert(!webkit_web_inspector_is_attached(test->m_inspector)); + Vector<InspectorTest::InspectorEvents>& events = test->m_events; + g_assert_cmpint(events.size(), ==, 2); + g_assert_cmpint(events[0], ==, InspectorTest::BringToFront); + g_assert_cmpint(events[1], ==, InspectorTest::OpenWindow); + test->m_events.clear(); + + test->resizeViewAndAttach(); + g_assert(webkit_web_inspector_is_attached(test->m_inspector)); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 1); + g_assert_cmpint(events[0], ==, InspectorTest::Attach); + test->m_events.clear(); + + test->detachAndWaitUntilWindowOpened(); + g_assert(!webkit_web_inspector_is_attached(test->m_inspector)); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 2); + g_assert_cmpint(events[0], ==, InspectorTest::Detach); + g_assert_cmpint(events[1], ==, InspectorTest::OpenWindow); + test->m_events.clear(); + + test->resizeViewAndAttach(); + g_assert(webkit_web_inspector_is_attached(test->m_inspector)); + test->m_events.clear(); + test->closeAndWaitUntilClosed(); + events = test->m_events; + g_assert_cmpint(events.size(), ==, 2); + g_assert_cmpint(events[0], ==, InspectorTest::Detach); + g_assert_cmpint(events[1], ==, InspectorTest::Closed); + test->m_events.clear(); +} + +static void testInspectorCustomContainerDestroyed(CustomInspectorTest* test, gconstpointer) +{ + test->showInWindowAndWaitUntilMapped(GTK_WINDOW_TOPLEVEL); + test->resizeView(200, 200); + test->loadHtml("<html><body><p>WebKitGTK+ Inspector test</p></body></html>", 0); + test->waitUntilLoadFinished(); + + test->showAndWaitUntilFinished(false); + test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webkit_web_inspector_get_web_view(test->m_inspector))); + g_assert(!webkit_web_inspector_is_attached(test->m_inspector)); + + test->m_events.clear(); + test->destroyWindowAndWaitUntilClosed(); + Vector<InspectorTest::InspectorEvents>& events = test->m_events; + g_assert_cmpint(events.size(), ==, 1); + g_assert_cmpint(events[0], ==, InspectorTest::Closed); + test->m_events.clear(); +} + +void beforeAll() +{ + g_setenv("WEBKIT_INSPECTOR_PATH", WEBKIT_INSPECTOR_PATH, FALSE); + InspectorTest::add("WebKitWebInspector", "default", testInspectorDefault); + CustomInspectorTest::add("WebKitWebInspector", "manual-attach-detach", testInspectorManualAttachDetach); + CustomInspectorTest::add("WebKitWebInspector", "custom-container-destroyed", testInspectorCustomContainerDestroyed); +} + +void afterAll() +{ +} diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp index e08cfb9c9..39841756d 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp @@ -150,7 +150,7 @@ public: void checkResourceData(WebKitWebResource* resource) { m_resourceDataSize = 0; - webkit_web_resource_get_data(resource, resourceGetDataCallback, this); + webkit_web_resource_get_data(resource, 0, resourceGetDataCallback, this); g_main_loop_run(m_mainLoop); const char* uri = webkit_web_resource_get_uri(resource); diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp index ad03444ae..4616d105f 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitSettings.cpp @@ -219,6 +219,11 @@ static void testWebKitSettings(Test*, gconstpointer) webkit_settings_set_media_playback_allows_inline(settings, FALSE); g_assert(!webkit_settings_get_media_playback_allows_inline(settings)); + // By default, debug indicators are disabled. + g_assert(!webkit_settings_get_draw_compositing_indicators(settings)); + webkit_settings_set_draw_compositing_indicators(settings, TRUE); + g_assert(webkit_settings_get_draw_compositing_indicators(settings)); + g_object_unref(G_OBJECT(settings)); } diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp index d65e8a641..e4c60bebc 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp @@ -675,7 +675,7 @@ public: void requestFullScreenAndWaitUntilEnteredFullScreen() { m_event = None; - webkit_web_view_run_javascript(m_webView, "document.documentElement.webkitRequestFullScreen();", 0, 0); + webkit_web_view_run_javascript(m_webView, "document.documentElement.webkitRequestFullScreen();", 0, 0, 0); g_main_loop_run(m_mainLoop); } diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp index 644584a3e..97ebe5b27 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/TestWebViewEditor.cpp @@ -47,7 +47,7 @@ public: bool canExecuteEditingCommand(const char* command) { m_canExecuteEditingCommand = false; - webkit_web_view_can_execute_editing_command(m_webView, command, reinterpret_cast<GAsyncReadyCallback>(canExecuteEditingCommandReadyCallback), this); + webkit_web_view_can_execute_editing_command(m_webView, command, 0, reinterpret_cast<GAsyncReadyCallback>(canExecuteEditingCommandReadyCallback), this); g_main_loop_run(m_mainLoop); return m_canExecuteEditingCommand; } diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp b/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp index 7a9e49bc6..e355f786d 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp @@ -162,10 +162,10 @@ static gboolean parentWindowMapped(GtkWidget* widget, GdkEvent*, WebViewTest* te return FALSE; } -void WebViewTest::showInWindowAndWaitUntilMapped() +void WebViewTest::showInWindowAndWaitUntilMapped(GtkWindowType windowType) { g_assert(!m_parentWindow); - m_parentWindow = gtk_window_new(GTK_WINDOW_POPUP); + m_parentWindow = gtk_window_new(windowType); gtk_container_add(GTK_CONTAINER(m_parentWindow), GTK_WIDGET(m_webView)); gtk_widget_show(GTK_WIDGET(m_webView)); @@ -174,6 +174,17 @@ void WebViewTest::showInWindowAndWaitUntilMapped() g_main_loop_run(m_mainLoop); } +void WebViewTest::resizeView(int width, int height) +{ + GtkAllocation allocation; + gtk_widget_get_allocation(GTK_WIDGET(m_webView), &allocation); + if (width != -1) + allocation.width = width; + if (height != -1) + allocation.height = height; + gtk_widget_size_allocate(GTK_WIDGET(m_webView), &allocation); +} + void WebViewTest::mouseMoveTo(int x, int y, unsigned int mouseModifiers) { g_assert(m_parentWindow); @@ -268,7 +279,7 @@ WebKitJavascriptResult* WebViewTest::runJavaScriptAndWaitUntilFinished(const cha webkit_javascript_result_unref(m_javascriptResult); m_javascriptResult = 0; m_javascriptError = error; - webkit_web_view_run_javascript(m_webView, javascript, reinterpret_cast<GAsyncReadyCallback>(runJavaScriptReadyCallback), this); + webkit_web_view_run_javascript(m_webView, javascript, 0, reinterpret_cast<GAsyncReadyCallback>(runJavaScriptReadyCallback), this); g_main_loop_run(m_mainLoop); return m_javascriptResult; diff --git a/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h b/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h index 92e123630..ff6a8c737 100644 --- a/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h +++ b/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h @@ -44,7 +44,8 @@ public: void waitUntilLoadFinished(); void waitUntilTitleChangedTo(const char* expectedTitle); void waitUntilTitleChanged(); - void showInWindowAndWaitUntilMapped(); + void showInWindowAndWaitUntilMapped(GtkWindowType = GTK_WINDOW_POPUP); + void resizeView(int width, int height); void mouseMoveTo(int x, int y, unsigned int mouseModifiers = 0); void clickMouseButton(int x, int y, unsigned int button = 1, unsigned int mouseModifiers = 0); |