Title: [211138] trunk
Revision
211138
Author
[email protected]
Date
2017-01-25 00:01:08 -0800 (Wed, 25 Jan 2017)

Log Message

[GTK] Add API to create ephemeral web views and deprecate the private browsing setting
https://bugs.webkit.org/show_bug.cgi?id=167370

Reviewed by Michael Catanzaro.

Source/WebKit2:

Add API to create ephemeral WebKitWebView, WebKitWebsiteDataManager and WebKitWebContext.

* UIProcess/API/gtk/WebKitSettings.cpp:
(webKitSettingsSetProperty): Ignore deprecation warnings.
(webKitSettingsGetProperty): Ditto.
(webkit_settings_class_init): Mark WebKitSettings:enable-private-browsing as deprecated.
* UIProcess/API/gtk/WebKitSettings.h:
* UIProcess/API/gtk/WebKitWebContext.cpp:
(webkit_web_context_new_ephemeral): Create an ephemeral WebKitWebContext. This is just a convenient method to
create a WebKitWebContext with an ephemeral WebKitWebsiteDataManager without having to deal with the manager.
(webkit_web_context_is_ephemeral): Return whether the context is ephemeral.
(webkitWebContextCreatePageForWebView): Configure page with the web view WebKitWebsiteDataManager if it has one.
* UIProcess/API/gtk/WebKitWebContext.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(webkitWebViewConstructed): Check if the WebView is or should be ephemeral and create a non persistent website
data manager if it's an ephemeral web view in a non ephemeral web context.
(webkitWebViewSetProperty): Add setter for is-ephemeral property.
(webkitWebViewGetProperty): Add getter for is-ephemeral property.
(webkit_web_view_class_init): Add is-ephemeral property.
(webkitWebViewHandleAuthenticationChallenge): Check also whether web view is ephemeral.
(webkitWebViewGetWebsiteDataManager): Helper private to return the web view data manager.
(webkit_web_view_new_with_context): Also set is-ephemeral property depending on the context.
(webkit_web_view_is_ephemeral): Return whether the view is ephemeral.
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/WebKitWebViewPrivate.h:
* UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
(webkitWebsiteDataManagerGetProperty): Add setter for is-ephemeral property.
(webkitWebsiteDataManagerSetProperty): Add getter for is-ephemeral property.
(webkit_website_data_manager_class_init): Add is-ephemeral property.
(webkit_website_data_manager_new_ephemeral): Create a new ephemeral WebKitWebsiteDataManager.
(webkit_website_data_manager_is_ephemeral): Return whether the website data manager is ephemeral.
(webkit_website_data_manager_get_base_data_directory): Return nullptr if manager is ephemeral.
(webkit_website_data_manager_get_base_cache_directory): Ditto.
(webkit_website_data_manager_get_local_storage_directory): Ditto.
(webkit_website_data_manager_get_disk_cache_directory): Ditto.
(webkit_website_data_manager_get_offline_application_cache_directory): Ditto.
(webkit_website_data_manager_get_indexeddb_directory): Ditto.
(webkit_website_data_manager_get_websql_directory): Ditto.
* UIProcess/API/gtk/WebKitWebsiteDataManager.h:
* UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.

Tools:

Add several test cases of ephemeral web views.

* TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
(testWebViewAuthenticationStorage):
* TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
(ephemeralViewloadChanged):
(testCookieManagerEphemeral):
(beforeAll):
* TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
(testWebKitSettings):
* TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
(testWebContextEphemeral):
(ephemeralViewloadChanged):
(testWebContextProxySettings):
(beforeAll):
* TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
(ephemeralViewloadChanged):
(testWebViewEphemeral):
(beforeAll):
* TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:
(ephemeralViewloadChanged):
(testWebsiteDataEphemeral):
(beforeAll):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (211137 => 211138)


--- trunk/Source/WebKit2/ChangeLog	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/ChangeLog	2017-01-25 08:01:08 UTC (rev 211138)
@@ -1,3 +1,51 @@
+2017-01-24  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Add API to create ephemeral web views and deprecate the private browsing setting
+        https://bugs.webkit.org/show_bug.cgi?id=167370
+
+        Reviewed by Michael Catanzaro.
+
+        Add API to create ephemeral WebKitWebView, WebKitWebsiteDataManager and WebKitWebContext.
+
+        * UIProcess/API/gtk/WebKitSettings.cpp:
+        (webKitSettingsSetProperty): Ignore deprecation warnings.
+        (webKitSettingsGetProperty): Ditto.
+        (webkit_settings_class_init): Mark WebKitSettings:enable-private-browsing as deprecated.
+        * UIProcess/API/gtk/WebKitSettings.h:
+        * UIProcess/API/gtk/WebKitWebContext.cpp:
+        (webkit_web_context_new_ephemeral): Create an ephemeral WebKitWebContext. This is just a convenient method to
+        create a WebKitWebContext with an ephemeral WebKitWebsiteDataManager without having to deal with the manager.
+        (webkit_web_context_is_ephemeral): Return whether the context is ephemeral.
+        (webkitWebContextCreatePageForWebView): Configure page with the web view WebKitWebsiteDataManager if it has one.
+        * UIProcess/API/gtk/WebKitWebContext.h:
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkitWebViewConstructed): Check if the WebView is or should be ephemeral and create a non persistent website
+        data manager if it's an ephemeral web view in a non ephemeral web context.
+        (webkitWebViewSetProperty): Add setter for is-ephemeral property.
+        (webkitWebViewGetProperty): Add getter for is-ephemeral property.
+        (webkit_web_view_class_init): Add is-ephemeral property.
+        (webkitWebViewHandleAuthenticationChallenge): Check also whether web view is ephemeral.
+        (webkitWebViewGetWebsiteDataManager): Helper private to return the web view data manager.
+        (webkit_web_view_new_with_context): Also set is-ephemeral property depending on the context.
+        (webkit_web_view_is_ephemeral): Return whether the view is ephemeral.
+        * UIProcess/API/gtk/WebKitWebView.h:
+        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
+        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
+        (webkitWebsiteDataManagerGetProperty): Add setter for is-ephemeral property.
+        (webkitWebsiteDataManagerSetProperty): Add getter for is-ephemeral property.
+        (webkit_website_data_manager_class_init): Add is-ephemeral property.
+        (webkit_website_data_manager_new_ephemeral): Create a new ephemeral WebKitWebsiteDataManager.
+        (webkit_website_data_manager_is_ephemeral): Return whether the website data manager is ephemeral.
+        (webkit_website_data_manager_get_base_data_directory): Return nullptr if manager is ephemeral.
+        (webkit_website_data_manager_get_base_cache_directory): Ditto.
+        (webkit_website_data_manager_get_local_storage_directory): Ditto.
+        (webkit_website_data_manager_get_disk_cache_directory): Ditto.
+        (webkit_website_data_manager_get_offline_application_cache_directory): Ditto.
+        (webkit_website_data_manager_get_indexeddb_directory): Ditto.
+        (webkit_website_data_manager_get_websql_directory): Ditto.
+        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
+        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
+
 2017-01-24  Zalan Bujtas  <[email protected]>
 
         Add simple line layout toggle to MiniBrowser

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -235,7 +235,9 @@
         webkit_settings_set_default_charset(settings, g_value_get_string(value));
         break;
     case PROP_ENABLE_PRIVATE_BROWSING:
+        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
         webkit_settings_set_enable_private_browsing(settings, g_value_get_boolean(value));
+        G_GNUC_END_IGNORE_DEPRECATIONS;
         break;
     case PROP_ENABLE_DEVELOPER_EXTRAS:
         webkit_settings_set_enable_developer_extras(settings, g_value_get_boolean(value));
@@ -402,7 +404,9 @@
         g_value_set_string(value, webkit_settings_get_default_charset(settings));
         break;
     case PROP_ENABLE_PRIVATE_BROWSING:
+        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
         g_value_set_boolean(value, webkit_settings_get_enable_private_browsing(settings));
+        G_GNUC_END_IGNORE_DEPRECATIONS;
         break;
     case PROP_ENABLE_DEVELOPER_EXTRAS:
         g_value_set_boolean(value, webkit_settings_get_enable_developer_extras(settings));
@@ -831,6 +835,8 @@
      *
      * Determines whether or not private browsing is enabled. Private browsing
      * will disable history, cache and form auto-fill for any pages visited.
+     *
+     * Deprecated: 2.16. Use #WebKitWebView:is-ephemeral or #WebKitWebContext:is-ephemeral instead.
      */
     g_object_class_install_property(gObjectClass,
                                     PROP_ENABLE_PRIVATE_BROWSING,
@@ -2143,6 +2149,8 @@
  * Get the #WebKitSettings:enable-private-browsing property.
  *
  * Returns: %TRUE If private browsing is enabled or %FALSE otherwise.
+ *
+ * Deprecated: 2.16. Use #WebKitWebView:is-ephemeral or #WebKitWebContext:is-ephemeral instead.
  */
 gboolean webkit_settings_get_enable_private_browsing(WebKitSettings* settings)
 {
@@ -2152,11 +2160,13 @@
 }
 
 /**
- * webkit_settings_set_private_caret_browsing:
+ * webkit_settings_set_enable_private_browsing:
  * @settings: a #WebKitSettings
  * @enabled: Value to be set
  *
  * Set the #WebKitSettings:enable-private-browsing property.
+ *
+ * Deprecated: 2.16. Use #WebKitWebView:is-ephemeral or #WebKitWebContext:is-ephemeral instead.
  */
 void webkit_settings_set_enable_private_browsing(WebKitSettings* settings, gboolean enabled)
 {

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h	2017-01-25 08:01:08 UTC (rev 211138)
@@ -236,10 +236,10 @@
 webkit_settings_set_default_charset                            (WebKitSettings *settings,
                                                                 const gchar    *default_charset);
 
-WEBKIT_API gboolean
+WEBKIT_DEPRECATED gboolean
 webkit_settings_get_enable_private_browsing                    (WebKitSettings *settings);
 
-WEBKIT_API void
+WEBKIT_DEPRECATED void
 webkit_settings_set_enable_private_browsing                    (WebKitSettings *settings,
                                                                 gboolean        enabled);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -258,7 +258,7 @@
 
     WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object);
     WebKitWebContextPrivate* priv = webContext->priv;
-    if (priv->websiteDataManager) {
+    if (priv->websiteDataManager && !webkit_website_data_manager_is_ephemeral(priv->websiteDataManager.get())) {
         configuration.setLocalStorageDirectory(WebCore::stringFromFileSystemRepresentation(webkit_website_data_manager_get_local_storage_directory(priv->websiteDataManager.get())));
         configuration.setDiskCacheDirectory(WebCore::pathByAppendingComponent(WebCore::stringFromFileSystemRepresentation(webkit_website_data_manager_get_disk_cache_directory(priv->websiteDataManager.get())), networkCacheSubdirectory));
         configuration.setApplicationCacheDirectory(WebCore::stringFromFileSystemRepresentation(webkit_website_data_manager_get_offline_application_cache_directory(priv->websiteDataManager.get())));
@@ -449,6 +449,26 @@
 }
 
 /**
+ * webkit_web_context_new_ephemeral:
+ *
+ * Create a new ephemeral #WebKitWebContext. An ephemeral #WebKitWebContext is a context
+ * created with an ephemeral #WebKitWebsiteDataManager. This is just a convenient method
+ * to create ephemeral contexts without having to create your own #WebKitWebsiteDataManager.
+ * All #WebKitWebView<!-- ->s associated with this context will also be ephemeral. Websites will
+ * not store any data in the client storage.
+ * This is normally used to implement private instances.
+ *
+ * Returns: (transfer full): a new ephemeral #WebKitWebContext.
+ *
+ * Since: 2.16
+ */
+WebKitWebContext* webkit_web_context_new_ephemeral()
+{
+    GRefPtr<WebKitWebsiteDataManager> manager = adoptGRef(webkit_website_data_manager_new_ephemeral());
+    return WEBKIT_WEB_CONTEXT(g_object_new(WEBKIT_TYPE_WEB_CONTEXT, "website-data-manager", manager.get(), nullptr));
+}
+
+/**
  * webkit_web_context_new_with_website_data_manager:
  * @manager: a #WebKitWebsiteDataManager
  *
@@ -483,6 +503,23 @@
 }
 
 /**
+ * webkit_web_context_is_ephemeral:
+ * @context: the #WebKitWebContext
+ *
+ * Get whether a #WebKitWebContext is ephemeral.
+ *
+ * Returns: %TRUE if @context is ephemeral or %FALSE otherwise.
+ *
+ * Since: 2.16
+ */
+gboolean webkit_web_context_is_ephemeral(WebKitWebContext* context)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), FALSE);
+
+    return webkit_website_data_manager_is_ephemeral(context->priv->websiteDataManager.get());
+}
+
+/**
  * webkit_web_context_set_cache_model:
  * @context: the #WebKitWebContext
  * @cache_model: a #WebKitCacheModel
@@ -1426,7 +1463,11 @@
     pageConfiguration->setPreferences(webkitSettingsGetPreferences(webkit_web_view_get_settings(webView)));
     pageConfiguration->setRelatedPage(relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr);
     pageConfiguration->setUserContentController(userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr);
-    pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get()));
+
+    WebKitWebsiteDataManager* manager = webkitWebViewGetWebsiteDataManager(webView);
+    if (!manager)
+        manager = context->priv->websiteDataManager.get();
+    pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(manager));
     pageConfiguration->setSessionID(pageConfiguration->websiteDataStore()->websiteDataStore().sessionID());
     webkitWebViewBaseCreateWebPage(webViewBase, WTFMove(pageConfiguration));
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h	2017-01-25 08:01:08 UTC (rev 211138)
@@ -167,11 +167,17 @@
 webkit_web_context_new                              (void);
 
 WEBKIT_API WebKitWebContext *
+webkit_web_context_new_ephemeral                    (void);
+
+WEBKIT_API WebKitWebContext *
 webkit_web_context_new_with_website_data_manager    (WebKitWebsiteDataManager      *manager);
 
 WEBKIT_API WebKitWebsiteDataManager *
 webkit_web_context_get_website_data_manager         (WebKitWebContext              *context);
 
+WEBKIT_API gboolean
+webkit_web_context_is_ephemeral                     (WebKitWebContext              *context);
+
 WEBKIT_API void
 webkit_web_context_set_cache_model                  (WebKitWebContext              *context,
                                                      WebKitCacheModel               cache_model);

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


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -153,6 +153,7 @@
     PROP_ZOOM_LEVEL,
     PROP_IS_LOADING,
     PROP_IS_PLAYING_AUDIO,
+    PROP_IS_EPHEMERAL,
     PROP_EDITABLE
 };
 
@@ -177,6 +178,7 @@
     CString customTextEncoding;
     CString activeURI;
     bool isLoading;
+    bool isEphemeral;
 
     std::unique_ptr<PageLoadStateObserver> loadObserver;
 
@@ -208,6 +210,7 @@
     SnapshotResultsMap snapshotResultsMap;
     GRefPtr<WebKitAuthenticationRequest> authenticationRequest;
 
+    GRefPtr<WebKitWebsiteDataManager> websiteDataManager;
 };
 
 static guint signals[LAST_SIGNAL] = { 0, };
@@ -641,13 +644,20 @@
 
     WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
     WebKitWebViewPrivate* priv = webView->priv;
-    if (priv->relatedView)
+    if (priv->relatedView) {
         priv->context = webkit_web_view_get_context(priv->relatedView);
-    else if (!priv->context)
+        priv->isEphemeral = webkit_web_view_is_ephemeral(priv->relatedView);
+    } else if (!priv->context)
         priv->context = webkit_web_context_get_default();
+    else if (!priv->isEphemeral)
+        priv->isEphemeral = webkit_web_context_is_ephemeral(priv->context.get());
+
     if (!priv->settings)
         priv->settings = adoptGRef(webkit_settings_new());
 
+    if (priv->isEphemeral && !webkit_web_context_is_ephemeral(priv->context.get()))
+        priv->websiteDataManager = adoptGRef(webkit_website_data_manager_new_ephemeral());
+
     webkitWebContextCreatePageForWebView(priv->context.get(), webView, priv->userContentManager.get(), priv->relatedView);
 
     priv->loadObserver = std::make_unique<PageLoadStateObserver>(webView);
@@ -701,6 +711,9 @@
     case PROP_ZOOM_LEVEL:
         webkit_web_view_set_zoom_level(webView, g_value_get_double(value));
         break;
+    case PROP_IS_EPHEMERAL:
+        webView->priv->isEphemeral = g_value_get_boolean(value);
+        break;
     case PROP_EDITABLE:
         webkit_web_view_set_editable(webView, g_value_get_boolean(value));
         break;
@@ -744,6 +757,9 @@
     case PROP_IS_PLAYING_AUDIO:
         g_value_set_boolean(value, webkit_web_view_is_playing_audio(webView));
         break;
+    case PROP_IS_EPHEMERAL:
+        g_value_set_boolean(value, webkit_web_view_is_ephemeral(webView));
+        break;
     case PROP_EDITABLE:
         g_value_set_boolean(value, webkit_web_view_is_editable(webView));
         break;
@@ -976,6 +992,29 @@
             WEBKIT_PARAM_READABLE));
 
     /**
+     * WebKitWebView:is-ephemeral:
+     *
+     * Whether the #WebKitWebView is ephemeral. An ephemeral web view never writes
+     * website data to the client storage, no matter what #WebKitWebsiteDataManager
+     * its context is using. This is normally used to implement private browsing mode.
+     * This is a %G_PARAM_CONSTRUCT_ONLY property, so you have to create a ephemeral
+     * #WebKitWebView and it can't be changed. Note that all #WebKitWebView<!-- -->s
+     * created with an ephemeral #WebKitWebContext will be ephemeral automatically.
+     * See also webkit_web_context_new_ephemeral().
+     *
+     * Since: 2.16
+     */
+    g_object_class_install_property(
+        gObjectClass,
+        PROP_IS_EPHEMERAL,
+        g_param_spec_boolean(
+            "is-ephemeral",
+            "Is Ephemeral",
+            _("Whether the web view is ephemeral"),
+            FALSE,
+            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+    /**
      * WebKitWebView:editable:
      *
      * Whether the pages loaded inside #WebKitWebView are editable. For more
@@ -2021,7 +2060,9 @@
 
 void webkitWebViewHandleAuthenticationChallenge(WebKitWebView* webView, AuthenticationChallengeProxy* authenticationChallenge)
 {
-    gboolean privateBrowsingEnabled = webkit_settings_get_enable_private_browsing(webView->priv->settings.get());
+    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+    gboolean privateBrowsingEnabled = webView->priv->isEphemeral || webkit_settings_get_enable_private_browsing(webView->priv->settings.get());
+    G_GNUC_END_IGNORE_DEPRECATIONS;
     webView->priv->authenticationRequest = adoptGRef(webkitAuthenticationRequestCreate(authenticationChallenge, privateBrowsingEnabled));
     gboolean returnValue;
     g_signal_emit(webView, signals[AUTHENTICATE], 0, webView->priv->authenticationRequest.get(), &returnValue);
@@ -2064,6 +2105,11 @@
 #endif
 }
 
+WebKitWebsiteDataManager* webkitWebViewGetWebsiteDataManager(WebKitWebView* webView)
+{
+    return webView->priv->websiteDataManager.get();
+}
+
 /**
  * webkit_web_view_new:
  *
@@ -2095,7 +2141,10 @@
 {
     g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), 0);
 
-    return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW, "web-context", context, NULL));
+    return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+        "is-ephemeral", webkit_web_context_is_ephemeral(context),
+        "web-context", context,
+        nullptr));
 }
 
 /**
@@ -2199,6 +2248,27 @@
 }
 
 /**
+ * webkit_web_view_is_ephemeral:
+ * @web_view: a #WebKitWebView
+ *
+ * Get whether a #WebKitWebView is ephemeral. To create an ephemeral #WebKitWebView you need to
+ * use g_object_new() and pass is-ephemeral propery with %TRUE value. See
+ * #WebKitWebView:is-ephemeral for more details.
+ * If @web_view was created with a ephemeral #WebKitWebView:related-view or an
+ * ephemeral #WebKitWebView:web-context it will also be ephemeral.
+ *
+ * Returns: %TRUE if @web_view is ephemeral or %FALSE otherwise.
+ *
+ * Since: 2.16
+ */
+gboolean webkit_web_view_is_ephemeral(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+    return webView->priv->isEphemeral;
+}
+
+/**
  * webkit_web_view_try_close:
  * @web_view: a #WebKitWebView
  *

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h	2017-01-25 08:01:08 UTC (rev 211138)
@@ -274,6 +274,9 @@
 WEBKIT_API GtkWidget *
 webkit_web_view_new_with_user_content_manager        (WebKitUserContentManager  *user_content_manager);
 
+WEBKIT_API gboolean
+webkit_web_view_is_ephemeral                         (WebKitWebView             *web_view);
+
 WEBKIT_API WebKitWebContext *
 webkit_web_view_get_context                          (WebKitWebView             *web_view);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h	2017-01-25 08:01:08 UTC (rev 211138)
@@ -66,5 +66,6 @@
 void webkitWebViewIsPlayingAudioChanged(WebKitWebView*);
 void webkitWebViewSelectionDidChange(WebKitWebView*);
 void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView*, WebKit::InstallMissingMediaPluginsPermissionRequest&);
+WebKitWebsiteDataManager* webkitWebViewGetWebsiteDataManager(WebKitWebView*);
 
 #endif // WebKitWebViewPrivate_h

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -56,6 +56,12 @@
  * with the default configuration. To get the WebKitWebsiteDataManager of a #WebKitWebContext
  * you can use webkit_web_context_get_website_data_manager().
  *
+ * A WebKitWebsiteDataManager can also be ephemeral and then all the directories configuration
+ * is not needed because website data will never persist. You can create an ephemeral WebKitWebsiteDataManager
+ * with webkit_website_data_manager_new_ephemeral(). Then you can pass an ephemeral WebKitWebsiteDataManager to
+ * a #WebKitWebContext to make it ephemeral or use webkit_web_context_new_ephemeral() and the WebKitWebsiteDataManager
+ * will be automatically created by the #WebKitWebContext.
+ *
  * WebKitWebsiteDataManager can also be used to fetch websites data, remove data
  * stored by particular websites, or clear data for all websites modified since a given
  * period of time.
@@ -72,7 +78,8 @@
     PROP_DISK_CACHE_DIRECTORY,
     PROP_APPLICATION_CACHE_DIRECTORY,
     PROP_INDEXEDDB_DIRECTORY,
-    PROP_WEBSQL_DIRECTORY
+    PROP_WEBSQL_DIRECTORY,
+    PROP_IS_EPHEMERAL
 };
 
 struct _WebKitWebsiteDataManagerPrivate {
@@ -114,6 +121,9 @@
     case PROP_WEBSQL_DIRECTORY:
         g_value_set_string(value, webkit_website_data_manager_get_websql_directory(manager));
         break;
+    case PROP_IS_EPHEMERAL:
+        g_value_set_boolean(value, webkit_website_data_manager_is_ephemeral(manager));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
     }
@@ -145,6 +155,10 @@
     case PROP_WEBSQL_DIRECTORY:
         manager->priv->webSQLDirectory.reset(g_value_dup_string(value));
         break;
+    case PROP_IS_EPHEMERAL:
+        if (g_value_get_boolean(value))
+            manager->priv->websiteDataStore = API::WebsiteDataStore::createNonPersistentDataStore();
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
     }
@@ -300,6 +314,26 @@
             _("The directory where WebSQL databases will be stored"),
             nullptr,
             static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+    /**
+     * WebKitWebsiteDataManager:is-ephemeral:
+     *
+     * Whether the #WebKitWebsiteDataManager is ephemeral. An ephemeral #WebKitWebsiteDataManager
+     * handles all websites data as non-persistent, and nothing will be written to the client
+     * storage. Note that if you create an ephemeral #WebKitWebsiteDataManager all other construction
+     * parameters to configure data directories will be ignored.
+     *
+     * Since: 2.16
+     */
+    g_object_class_install_property(
+        gObjectClass,
+        PROP_IS_EPHEMERAL,
+        g_param_spec_boolean(
+            "is-ephemeral",
+            "Is Ephemeral",
+            _("Whether the WebKitWebsiteDataManager is ephemeral"),
+            FALSE,
+            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
 }
 
 WebKitWebsiteDataManager* webkitWebsiteDataManagerCreate(WebsiteDataStore::Configuration&& configuration)
@@ -353,13 +387,44 @@
 }
 
 /**
+ * webkit_website_data_manager_new_ephemeral:
+ *
+ * Creates an ephemeral #WebKitWebsiteDataManager. See #WebKitWebsiteDataManager:is-ephemeral for more details.
+ *
+ * Returns: (transfer full): a new ephemeral #WebKitWebsiteDataManager.
+ *
+ * Since: 2.16
+ */
+WebKitWebsiteDataManager* webkit_website_data_manager_new_ephemeral()
+{
+    return WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, "is-ephemeral", TRUE, nullptr));
+}
+
+/**
+ * webkit_website_data_manager_is_ephemeral:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get whether a #WebKitWebsiteDataManager is ephemeral. See #WebKitWebsiteDataManager::is-ephemerla for more details.
+ *
+ * Returns: %TRUE if @manager is epheral or %FALSE otherwise.
+ *
+ * Since: 2.16
+ */
+gboolean webkit_website_data_manager_is_ephemeral(WebKitWebsiteDataManager* manager)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), FALSE);
+
+    return manager->priv->websiteDataStore && !manager->priv->websiteDataStore->isPersistent();
+}
+
+/**
  * webkit_website_data_manager_get_base_data_directory:
  * @manager: a #WebKitWebsiteDataManager
  *
  * Get the #WebKitWebsiteDataManager:base-data-directory property.
  *
- * Returns: the base directory for Website data, or %NULL if
- *    #WebKitWebsiteDataManager:base-data-directory was not provided.
+ * Returns: (allow-none): the base directory for Website data, or %NULL if
+ *    #WebKitWebsiteDataManager:base-data-directory was not provided or @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -367,6 +432,9 @@
 {
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
+    if (manager->priv->websiteDataStore && !manager->priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     return manager->priv->baseDataDirectory.get();
 }
 
@@ -376,8 +444,8 @@
  *
  * Get the #WebKitWebsiteDataManager:base-cache-directory property.
  *
- * Returns: the base directory for Website cache, or %NULL if
- *    #WebKitWebsiteDataManager:base-cache-directory was not provided.
+ * Returns: (allow-none): the base directory for Website cache, or %NULL if
+ *    #WebKitWebsiteDataManager:base-cache-directory was not provided or @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -385,6 +453,9 @@
 {
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
+    if (manager->priv->websiteDataStore && !manager->priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     return manager->priv->baseCacheDirectory.get();
 }
 
@@ -394,7 +465,7 @@
  *
  * Get the #WebKitWebsiteDataManager:local-storage-directory property.
  *
- * Returns: the directory where local storage data is stored.
+ * Returns: (allow-none): the directory where local storage data is stored or %NULL if @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -403,6 +474,9 @@
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
     WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     if (!priv->localStorageDirectory)
         priv->localStorageDirectory.reset(g_strdup(API::WebsiteDataStore::defaultLocalStorageDirectory().utf8().data()));
     return priv->localStorageDirectory.get();
@@ -414,7 +488,7 @@
  *
  * Get the #WebKitWebsiteDataManager:disk-cache-directory property.
  *
- * Returns: the directory where HTTP disk cache is stored.
+ * Returns: (allow-none): the directory where HTTP disk cache is stored or %NULL if @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -423,6 +497,9 @@
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
     WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     if (!priv->diskCacheDirectory) {
         // The default directory already has the subdirectory.
         priv->diskCacheDirectory.reset(g_strdup(WebCore::directoryName(API::WebsiteDataStore::defaultNetworkCacheDirectory()).utf8().data()));
@@ -436,7 +513,7 @@
  *
  * Get the #WebKitWebsiteDataManager:offline-application-cache-directory property.
  *
- * Returns: the directory where offline web application cache is stored.
+ * Returns: (allow-none): the directory where offline web application cache is stored or %NULL if @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -445,6 +522,9 @@
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
     WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     if (!priv->applicationCacheDirectory)
         priv->applicationCacheDirectory.reset(g_strdup(API::WebsiteDataStore::defaultApplicationCacheDirectory().utf8().data()));
     return priv->applicationCacheDirectory.get();
@@ -456,7 +536,7 @@
  *
  * Get the #WebKitWebsiteDataManager:indexeddb-directory property.
  *
- * Returns: the directory where IndexedDB databases are stored.
+ * Returns: (allow-none): the directory where IndexedDB databases are stored or %NULL if @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -465,6 +545,9 @@
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
     WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     if (!priv->indexedDBDirectory)
         priv->indexedDBDirectory.reset(g_strdup(API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory().utf8().data()));
     return priv->indexedDBDirectory.get();
@@ -476,7 +559,7 @@
  *
  * Get the #WebKitWebsiteDataManager:websql-directory property.
  *
- * Returns: the directory where WebSQL databases are stored.
+ * Returns: (allow-none): the directory where WebSQL databases are stored or %NULL if @manager is ephemeral.
  *
  * Since: 2.10
  */
@@ -485,6 +568,9 @@
     g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
 
     WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
+        return nullptr;
+
     if (!priv->webSQLDirectory)
         priv->webSQLDirectory.reset(g_strdup(API::WebsiteDataStore::defaultWebSQLDatabaseDirectory().utf8().data()));
     return priv->webSQLDirectory.get();

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h	2017-01-25 08:01:08 UTC (rev 211138)
@@ -62,6 +62,12 @@
 WEBKIT_API WebKitWebsiteDataManager *
 webkit_website_data_manager_new                                       (const gchar              *first_option_name,
                                                                        ...);
+WEBKIT_API WebKitWebsiteDataManager *
+webkit_website_data_manager_new_ephemeral                             (void);
+
+WEBKIT_API gboolean
+webkit_website_data_manager_is_ephemeral                              (WebKitWebsiteDataManager* manager);
+
 WEBKIT_API const gchar *
 webkit_website_data_manager_get_base_data_directory                   (WebKitWebsiteDataManager *manager);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (211137 => 211138)


--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2017-01-25 08:01:08 UTC (rev 211138)
@@ -30,7 +30,9 @@
 WebKitNetworkProxyMode
 webkit_web_context_get_default
 webkit_web_context_new
+webkit_web_context_new_ephemeral
 webkit_web_context_new_with_website_data_manager
+webkit_web_context_is_ephemeral
 webkit_web_context_get_website_data_manager
 webkit_web_context_get_cache_model
 webkit_web_context_set_cache_model
@@ -158,6 +160,7 @@
 webkit_web_view_new_with_related_view
 webkit_web_view_new_with_settings
 webkit_web_view_new_with_user_content_manager
+webkit_web_view_is_ephemeral
 webkit_web_view_get_context
 webkit_web_view_get_user_content_manager
 webkit_web_view_try_close
@@ -1237,6 +1240,8 @@
 <FILE>WebKitWebsiteDataManager</FILE>
 WebKitWebsiteDataManager
 webkit_website_data_manager_new
+webkit_website_data_manager_new_ephemeral
+webkit_website_data_manager_is_ephemeral
 webkit_website_data_manager_get_base_data_directory
 webkit_website_data_manager_get_base_cache_directory
 webkit_website_data_manager_get_local_storage_directory

Modified: trunk/Tools/ChangeLog (211137 => 211138)


--- trunk/Tools/ChangeLog	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/ChangeLog	2017-01-25 08:01:08 UTC (rev 211138)
@@ -1,3 +1,34 @@
+2017-01-24  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Add API to create ephemeral web views and deprecate the private browsing setting
+        https://bugs.webkit.org/show_bug.cgi?id=167370
+
+        Reviewed by Michael Catanzaro.
+
+        Add several test cases of ephemeral web views.
+
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
+        (testWebViewAuthenticationStorage):
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
+        (ephemeralViewloadChanged):
+        (testCookieManagerEphemeral):
+        (beforeAll):
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
+        (testWebKitSettings):
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
+        (testWebContextEphemeral):
+        (ephemeralViewloadChanged):
+        (testWebContextProxySettings):
+        (beforeAll):
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
+        (ephemeralViewloadChanged):
+        (testWebViewEphemeral):
+        (beforeAll):
+        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:
+        (ephemeralViewloadChanged):
+        (testWebsiteDataEphemeral):
+        (beforeAll):
+
 2017-01-24  Alex Christensen  <[email protected]>
 
         REGRESSION (r208902): URLWithUserTypedString returns nil with file URLs

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp (211137 => 211138)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -187,7 +187,9 @@
 static void testWebViewAuthenticationStorage(AuthenticationTest* test, gconstpointer)
 {
     // Enable private browsing before authentication request to test that credentials can't be saved.
+    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
     webkit_settings_set_enable_private_browsing(webkit_web_view_get_settings(test->m_webView), TRUE);
+    G_GNUC_END_IGNORE_DEPRECATIONS;
     test->loadURI(kServer->getURIForPath("/auth-test.html").data());
     WebKitAuthenticationRequest* request = test->waitForAuthenticationRequest();
     g_assert(!webkit_authentication_request_get_proposed_credential(request));
@@ -196,7 +198,9 @@
     // If WebKit has been compiled with libsecret, and private browsing is disabled
     // then check that credentials can be saved.
 #if USE(LIBSECRET)
+    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
     webkit_settings_set_enable_private_browsing(webkit_web_view_get_settings(test->m_webView), FALSE);
+    G_GNUC_END_IGNORE_DEPRECATIONS;
     test->loadURI(kServer->getURIForPath("/auth-test.html").data());
     request = test->waitForAuthenticationRequest();
     g_assert(!webkit_authentication_request_get_proposed_credential(request));

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp (211137 => 211138)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -290,6 +290,38 @@
     g_assert_cmpint(g_strv_length(test->getDomains()), ==, 0);
 }
 
+static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
+{
+    if (loadEvent != WEBKIT_LOAD_FINISHED)
+        return;
+    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
+    test->quitMainLoop();
+}
+
+static void testCookieManagerEphemeral(CookieManagerTest* test, gconstpointer)
+{
+    test->setAcceptPolicy(WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS);
+    test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT);
+    char** domains = test->getDomains();
+    g_assert(domains);
+    g_assert_cmpint(g_strv_length(domains), ==, 0);
+
+    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+        "web-context", webkit_web_view_get_context(test->m_webView),
+        "is-ephemeral", TRUE,
+        nullptr));
+    g_assert(webkit_web_view_is_ephemeral(webView.get()));
+    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(webView.get())));
+
+    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
+    webkit_web_view_load_uri(webView.get(), kServer->getURIForPath("/index.html").data());
+    g_main_loop_run(test->m_mainLoop);
+
+    domains = test->getDomains();
+    g_assert(domains);
+    g_assert_cmpint(g_strv_length(domains), ==, 0);
+}
+
 static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
 {
     if (message->method != SOUP_METHOD_GET) {
@@ -318,6 +350,7 @@
     CookieManagerTest::add("WebKitCookieManager", "delete-cookies", testCookieManagerDeleteCookies);
     CookieManagerTest::add("WebKitCookieManager", "cookies-changed", testCookieManagerCookiesChanged);
     CookieManagerTest::add("WebKitCookieManager", "persistent-storage", testCookieManagerPersistentStorage);
+    CookieManagerTest::add("WebKitCookieManager", "ephemeral", testCookieManagerEphemeral);
 }
 
 void afterAll()

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp (211137 => 211138)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -158,9 +158,11 @@
     webkit_settings_set_default_charset(settings, "utf8");
     g_assert_cmpstr(webkit_settings_get_default_charset(settings), ==, "utf8");
 
+    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
     g_assert(!webkit_settings_get_enable_private_browsing(settings));
     webkit_settings_set_enable_private_browsing(settings, TRUE);
     g_assert(webkit_settings_get_enable_private_browsing(settings));
+    G_GNUC_END_IGNORE_DEPRECATIONS;
 
     g_assert(!webkit_settings_get_enable_developer_extras(settings));
     webkit_settings_set_enable_developer_extras(settings, TRUE);

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp (211137 => 211138)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -40,6 +40,40 @@
     g_assert(webkit_web_context_get_default() != test->m_webContext.get());
 }
 
+static void testWebContextEphemeral(Test* test, gconstpointer)
+{
+    // By default web contexts are not ephemeral.
+    g_assert(!webkit_web_context_is_ephemeral(webkit_web_context_get_default()));
+    g_assert(!webkit_web_context_is_ephemeral(test->m_webContext.get()));
+
+    WebKitWebsiteDataManager* manager = webkit_web_context_get_website_data_manager(webkit_web_context_get_default());
+    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
+    g_assert(!webkit_website_data_manager_is_ephemeral(manager));
+    manager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
+    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
+    g_assert(!webkit_website_data_manager_is_ephemeral(manager));
+
+    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
+    g_assert(!webkit_web_view_is_ephemeral(webView.get()));
+
+    webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(test->m_webContext.get()));
+    g_assert(!webkit_web_view_is_ephemeral(webView.get()));
+
+    GRefPtr<WebKitWebContext> context = adoptGRef(webkit_web_context_new_ephemeral());
+    g_assert(webkit_web_context_is_ephemeral(context.get()));
+    manager = webkit_web_context_get_website_data_manager(context.get());
+    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
+    g_assert(webkit_website_data_manager_is_ephemeral(manager));
+
+    webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(context.get()));
+    g_assert(webkit_web_view_is_ephemeral(webView.get()));
+
+    GRefPtr<WebKitWebsiteDataManager> ephemeralManager = adoptGRef(webkit_website_data_manager_new_ephemeral());
+    g_assert(webkit_website_data_manager_is_ephemeral(ephemeralManager.get()));
+    context = adoptGRef(webkit_web_context_new_with_website_data_manager(ephemeralManager.get()));
+    g_assert(webkit_web_context_is_ephemeral(context.get()));
+}
+
 class PluginsTest: public Test {
 public:
     MAKE_GLIB_TEST_FIXTURE(PluginsTest);
@@ -642,6 +676,14 @@
     WebKitTestServer m_proxyServer;
 };
 
+static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
+{
+    if (loadEvent != WEBKIT_LOAD_FINISHED)
+        return;
+    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
+    test->quitMainLoop();
+}
+
 static void testWebContextProxySettings(ProxyTest* test, gconstpointer)
 {
     // Proxy URI is unset by default. Requests to kServer should be received by kServer.
@@ -658,6 +700,30 @@
     ASSERT_CMP_CSTRING(mainResourceData, ==, proxyServerPortAsString.get());
     webkit_network_proxy_settings_free(settings);
 
+    // Proxy settings also affect ephemeral web views.
+    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+        "web-context", test->m_webContext.get(),
+        "is-ephemeral", TRUE,
+        nullptr));
+    g_assert(webkit_web_view_is_ephemeral(webView.get()));
+    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(webView.get())));
+
+    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
+    webkit_web_view_load_uri(webView.get(), kServer->getURIForPath("/echoPort").data());
+    g_main_loop_run(test->m_mainLoop);
+    WebKitWebResource* resource = webkit_web_view_get_main_resource(webView.get());
+    g_assert(WEBKIT_IS_WEB_RESOURCE(resource));
+    webkit_web_resource_get_data(resource, nullptr, [](GObject* object, GAsyncResult* result, gpointer userData) {
+        size_t dataSize;
+        GUniquePtr<char> data(reinterpret_cast<char*>(webkit_web_resource_get_data_finish(WEBKIT_WEB_RESOURCE(object), result, &dataSize, nullptr)));
+        g_assert(data);
+        auto* test = static_cast<ProxyTest*>(userData);
+        GUniquePtr<char> proxyServerPortAsString = test->proxyServerPortAsString();
+        ASSERT_CMP_CSTRING(CString(data.get(), dataSize), ==, proxyServerPortAsString.get());
+        test->quitMainLoop();
+        }, test);
+    g_main_loop_run(test->m_mainLoop);
+
     // Remove the proxy. Requests to kServer should be received by kServer again.
     webkit_web_context_set_network_proxy_settings(test->m_webContext.get(), WEBKIT_NETWORK_PROXY_MODE_NO_PROXY, nullptr);
     mainResourceData = test->loadURIAndGetMainResourceData(kServer->getURIForPath("/echoPort").data());
@@ -699,6 +765,7 @@
     kServer->run(serverCallback);
 
     Test::add("WebKitWebContext", "default-context", testWebContextDefault);
+    Test::add("WebKitWebContext", "ephemeral", testWebContextEphemeral);
     PluginsTest::add("WebKitWebContext", "get-plugins", testWebContextGetPlugins);
     URISchemeTest::add("WebKitWebContext", "uri-scheme", testWebContextURIScheme);
     Test::add("WebKitWebContext", "spell-checker", testWebContextSpellChecker);

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp (211137 => 211138)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -94,6 +94,51 @@
     g_object_unref(webContext2);
 }
 
+static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
+{
+    if (loadEvent != WEBKIT_LOAD_FINISHED)
+        return;
+    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
+    test->quitMainLoop();
+}
+
+static void testWebViewEphemeral(WebViewTest* test, gconstpointer)
+{
+    g_assert(!webkit_web_view_is_ephemeral(test->m_webView));
+    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(test->m_webView)));
+    auto* manager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
+    g_assert(!webkit_website_data_manager_is_ephemeral(manager));
+    webkit_website_data_manager_clear(manager, WEBKIT_WEBSITE_DATA_DISK_CACHE, 0, nullptr, [](GObject* manager, GAsyncResult* result, gpointer userData) {
+        webkit_website_data_manager_clear_finish(WEBKIT_WEBSITE_DATA_MANAGER(manager), result, nullptr);
+        static_cast<WebViewTest*>(userData)->quitMainLoop();
+    }, test);
+    g_main_loop_run(test->m_mainLoop);
+
+    // A WebView on a non ephemeral context can be ephemeral.
+    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+        "web-context", webkit_web_view_get_context(test->m_webView),
+        "is-ephemeral", TRUE,
+        nullptr));
+    g_assert(webkit_web_view_is_ephemeral(webView.get()));
+    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(webView.get())));
+
+    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
+    webkit_web_view_load_uri(webView.get(), gServer->getURIForPath("/").data());
+    g_main_loop_run(test->m_mainLoop);
+
+    // Disk cache delays the storing of initial resources for 1 second to avoid
+    // affecting early page load. So, wait 1 second here to make sure resources
+    // have already been stored.
+    test->wait(1);
+
+    webkit_website_data_manager_fetch(manager, WEBKIT_WEBSITE_DATA_DISK_CACHE, nullptr, [](GObject* manager, GAsyncResult* result, gpointer userData) {
+        auto* test = static_cast<WebViewTest*>(userData);
+        g_assert(!webkit_website_data_manager_fetch_finish(WEBKIT_WEBSITE_DATA_MANAGER(manager), result, nullptr));
+        test->quitMainLoop();
+    }, test);
+    g_main_loop_run(test->m_mainLoop);
+}
+
 static void testWebViewCustomCharset(WebViewTest* test, gconstpointer)
 {
     test->loadURI(gServer->getURIForPath("/").data());
@@ -1014,6 +1059,7 @@
 
     WebViewTest::add("WebKitWebView", "web-context", testWebViewWebContext);
     WebViewTest::add("WebKitWebView", "web-context-lifetime", testWebViewWebContextLifetime);
+    WebViewTest::add("WebKitWebView", "ephemeral", testWebViewEphemeral);
     WebViewTest::add("WebKitWebView", "custom-charset", testWebViewCustomCharset);
     WebViewTest::add("WebKitWebView", "settings", testWebViewSettings);
     WebViewTest::add("WebKitWebView", "zoom-level", testWebViewZoomLevel);

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp (211137 => 211138)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp	2017-01-25 07:49:49 UTC (rev 211137)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp	2017-01-25 08:01:08 UTC (rev 211138)
@@ -207,6 +207,57 @@
     g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(baseDataManager.get()), ==, Test::dataDirectory());
 }
 
+static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
+{
+    if (loadEvent != WEBKIT_LOAD_FINISHED)
+        return;
+    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
+    test->quitMainLoop();
+}
+
+static void testWebsiteDataEphemeral(WebViewTest* test, gconstpointer)
+{
+    GRefPtr<WebKitWebsiteDataManager> manager = adoptGRef(webkit_website_data_manager_new_ephemeral());
+    g_assert(webkit_website_data_manager_is_ephemeral(manager.get()));
+    g_assert(!webkit_website_data_manager_get_base_data_directory(manager.get()));
+    g_assert(!webkit_website_data_manager_get_base_cache_directory(manager.get()));
+    g_assert(!webkit_website_data_manager_get_local_storage_directory(manager.get()));
+    g_assert(!webkit_website_data_manager_get_disk_cache_directory(manager.get()));
+    g_assert(!webkit_website_data_manager_get_offline_application_cache_directory(manager.get()));
+    g_assert(!webkit_website_data_manager_get_indexeddb_directory(manager.get()));
+    g_assert(!webkit_website_data_manager_get_websql_directory(manager.get()));
+
+    // Configuration is ignored when is-ephemeral is used.
+    manager = adoptGRef(WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, "base-data-directory", Test::dataDirectory(), "is-ephemeral", TRUE, nullptr)));
+    g_assert(webkit_website_data_manager_is_ephemeral(manager.get()));
+    g_assert(!webkit_website_data_manager_get_base_data_directory(manager.get()));
+
+    // Non persistent data can be queried in an ephemeral manager.
+    GRefPtr<WebKitWebContext> webContext = adoptGRef(webkit_web_context_new_with_website_data_manager(manager.get()));
+    g_assert(webkit_web_context_is_ephemeral(webContext.get()));
+    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webContext.get()));
+    g_assert(webkit_web_view_is_ephemeral(webView.get()));
+
+    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
+    webkit_web_view_load_uri(webView.get(), kServer->getURIForPath("/empty").data());
+    g_main_loop_run(test->m_mainLoop);
+
+    webkit_website_data_manager_fetch(manager.get(), WEBKIT_WEBSITE_DATA_MEMORY_CACHE, nullptr, [](GObject* manager, GAsyncResult* result, gpointer userData) {
+        auto* test = static_cast<WebViewTest*>(userData);
+        GList* dataList = webkit_website_data_manager_fetch_finish(WEBKIT_WEBSITE_DATA_MANAGER(manager), result, nullptr);
+        g_assert(dataList);
+        g_assert_cmpuint(g_list_length(dataList), ==, 1);
+        WebKitWebsiteData* data = ""
+        g_assert(data);
+        WebKitSecurityOrigin* origin = webkit_security_origin_new_for_uri(kServer->getURIForPath("/").data());
+        g_assert_cmpstr(webkit_website_data_get_name(data), ==, webkit_security_origin_get_host(origin));
+        webkit_security_origin_unref(origin);
+        g_list_free_full(dataList, reinterpret_cast<GDestroyNotify>(webkit_website_data_unref));
+        test->quitMainLoop();
+    }, test);
+    g_main_loop_run(test->m_mainLoop);
+}
+
 static void testWebsiteDataCache(WebsiteDataTest* test, gconstpointer)
 {
     static const WebKitWebsiteDataTypes cacheTypes = static_cast<WebKitWebsiteDataTypes>(WEBKIT_WEBSITE_DATA_MEMORY_CACHE | WEBKIT_WEBSITE_DATA_DISK_CACHE);
@@ -440,6 +491,7 @@
     kServer->run(serverCallback);
 
     WebsiteDataTest::add("WebKitWebsiteData", "configuration", testWebsiteDataConfiguration);
+    WebViewTest::add("WebKitWebsiteData", "ephemeral", testWebsiteDataEphemeral);
     WebsiteDataTest::add("WebKitWebsiteData", "cache", testWebsiteDataCache);
     WebsiteDataTest::add("WebKitWebsiteData", "storage", testWebsiteDataStorage);
     WebsiteDataTest::add("WebKitWebsiteData", "databases", testWebsiteDataDatabases);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to