Changeset 148665 in webkit


Ignore:
Timestamp:
Apr 18, 2013 3:35:37 AM (11 years ago)
Author:
xan@webkit.org
Message:

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

Reviewed 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/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):

Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r148660 r148665  
     12013-04-18  Xan Lopez  <xan@igalia.com>
     2
     3        [GTK] When the WebProcess crashes, a signal should be emitted
     4        https://bugs.webkit.org/show_bug.cgi?id=105180
     5
     6        Emit a "web-process-crashed" signal when the WebProcess crashes. This
     7        is useful, for example, to show an error page in a web browser
     8        like Chrome does.
     9
     10        Reviewed Carlos Garcia Campos.
     11
     12        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
     13        (processDidCrash):
     14        (attachLoaderClientToView):
     15        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
     16        * UIProcess/API/gtk/WebKitWebView.cpp:
     17        (webkit_web_view_class_init):
     18        (webkitWebViewWebProcessCrashed):
     19        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
     20        (testWebExtensionGetTitle):
     21        (webProcessCrashedCallback):
     22        (testWebKitWebViewProcessCrashed):
     23        (beforeAll):
     24        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
     25        (methodCallCallback):
     26
    1272013-04-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>
    228
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp

    r148294 r148665  
    134134}
    135135
     136static void processDidCrash(WKPageRef page, const void* clientInfo)
     137{
     138    webkitWebViewWebProcessCrashed(WEBKIT_WEB_VIEW(clientInfo));
     139}
     140
    136141void attachLoaderClientToView(WebKitWebView* webView)
    137142{
     
    160165        0, // didBecomeUnresponsive
    161166        0, // didBecomeResponsive
    162         0, // processDidCrash
     167        processDidCrash,
    163168        didChangeBackForwardList,
    164169        0, // shouldGoToBackForwardListItem
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r148526 r148665  
    118118    INSECURE_CONTENT_DETECTED,
    119119
     120    WEB_PROCESS_CRASHED,
     121
    120122    LAST_SIGNAL
    121123};
     
    12991301            G_TYPE_NONE, 1,
    13001302            WEBKIT_TYPE_INSECURE_CONTENT_EVENT);
     1303
     1304    /**
     1305     * WebKitWebView::web-process-crashed:
     1306     * @web_view: the #WebKitWebView
     1307     *
     1308     * This signal is emitted when the web process crashes.
     1309     *
     1310     * Returns: %TRUE to stop other handlers from being invoked for the event.
     1311     *    %FALSE to propagate the event further.
     1312     */
     1313    signals[WEB_PROCESS_CRASHED] = g_signal_new(
     1314        "web-process-crashed",
     1315        G_TYPE_FROM_CLASS(webViewClass),
     1316        G_SIGNAL_RUN_LAST,
     1317        G_STRUCT_OFFSET(WebKitWebViewClass, web_process_crashed),
     1318        g_signal_accumulator_true_handled,
     1319        0,
     1320        webkit_marshal_BOOLEAN__VOID,
     1321        G_TYPE_BOOLEAN, 0);
    13011322}
    13021323
     
    30283049    return cairo_surface_reference(static_cast<GetSnapshotAsyncData*>(g_simple_async_result_get_op_res_gpointer(simple))->snapshot.get());
    30293050}
     3051
     3052void webkitWebViewWebProcessCrashed(WebKitWebView* webView)
     3053{
     3054    gboolean returnValue;
     3055    g_signal_emit(webView, signals[WEB_PROCESS_CRASHED], 0, &returnValue);
     3056}
     3057
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h

    r148526 r148665  
    239239    void       (* insecure_content_detected) (WebKitWebView               *web_view,
    240240                                              WebKitInsecureContentEvent   event);
     241    gboolean   (* web_process_crashed)       (WebKitWebView               *web_view);
    241242
    242243    /* Padding for future expansion */
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h

    r148526 r148665  
    6060void webkitWebViewHandleAuthenticationChallenge(WebKitWebView*, WebKit::AuthenticationChallengeProxy*);
    6161void webkitWebViewInsecureContentDetected(WebKitWebView*, WebKitInsecureContentEvent);
     62void webkitWebViewWebProcessCrashed(WebKitWebView*);
    6263
    6364#endif // WebKitWebViewPrivate_h
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestWebExtensions.cpp

    r148281 r148665  
    2626static WebKitTestBus* bus;
    2727
    28 static void testWebExtension(WebViewTest* test, gconstpointer)
     28static void testWebExtensionGetTitle(WebViewTest* test, gconstpointer)
    2929{
    3030    test->loadHtml("<html><head><title>WebKitGTK+ Web Extensions Test</title></head><body></body></html>", 0);
     
    7373}
    7474
     75static gboolean webProcessCrashedCallback(WebKitWebView*, WebViewTest* test)
     76{
     77    test->quitMainLoop();
     78
     79    return FALSE;
     80}
     81
     82static void testWebKitWebViewProcessCrashed(WebViewTest* test, gconstpointer)
     83{
     84    test->loadHtml("<html></html>", 0);
     85    test->waitUntilLoadFinished();
     86
     87    g_signal_connect(test->m_webView, "web-process-crashed",
     88        G_CALLBACK(webProcessCrashedCallback), test);
     89
     90    GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest",
     91        "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop));
     92
     93    GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync(
     94        proxy.get(),
     95        "AbortProcess",
     96        0,
     97        G_DBUS_CALL_FLAGS_NONE,
     98        -1, 0, 0));
     99    g_assert(!result);
     100    g_main_loop_run(test->m_mainLoop);
     101}
     102
    75103void beforeAll()
    76104{
     
    80108        return;
    81109
    82     WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtension);
     110    WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtensionGetTitle);
    83111    WebViewTest::add("WebKitWebExtension", "document-loaded-signal", testDocumentLoadedSignal);
     112    WebViewTest::add("WebKitWebView", "web-process-crashed", testWebKitWebViewProcessCrashed);
    84113}
    85114
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebExtensionTest.cpp

    r148592 r148665  
    2121
    2222#include <gio/gio.h>
     23#include <stdlib.h>
     24
    2325#include <webkit2/webkit-web-extension.h>
    2426#include <wtf/gobject/GOwnPtr.h>
     
    3032    "   <arg type='t' name='pageID' direction='in'/>"
    3133    "   <arg type='s' name='title' direction='out'/>"
     34    "  </method>"
     35    "  <method name='AbortProcess'>"
    3236    "  </method>"
    3337    "  <signal name='DocumentLoaded'/>"
     
    7478        GOwnPtr<char> title(webkit_dom_document_get_title(document));
    7579        g_dbus_method_invocation_return_value(invocation, g_variant_new("(s)", title.get()));
     80    } else if (!g_strcmp0(methodName, "AbortProcess")) {
     81        abort();
    7682    }
    7783}
Note: See TracChangeset for help on using the changeset viewer.