Changeset 180998 in webkit


Ignore:
Timestamp:
Mar 4, 2015 6:19:47 AM (9 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
https://bugs.webkit.org/show_bug.cgi?id=142225

Patch by Debarshi Ray <debarshir@gnome.org> on 2015-03-04
Reviewed by Carlos Garcia Campos.

Source/WebKit2:

  • UIProcess/API/gtk/WebKitWebView.cpp:

(webkitWebViewRequestFavicon):
(webkitWebViewWatchForChangesInFavicon):
(webkitWebViewDisconnectFaviconDatabaseSignalHandlers):
(webkitWebViewConstructed):
(webkitWebViewGetProperty):
(webkitWebViewDispose):
(webkitWebViewLoadChanged):
(webkitWebViewLoadFailedWithTLSErrors):
(webkit_web_view_get_context):
(webkit_web_view_download_uri):

Tools:

  • TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:

(testWebViewWebContextLifetime):
(beforeAll):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r180988 r180998  
     12015-03-04  Debarshi Ray  <debarshir@gnome.org>
     2
     3        [GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
     4        https://bugs.webkit.org/show_bug.cgi?id=142225
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        * UIProcess/API/gtk/WebKitWebView.cpp:
     9        (webkitWebViewRequestFavicon):
     10        (webkitWebViewWatchForChangesInFavicon):
     11        (webkitWebViewDisconnectFaviconDatabaseSignalHandlers):
     12        (webkitWebViewConstructed):
     13        (webkitWebViewGetProperty):
     14        (webkitWebViewDispose):
     15        (webkitWebViewLoadChanged):
     16        (webkitWebViewLoadFailedWithTLSErrors):
     17        (webkit_web_view_get_context):
     18        (webkit_web_view_download_uri):
     19
    1202015-03-03  Shivakumar JM  <shiva.jm@samsung.com>
    221
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r179984 r180998  
    171171    }
    172172
    173     WebKitWebContext* context;
    174173    WebKitWebView* relatedView;
    175174    CString title;
     
    186185    GRefPtr<WebKitSettings> settings;
    187186    GRefPtr<WebKitUserContentManager> userContentManager;
     187    GRefPtr<WebKitWebContext> context;
    188188    GRefPtr<WebKitWindowProperties> windowProperties;
    189189
     
    449449    WebKitWebViewPrivate* priv = webView->priv;
    450450    priv->faviconCancellable = adoptGRef(g_cancellable_new());
    451     WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context);
     451    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
    452452    webkit_favicon_database_get_favicon(database, priv->activeURI.data(), priv->faviconCancellable.get(), gotFaviconCallback, webView);
    453453}
     
    511511        return;
    512512
    513     WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context);
     513    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
    514514    priv->faviconChangedHandlerID = g_signal_connect(database, "favicon-changed", G_CALLBACK(faviconChangedCallback), webView);
    515515}
     
    519519    WebKitWebViewPrivate* priv = webView->priv;
    520520    if (priv->faviconChangedHandlerID)
    521         g_signal_handler_disconnect(webkit_web_context_get_favicon_database(priv->context), priv->faviconChangedHandlerID);
     521        g_signal_handler_disconnect(webkit_web_context_get_favicon_database(priv->context.get()), priv->faviconChangedHandlerID);
    522522    priv->faviconChangedHandlerID = 0;
    523523}
     
    640640        priv->settings = adoptGRef(webkit_settings_new());
    641641
    642     webkitWebContextCreatePageForWebView(priv->context, webView, priv->userContentManager.get(), priv->relatedView);
     642    webkitWebContextCreatePageForWebView(priv->context.get(), webView, priv->userContentManager.get(), priv->relatedView);
    643643
    644644    priv->loadObserver = std::make_unique<PageLoadStateObserver>(webView);
     
    707707    switch (propId) {
    708708    case PROP_WEB_CONTEXT:
    709         g_value_set_object(value, webView->priv->context);
     709        g_value_set_object(value, webView->priv->context.get());
    710710        break;
    711711    case PROP_SETTINGS:
     
    757757    }
    758758
    759     webkitWebContextWebViewDestroyed(webView->priv->context, webView);
     759    webkitWebContextWebViewDestroyed(webView->priv->context.get(), webView);
    760760
    761761    G_OBJECT_CLASS(webkit_web_view_parent_class)->dispose(object);
     
    18121812        priv->waitingForMainResource = false;
    18131813    } else if (loadEvent == WEBKIT_LOAD_COMMITTED) {
    1814         WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context);
     1814        WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
    18151815        GUniquePtr<char> faviconURI(webkit_favicon_database_get_favicon_uri(database, priv->activeURI.data()));
    18161816        webkitWebViewUpdateFaviconURI(webView, faviconURI.get());
     
    18441844    webkitWebViewCancelAuthenticationRequest(webView);
    18451845
    1846     WebKitTLSErrorsPolicy tlsErrorsPolicy = webkit_web_context_get_tls_errors_policy(webView->priv->context);
     1846    WebKitTLSErrorsPolicy tlsErrorsPolicy = webkit_web_context_get_tls_errors_policy(webView->priv->context.get());
    18471847    if (tlsErrorsPolicy == WEBKIT_TLS_ERRORS_POLICY_FAIL) {
    18481848        gboolean returnValue;
     
    22482248    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
    22492249
    2250     return webView->priv->context;
     2250    return webView->priv->context.get();
    22512251}
    22522252
     
    33823382    g_return_val_if_fail(uri, 0);
    33833383
    3384     WebKitDownload* download = webkitWebContextStartDownload(webView->priv->context, uri, getPage(webView));
     3384    WebKitDownload* download = webkitWebContextStartDownload(webView->priv->context.get(), uri, getPage(webView));
    33853385    webkitDownloadSetWebView(download, webView);
    33863386
  • trunk/Tools/ChangeLog

    r180983 r180998  
     12015-03-04  Debarshi Ray  <debarshir@gnome.org>
     2
     3        [GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
     4        https://bugs.webkit.org/show_bug.cgi?id=142225
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
     9        (testWebViewWebContextLifetime):
     10        (beforeAll):
     11
    1122015-03-03  David Kilzer  <ddkilzer@apple.com>
    213
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp

    r179745 r180998  
    6565}
    6666
     67static void testWebViewWebContextLifetime(WebViewTest* test, gconstpointer)
     68{
     69    WebKitWebContext* webContext = webkit_web_context_new();
     70    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext));
     71
     72    GtkWidget* webView = webkit_web_view_new_with_context(webContext);
     73    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView));
     74
     75    g_object_ref_sink(webView);
     76    g_object_unref(webContext);
     77
     78    // Check that the web view still has a valid context.
     79    WebKitWebContext* tmpContext = webkit_web_view_get_context(WEBKIT_WEB_VIEW(webView));
     80    g_assert_true(WEBKIT_IS_WEB_CONTEXT(tmpContext));
     81    g_object_unref(webView);
     82
     83    WebKitWebContext* webContext2 = webkit_web_context_new();
     84    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext2));
     85
     86    GtkWidget* webView2 = webkit_web_view_new_with_context(webContext2);
     87    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView2));
     88
     89    g_object_ref_sink(webView2);
     90    g_object_unref(webView2);
     91
     92    // Check that the context is still valid.
     93    g_assert_true(WEBKIT_IS_WEB_CONTEXT(webContext2));
     94    g_object_unref(webContext2);
     95}
     96
    6797static void testWebViewCustomCharset(WebViewTest* test, gconstpointer)
    6898{
     
    810840
    811841    WebViewTest::add("WebKitWebView", "web-context", testWebViewWebContext);
     842    WebViewTest::add("WebKitWebView", "web-context-lifetime", testWebViewWebContextLifetime);
    812843    WebViewTest::add("WebKitWebView", "custom-charset", testWebViewCustomCharset);
    813844    WebViewTest::add("WebKitWebView", "settings", testWebViewSettings);
Note: See TracChangeset for help on using the changeset viewer.