diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp')
-rw-r--r-- | Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp | 77 |
1 files changed, 28 insertions, 49 deletions
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp index 020ad3529..f48b6a3b6 100644 --- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp +++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp @@ -26,6 +26,8 @@ #include <wtf/Vector.h> static const unsigned numViews = 2; +static guint32 nextInitializationId = 1; +static unsigned initializeWebExtensionsSignalCount; static WebKitTestBus* bus; class MultiprocessTest: public Test { @@ -34,18 +36,8 @@ public: MultiprocessTest() : m_mainLoop(g_main_loop_new(nullptr, TRUE)) - , m_initializeWebExtensionsSignalCount(0) , m_webViewBusNames(numViews) - , m_webViews(numViews) - { - webkit_web_context_set_process_model(m_webContext.get(), WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); - } - - void initializeWebExtensions() override - { - Test::initializeWebExtensions(); - m_initializeWebExtensionsSignalCount++; - } + , m_webViews(numViews) { } static void loadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, MultiprocessTest* test) { @@ -59,10 +51,10 @@ public: { g_assert_cmpuint(index, <, numViews); - m_webViews[index] = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(m_webContext.get())); - assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webViews[index].get())); + m_webViewBusNames[index] = GUniquePtr<char>(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", nextInitializationId)); - m_webViewBusNames[index] = GUniquePtr<char>(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); + m_webViews[index] = WEBKIT_WEB_VIEW(webkit_web_view_new()); + assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webViews[index].get())); webkit_web_view_load_html(m_webViews[index].get(), "<html></html>", nullptr); g_signal_connect(m_webViews[index].get(), "load-changed", G_CALLBACK(loadChanged), this); @@ -96,6 +88,8 @@ public: void destroyWebViewAndWaitUntilWebProcessFinishes(unsigned index) { + // FIXME: This test is disabled because the web processed don't actually die + // due to bug https://bugs.webkit.org/show_bug.cgi?id=129684. g_assert_cmpuint(index, <, numViews); unsigned watcherID = g_bus_watch_name_on_connection(bus->connection(), m_webViewBusNames[index].get(), G_BUS_NAME_WATCHER_FLAGS_NONE, @@ -106,7 +100,6 @@ public: } GMainLoop* m_mainLoop; - unsigned m_initializeWebExtensionsSignalCount; Vector<GUniquePtr<char>, numViews> m_webViewBusNames; Vector<GRefPtr<WebKitWebView>, numViews> m_webViews; }; @@ -125,7 +118,7 @@ static void testProcessPerWebView(MultiprocessTest* test, gconstpointer) g_assert(test->m_webViewBusNames[i]); } - g_assert_cmpuint(test->m_initializeWebExtensionsSignalCount, ==, numViews); + g_assert_cmpuint(initializeWebExtensionsSignalCount, ==, numViews); g_assert_cmpstr(test->m_webViewBusNames[0].get(), !=, test->m_webViewBusNames[1].get()); g_assert_cmpuint(test->webProcessPid(0), !=, test->webProcessPid(1)); @@ -137,7 +130,7 @@ static void testProcessPerWebView(MultiprocessTest* test, gconstpointer) } } -class UIClientMultiprocessTest: public Test { +class UIClientMultiprocessTest: public WebViewTest { public: MAKE_GLIB_TEST_FIXTURE(UIClientMultiprocessTest); @@ -147,7 +140,7 @@ public: Close }; - static GtkWidget* viewCreateCallback(WebKitWebView* webView, WebKitNavigationAction*, UIClientMultiprocessTest* test) + static GtkWidget* viewCreateCallback(WebKitWebView* webView, UIClientMultiprocessTest* test) { return test->viewCreate(webView); } @@ -163,26 +156,14 @@ public: } UIClientMultiprocessTest() - : m_mainLoop(g_main_loop_new(nullptr, TRUE)) - , m_initializeWebExtensionsSignalCount(0) { - webkit_web_context_set_process_model(m_webContext.get(), WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); - m_webView = WEBKIT_WEB_VIEW(g_object_ref_sink(webkit_web_view_new_with_context(m_webContext.get()))); webkit_settings_set_javascript_can_open_windows_automatically(webkit_web_view_get_settings(m_webView), TRUE); - g_signal_connect(m_webView, "create", G_CALLBACK(viewCreateCallback), this); } ~UIClientMultiprocessTest() { g_signal_handlers_disconnect_matched(m_webView, G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, this); - gtk_widget_destroy(GTK_WIDGET(m_webView)); - } - - void initializeWebExtensions() override - { - Test::initializeWebExtensions(); - m_initializeWebExtensionsSignalCount++; } GtkWidget* viewCreate(WebKitWebView* webView) @@ -220,15 +201,16 @@ public: g_main_loop_run(m_mainLoop); } - WebKitWebView* m_webView; - GMainLoop* m_mainLoop; - unsigned m_initializeWebExtensionsSignalCount; Vector<WebViewEvents> m_webViewEvents; }; static void testMultiprocessWebViewCreateReadyClose(UIClientMultiprocessTest* test, gconstpointer) { - webkit_web_view_load_html(test->m_webView, "<html><body onLoad=\"window.open().close();\"></html>", nullptr); + // At this point the web process of the current view has already been created. + // We save it here to check that after window.open() the number of processes + // is the same. + guint32 processCountBefore = nextInitializationId - 1; + test->loadHtml("<html><body onLoad=\"window.open().close();\"></html>", nullptr); test->waitUntilNewWebViewClose(); Vector<UIClientMultiprocessTest::WebViewEvents>& events = test->m_webViewEvents; @@ -237,27 +219,23 @@ static void testMultiprocessWebViewCreateReadyClose(UIClientMultiprocessTest* te g_assert_cmpint(events[1], ==, UIClientMultiprocessTest::ReadyToShow); g_assert_cmpint(events[2], ==, UIClientMultiprocessTest::Close); - g_assert_cmpuint(test->m_initializeWebExtensionsSignalCount, ==, 1); + guint32 processesCountAfter = nextInitializationId - 1; + g_assert_cmpuint(processesCountAfter, ==, processCountBefore); } -static void testWebProcessLimit(MultiprocessTest* test, gconstpointer) +static void initializeWebExtensions(WebKitWebContext* context, gpointer) { - g_assert_cmpuint(webkit_web_context_get_web_process_count_limit(test->m_webContext.get()), ==, 0); - - webkit_web_context_set_web_process_count_limit(test->m_webContext.get(), 1); - g_assert_cmpuint(webkit_web_context_get_web_process_count_limit(test->m_webContext.get()), ==, 1); - - // Create two web views but there should be only one web process. - for (unsigned i = 0; i < numViews; i++) { - test->loadWebViewAndWaitUntilLoaded(i); - g_assert(WEBKIT_IS_WEB_VIEW(test->m_webViews[i].get())); - } - - g_assert_cmpuint(test->m_initializeWebExtensionsSignalCount, ==, 1); + initializeWebExtensionsSignalCount++; + 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_uint32(nextInitializationId++)); } void beforeAll() { + g_signal_connect(webkit_web_context_get_default(), + "initialize-web-extensions", G_CALLBACK(initializeWebExtensions), nullptr); + // Check that default setting is the one stated in the documentation g_assert_cmpuint(webkit_web_context_get_process_model(webkit_web_context_get_default()), ==, WEBKIT_PROCESS_MODEL_SHARED_SECONDARY_PROCESS); @@ -275,10 +253,11 @@ void beforeAll() MultiprocessTest::add("WebKitWebContext", "process-per-web-view", testProcessPerWebView); UIClientMultiprocessTest::add("WebKitWebView", "multiprocess-create-ready-close", testMultiprocessWebViewCreateReadyClose); - MultiprocessTest::add("WebKitWebContext", "web-process-limit", testWebProcessLimit); } void afterAll() { delete bus; + g_signal_handlers_disconnect_by_func(webkit_web_context_get_default(), + reinterpret_cast<void*>(initializeWebExtensions), nullptr); } |