Title: [145324] releases/WebKitGTK/webkit-2.0/Source/WebKit2
Revision
145324
Author
[email protected]
Date
2013-03-10 01:18:57 -0800 (Sun, 10 Mar 2013)

Log Message

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

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.

Reviewed Carlos Garcia Campos.

Patch by Xan Lopez <[email protected]> on 2013-03-10

* UIProcess/API/gtk/WebKitLoaderClient.cpp:
(processDidCrash):
(attachLoaderClientToView):
* UIProcess/API/gtk/WebKitWebContextPrivate.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(webkit_web_view_class_init):
(webkitWebViewWebProcessCrashed):
* UIProcess/API/gtk/tests/TestWebExtensions.cpp:
(testWebExtensionGetTitle):
(webProcessCrashedCallback):
(testWebKitWebViewProcessCrashed):
(beforeAll):
* UIProcess/API/gtk/tests/WebExtensionTest.cpp:
(methodCallCallback):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog (145323 => 145324)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/ChangeLog	2013-03-10 09:18:57 UTC (rev 145324)
@@ -1,3 +1,29 @@
+2013-03-10  Xan Lopez  <[email protected]>
+
+        [GTK] When the WebProcess crashes, a signal should be emitted
+        https://bugs.webkit.org/show_bug.cgi?id=105180
+
+        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.
+
+        Reviewed Carlos Garcia Campos.
+
+        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
+        (processDidCrash):
+        (attachLoaderClientToView):
+        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkit_web_view_class_init):
+        (webkitWebViewWebProcessCrashed):
+        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
+        (testWebExtensionGetTitle):
+        (webProcessCrashedCallback):
+        (testWebKitWebViewProcessCrashed):
+        (beforeAll):
+        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
+        (methodCallCallback):
+
 2013-03-08  Carlos Garcia Campos  <[email protected]>
 
         [WK2][GTK] Invalid request returned by webkit_download_get_request if called before download starts

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


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp	2013-03-10 09:18:57 UTC (rev 145324)
@@ -134,6 +134,11 @@
     webkitWebViewHandleAuthenticationChallenge(WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge));
 }
 
+static void processDidCrash(WKPageRef page, const void* clientInfo)
+{
+    webkitWebViewWebProcessCrashed(WEBKIT_WEB_VIEW(clientInfo));
+}
+
 void attachLoaderClientToView(WebKitWebView* webView)
 {
     WKPageLoaderClient wkLoaderClient = {
@@ -160,7 +165,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/WebKitWebView.cpp (145323 => 145324)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2013-03-10 09:18:57 UTC (rev 145324)
@@ -115,6 +115,8 @@
 
     INSECURE_CONTENT_DETECTED,
 
+    WEB_PROCESS_CRASHED,
+
     LAST_SIGNAL
 };
 
@@ -1340,6 +1342,25 @@
             g_cclosure_marshal_VOID__ENUM,
             G_TYPE_NONE, 1,
             WEBKIT_TYPE_INSECURE_CONTENT_EVENT);
+
+    /**
+     * WebKitWebView::web-process-crashed:
+     * @web_view: the #WebKitWebView
+     *
+     * This signal is emitted when the web process crashes.
+     *
+     * Returns: %TRUE to stop other handlers from being invoked for the event.
+     *    %FALSE to propagate the event further.
+     */
+    signals[WEB_PROCESS_CRASHED] = g_signal_new(
+        "web-process-crashed",
+        G_TYPE_FROM_CLASS(webViewClass),
+        G_SIGNAL_RUN_LAST,
+        G_STRUCT_OFFSET(WebKitWebViewClass, web_process_crashed),
+        g_signal_accumulator_true_handled,
+        0,
+        webkit_marshal_BOOLEAN__VOID,
+        G_TYPE_BOOLEAN, 0);
 }
 
 static void webkitWebViewSetIsLoading(WebKitWebView* webView, bool isLoading)
@@ -2995,3 +3016,10 @@
 
     return !!certificateInfo.certificate();
 }
+
+void webkitWebViewWebProcessCrashed(WebKitWebView* webView)
+{
+    gboolean returnValue;
+    g_signal_emit(webView, signals[WEB_PROCESS_CRASHED], 0, &returnValue);
+}
+

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h (145323 => 145324)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2013-03-10 09:18:57 UTC (rev 145324)
@@ -211,6 +211,7 @@
                                               WebKitFormSubmissionRequest *request);
     void       (* insecure_content_detected) (WebKitWebView               *web_view,
                                               WebKitInsecureContentEvent   event);
+    gboolean   (* web_process_crashed)       (WebKitWebView               *web_view);
 
     /* Padding for future expansion */
     void (*_webkit_reserved0) (void);

Modified: releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h (145323 => 145324)


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2013-03-10 09:18:57 UTC (rev 145324)
@@ -57,5 +57,6 @@
 void webkitWebViewSubmitFormRequest(WebKitWebView*, WebKitFormSubmissionRequest*);
 void webkitWebViewHandleAuthenticationChallenge(WebKitWebView*, WebKit::AuthenticationChallengeProxy*);
 void webkitWebViewInsecureContentDetected(WebKitWebView*, WebKitInsecureContentEvent);
+void webkitWebViewWebProcessCrashed(WebKitWebView*);
 
 #endif // WebKitWebViewPrivate_h

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


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp	2013-03-10 09:18:57 UTC (rev 145324)
@@ -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();
@@ -72,6 +72,34 @@
     g_dbus_connection_signal_unsubscribe(connection, id);
 }
 
+static gboolean webProcessCrashedCallback(WebKitWebView*, WebViewTest* test)
+{
+    test->quitMainLoop();
+
+    return FALSE;
+}
+
+static void testWebKitWebViewProcessCrashed(WebViewTest* test, gconstpointer)
+{
+    test->loadHtml("<html></html>", 0);
+    test->waitUntilLoadFinished();
+
+    g_signal_connect(test->m_webView, "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);
@@ -79,8 +107,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("WebKitWebView", "web-process-crashed", testWebKitWebViewProcessCrashed);
 }
 
 void afterAll()

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


--- releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp	2013-03-09 22:48:09 UTC (rev 145323)
+++ releases/WebKitGTK/webkit-2.0/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp	2013-03-10 09:18:57 UTC (rev 145324)
@@ -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>
@@ -31,6 +32,8 @@
     "   <arg type='t' name='pageID' direction='in'/>"
     "   <arg type='s' name='title' direction='out'/>"
     "  </method>"
+    "  <method name='AbortProcess'>"
+    "  </method>"
     "  <signal name='DocumentLoaded'/>"
     "  <signal name='URIChanged'>"
     "   <arg type='s' name='uri' direction='out'/>"
@@ -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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to