Title: [180998] trunk
Revision
180998
Author
commit-qu...@webkit.org
Date
2015-03-04 06:19:47 -0800 (Wed, 04 Mar 2015)

Log 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 <debars...@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):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (180997 => 180998)


--- trunk/Source/WebKit2/ChangeLog	2015-03-04 13:24:43 UTC (rev 180997)
+++ trunk/Source/WebKit2/ChangeLog	2015-03-04 14:19:47 UTC (rev 180998)
@@ -1,3 +1,22 @@
+2015-03-04  Debarshi Ray  <debars...@gnome.org>
+
+        [GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
+        https://bugs.webkit.org/show_bug.cgi?id=142225
+
+        Reviewed by Carlos Garcia Campos.
+
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkitWebViewRequestFavicon):
+        (webkitWebViewWatchForChangesInFavicon):
+        (webkitWebViewDisconnectFaviconDatabaseSignalHandlers):
+        (webkitWebViewConstructed):
+        (webkitWebViewGetProperty):
+        (webkitWebViewDispose):
+        (webkitWebViewLoadChanged):
+        (webkitWebViewLoadFailedWithTLSErrors):
+        (webkit_web_view_get_context):
+        (webkit_web_view_download_uri):
+
 2015-03-03  Shivakumar JM  <shiva...@samsung.com>
 
         Fix build warning in WebKit2/Shared module.

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (180997 => 180998)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2015-03-04 13:24:43 UTC (rev 180997)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2015-03-04 14:19:47 UTC (rev 180998)
@@ -170,7 +170,6 @@
             g_main_loop_quit(modalLoop.get());
     }
 
-    WebKitWebContext* context;
     WebKitWebView* relatedView;
     CString title;
     CString customTextEncoding;
@@ -185,6 +184,7 @@
     GRefPtr<WebKitBackForwardList> backForwardList;
     GRefPtr<WebKitSettings> settings;
     GRefPtr<WebKitUserContentManager> userContentManager;
+    GRefPtr<WebKitWebContext> context;
     GRefPtr<WebKitWindowProperties> windowProperties;
 
     GRefPtr<GMainLoop> modalLoop;
@@ -448,7 +448,7 @@
 
     WebKitWebViewPrivate* priv = webView->priv;
     priv->faviconCancellable = adoptGRef(g_cancellable_new());
-    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context);
+    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
     webkit_favicon_database_get_favicon(database, priv->activeURI.data(), priv->faviconCancellable.get(), gotFaviconCallback, webView);
 }
 
@@ -510,7 +510,7 @@
     if (priv->faviconChangedHandlerID)
         return;
 
-    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context);
+    WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
     priv->faviconChangedHandlerID = g_signal_connect(database, "favicon-changed", G_CALLBACK(faviconChangedCallback), webView);
 }
 
@@ -518,7 +518,7 @@
 {
     WebKitWebViewPrivate* priv = webView->priv;
     if (priv->faviconChangedHandlerID)
-        g_signal_handler_disconnect(webkit_web_context_get_favicon_database(priv->context), priv->faviconChangedHandlerID);
+        g_signal_handler_disconnect(webkit_web_context_get_favicon_database(priv->context.get()), priv->faviconChangedHandlerID);
     priv->faviconChangedHandlerID = 0;
 }
 
@@ -639,7 +639,7 @@
     if (!priv->settings)
         priv->settings = adoptGRef(webkit_settings_new());
 
-    webkitWebContextCreatePageForWebView(priv->context, webView, priv->userContentManager.get(), priv->relatedView);
+    webkitWebContextCreatePageForWebView(priv->context.get(), webView, priv->userContentManager.get(), priv->relatedView);
 
     priv->loadObserver = std::make_unique<PageLoadStateObserver>(webView);
     getPage(webView)->pageLoadState().addObserver(*priv->loadObserver);
@@ -706,7 +706,7 @@
 
     switch (propId) {
     case PROP_WEB_CONTEXT:
-        g_value_set_object(value, webView->priv->context);
+        g_value_set_object(value, webView->priv->context.get());
         break;
     case PROP_SETTINGS:
         g_value_set_object(value, webkit_web_view_get_settings(webView));
@@ -756,7 +756,7 @@
         webView->priv->loadObserver.reset();
     }
 
-    webkitWebContextWebViewDestroyed(webView->priv->context, webView);
+    webkitWebContextWebViewDestroyed(webView->priv->context.get(), webView);
 
     G_OBJECT_CLASS(webkit_web_view_parent_class)->dispose(object);
 }
@@ -1811,7 +1811,7 @@
         priv->mainResource = 0;
         priv->waitingForMainResource = false;
     } else if (loadEvent == WEBKIT_LOAD_COMMITTED) {
-        WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context);
+        WebKitFaviconDatabase* database = webkit_web_context_get_favicon_database(priv->context.get());
         GUniquePtr<char> faviconURI(webkit_favicon_database_get_favicon_uri(database, priv->activeURI.data()));
         webkitWebViewUpdateFaviconURI(webView, faviconURI.get());
 
@@ -1843,7 +1843,7 @@
 {
     webkitWebViewCancelAuthenticationRequest(webView);
 
-    WebKitTLSErrorsPolicy tlsErrorsPolicy = webkit_web_context_get_tls_errors_policy(webView->priv->context);
+    WebKitTLSErrorsPolicy tlsErrorsPolicy = webkit_web_context_get_tls_errors_policy(webView->priv->context.get());
     if (tlsErrorsPolicy == WEBKIT_TLS_ERRORS_POLICY_FAIL) {
         gboolean returnValue;
         g_signal_emit(webView, signals[LOAD_FAILED_WITH_TLS_ERRORS], 0, failingURI, certificate, tlsErrors, &returnValue);
@@ -2247,7 +2247,7 @@
 {
     g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
 
-    return webView->priv->context;
+    return webView->priv->context.get();
 }
 
 /**
@@ -3381,7 +3381,7 @@
     g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
     g_return_val_if_fail(uri, 0);
 
-    WebKitDownload* download = webkitWebContextStartDownload(webView->priv->context, uri, getPage(webView));
+    WebKitDownload* download = webkitWebContextStartDownload(webView->priv->context.get(), uri, getPage(webView));
     webkitDownloadSetWebView(download, webView);
 
     return download;

Modified: trunk/Tools/ChangeLog (180997 => 180998)


--- trunk/Tools/ChangeLog	2015-03-04 13:24:43 UTC (rev 180997)
+++ trunk/Tools/ChangeLog	2015-03-04 14:19:47 UTC (rev 180998)
@@ -1,3 +1,14 @@
+2015-03-04  Debarshi Ray  <debars...@gnome.org>
+
+        [GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
+        https://bugs.webkit.org/show_bug.cgi?id=142225
+
+        Reviewed by Carlos Garcia Campos.
+
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
+        (testWebViewWebContextLifetime):
+        (beforeAll):
+
 2015-03-03  David Kilzer  <ddkil...@apple.com>
 
         [iOS] Crash logs can't be found on ios-simulator because WebKitTestRunner returns the wrong process name

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp (180997 => 180998)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp	2015-03-04 13:24:43 UTC (rev 180997)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp	2015-03-04 14:19:47 UTC (rev 180998)
@@ -64,6 +64,36 @@
     g_assert(webkit_web_view_get_context(webView.get()) == test->m_webContext.get());
 }
 
+static void testWebViewWebContextLifetime(WebViewTest* test, gconstpointer)
+{
+    WebKitWebContext* webContext = webkit_web_context_new();
+    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext));
+
+    GtkWidget* webView = webkit_web_view_new_with_context(webContext);
+    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView));
+
+    g_object_ref_sink(webView);
+    g_object_unref(webContext);
+
+    // Check that the web view still has a valid context.
+    WebKitWebContext* tmpContext = webkit_web_view_get_context(WEBKIT_WEB_VIEW(webView));
+    g_assert_true(WEBKIT_IS_WEB_CONTEXT(tmpContext));
+    g_object_unref(webView);
+
+    WebKitWebContext* webContext2 = webkit_web_context_new();
+    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext2));
+
+    GtkWidget* webView2 = webkit_web_view_new_with_context(webContext2);
+    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView2));
+
+    g_object_ref_sink(webView2);
+    g_object_unref(webView2);
+
+    // Check that the context is still valid.
+    g_assert_true(WEBKIT_IS_WEB_CONTEXT(webContext2));
+    g_object_unref(webContext2);
+}
+
 static void testWebViewCustomCharset(WebViewTest* test, gconstpointer)
 {
     g_assert(!webkit_web_view_get_custom_charset(test->m_webView));
@@ -809,6 +839,7 @@
     gServer->run(serverCallback);
 
     WebViewTest::add("WebKitWebView", "web-context", testWebViewWebContext);
+    WebViewTest::add("WebKitWebView", "web-context-lifetime", testWebViewWebContextLifetime);
     WebViewTest::add("WebKitWebView", "custom-charset", testWebViewCustomCharset);
     WebViewTest::add("WebKitWebView", "settings", testWebViewSettings);
     WebViewTest::add("WebKitWebView", "zoom-level", testWebViewZoomLevel);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to