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