diff options
Diffstat (limited to 'Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp')
| -rw-r--r-- | Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp | 70 |
1 files changed, 39 insertions, 31 deletions
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp index b02cdfd03..b41e5eb82 100644 --- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp +++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp @@ -21,7 +21,7 @@ #include "WebKitTestBus.h" #include "WebViewTest.h" -#include <wtf/gobject/GRefPtr.h> +#include <wtf/glib/GRefPtr.h> static const char* webExtensionsUserData = "Web Extensions user data"; static WebKitTestBus* bus; @@ -32,8 +32,9 @@ static void testWebExtensionGetTitle(WebViewTest* test, gconstpointer) test->loadHtml("<html><head><title>WebKitGTK+ Web Extensions Test</title></head><body></body></html>", 0); test->waitUntilLoadFinished(); - GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest", - "/org/webkit/gtk/WebExtensionTest" , "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); + GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); + GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), + "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( proxy.get(), "GetTitle", @@ -54,7 +55,8 @@ static void documentLoadedCallback(GDBusConnection*, const char*, const char*, c static void testDocumentLoadedSignal(WebViewTest* test, gconstpointer) { - GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest", + GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); + GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); GDBusConnection* connection = g_dbus_proxy_get_connection(proxy.get()); guint id = g_dbus_connection_signal_subscribe(connection, @@ -86,10 +88,13 @@ static void testWebKitWebViewProcessCrashed(WebViewTest* test, gconstpointer) test->loadHtml("<html></html>", 0); test->waitUntilLoadFinished(); - g_signal_connect(test->m_webView, "web-process-crashed", + g_signal_connect_after(test->m_webView, "web-process-crashed", G_CALLBACK(webProcessCrashedCallback), test); - GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest", + test->m_expectedWebProcessCrash = true; + + GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); + GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( @@ -100,6 +105,7 @@ static void testWebKitWebViewProcessCrashed(WebViewTest* test, gconstpointer) -1, 0, 0)); g_assert(!result); g_main_loop_run(test->m_mainLoop); + test->m_expectedWebProcessCrash = false; } static void testWebExtensionWindowObjectCleared(WebViewTest* test, gconstpointer) @@ -152,7 +158,8 @@ static void testWebExtensionIsolatedWorld(WebViewTest* test, gconstpointer) "document.getElementById('console').innerHTML = top.foo;\n" "window.open = function () { alert('Isolated World'); }\n" "document.open(1, 2, 3);"; - GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest", + GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); + GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), "/org/webkit/gtk/WebExtensionTest" , "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); g_dbus_proxy_call(proxy.get(), "RunJavaScriptInIsolatedWorld", @@ -173,49 +180,50 @@ static void testWebExtensionIsolatedWorld(WebViewTest* test, gconstpointer) g_signal_handler_disconnect(test->m_webView, scriptDialogID); } -static void testWebExtensionInitializationUserData(WebViewTest* test, gconstpointer) +static gboolean permissionRequestCallback(WebKitWebView*, WebKitPermissionRequest* request, WebViewTest* test) { - test->loadHtml("<html></html>", 0); - test->waitUntilLoadFinished(); + if (!WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)) + return FALSE; - GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest", - "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); - - GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( - proxy.get(), - "GetInitializationUserData", - nullptr, - G_DBUS_CALL_FLAGS_NONE, - -1, 0, 0)); - g_assert(result); + test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request)); + WebKitInstallMissingMediaPluginsPermissionRequest* missingPluginsRequest = WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request); + g_assert(webkit_install_missing_media_plugins_permission_request_get_description(missingPluginsRequest)); + webkit_permission_request_deny(request); + test->quitMainLoop(); - const gchar* userData = nullptr; - g_variant_get(result.get(), "(&s)", &userData); - g_assert_cmpstr(userData, ==, webExtensionsUserData); + return TRUE; } -static void initializeWebExtensions(WebKitWebContext* context, gpointer) +static void testInstallMissingPluginsPermissionRequest(WebViewTest* test, gconstpointer) { - webkit_web_context_set_web_extensions_directory(context, WEBKIT_TEST_WEB_EXTENSIONS_DIR); - webkit_web_context_set_web_extensions_initialization_user_data(context, - g_variant_new("&s", webExtensionsUserData)); + GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); + GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), + "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); + GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync(proxy.get(), "RemoveAVPluginsFromGSTRegistry", + nullptr, G_DBUS_CALL_FLAGS_NONE, -1, nullptr, nullptr)); + + test->showInWindowAndWaitUntilMapped(); + + gulong permissionRequestSignalID = g_signal_connect(test->m_webView, "permission-request", G_CALLBACK(permissionRequestCallback), test); + // FIXME: the base URI needs to finish with / to work, that shouldn't happen. + GUniquePtr<char> baseURI(g_strconcat("file://", Test::getResourcesDir(Test::WebKit2Resources).data(), "/", nullptr)); + test->loadHtml("<html><body><video src=\"test.mp4\" autoplay></video></body></html>", baseURI.get()); + g_main_loop_run(test->m_mainLoop); + g_signal_handler_disconnect(test->m_webView, permissionRequestSignalID); } void beforeAll() { - g_signal_connect(webkit_web_context_get_default(), - "initialize-web-extensions", G_CALLBACK(initializeWebExtensions), nullptr); - bus = new WebKitTestBus(); if (!bus->run()) return; - WebViewTest::add("WebKitWebContext", "initialization-user-data", testWebExtensionInitializationUserData); WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtensionGetTitle); WebViewTest::add("WebKitWebExtension", "document-loaded-signal", testDocumentLoadedSignal); WebViewTest::add("WebKitWebView", "web-process-crashed", testWebKitWebViewProcessCrashed); WebViewTest::add("WebKitWebExtension", "window-object-cleared", testWebExtensionWindowObjectCleared); WebViewTest::add("WebKitWebExtension", "isolated-world", testWebExtensionIsolatedWorld); + WebViewTest::add("WebKitWebView", "install-missing-plugins-permission-request", testInstallMissingPluginsPermissionRequest); } void afterAll() |
