Changeset 249759 in webkit
- Timestamp:
- Sep 11, 2019 1:28:49 AM (5 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 deleted
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r249752 r249759 1 2019-09-11 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK][WPE] Stop using the session bus in the unit tests 4 https://bugs.webkit.org/show_bug.cgi?id=201636 5 6 Reviewed by Žan Doberšek. 7 8 We are actually using GTestDBus, not the actual session bus of the user session, but it would still be better to 9 use a private p2p DBus connection. This is also the way we encourage apps to implement the communication with 10 the web process extension. This patch removes the WebKitTestBus class and starts a DBus server before every 11 test. The server address is passed to the web extension as initialization parameter to connect directly to 12 it. We keep a global list of connections to the server and a HashMap to get the current active connection for 13 a WebKitWebView. 14 15 * TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp: 16 (beforeAll): 17 (afterAll): 18 * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp: 19 (testProcessPerWebView): 20 (beforeAll): 21 (afterAll): 22 * TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp: 23 (testWebExtensionGetTitle): 24 (testWebExtensionInputElementIsUserEdited): 25 (testDocumentLoadedSignal): 26 (testWebKitWebViewProcessCrashed): 27 (testWebExtensionIsolatedWorld): 28 (testInstallMissingPluginsPermissionRequest): 29 (testWebExtensionFormControlsAssociated): 30 (FormSubmissionTest::FormSubmissionTest): 31 (beforeAll): 32 (afterAll): 33 * TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp: 34 (DelayedSignal::DelayedSignal): 35 (emitPageCreated): 36 (pageCreatedCallback): 37 (webkit_web_extension_initialize_with_user_data): 38 * TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp: 39 * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp: 40 (AccessibilityTest::AccessibilityTest): 41 (AccessibilityTest::ensureProxy): 42 (beforeAll): 43 (afterAll): 44 * TestWebKitAPI/glib/CMakeLists.txt: 45 * TestWebKitAPI/glib/WebKitGLib/TestMain.cpp: 46 (dbusConnectionClosed): 47 (dbusServerConnection): 48 (startDBusServer): 49 (stopDBusServer): 50 (main): 51 * TestWebKitAPI/glib/WebKitGLib/TestMain.h: 52 (Test::initializeWebExtensions): 53 * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp: Removed. 54 * TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.h: Removed. 55 * TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp: 56 (WebViewTest::~WebViewTest): 57 (WebViewTest::extensionProxy): 58 * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h: 59 1 60 2019-09-10 Dean Jackson <dino@apple.com> 2 61 -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestLoaderClient.cpp
r243534 r249759 23 23 24 24 #include "LoadTrackingTest.h" 25 #include "WebKitTestBus.h"26 25 #include "WebKitTestServer.h" 27 26 #include "WebViewTest.h" … … 30 29 #include <wtf/text/CString.h> 31 30 32 static WebKitTestBus* bus;33 31 static WebKitTestServer* kServer; 34 32 … … 494 492 WebPageURITest() 495 493 { 496 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 497 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 498 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", m_mainLoop)); 494 m_proxy = extensionProxy(); 499 495 m_uriChangedSignalID = g_dbus_connection_signal_subscribe( 500 g_dbus_proxy_get_connection( proxy.get()),496 g_dbus_proxy_get_connection(m_proxy.get()), 501 497 0, 502 498 "org.webkit.gtk.WebExtensionTest", … … 516 512 { 517 513 g_signal_handlers_disconnect_matched(m_webView, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); 518 g_dbus_connection_signal_unsubscribe( bus->connection(), m_uriChangedSignalID);514 g_dbus_connection_signal_unsubscribe(g_dbus_proxy_get_connection(m_proxy.get()), m_uriChangedSignalID); 519 515 } 520 516 … … 533 529 } 534 530 531 GRefPtr<GDBusProxy> m_proxy; 535 532 unsigned m_uriChangedSignalID; 536 533 Vector<CString> m_webPageURIs; … … 730 727 void beforeAll() 731 728 { 732 bus = new WebKitTestBus();733 if (!bus->run())734 return;735 736 729 kServer = new WebKitTestServer(); 737 730 kServer->run(serverCallback); … … 768 761 void afterAll() 769 762 { 770 delete bus;771 763 delete kServer; 772 764 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp
r249419 r249759 21 21 22 22 #include "TestMain.h" 23 #include "WebKitTestBus.h"24 23 #include "WebViewTest.h" 25 24 #include <wtf/Vector.h> 26 25 27 26 static const unsigned numViews = 2; 28 static WebKitTestBus* bus;29 27 30 28 class MultiprocessTest: public Test { … … 55 53 } 56 54 57 void loadWebViewAndWaitUntil Loaded(unsigned index)55 void loadWebViewAndWaitUntilPageCreated(unsigned index) 58 56 { 59 57 g_assert_cmpuint(index, <, numViews); … … 63 61 64 62 webkit_web_view_load_html(m_webViews[index].get(), "<html></html>", nullptr); 65 g_signal_connect(m_webViews[index].get(), "load-changed", G_CALLBACK(loadChanged), this); 63 g_idle_add([](gpointer userData) -> gboolean { 64 auto* test = static_cast<MultiprocessTest*>(userData); 65 if (!s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(test->m_webViews[test->m_initializeWebExtensionsSignalCount - 1].get()))) 66 return TRUE; 67 68 g_main_loop_quit(test->m_mainLoop); 69 return FALSE; 70 }, this); 66 71 g_main_loop_run(m_mainLoop); 67 68 m_webViewBusNames[index] = GUniquePtr<char>(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID));69 72 } 70 73 … … 73 76 g_assert_cmpuint(index, <, numViews); 74 77 75 GRefPtr<GDBusProxy> proxy = adoptGRef( bus->createProxy(m_webViewBusNames[index].get(),76 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", m_mainLoop));77 78 GRefPtr<GDBusProxy> proxy = adoptGRef(g_dbus_proxy_new_sync(s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(m_webViews[index].get())), 79 static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS), 80 nullptr, nullptr, "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", nullptr, nullptr)); 78 81 GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( 79 82 proxy.get(), … … 90 93 91 94 #if PLATFORM(GTK) 92 static void nameVanishedCallback(GDBusConnection* connection, const gchar* name, gpointer userData)93 {94 g_main_loop_quit(static_cast<GMainLoop*>(userData));95 }96 97 95 void destroyWebViewAndWaitUntilWebProcessFinishes(unsigned index) 98 96 { 99 97 g_assert_cmpuint(index, <, numViews); 100 98 101 unsigned watcherID = g_bus_watch_name_on_connection(bus->connection(), m_webViewBusNames[index].get(), G_BUS_NAME_WATCHER_FLAGS_NONE, 102 nullptr, nameVanishedCallback, m_mainLoop, nullptr); 99 auto* connection = s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(m_webViews[index].get())); 100 g_assert_nonnull(connection); 101 g_signal_connect_swapped(connection, "closed", G_CALLBACK(g_main_loop_quit), m_mainLoop); 103 102 gtk_widget_destroy(GTK_WIDGET(m_webViews[index].get())); 104 103 g_main_loop_run(m_mainLoop); 105 g_bus_unwatch_name(watcherID);106 104 } 107 105 #endif … … 122 120 123 121 for (unsigned i = 0; i < numViews; i++) { 124 test->loadWebViewAndWaitUntil Loaded(i);122 test->loadWebViewAndWaitUntilPageCreated(i); 125 123 g_assert_true(WEBKIT_IS_WEB_VIEW(test->m_webViews[i].get())); 126 g_assert_nonnull( test->m_webViewBusNames[i]);124 g_assert_nonnull(Test::s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(test->m_webViews[i].get()))); 127 125 } 128 126 129 127 g_assert_cmpuint(test->m_initializeWebExtensionsSignalCount, ==, numViews); 130 g_assert_ cmpstr(test->m_webViewBusNames[0].get(), !=, test->m_webViewBusNames[1].get());128 g_assert_false(Test::s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(test->m_webViews[0].get())) == Test::s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(test->m_webViews[1].get()))); 131 129 g_assert_cmpuint(test->webProcessPid(0), !=, test->webProcessPid(1)); 132 130 … … 254 252 g_assert_cmpuint(webkit_web_context_get_process_model(webkit_web_context_get_default()), ==, WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); 255 253 256 bus = new WebKitTestBus();257 if (!bus->run())258 return;259 260 254 MultiprocessTest::add("WebKitWebContext", "process-per-web-view", testProcessPerWebView); 261 255 UIClientMultiprocessTest::add("WebKitWebView", "multiprocess-create-ready-close", testMultiprocessWebViewCreateReadyClose); … … 264 258 void afterAll() 265 259 { 266 delete bus; 267 } 260 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebExtensions.cpp
r246790 r249759 20 20 #include "config.h" 21 21 22 #include "WebKitTestBus.h"23 22 #include "WebViewTest.h" 24 23 #include <wtf/glib/GRefPtr.h> 25 24 26 static WebKitTestBus* bus;27 25 static GUniquePtr<char> scriptDialogResult; 28 26 … … 35 33 static void testWebExtensionGetTitle(WebViewTest* test, gconstpointer) 36 34 { 37 test->loadHtml("<html><head><title>WebKitGTK Web Extensions Test</title></head><body></body></html>", 0); 38 test->waitUntilLoadFinished(); 39 40 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 41 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 42 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 35 test->loadHtml("<html><head><title>WebKitGTK Web Extensions Test</title></head><body></body></html>", "http://bar.com"); 36 test->waitUntilLoadFinished(); 37 38 auto proxy = test->extensionProxy(); 43 39 GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( 44 40 proxy.get(), … … 76 72 test->waitUntilLoadFinished(); 77 73 78 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 79 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 80 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 74 auto proxy = test->extensionProxy(); 81 75 82 76 uint64_t pageID = webkit_web_view_get_page_id(test->m_webView); … … 115 109 static void testDocumentLoadedSignal(WebViewTest* test, gconstpointer) 116 110 { 117 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 118 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 119 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 111 auto proxy = test->extensionProxy(); 112 120 113 GDBusConnection* connection = g_dbus_proxy_get_connection(proxy.get()); 121 114 guint id = g_dbus_connection_signal_subscribe(connection, 122 0,115 nullptr, 123 116 "org.webkit.gtk.WebExtensionTest", 124 117 "DocumentLoaded", 125 118 "/org/webkit/gtk/WebExtensionTest", 126 0,119 nullptr, 127 120 G_DBUS_SIGNAL_FLAGS_NONE, 128 121 reinterpret_cast<GDBusSignalCallback>(documentLoadedCallback), 129 122 test, 130 0);123 nullptr); 131 124 g_assert_cmpuint(id, !=, 0); 132 125 133 test->loadHtml("<html><head><title>WebKitGTK Web Extensions Test</title></head><body></body></html>", 0);126 test->loadHtml("<html><head><title>WebKitGTK Web Extensions Test</title></head><body></body></html>", nullptr); 134 127 g_main_loop_run(test->m_mainLoop); 135 128 g_dbus_connection_signal_unsubscribe(connection, id); … … 146 139 static void testWebKitWebViewProcessCrashed(WebViewTest* test, gconstpointer) 147 140 { 148 test->loadHtml("<html></html>", 0);141 test->loadHtml("<html></html>", nullptr); 149 142 test->waitUntilLoadFinished(); 150 143 … … 154 147 test->m_expectedWebProcessCrash = true; 155 148 156 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 157 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 158 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 159 149 auto proxy = test->extensionProxy(); 160 150 GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( 161 151 proxy.get(), … … 226 216 "window.open = function () { alert('Isolated World'); }\n" 227 217 "window.open();"; 228 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 229 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 230 "/org/webkit/gtk/WebExtensionTest" , "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 218 auto proxy = test->extensionProxy(); 231 219 g_dbus_proxy_call(proxy.get(), 232 220 "RunJavaScriptInIsolatedWorld", … … 265 253 static void testInstallMissingPluginsPermissionRequest(WebViewTest* test, gconstpointer) 266 254 { 267 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 268 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 269 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 255 auto proxy = test->extensionProxy(); 270 256 GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync(proxy.get(), "RemoveAVPluginsFromGSTRegistry", 271 257 nullptr, G_DBUS_CALL_FLAGS_NONE, -1, nullptr, nullptr)); … … 293 279 static void testWebExtensionFormControlsAssociated(WebViewTest* test, gconstpointer) 294 280 { 295 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); 296 GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 297 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); 281 auto proxy = test->extensionProxy(); 298 282 GDBusConnection* connection = g_dbus_proxy_get_connection(proxy.get()); 299 283 guint id = g_dbus_connection_signal_subscribe(connection, … … 347 331 FormSubmissionTest() 348 332 { 349 GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", s_webExtensionID)); 350 m_proxy = adoptGRef(bus->createProxy(extensionBusName.get(), 351 "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", m_mainLoop)); 333 m_proxy = extensionProxy(); 352 334 GDBusConnection* connection = g_dbus_proxy_get_connection(m_proxy.get()); 353 335 … … 463 445 void beforeAll() 464 446 { 465 bus = new WebKitTestBus();466 if (!bus->run())467 return;468 469 447 WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtensionGetTitle); 470 448 #if PLATFORM(GTK) … … 484 462 void afterAll() 485 463 { 486 delete bus; 487 } 464 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/WebExtensionTest.cpp
r245514 r249759 64 64 " <method name='RemoveAVPluginsFromGSTRegistry'>" 65 65 " </method>" 66 " <signal name='PageCreated'>" 67 " <arg type='t' name='pageID' direction='out'/>" 68 " </signal>" 66 69 " <signal name='DocumentLoaded'/>" 67 70 " <signal name='FormControlsAssociated'>" … … 90 93 91 94 typedef enum { 95 PageCreatedSignal, 92 96 DocumentLoadedSignal, 93 97 URIChangedSignal, … … 100 104 explicit DelayedSignal(DelayedSignalType type) 101 105 : type(type) 106 { 107 } 108 109 DelayedSignal(DelayedSignalType type, guint64 n) 110 : type(type) 111 , n(n) 102 112 { 103 113 } … … 125 135 gboolean b; 126 136 gboolean b2; 137 guint64 n; 127 138 }; 128 139 … … 406 417 } 407 418 419 static void emitPageCreated(GDBusConnection* connection, guint64 pageID) 420 { 421 bool ok = g_dbus_connection_emit_signal( 422 connection, 423 nullptr, 424 "/org/webkit/gtk/WebExtensionTest", 425 "org.webkit.gtk.WebExtensionTest", 426 "PageCreated", 427 g_variant_new("(t)", pageID), 428 nullptr); 429 g_assert_true(ok); 430 } 431 408 432 static void pageCreatedCallback(WebKitWebExtension* extension, WebKitWebPage* webPage, gpointer) 409 433 { 434 if (auto* data = g_object_get_data(G_OBJECT(extension), "dbus-connection")) 435 emitPageCreated(G_DBUS_CONNECTION(data), webkit_web_page_get_id(webPage)); 436 else 437 delayedSignalsQueue.append(DelayedSignal(PageCreatedSignal, webkit_web_page_get_id(webPage))); 438 410 439 g_signal_connect(webPage, "document-loaded", G_CALLBACK(documentLoadedCallback), extension); 411 440 g_signal_connect(webPage, "notify::uri", G_CALLBACK(uriChangedCallback), extension); … … 521 550 }; 522 551 523 static void busAcquiredCallback(GDBusConnection* connection, const char* name, gpointer userData) 524 { 525 static GDBusNodeInfo* introspectionData = 0; 552 static void dbusConnectionCreated(GObject*, GAsyncResult* result, gpointer userData) 553 { 554 GUniqueOutPtr<GError> error; 555 GDBusConnection* connection = g_dbus_connection_new_for_address_finish(result, &error.outPtr()); 556 g_assert(G_IS_DBUS_CONNECTION(connection)); 557 g_assert_no_error(error.get()); 558 559 static GDBusNodeInfo* introspectionData = nullptr; 526 560 if (!introspectionData) 527 introspectionData = g_dbus_node_info_new_for_xml(introspectionXML, 0); 528 529 GUniqueOutPtr<GError> error; 561 introspectionData = g_dbus_node_info_new_for_xml(introspectionXML, nullptr); 562 530 563 unsigned registrationID = g_dbus_connection_register_object( 531 564 connection, … … 537 570 &error.outPtr()); 538 571 if (!registrationID) 539 g_ warning("Failed to register object: %s\n", error->message);540 541 g_object_set_data (G_OBJECT(userData), "dbus-connection", connection);572 g_error("Failed to register object: %s\n", error->message); 573 574 g_object_set_data_full(G_OBJECT(userData), "dbus-connection", connection, g_object_unref); 542 575 while (delayedSignalsQueue.size()) { 543 576 DelayedSignal delayedSignal = delayedSignalsQueue.takeFirst(); 544 577 switch (delayedSignal.type) { 578 case PageCreatedSignal: 579 emitPageCreated(connection, delayedSignal.n); 580 break; 545 581 case DocumentLoadedSignal: 546 582 emitDocumentLoaded(connection); … … 585 621 586 622 g_assert_nonnull(userData); 587 g_assert_true(g_variant_is_of_type(userData, G_VARIANT_TYPE_UINT32)); 588 GUniquePtr<char> busName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", g_variant_get_uint32(userData))); 589 g_bus_own_name( 590 G_BUS_TYPE_SESSION, 591 busName.get(), 592 G_BUS_NAME_OWNER_FLAGS_NONE, 593 busAcquiredCallback, 594 0, 0, 595 g_object_ref(extension), 596 static_cast<GDestroyNotify>(g_object_unref)); 597 } 623 const char* guid; 624 const char* address; 625 g_variant_get(userData, "(&s&s)", &guid, &address); 626 g_assert_nonnull(guid); 627 g_assert_nonnull(address); 628 629 g_dbus_connection_new_for_address(address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, nullptr, nullptr, 630 dbusConnectionCreated, extension); 631 } -
trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/AccessibilityTestServer.cpp
r244212 r249759 77 77 gtk_widget_show_all(window); 78 78 79 g_bus_own_name(G_BUS_TYPE_SESSION, "org.webkit.gtk.AccessibilityTest", G_BUS_NAME_OWNER_FLAGS_NONE, 80 [](GDBusConnection* connection, const char* name, gpointer userData) { 79 g_dbus_connection_new_for_address(argv[1], G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, nullptr, nullptr, 80 [](GObject*, GAsyncResult* result, gpointer userData) { 81 GDBusConnection* connection = g_dbus_connection_new_for_address_finish(result, nullptr); 82 81 83 static GDBusNodeInfo *introspectionData = nullptr; 82 84 if (!introspectionData) … … 85 87 g_dbus_connection_register_object(connection, "/org/webkit/gtk/AccessibilityTest", introspectionData->interfaces[0], 86 88 &interfaceVirtualTable, userData, nullptr, nullptr); 87 }, nullptr, nullptr, webView, nullptr);89 }, webView); 88 90 89 91 gtk_main(); -
trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp
r244212 r249759 21 21 22 22 #include "TestMain.h" 23 #include "WebKitTestBus.h"24 23 25 24 // The libatspi headers don't use G_BEGIN_DECLS … … 28 27 } 29 28 30 static WebKitTestBus* bus;31 32 29 class AccessibilityTest : public Test { 33 30 public: … … 37 34 { 38 35 GUniquePtr<char> testServerPath(g_build_filename(WEBKIT_EXEC_PATH, "TestWebKitAPI", "WebKit2Gtk", "AccessibilityTestServer", nullptr)); 39 char* args[ 2];36 char* args[3]; 40 37 args[0] = testServerPath.get(); 41 args[1] = nullptr; 38 args[1] = const_cast<char*>(g_dbus_server_get_client_address(s_dbusServer.get())); 39 args[2] = nullptr; 42 40 43 41 g_assert_true(g_spawn_async(nullptr, args, nullptr, G_SPAWN_DEFAULT, nullptr, nullptr, &m_childProcessID, nullptr)); … … 124 122 125 123 m_mainLoop = adoptGRef(g_main_loop_new(nullptr, FALSE)); 126 m_proxy = adoptGRef(bus->createProxy("org.webkit.gtk.AccessibilityTest", "/org/webkit/gtk/AccessibilityTest", "org.webkit.gtk.AccessibilityTest", m_mainLoop.get())); 124 125 if (s_dbusConnections.isEmpty()) { 126 g_idle_add([](gpointer userData) -> gboolean { 127 if (s_dbusConnections.isEmpty()) 128 return TRUE; 129 130 g_main_loop_quit(static_cast<GMainLoop*>(userData)); 131 return FALSE; 132 }, m_mainLoop.get()); 133 g_main_loop_run(m_mainLoop.get()); 134 } 135 136 m_proxy = adoptGRef(g_dbus_proxy_new_sync(s_dbusConnections[0].get(), static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS), 137 nullptr, nullptr, "/org/webkit/gtk/AccessibilityTest", "org.webkit.gtk.AccessibilityTest", nullptr, nullptr)); 138 g_assert_true(G_IS_DBUS_PROXY(m_proxy.get())); 127 139 } 128 140 … … 217 229 void beforeAll() 218 230 { 219 bus = new WebKitTestBus();220 if (!bus->run())221 return;222 223 231 AccessibilityTest::add("WebKitAccessibility", "atspi-basic-hierarchy", testAtspiBasicHierarchy); 224 232 } … … 226 234 void afterAll() 227 235 { 228 delete bus; 229 } 236 } -
trunk/Tools/TestWebKitAPI/glib/CMakeLists.txt
r249575 r249759 1 1 set(WebKitGLibAPITests_SOURCES 2 2 ${TOOLS_DIR}/TestWebKitAPI/glib/WebKitGLib/LoadTrackingTest.cpp 3 ${TOOLS_DIR}/TestWebKitAPI/glib/WebKitGLib/WebKitTestBus.cpp4 3 ${TOOLS_DIR}/TestWebKitAPI/glib/WebKitGLib/WebKitTestServer.cpp 5 4 ${TOOLS_DIR}/TestWebKitAPI/glib/WebKitGLib/TestMain.cpp -
trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.cpp
r241654 r249759 27 27 #endif 28 28 29 uint32_t Test::s_webExtensionID = 0; 29 GRefPtr<GDBusServer> Test::s_dbusServer; 30 Vector<GRefPtr<GDBusConnection>> Test::s_dbusConnections; 31 HashMap<uint64_t, GDBusConnection*> Test::s_dbusConnectionPageMap; 30 32 31 33 void beforeAll(); … … 65 67 } 66 68 69 static void dbusConnectionClosed(GDBusConnection* connection) 70 { 71 auto it = Test::s_dbusConnections.find(connection); 72 g_assert(it != notFound); 73 74 for (auto it : Test::s_dbusConnectionPageMap) { 75 if (it.value == connection) 76 it.value = nullptr; 77 } 78 Test::s_dbusConnections.remove(it); 79 } 80 81 static gboolean dbusServerConnection(GDBusServer* server, GDBusConnection* connection) 82 { 83 g_signal_connect(connection, "closed", G_CALLBACK(dbusConnectionClosed), nullptr); 84 g_assert(!Test::s_dbusConnections.contains(connection)); 85 Test::s_dbusConnections.append(connection); 86 87 g_dbus_connection_signal_subscribe(connection, nullptr, "org.webkit.gtk.WebExtensionTest", "PageCreated", "/org/webkit/gtk/WebExtensionTest", 88 nullptr, G_DBUS_SIGNAL_FLAGS_NONE, [](GDBusConnection* connection, const char*, const char*, const char*, const char*, GVariant* parameters, gpointer) { 89 guint64 pageID; 90 g_variant_get(parameters, "(t)", &pageID); 91 g_assert(Test::s_dbusConnections.contains(connection)); 92 Test::s_dbusConnectionPageMap.set(pageID, connection); 93 }, nullptr, nullptr); 94 95 return TRUE; 96 } 97 98 static void startDBusServer() 99 { 100 GUniqueOutPtr<GError> error; 101 GUniquePtr<char> address(g_strdup_printf("unix:tmpdir=%s", testDataDirectory.get())); 102 GUniquePtr<char> guid(g_dbus_generate_guid()); 103 Test::s_dbusServer = adoptGRef(g_dbus_server_new_sync(address.get(), G_DBUS_SERVER_FLAGS_NONE, guid.get(), nullptr, nullptr, &error.outPtr())); 104 if (!Test::s_dbusServer) 105 g_error("Failed to start DBus server: %s", error->message); 106 107 g_signal_connect(Test::s_dbusServer.get(), "new-connection", G_CALLBACK(dbusServerConnection), nullptr); 108 g_dbus_server_start(Test::s_dbusServer.get()); 109 } 110 111 static void stopDBusServer() 112 { 113 g_dbus_server_stop(Test::s_dbusServer.get()); 114 Test::s_dbusServer = nullptr; 115 } 116 67 117 int main(int argc, char** argv) 68 118 { … … 83 133 84 134 registerGResource(); 135 startDBusServer(); 85 136 86 137 beforeAll(); … … 88 139 afterAll(); 89 140 141 stopDBusServer(); 90 142 removeNonEmptyDirectory(testDataDirectory.get()); 91 143 -
trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h
r249192 r249759 22 22 #include <cairo.h> 23 23 #include <glib-object.h> 24 #include <wtf/HashMap.h> 24 25 #include <wtf/HashSet.h> 26 #include <wtf/Vector.h> 25 27 #include <wtf/glib/GRefPtr.h> 26 28 #include <wtf/glib/GUniquePtr.h> … … 151 153 { 152 154 webkit_web_context_set_web_extensions_directory(m_webContext.get(), WEBKIT_TEST_WEB_EXTENSIONS_DIR); 153 webkit_web_context_set_web_extensions_initialization_user_data(m_webContext.get(), g_variant_new_uint32(++s_webExtensionID)); 155 webkit_web_context_set_web_extensions_initialization_user_data(m_webContext.get(), 156 g_variant_new("(ss)", g_dbus_server_get_guid(s_dbusServer.get()), g_dbus_server_get_client_address(s_dbusServer.get()))); 154 157 } 155 158 … … 273 276 HashSet<GObject*> m_watchedObjects; 274 277 GRefPtr<WebKitWebContext> m_webContext; 275 static uint32_t s_webExtensionID; 278 static GRefPtr<GDBusServer> s_dbusServer; 279 static Vector<GRefPtr<GDBusConnection>> s_dbusConnections; 280 static HashMap<uint64_t, GDBusConnection*> s_dbusConnectionPageMap; 276 281 }; -
trunk/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.cpp
r239772 r249759 42 42 if (m_surface) 43 43 cairo_surface_destroy(m_surface); 44 s_dbusConnectionPageMap.remove(webkit_web_view_get_page_id(m_webView)); 44 45 g_object_unref(m_webView); 45 46 g_main_loop_unref(m_mainLoop); … … 394 395 return javascriptResultToBoolean(javascriptResult); 395 396 } 397 398 GRefPtr<GDBusProxy> WebViewTest::extensionProxy() 399 { 400 GDBusConnection* connection = nullptr; 401 402 // If nothing has been loaded yet, load about:blank to force the web process to be spawned. 403 if (!webkit_web_view_get_uri(m_webView)) { 404 loadURI("about:blank"); 405 waitUntilLoadFinished(); 406 407 connection = s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(m_webView)); 408 if (!connection) { 409 // Wait for page created signal. 410 g_idle_add([](gpointer userData) -> gboolean { 411 auto* test = static_cast<WebViewTest*>(userData); 412 if (!s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(test->m_webView))) 413 return TRUE; 414 415 test->quitMainLoop(); 416 return FALSE; 417 }, this); 418 g_main_loop_run(m_mainLoop); 419 // FIXME: we can cache this once we can monitor the page id on the web view. 420 connection = s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(m_webView)); 421 } 422 } else 423 connection = s_dbusConnectionPageMap.get(webkit_web_view_get_page_id(m_webView)); 424 425 return adoptGRef(g_dbus_proxy_new_sync(connection, static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS), 426 nullptr, nullptr, "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", nullptr, nullptr)); 427 } -
trunk/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h
r239203 r249759 97 97 static gboolean webProcessTerminated(WebKitWebView*, WebKitWebProcessTerminationReason, WebViewTest*); 98 98 99 GRefPtr<GDBusProxy> extensionProxy(); 100 99 101 GRefPtr<WebKitUserContentManager> m_userContentManager; 100 102 WebKitWebView* m_webView { nullptr };
Note: See TracChangeset
for help on using the changeset viewer.