Title: [165184] releases/WebKitGTK/webkit-2.4
Revision
165184
Author
[email protected]
Date
2014-03-06 04:16:06 -0800 (Thu, 06 Mar 2014)

Log Message

Merge r165182 - [GTK] Close the page when the view is disposed instead of when finalized
https://bugs.webkit.org/show_bug.cgi?id=129783

Reviewed by Sergio Villar Senin.

Source/WebKit2:

When a GtkWidget is destroyed, the GObject is disposed, but not
finalized if it has additional references. When the destroyed
widget is leaked by the application, we leak the page proxy and
what is more important the web process in multi-process mode.

* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseDispose): Close the WebPageProxy.

Tools:

Add test case but disabled for now because it's affetected by bug #129684.

* TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
(testProcessPerWebView):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog (165183 => 165184)


--- releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog	2014-03-06 12:14:38 UTC (rev 165183)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit2/ChangeLog	2014-03-06 12:16:06 UTC (rev 165184)
@@ -1,3 +1,18 @@
+2014-03-06  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Close the page when the view is disposed instead of when finalized
+        https://bugs.webkit.org/show_bug.cgi?id=129783
+
+        Reviewed by Sergio Villar Senin.
+
+        When a GtkWidget is destroyed, the GObject is disposed, but not
+        finalized if it has additional references. When the destroyed
+        widget is leaked by the application, we leak the page proxy and
+        what is more important the web process in multi-process mode.
+
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseDispose): Close the WebPageProxy.
+
 2014-03-03  Carlos Garcia Campos  <[email protected]>
 
         [GTK] WebKit2WebExtension GIR can't be used in vala

Modified: releases/WebKitGTK/webkit-2.4/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (165183 => 165184)


--- releases/WebKitGTK/webkit-2.4/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2014-03-06 12:14:38 UTC (rev 165183)
+++ releases/WebKitGTK/webkit-2.4/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2014-03-06 12:16:06 UTC (rev 165184)
@@ -87,11 +87,6 @@
 #endif
 
 struct _WebKitWebViewBasePrivate {
-    ~_WebKitWebViewBasePrivate()
-    {
-        pageProxy->close();
-    }
-
     WebKitWebViewChildrenMap children;
     OwnPtr<PageClientImpl> pageClient;
     RefPtr<WebPageProxy> pageProxy;
@@ -391,7 +386,9 @@
 
 static void webkitWebViewBaseDispose(GObject* gobject)
 {
-    webkitWebViewBaseSetToplevelOnScreenWindow(WEBKIT_WEB_VIEW_BASE(gobject), 0);
+    WebKitWebViewBase* webView = WEBKIT_WEB_VIEW_BASE(gobject);
+    webkitWebViewBaseSetToplevelOnScreenWindow(webView, nullptr);
+    webView->priv->pageProxy->close();
     G_OBJECT_CLASS(webkit_web_view_base_parent_class)->dispose(gobject);
 }
 

Modified: releases/WebKitGTK/webkit-2.4/Tools/ChangeLog (165183 => 165184)


--- releases/WebKitGTK/webkit-2.4/Tools/ChangeLog	2014-03-06 12:14:38 UTC (rev 165183)
+++ releases/WebKitGTK/webkit-2.4/Tools/ChangeLog	2014-03-06 12:16:06 UTC (rev 165184)
@@ -1,5 +1,17 @@
 2014-03-06  Carlos Garcia Campos  <[email protected]>
 
+        [GTK] Close the page when the view is disposed instead of when finalized
+        https://bugs.webkit.org/show_bug.cgi?id=129783
+
+        Reviewed by Sergio Villar Senin.
+
+        Add test case but disabled for now because it's affetected by bug #129684.
+
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp:
+        (testProcessPerWebView):
+
+2014-03-06  Carlos Garcia Campos  <[email protected]>
+
         [GTK] MiniBrowser crashes when opening several urls passed as command line options
         https://bugs.webkit.org/show_bug.cgi?id=129738
 

Modified: releases/WebKitGTK/webkit-2.4/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp (165183 => 165184)


--- releases/WebKitGTK/webkit-2.4/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp	2014-03-06 12:14:38 UTC (rev 165183)
+++ releases/WebKitGTK/webkit-2.4/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestMultiprocess.cpp	2014-03-06 12:16:06 UTC (rev 165184)
@@ -81,6 +81,26 @@
         return identifier;
     }
 
+    static void nameVanishedCallback(GDBusConnection* connection, const gchar* name, gpointer userData)
+    {
+        g_main_loop_quit(static_cast<GMainLoop*>(userData));
+    }
+
+    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.
+#if 0
+        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,
+            nullptr, nameVanishedCallback, m_mainLoop, nullptr);
+        gtk_widget_destroy(GTK_WIDGET(m_webViews[index].get()));
+        g_main_loop_run(m_mainLoop);
+        g_bus_unwatch_name(watcherID);
+#endif
+    }
+
     GMainLoop* m_mainLoop;
     Vector<GUniquePtr<char>, numViews> m_webViewBusNames;
     Vector<GRefPtr<WebKitWebView>, numViews> m_webViews;
@@ -103,6 +123,13 @@
     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));
+
+    // Check that web processes finish when the web view is destroyed even when it's not finalized.
+    // See https://bugs.webkit.org/show_bug.cgi?id=129783.
+    for (unsigned i = 0; i < numViews; i++) {
+        GRefPtr<WebKitWebView> webView = test->m_webViews[i];
+        test->destroyWebViewAndWaitUntilWebProcessFinishes(i);
+    }
 }
 
 class UIClientMultiprocessTest: public WebViewTest {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to