Title: [144902] releases/WebKitGTK/webkit-2.0/Source/WebKit2
Revision
144902
Author
carlo...@webkit.org
Date
2013-03-06 02:36:17 -0800 (Wed, 06 Mar 2013)

Log Message

[GTK] When the WebProcess crashes, a signal should be emitted
https://bugs.webkit.org/show_bug.cgi?id=105180

Patch by Xan Lopez <x...@igalia.com> on 2013-03-06
Reviewed by Carlos Garcia Campos.

Emit a "web-process-crashed" signal when the WebProcess crashes. This
is useful, for example, to show an error page in a web browser
like Chrome does.

* UIProcess/API/gtk/WebKitLoaderClient.cpp:
(processDidCrash):
(attachLoaderClientToView):
* UIProcess/API/gtk/WebKitWebContext.cpp:
(webkitWebContextWebProcessCrashed):
* UIProcess/API/gtk/WebKitWebContextPrivate.h:
* UIProcess/API/gtk/tests/TestWebExtensions.cpp:
(testWebExtensionGetTitle):
(webProcessCrashedCallback):
(testWebExtensionAbortProcess):
(beforeAll):
* UIProcess/API/gtk/tests/WebExtensionTest.cpp:
(methodCallCallback):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog (144901 => 144902)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog	2013-03-06 09:59:22 UTC (rev 144901)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog	2013-03-06 10:36:17 UTC (rev 144902)
@@ -1,3 +1,28 @@
+2013-03-06  Xan Lopez  <x...@igalia.com>
+
+        [GTK] When the WebProcess crashes, a signal should be emitted
+        https://bugs.webkit.org/show_bug.cgi?id=105180
+
+        Reviewed by Carlos Garcia Campos.
+
+        Emit a "web-process-crashed" signal when the WebProcess crashes. This
+        is useful, for example, to show an error page in a web browser
+        like Chrome does.
+
+        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
+        (processDidCrash):
+        (attachLoaderClientToView):
+        * UIProcess/API/gtk/WebKitWebContext.cpp:
+        (webkitWebContextWebProcessCrashed):
+        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
+        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
+        (testWebExtensionGetTitle):
+        (webProcessCrashedCallback):
+        (testWebExtensionAbortProcess):
+        (beforeAll):
+        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
+        (methodCallCallback):
+
 2013-03-06  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK] Add WebKitWebViewGroup to WebKit2 GTK+ API

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp (144901 => 144902)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp	2013-03-06 09:59:22 UTC (rev 144901)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp	2013-03-06 10:36:17 UTC (rev 144902)
@@ -24,6 +24,7 @@
 #include "WebKit2GtkAuthenticationDialog.h"
 #include "WebKitBackForwardListPrivate.h"
 #include "WebKitURIResponsePrivate.h"
+#include "WebKitWebContextPrivate.h"
 #include "WebKitWebViewBasePrivate.h"
 #include "WebKitWebViewPrivate.h"
 #include <wtf/gobject/GOwnPtr.h>
@@ -134,6 +135,11 @@
     webkitWebViewHandleAuthenticationChallenge(WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge));
 }
 
+static void processDidCrash(WKPageRef page, const void* clientInfo)
+{
+    webkitWebContextWebProcessCrashed(webkit_web_view_get_context(WEBKIT_WEB_VIEW(clientInfo)));
+}
+
 void attachLoaderClientToView(WebKitWebView* webView)
 {
     WKPageLoaderClient wkLoaderClient = {
@@ -160,7 +166,7 @@
         didChangeProgress, // didFinishProgress
         0, // didBecomeUnresponsive
         0, // didBecomeResponsive
-        0, // processDidCrash
+        processDidCrash,
         didChangeBackForwardList,
         0, // shouldGoToBackForwardListItem
         0, // didFailToInitializePlugin

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp (144901 => 144902)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2013-03-06 09:59:22 UTC (rev 144901)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2013-03-06 10:36:17 UTC (rev 144902)
@@ -79,6 +79,7 @@
 
 enum {
     DOWNLOAD_STARTED,
+    WEB_PROCESS_CRASHED,
 
     LAST_SIGNAL
 };
@@ -170,6 +171,19 @@
                      g_cclosure_marshal_VOID__OBJECT,
                      G_TYPE_NONE, 1,
                      WEBKIT_TYPE_DOWNLOAD);
+
+    /**
+     * WebKitWebContext::web-process-crashed:
+     * @context: the #WebKitWebContext
+     *
+     * This signal is emitted when the web process crashes.
+     */
+    signals[WEB_PROCESS_CRASHED] = g_signal_new("web-process-crashed",
+        G_TYPE_FROM_CLASS(gObjectClass),
+        G_SIGNAL_RUN_LAST,
+        0, 0, 0,
+        g_cclosure_marshal_VOID__VOID,
+        G_TYPE_NONE, 0);
 }
 
 static CString injectedBundleDirectory()
@@ -820,6 +834,11 @@
     g_signal_emit(context, signals[DOWNLOAD_STARTED], 0, download);
 }
 
+void webkitWebContextWebProcessCrashed(WebKitWebContext* context)
+{
+    g_signal_emit(context, signals[WEB_PROCESS_CRASHED], 0);
+}
+
 WebContext* webkitWebContextGetContext(WebKitWebContext* context)
 {
     g_assert(WEBKIT_IS_WEB_CONTEXT(context));

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h (144901 => 144902)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h	2013-03-06 09:59:22 UTC (rev 144901)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h	2013-03-06 10:36:17 UTC (rev 144902)
@@ -47,5 +47,6 @@
 void webkitWebContextWebViewDestroyed(WebKitWebContext*, WebKitWebView*);
 WebKitWebView* webkitWebContextGetWebViewForPage(WebKitWebContext*, WebKit::WebPageProxy*);
 WebKitWebViewGroup* webkitWebContextGetDefaultWebViewGroup(WebKitWebContext*);
+void webkitWebContextWebProcessCrashed(WebKitWebContext*);
 
 #endif // WebKitWebContextPrivate_h

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp (144901 => 144902)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp	2013-03-06 09:59:22 UTC (rev 144901)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp	2013-03-06 10:36:17 UTC (rev 144902)
@@ -25,7 +25,7 @@
 
 static WebKitTestBus* bus;
 
-static void testWebExtension(WebViewTest* test, gconstpointer)
+static void testWebExtensionGetTitle(WebViewTest* test, gconstpointer)
 {
     test->loadHtml("<html><head><title>WebKitGTK+ Web Extensions Test</title></head><body></body></html>", 0);
     test->waitUntilLoadFinished();
@@ -54,7 +54,8 @@
 {
     GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest",
         "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop));
-    guint id = g_dbus_connection_signal_subscribe(g_dbus_proxy_get_connection(proxy.get()),
+    GDBusConnection* connection = g_dbus_proxy_get_connection(proxy.get());
+    guint id = g_dbus_connection_signal_subscribe(connection,
         0,
         "org.webkit.gtk.WebExtensionTest",
         "DocumentLoaded",
@@ -68,8 +69,35 @@
 
     test->loadHtml("<html><head><title>WebKitGTK+ Web Extensions Test</title></head><body></body></html>", 0);
     g_main_loop_run(test->m_mainLoop);
+    g_dbus_connection_signal_unsubscribe(connection, id);
 }
 
+static void webProcessCrashedCallback(WebKitWebContext* context, WebViewTest* test)
+{
+    test->quitMainLoop();
+}
+
+static void testWebKitWebContextProcessCrashed(WebViewTest* test, gconstpointer)
+{
+    test->loadHtml("<html></html>", 0);
+    test->waitUntilLoadFinished();
+
+    g_signal_connect(webkit_web_context_get_default(), "web-process-crashed",
+        G_CALLBACK(webProcessCrashedCallback), test);
+
+    GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest",
+        "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop));
+
+    GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync(
+        proxy.get(),
+        "AbortProcess",
+        0,
+        G_DBUS_CALL_FLAGS_NONE,
+        -1, 0, 0));
+    g_assert(!result);
+    g_main_loop_run(test->m_mainLoop);
+}
+
 void beforeAll()
 {
     webkit_web_context_set_web_extensions_directory(webkit_web_context_get_default(), WEBKIT_TEST_WEB_EXTENSIONS_DIR);
@@ -77,8 +105,9 @@
     if (!bus->run())
         return;
 
-    WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtension);
+    WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtensionGetTitle);
     WebViewTest::add("WebKitWebExtension", "document-loaded-signal", testDocumentLoadedSignal);
+    WebViewTest::add("WebKitWebContext", "web-process-crashed", testWebKitWebContextProcessCrashed);
 }
 
 void afterAll()

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp (144901 => 144902)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp	2013-03-06 09:59:22 UTC (rev 144901)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp	2013-03-06 10:36:17 UTC (rev 144902)
@@ -20,6 +20,7 @@
 #include "config.h"
 
 #include <gio/gio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <webkit2/webkit-web-extension.h>
 #include <wtf/gobject/GOwnPtr.h>
@@ -35,6 +36,8 @@
     "  <signal name='URIChanged'>"
     "   <arg type='s' name='uri' direction='out'/>"
     "  </signal>"
+    "  <method name='AbortProcess'>"
+    "  </method>"
     " </interface>"
     "</node>";
 
@@ -106,6 +109,8 @@
         WebKitDOMDocument* document = webkit_web_page_get_dom_document(page);
         GOwnPtr<char> title(webkit_dom_document_get_title(document));
         g_dbus_method_invocation_return_value(invocation, g_variant_new("(s)", title.get()));
+    } else if (!g_strcmp0(methodName, "AbortProcess")) {
+        abort();
     }
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to