summaryrefslogtreecommitdiff
path: root/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.cpp77
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);
}