⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 211138 in webkit


Ignore:
Timestamp:
Jan 25, 2017, 12:01:08 AM (10 years ago)
Author:
Carlos Garcia Campos
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):

Location:
trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r211135 r211138  
     12017-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add API to create ephemeral web views and deprecate the private browsing setting
     4        https://bugs.webkit.org/show_bug.cgi?id=167370
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Add API to create ephemeral WebKitWebView, WebKitWebsiteDataManager and WebKitWebContext.
     9
     10        * UIProcess/API/gtk/WebKitSettings.cpp:
     11        (webKitSettingsSetProperty): Ignore deprecation warnings.
     12        (webKitSettingsGetProperty): Ditto.
     13        (webkit_settings_class_init): Mark WebKitSettings:enable-private-browsing as deprecated.
     14        * UIProcess/API/gtk/WebKitSettings.h:
     15        * UIProcess/API/gtk/WebKitWebContext.cpp:
     16        (webkit_web_context_new_ephemeral): Create an ephemeral WebKitWebContext. This is just a convenient method to
     17        create a WebKitWebContext with an ephemeral WebKitWebsiteDataManager without having to deal with the manager.
     18        (webkit_web_context_is_ephemeral): Return whether the context is ephemeral.
     19        (webkitWebContextCreatePageForWebView): Configure page with the web view WebKitWebsiteDataManager if it has one.
     20        * UIProcess/API/gtk/WebKitWebContext.h:
     21        * UIProcess/API/gtk/WebKitWebView.cpp:
     22        (webkitWebViewConstructed): Check if the WebView is or should be ephemeral and create a non persistent website
     23        data manager if it's an ephemeral web view in a non ephemeral web context.
     24        (webkitWebViewSetProperty): Add setter for is-ephemeral property.
     25        (webkitWebViewGetProperty): Add getter for is-ephemeral property.
     26        (webkit_web_view_class_init): Add is-ephemeral property.
     27        (webkitWebViewHandleAuthenticationChallenge): Check also whether web view is ephemeral.
     28        (webkitWebViewGetWebsiteDataManager): Helper private to return the web view data manager.
     29        (webkit_web_view_new_with_context): Also set is-ephemeral property depending on the context.
     30        (webkit_web_view_is_ephemeral): Return whether the view is ephemeral.
     31        * UIProcess/API/gtk/WebKitWebView.h:
     32        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
     33        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
     34        (webkitWebsiteDataManagerGetProperty): Add setter for is-ephemeral property.
     35        (webkitWebsiteDataManagerSetProperty): Add getter for is-ephemeral property.
     36        (webkit_website_data_manager_class_init): Add is-ephemeral property.
     37        (webkit_website_data_manager_new_ephemeral): Create a new ephemeral WebKitWebsiteDataManager.
     38        (webkit_website_data_manager_is_ephemeral): Return whether the website data manager is ephemeral.
     39        (webkit_website_data_manager_get_base_data_directory): Return nullptr if manager is ephemeral.
     40        (webkit_website_data_manager_get_base_cache_directory): Ditto.
     41        (webkit_website_data_manager_get_local_storage_directory): Ditto.
     42        (webkit_website_data_manager_get_disk_cache_directory): Ditto.
     43        (webkit_website_data_manager_get_offline_application_cache_directory): Ditto.
     44        (webkit_website_data_manager_get_indexeddb_directory): Ditto.
     45        (webkit_website_data_manager_get_websql_directory): Ditto.
     46        * UIProcess/API/gtk/WebKitWebsiteDataManager.h:
     47        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
     48
    1492017-01-24  Zalan Bujtas  <zalan@apple.com>
    250
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp

    r210500 r211138  
    236236        break;
    237237    case PROP_ENABLE_PRIVATE_BROWSING:
     238        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
    238239        webkit_settings_set_enable_private_browsing(settings, g_value_get_boolean(value));
     240        G_GNUC_END_IGNORE_DEPRECATIONS;
    239241        break;
    240242    case PROP_ENABLE_DEVELOPER_EXTRAS:
     
    403405        break;
    404406    case PROP_ENABLE_PRIVATE_BROWSING:
     407        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
    405408        g_value_set_boolean(value, webkit_settings_get_enable_private_browsing(settings));
     409        G_GNUC_END_IGNORE_DEPRECATIONS;
    406410        break;
    407411    case PROP_ENABLE_DEVELOPER_EXTRAS:
     
    832836     * Determines whether or not private browsing is enabled. Private browsing
    833837     * will disable history, cache and form auto-fill for any pages visited.
     838     *
     839     * Deprecated: 2.16. Use #WebKitWebView:is-ephemeral or #WebKitWebContext:is-ephemeral instead.
    834840     */
    835841    g_object_class_install_property(gObjectClass,
     
    21442150 *
    21452151 * Returns: %TRUE If private browsing is enabled or %FALSE otherwise.
     2152 *
     2153 * Deprecated: 2.16. Use #WebKitWebView:is-ephemeral or #WebKitWebContext:is-ephemeral instead.
    21462154 */
    21472155gboolean webkit_settings_get_enable_private_browsing(WebKitSettings* settings)
     
    21532161
    21542162/**
    2155  * webkit_settings_set_private_caret_browsing:
     2163 * webkit_settings_set_enable_private_browsing:
    21562164 * @settings: a #WebKitSettings
    21572165 * @enabled: Value to be set
    21582166 *
    21592167 * Set the #WebKitSettings:enable-private-browsing property.
     2168 *
     2169 * Deprecated: 2.16. Use #WebKitWebView:is-ephemeral or #WebKitWebContext:is-ephemeral instead.
    21602170 */
    21612171void webkit_settings_set_enable_private_browsing(WebKitSettings* settings, gboolean enabled)
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.h

    r199795 r211138  
    237237                                                                const gchar    *default_charset);
    238238
    239 WEBKIT_API gboolean
     239WEBKIT_DEPRECATED gboolean
    240240webkit_settings_get_enable_private_browsing                    (WebKitSettings *settings);
    241241
    242 WEBKIT_API void
     242WEBKIT_DEPRECATED void
    243243webkit_settings_set_enable_private_browsing                    (WebKitSettings *settings,
    244244                                                                gboolean        enabled);
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp

    r210921 r211138  
    259259    WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object);
    260260    WebKitWebContextPrivate* priv = webContext->priv;
    261     if (priv->websiteDataManager) {
     261    if (priv->websiteDataManager && !webkit_website_data_manager_is_ephemeral(priv->websiteDataManager.get())) {
    262262        configuration.setLocalStorageDirectory(WebCore::stringFromFileSystemRepresentation(webkit_website_data_manager_get_local_storage_directory(priv->websiteDataManager.get())));
    263263        configuration.setDiskCacheDirectory(WebCore::pathByAppendingComponent(WebCore::stringFromFileSystemRepresentation(webkit_website_data_manager_get_disk_cache_directory(priv->websiteDataManager.get())), networkCacheSubdirectory));
     
    450450
    451451/**
     452 * webkit_web_context_new_ephemeral:
     453 *
     454 * Create a new ephemeral #WebKitWebContext. An ephemeral #WebKitWebContext is a context
     455 * created with an ephemeral #WebKitWebsiteDataManager. This is just a convenient method
     456 * to create ephemeral contexts without having to create your own #WebKitWebsiteDataManager.
     457 * All #WebKitWebView<!-- ->s associated with this context will also be ephemeral. Websites will
     458 * not store any data in the client storage.
     459 * This is normally used to implement private instances.
     460 *
     461 * Returns: (transfer full): a new ephemeral #WebKitWebContext.
     462 *
     463 * Since: 2.16
     464 */
     465WebKitWebContext* webkit_web_context_new_ephemeral()
     466{
     467    GRefPtr<WebKitWebsiteDataManager> manager = adoptGRef(webkit_website_data_manager_new_ephemeral());
     468    return WEBKIT_WEB_CONTEXT(g_object_new(WEBKIT_TYPE_WEB_CONTEXT, "website-data-manager", manager.get(), nullptr));
     469}
     470
     471/**
    452472 * webkit_web_context_new_with_website_data_manager:
    453473 * @manager: a #WebKitWebsiteDataManager
     
    481501
    482502    return context->priv->websiteDataManager.get();
     503}
     504
     505/**
     506 * webkit_web_context_is_ephemeral:
     507 * @context: the #WebKitWebContext
     508 *
     509 * Get whether a #WebKitWebContext is ephemeral.
     510 *
     511 * Returns: %TRUE if @context is ephemeral or %FALSE otherwise.
     512 *
     513 * Since: 2.16
     514 */
     515gboolean webkit_web_context_is_ephemeral(WebKitWebContext* context)
     516{
     517    g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), FALSE);
     518
     519    return webkit_website_data_manager_is_ephemeral(context->priv->websiteDataManager.get());
    483520}
    484521
     
    14271464    pageConfiguration->setRelatedPage(relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr);
    14281465    pageConfiguration->setUserContentController(userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr);
    1429     pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get()));
     1466
     1467    WebKitWebsiteDataManager* manager = webkitWebViewGetWebsiteDataManager(webView);
     1468    if (!manager)
     1469        manager = context->priv->websiteDataManager.get();
     1470    pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(manager));
    14301471    pageConfiguration->setSessionID(pageConfiguration->websiteDataStore()->websiteDataStore().sessionID());
    14311472    webkitWebViewBaseCreateWebPage(webViewBase, WTFMove(pageConfiguration));
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h

    r210921 r211138  
    168168
    169169WEBKIT_API WebKitWebContext *
     170webkit_web_context_new_ephemeral                    (void);
     171
     172WEBKIT_API WebKitWebContext *
    170173webkit_web_context_new_with_website_data_manager    (WebKitWebsiteDataManager      *manager);
    171174
    172175WEBKIT_API WebKitWebsiteDataManager *
    173176webkit_web_context_get_website_data_manager         (WebKitWebContext              *context);
     177
     178WEBKIT_API gboolean
     179webkit_web_context_is_ephemeral                     (WebKitWebContext              *context);
    174180
    175181WEBKIT_API void
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r210500 r211138  
    154154    PROP_IS_LOADING,
    155155    PROP_IS_PLAYING_AUDIO,
     156    PROP_IS_EPHEMERAL,
    156157    PROP_EDITABLE
    157158};
     
    178179    CString activeURI;
    179180    bool isLoading;
     181    bool isEphemeral;
    180182
    181183    std::unique_ptr<PageLoadStateObserver> loadObserver;
     
    209211    GRefPtr<WebKitAuthenticationRequest> authenticationRequest;
    210212
     213    GRefPtr<WebKitWebsiteDataManager> websiteDataManager;
    211214};
    212215
     
    642645    WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
    643646    WebKitWebViewPrivate* priv = webView->priv;
    644     if (priv->relatedView)
     647    if (priv->relatedView) {
    645648        priv->context = webkit_web_view_get_context(priv->relatedView);
    646     else if (!priv->context)
     649        priv->isEphemeral = webkit_web_view_is_ephemeral(priv->relatedView);
     650    } else if (!priv->context)
    647651        priv->context = webkit_web_context_get_default();
     652    else if (!priv->isEphemeral)
     653        priv->isEphemeral = webkit_web_context_is_ephemeral(priv->context.get());
     654
    648655    if (!priv->settings)
    649656        priv->settings = adoptGRef(webkit_settings_new());
     657
     658    if (priv->isEphemeral && !webkit_web_context_is_ephemeral(priv->context.get()))
     659        priv->websiteDataManager = adoptGRef(webkit_website_data_manager_new_ephemeral());
    650660
    651661    webkitWebContextCreatePageForWebView(priv->context.get(), webView, priv->userContentManager.get(), priv->relatedView);
     
    701711    case PROP_ZOOM_LEVEL:
    702712        webkit_web_view_set_zoom_level(webView, g_value_get_double(value));
     713        break;
     714    case PROP_IS_EPHEMERAL:
     715        webView->priv->isEphemeral = g_value_get_boolean(value);
    703716        break;
    704717    case PROP_EDITABLE:
     
    745758        g_value_set_boolean(value, webkit_web_view_is_playing_audio(webView));
    746759        break;
     760    case PROP_IS_EPHEMERAL:
     761        g_value_set_boolean(value, webkit_web_view_is_ephemeral(webView));
     762        break;
    747763    case PROP_EDITABLE:
    748764        g_value_set_boolean(value, webkit_web_view_is_editable(webView));
     
    975991            FALSE,
    976992            WEBKIT_PARAM_READABLE));
     993
     994    /**
     995     * WebKitWebView:is-ephemeral:
     996     *
     997     * Whether the #WebKitWebView is ephemeral. An ephemeral web view never writes
     998     * website data to the client storage, no matter what #WebKitWebsiteDataManager
     999     * its context is using. This is normally used to implement private browsing mode.
     1000     * This is a %G_PARAM_CONSTRUCT_ONLY property, so you have to create a ephemeral
     1001     * #WebKitWebView and it can't be changed. Note that all #WebKitWebView<!-- -->s
     1002     * created with an ephemeral #WebKitWebContext will be ephemeral automatically.
     1003     * See also webkit_web_context_new_ephemeral().
     1004     *
     1005     * Since: 2.16
     1006     */
     1007    g_object_class_install_property(
     1008        gObjectClass,
     1009        PROP_IS_EPHEMERAL,
     1010        g_param_spec_boolean(
     1011            "is-ephemeral",
     1012            "Is Ephemeral",
     1013            _("Whether the web view is ephemeral"),
     1014            FALSE,
     1015            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
    9771016
    9781017    /**
     
    20222061void webkitWebViewHandleAuthenticationChallenge(WebKitWebView* webView, AuthenticationChallengeProxy* authenticationChallenge)
    20232062{
    2024     gboolean privateBrowsingEnabled = webkit_settings_get_enable_private_browsing(webView->priv->settings.get());
     2063    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
     2064    gboolean privateBrowsingEnabled = webView->priv->isEphemeral || webkit_settings_get_enable_private_browsing(webView->priv->settings.get());
     2065    G_GNUC_END_IGNORE_DEPRECATIONS;
    20252066    webView->priv->authenticationRequest = adoptGRef(webkitAuthenticationRequestCreate(authenticationChallenge, privateBrowsingEnabled));
    20262067    gboolean returnValue;
     
    20652106}
    20662107
     2108WebKitWebsiteDataManager* webkitWebViewGetWebsiteDataManager(WebKitWebView* webView)
     2109{
     2110    return webView->priv->websiteDataManager.get();
     2111}
     2112
    20672113/**
    20682114 * webkit_web_view_new:
     
    20962142    g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), 0);
    20972143
    2098     return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW, "web-context", context, NULL));
     2144    return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW,
     2145        "is-ephemeral", webkit_web_context_is_ephemeral(context),
     2146        "web-context", context,
     2147        nullptr));
    20992148}
    21002149
     
    21972246
    21982247    return webView->priv->userContentManager.get();
     2248}
     2249
     2250/**
     2251 * webkit_web_view_is_ephemeral:
     2252 * @web_view: a #WebKitWebView
     2253 *
     2254 * Get whether a #WebKitWebView is ephemeral. To create an ephemeral #WebKitWebView you need to
     2255 * use g_object_new() and pass is-ephemeral propery with %TRUE value. See
     2256 * #WebKitWebView:is-ephemeral for more details.
     2257 * If @web_view was created with a ephemeral #WebKitWebView:related-view or an
     2258 * ephemeral #WebKitWebView:web-context it will also be ephemeral.
     2259 *
     2260 * Returns: %TRUE if @web_view is ephemeral or %FALSE otherwise.
     2261 *
     2262 * Since: 2.16
     2263 */
     2264gboolean webkit_web_view_is_ephemeral(WebKitWebView* webView)
     2265{
     2266    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
     2267
     2268    return webView->priv->isEphemeral;
    21992269}
    22002270
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h

    r194579 r211138  
    275275webkit_web_view_new_with_user_content_manager        (WebKitUserContentManager  *user_content_manager);
    276276
     277WEBKIT_API gboolean
     278webkit_web_view_is_ephemeral                         (WebKitWebView             *web_view);
     279
    277280WEBKIT_API WebKitWebContext *
    278281webkit_web_view_get_context                          (WebKitWebView             *web_view);
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h

    r193826 r211138  
    6767void webkitWebViewSelectionDidChange(WebKitWebView*);
    6868void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView*, WebKit::InstallMissingMediaPluginsPermissionRequest&);
     69WebKitWebsiteDataManager* webkitWebViewGetWebsiteDataManager(WebKitWebView*);
    6970
    7071#endif // WebKitWebViewPrivate_h
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp

    r211079 r211138  
    5757 * you can use webkit_web_context_get_website_data_manager().
    5858 *
     59 * A WebKitWebsiteDataManager can also be ephemeral and then all the directories configuration
     60 * is not needed because website data will never persist. You can create an ephemeral WebKitWebsiteDataManager
     61 * with webkit_website_data_manager_new_ephemeral(). Then you can pass an ephemeral WebKitWebsiteDataManager to
     62 * a #WebKitWebContext to make it ephemeral or use webkit_web_context_new_ephemeral() and the WebKitWebsiteDataManager
     63 * will be automatically created by the #WebKitWebContext.
     64 *
    5965 * WebKitWebsiteDataManager can also be used to fetch websites data, remove data
    6066 * stored by particular websites, or clear data for all websites modified since a given
     
    7379    PROP_APPLICATION_CACHE_DIRECTORY,
    7480    PROP_INDEXEDDB_DIRECTORY,
    75     PROP_WEBSQL_DIRECTORY
     81    PROP_WEBSQL_DIRECTORY,
     82    PROP_IS_EPHEMERAL
    7683};
    7784
     
    115122        g_value_set_string(value, webkit_website_data_manager_get_websql_directory(manager));
    116123        break;
     124    case PROP_IS_EPHEMERAL:
     125        g_value_set_boolean(value, webkit_website_data_manager_is_ephemeral(manager));
     126        break;
    117127    default:
    118128        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
     
    145155    case PROP_WEBSQL_DIRECTORY:
    146156        manager->priv->webSQLDirectory.reset(g_value_dup_string(value));
     157        break;
     158    case PROP_IS_EPHEMERAL:
     159        if (g_value_get_boolean(value))
     160            manager->priv->websiteDataStore = API::WebsiteDataStore::createNonPersistentDataStore();
    147161        break;
    148162    default:
     
    300314            _("The directory where WebSQL databases will be stored"),
    301315            nullptr,
     316            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
     317
     318    /**
     319     * WebKitWebsiteDataManager:is-ephemeral:
     320     *
     321     * Whether the #WebKitWebsiteDataManager is ephemeral. An ephemeral #WebKitWebsiteDataManager
     322     * handles all websites data as non-persistent, and nothing will be written to the client
     323     * storage. Note that if you create an ephemeral #WebKitWebsiteDataManager all other construction
     324     * parameters to configure data directories will be ignored.
     325     *
     326     * Since: 2.16
     327     */
     328    g_object_class_install_property(
     329        gObjectClass,
     330        PROP_IS_EPHEMERAL,
     331        g_param_spec_boolean(
     332            "is-ephemeral",
     333            "Is Ephemeral",
     334            _("Whether the WebKitWebsiteDataManager is ephemeral"),
     335            FALSE,
    302336            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
    303337}
     
    354388
    355389/**
     390 * webkit_website_data_manager_new_ephemeral:
     391 *
     392 * Creates an ephemeral #WebKitWebsiteDataManager. See #WebKitWebsiteDataManager:is-ephemeral for more details.
     393 *
     394 * Returns: (transfer full): a new ephemeral #WebKitWebsiteDataManager.
     395 *
     396 * Since: 2.16
     397 */
     398WebKitWebsiteDataManager* webkit_website_data_manager_new_ephemeral()
     399{
     400    return WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, "is-ephemeral", TRUE, nullptr));
     401}
     402
     403/**
     404 * webkit_website_data_manager_is_ephemeral:
     405 * @manager: a #WebKitWebsiteDataManager
     406 *
     407 * Get whether a #WebKitWebsiteDataManager is ephemeral. See #WebKitWebsiteDataManager::is-ephemerla for more details.
     408 *
     409 * Returns: %TRUE if @manager is epheral or %FALSE otherwise.
     410 *
     411 * Since: 2.16
     412 */
     413gboolean webkit_website_data_manager_is_ephemeral(WebKitWebsiteDataManager* manager)
     414{
     415    g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), FALSE);
     416
     417    return manager->priv->websiteDataStore && !manager->priv->websiteDataStore->isPersistent();
     418}
     419
     420/**
    356421 * webkit_website_data_manager_get_base_data_directory:
    357422 * @manager: a #WebKitWebsiteDataManager
     
    359424 * Get the #WebKitWebsiteDataManager:base-data-directory property.
    360425 *
    361  * Returns: the base directory for Website data, or %NULL if
    362  *    #WebKitWebsiteDataManager:base-data-directory was not provided.
     426 * Returns: (allow-none): the base directory for Website data, or %NULL if
     427 *    #WebKitWebsiteDataManager:base-data-directory was not provided or @manager is ephemeral.
    363428 *
    364429 * Since: 2.10
     
    368433    g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
    369434
     435    if (manager->priv->websiteDataStore && !manager->priv->websiteDataStore->isPersistent())
     436        return nullptr;
     437
    370438    return manager->priv->baseDataDirectory.get();
    371439}
     
    377445 * Get the #WebKitWebsiteDataManager:base-cache-directory property.
    378446 *
    379  * Returns: the base directory for Website cache, or %NULL if
    380  *    #WebKitWebsiteDataManager:base-cache-directory was not provided.
     447 * Returns: (allow-none): the base directory for Website cache, or %NULL if
     448 *    #WebKitWebsiteDataManager:base-cache-directory was not provided or @manager is ephemeral.
    381449 *
    382450 * Since: 2.10
     
    386454    g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
    387455
     456    if (manager->priv->websiteDataStore && !manager->priv->websiteDataStore->isPersistent())
     457        return nullptr;
     458
    388459    return manager->priv->baseCacheDirectory.get();
    389460}
     
    395466 * Get the #WebKitWebsiteDataManager:local-storage-directory property.
    396467 *
    397  * Returns: the directory where local storage data is stored.
     468 * Returns: (allow-none): the directory where local storage data is stored or %NULL if @manager is ephemeral.
    398469 *
    399470 * Since: 2.10
     
    404475
    405476    WebKitWebsiteDataManagerPrivate* priv = manager->priv;
     477    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
     478        return nullptr;
     479
    406480    if (!priv->localStorageDirectory)
    407481        priv->localStorageDirectory.reset(g_strdup(API::WebsiteDataStore::defaultLocalStorageDirectory().utf8().data()));
     
    415489 * Get the #WebKitWebsiteDataManager:disk-cache-directory property.
    416490 *
    417  * Returns: the directory where HTTP disk cache is stored.
     491 * Returns: (allow-none): the directory where HTTP disk cache is stored or %NULL if @manager is ephemeral.
    418492 *
    419493 * Since: 2.10
     
    424498
    425499    WebKitWebsiteDataManagerPrivate* priv = manager->priv;
     500    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
     501        return nullptr;
     502
    426503    if (!priv->diskCacheDirectory) {
    427504        // The default directory already has the subdirectory.
     
    437514 * Get the #WebKitWebsiteDataManager:offline-application-cache-directory property.
    438515 *
    439  * Returns: the directory where offline web application cache is stored.
     516 * Returns: (allow-none): the directory where offline web application cache is stored or %NULL if @manager is ephemeral.
    440517 *
    441518 * Since: 2.10
     
    446523
    447524    WebKitWebsiteDataManagerPrivate* priv = manager->priv;
     525    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
     526        return nullptr;
     527
    448528    if (!priv->applicationCacheDirectory)
    449529        priv->applicationCacheDirectory.reset(g_strdup(API::WebsiteDataStore::defaultApplicationCacheDirectory().utf8().data()));
     
    457537 * Get the #WebKitWebsiteDataManager:indexeddb-directory property.
    458538 *
    459  * Returns: the directory where IndexedDB databases are stored.
     539 * Returns: (allow-none): the directory where IndexedDB databases are stored or %NULL if @manager is ephemeral.
    460540 *
    461541 * Since: 2.10
     
    466546
    467547    WebKitWebsiteDataManagerPrivate* priv = manager->priv;
     548    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
     549        return nullptr;
     550
    468551    if (!priv->indexedDBDirectory)
    469552        priv->indexedDBDirectory.reset(g_strdup(API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory().utf8().data()));
     
    477560 * Get the #WebKitWebsiteDataManager:websql-directory property.
    478561 *
    479  * Returns: the directory where WebSQL databases are stored.
     562 * Returns: (allow-none): the directory where WebSQL databases are stored or %NULL if @manager is ephemeral.
    480563 *
    481564 * Since: 2.10
     
    486569
    487570    WebKitWebsiteDataManagerPrivate* priv = manager->priv;
     571    if (priv->websiteDataStore && !priv->websiteDataStore->isPersistent())
     572        return nullptr;
     573
    488574    if (!priv->webSQLDirectory)
    489575        priv->webSQLDirectory.reset(g_strdup(API::WebsiteDataStore::defaultWebSQLDatabaseDirectory().utf8().data()));
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h

    r211079 r211138  
    6363webkit_website_data_manager_new                                       (const gchar              *first_option_name,
    6464                                                                       ...);
     65WEBKIT_API WebKitWebsiteDataManager *
     66webkit_website_data_manager_new_ephemeral                             (void);
     67
     68WEBKIT_API gboolean
     69webkit_website_data_manager_is_ephemeral                              (WebKitWebsiteDataManager* manager);
     70
    6571WEBKIT_API const gchar *
    6672webkit_website_data_manager_get_base_data_directory                   (WebKitWebsiteDataManager *manager);
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r211079 r211138  
    3131webkit_web_context_get_default
    3232webkit_web_context_new
     33webkit_web_context_new_ephemeral
    3334webkit_web_context_new_with_website_data_manager
     35webkit_web_context_is_ephemeral
    3436webkit_web_context_get_website_data_manager
    3537webkit_web_context_get_cache_model
     
    159161webkit_web_view_new_with_settings
    160162webkit_web_view_new_with_user_content_manager
     163webkit_web_view_is_ephemeral
    161164webkit_web_view_get_context
    162165webkit_web_view_get_user_content_manager
     
    12381241WebKitWebsiteDataManager
    12391242webkit_website_data_manager_new
     1243webkit_website_data_manager_new_ephemeral
     1244webkit_website_data_manager_is_ephemeral
    12401245webkit_website_data_manager_get_base_data_directory
    12411246webkit_website_data_manager_get_base_cache_directory
  • trunk/Tools/ChangeLog

    r211137 r211138  
     12017-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add API to create ephemeral web views and deprecate the private browsing setting
     4        https://bugs.webkit.org/show_bug.cgi?id=167370
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Add several test cases of ephemeral web views.
     9
     10        * TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp:
     11        (testWebViewAuthenticationStorage):
     12        * TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp:
     13        (ephemeralViewloadChanged):
     14        (testCookieManagerEphemeral):
     15        (beforeAll):
     16        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp:
     17        (testWebKitSettings):
     18        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
     19        (testWebContextEphemeral):
     20        (ephemeralViewloadChanged):
     21        (testWebContextProxySettings):
     22        (beforeAll):
     23        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp:
     24        (ephemeralViewloadChanged):
     25        (testWebViewEphemeral):
     26        (beforeAll):
     27        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp:
     28        (ephemeralViewloadChanged):
     29        (testWebsiteDataEphemeral):
     30        (beforeAll):
     31
    1322017-01-24  Alex Christensen  <achristensen@webkit.org>
    233
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestAuthentication.cpp

    r206731 r211138  
    188188{
    189189    // Enable private browsing before authentication request to test that credentials can't be saved.
     190    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
    190191    webkit_settings_set_enable_private_browsing(webkit_web_view_get_settings(test->m_webView), TRUE);
     192    G_GNUC_END_IGNORE_DEPRECATIONS;
    191193    test->loadURI(kServer->getURIForPath("/auth-test.html").data());
    192194    WebKitAuthenticationRequest* request = test->waitForAuthenticationRequest();
     
    197199    // then check that credentials can be saved.
    198200#if USE(LIBSECRET)
     201    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
    199202    webkit_settings_set_enable_private_browsing(webkit_web_view_get_settings(test->m_webView), FALSE);
     203    G_GNUC_END_IGNORE_DEPRECATIONS;
    200204    test->loadURI(kServer->getURIForPath("/auth-test.html").data());
    201205    request = test->waitForAuthenticationRequest();
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestCookieManager.cpp

    r176256 r211138  
    291291}
    292292
     293static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
     294{
     295    if (loadEvent != WEBKIT_LOAD_FINISHED)
     296        return;
     297    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
     298    test->quitMainLoop();
     299}
     300
     301static void testCookieManagerEphemeral(CookieManagerTest* test, gconstpointer)
     302{
     303    test->setAcceptPolicy(WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS);
     304    test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT);
     305    char** domains = test->getDomains();
     306    g_assert(domains);
     307    g_assert_cmpint(g_strv_length(domains), ==, 0);
     308
     309    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
     310        "web-context", webkit_web_view_get_context(test->m_webView),
     311        "is-ephemeral", TRUE,
     312        nullptr));
     313    g_assert(webkit_web_view_is_ephemeral(webView.get()));
     314    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(webView.get())));
     315
     316    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
     317    webkit_web_view_load_uri(webView.get(), kServer->getURIForPath("/index.html").data());
     318    g_main_loop_run(test->m_mainLoop);
     319
     320    domains = test->getDomains();
     321    g_assert(domains);
     322    g_assert_cmpint(g_strv_length(domains), ==, 0);
     323}
     324
    293325static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
    294326{
     
    319351    CookieManagerTest::add("WebKitCookieManager", "cookies-changed", testCookieManagerCookiesChanged);
    320352    CookieManagerTest::add("WebKitCookieManager", "persistent-storage", testCookieManagerPersistentStorage);
     353    CookieManagerTest::add("WebKitCookieManager", "ephemeral", testCookieManagerEphemeral);
    321354}
    322355
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitSettings.cpp

    r199795 r211138  
    159159    g_assert_cmpstr(webkit_settings_get_default_charset(settings), ==, "utf8");
    160160
     161    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
    161162    g_assert(!webkit_settings_get_enable_private_browsing(settings));
    162163    webkit_settings_set_enable_private_browsing(settings, TRUE);
    163164    g_assert(webkit_settings_get_enable_private_browsing(settings));
     165    G_GNUC_END_IGNORE_DEPRECATIONS;
    164166
    165167    g_assert(!webkit_settings_get_enable_developer_extras(settings));
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp

    r211079 r211138  
    3939    g_assert(webkit_web_context_get_default() == webkit_web_context_get_default());
    4040    g_assert(webkit_web_context_get_default() != test->m_webContext.get());
     41}
     42
     43static void testWebContextEphemeral(Test* test, gconstpointer)
     44{
     45    // By default web contexts are not ephemeral.
     46    g_assert(!webkit_web_context_is_ephemeral(webkit_web_context_get_default()));
     47    g_assert(!webkit_web_context_is_ephemeral(test->m_webContext.get()));
     48
     49    WebKitWebsiteDataManager* manager = webkit_web_context_get_website_data_manager(webkit_web_context_get_default());
     50    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
     51    g_assert(!webkit_website_data_manager_is_ephemeral(manager));
     52    manager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
     53    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
     54    g_assert(!webkit_website_data_manager_is_ephemeral(manager));
     55
     56    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
     57    g_assert(!webkit_web_view_is_ephemeral(webView.get()));
     58
     59    webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(test->m_webContext.get()));
     60    g_assert(!webkit_web_view_is_ephemeral(webView.get()));
     61
     62    GRefPtr<WebKitWebContext> context = adoptGRef(webkit_web_context_new_ephemeral());
     63    g_assert(webkit_web_context_is_ephemeral(context.get()));
     64    manager = webkit_web_context_get_website_data_manager(context.get());
     65    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
     66    g_assert(webkit_website_data_manager_is_ephemeral(manager));
     67
     68    webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(context.get()));
     69    g_assert(webkit_web_view_is_ephemeral(webView.get()));
     70
     71    GRefPtr<WebKitWebsiteDataManager> ephemeralManager = adoptGRef(webkit_website_data_manager_new_ephemeral());
     72    g_assert(webkit_website_data_manager_is_ephemeral(ephemeralManager.get()));
     73    context = adoptGRef(webkit_web_context_new_with_website_data_manager(ephemeralManager.get()));
     74    g_assert(webkit_web_context_is_ephemeral(context.get()));
    4175}
    4276
     
    643677};
    644678
     679static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
     680{
     681    if (loadEvent != WEBKIT_LOAD_FINISHED)
     682        return;
     683    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
     684    test->quitMainLoop();
     685}
     686
    645687static void testWebContextProxySettings(ProxyTest* test, gconstpointer)
    646688{
     
    658700    ASSERT_CMP_CSTRING(mainResourceData, ==, proxyServerPortAsString.get());
    659701    webkit_network_proxy_settings_free(settings);
     702
     703    // Proxy settings also affect ephemeral web views.
     704    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
     705        "web-context", test->m_webContext.get(),
     706        "is-ephemeral", TRUE,
     707        nullptr));
     708    g_assert(webkit_web_view_is_ephemeral(webView.get()));
     709    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(webView.get())));
     710
     711    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
     712    webkit_web_view_load_uri(webView.get(), kServer->getURIForPath("/echoPort").data());
     713    g_main_loop_run(test->m_mainLoop);
     714    WebKitWebResource* resource = webkit_web_view_get_main_resource(webView.get());
     715    g_assert(WEBKIT_IS_WEB_RESOURCE(resource));
     716    webkit_web_resource_get_data(resource, nullptr, [](GObject* object, GAsyncResult* result, gpointer userData) {
     717        size_t dataSize;
     718        GUniquePtr<char> data(reinterpret_cast<char*>(webkit_web_resource_get_data_finish(WEBKIT_WEB_RESOURCE(object), result, &dataSize, nullptr)));
     719        g_assert(data);
     720        auto* test = static_cast<ProxyTest*>(userData);
     721        GUniquePtr<char> proxyServerPortAsString = test->proxyServerPortAsString();
     722        ASSERT_CMP_CSTRING(CString(data.get(), dataSize), ==, proxyServerPortAsString.get());
     723        test->quitMainLoop();
     724        }, test);
     725    g_main_loop_run(test->m_mainLoop);
    660726
    661727    // Remove the proxy. Requests to kServer should be received by kServer again.
     
    700766
    701767    Test::add("WebKitWebContext", "default-context", testWebContextDefault);
     768    Test::add("WebKitWebContext", "ephemeral", testWebContextEphemeral);
    702769    PluginsTest::add("WebKitWebContext", "get-plugins", testWebContextGetPlugins);
    703770    URISchemeTest::add("WebKitWebContext", "uri-scheme", testWebContextURIScheme);
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebView.cpp

    r210833 r211138  
    9595}
    9696
     97static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
     98{
     99    if (loadEvent != WEBKIT_LOAD_FINISHED)
     100        return;
     101    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
     102    test->quitMainLoop();
     103}
     104
     105static void testWebViewEphemeral(WebViewTest* test, gconstpointer)
     106{
     107    g_assert(!webkit_web_view_is_ephemeral(test->m_webView));
     108    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(test->m_webView)));
     109    auto* manager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
     110    g_assert(!webkit_website_data_manager_is_ephemeral(manager));
     111    webkit_website_data_manager_clear(manager, WEBKIT_WEBSITE_DATA_DISK_CACHE, 0, nullptr, [](GObject* manager, GAsyncResult* result, gpointer userData) {
     112        webkit_website_data_manager_clear_finish(WEBKIT_WEBSITE_DATA_MANAGER(manager), result, nullptr);
     113        static_cast<WebViewTest*>(userData)->quitMainLoop();
     114    }, test);
     115    g_main_loop_run(test->m_mainLoop);
     116
     117    // A WebView on a non ephemeral context can be ephemeral.
     118    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
     119        "web-context", webkit_web_view_get_context(test->m_webView),
     120        "is-ephemeral", TRUE,
     121        nullptr));
     122    g_assert(webkit_web_view_is_ephemeral(webView.get()));
     123    g_assert(!webkit_web_context_is_ephemeral(webkit_web_view_get_context(webView.get())));
     124
     125    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
     126    webkit_web_view_load_uri(webView.get(), gServer->getURIForPath("/").data());
     127    g_main_loop_run(test->m_mainLoop);
     128
     129    // Disk cache delays the storing of initial resources for 1 second to avoid
     130    // affecting early page load. So, wait 1 second here to make sure resources
     131    // have already been stored.
     132    test->wait(1);
     133
     134    webkit_website_data_manager_fetch(manager, WEBKIT_WEBSITE_DATA_DISK_CACHE, nullptr, [](GObject* manager, GAsyncResult* result, gpointer userData) {
     135        auto* test = static_cast<WebViewTest*>(userData);
     136        g_assert(!webkit_website_data_manager_fetch_finish(WEBKIT_WEBSITE_DATA_MANAGER(manager), result, nullptr));
     137        test->quitMainLoop();
     138    }, test);
     139    g_main_loop_run(test->m_mainLoop);
     140}
     141
    97142static void testWebViewCustomCharset(WebViewTest* test, gconstpointer)
    98143{
     
    10151060    WebViewTest::add("WebKitWebView", "web-context", testWebViewWebContext);
    10161061    WebViewTest::add("WebKitWebView", "web-context-lifetime", testWebViewWebContextLifetime);
     1062    WebViewTest::add("WebKitWebView", "ephemeral", testWebViewEphemeral);
    10171063    WebViewTest::add("WebKitWebView", "custom-charset", testWebViewCustomCharset);
    10181064    WebViewTest::add("WebKitWebView", "settings", testWebViewSettings);
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebsiteData.cpp

    r211079 r211138  
    208208}
    209209
     210static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
     211{
     212    if (loadEvent != WEBKIT_LOAD_FINISHED)
     213        return;
     214    g_signal_handlers_disconnect_by_func(webView, reinterpret_cast<void*>(ephemeralViewloadChanged), test);
     215    test->quitMainLoop();
     216}
     217
     218static void testWebsiteDataEphemeral(WebViewTest* test, gconstpointer)
     219{
     220    GRefPtr<WebKitWebsiteDataManager> manager = adoptGRef(webkit_website_data_manager_new_ephemeral());
     221    g_assert(webkit_website_data_manager_is_ephemeral(manager.get()));
     222    g_assert(!webkit_website_data_manager_get_base_data_directory(manager.get()));
     223    g_assert(!webkit_website_data_manager_get_base_cache_directory(manager.get()));
     224    g_assert(!webkit_website_data_manager_get_local_storage_directory(manager.get()));
     225    g_assert(!webkit_website_data_manager_get_disk_cache_directory(manager.get()));
     226    g_assert(!webkit_website_data_manager_get_offline_application_cache_directory(manager.get()));
     227    g_assert(!webkit_website_data_manager_get_indexeddb_directory(manager.get()));
     228    g_assert(!webkit_website_data_manager_get_websql_directory(manager.get()));
     229
     230    // Configuration is ignored when is-ephemeral is used.
     231    manager = adoptGRef(WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, "base-data-directory", Test::dataDirectory(), "is-ephemeral", TRUE, nullptr)));
     232    g_assert(webkit_website_data_manager_is_ephemeral(manager.get()));
     233    g_assert(!webkit_website_data_manager_get_base_data_directory(manager.get()));
     234
     235    // Non persistent data can be queried in an ephemeral manager.
     236    GRefPtr<WebKitWebContext> webContext = adoptGRef(webkit_web_context_new_with_website_data_manager(manager.get()));
     237    g_assert(webkit_web_context_is_ephemeral(webContext.get()));
     238    GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webContext.get()));
     239    g_assert(webkit_web_view_is_ephemeral(webView.get()));
     240
     241    g_signal_connect(webView.get(), "load-changed", G_CALLBACK(ephemeralViewloadChanged), test);
     242    webkit_web_view_load_uri(webView.get(), kServer->getURIForPath("/empty").data());
     243    g_main_loop_run(test->m_mainLoop);
     244
     245    webkit_website_data_manager_fetch(manager.get(), WEBKIT_WEBSITE_DATA_MEMORY_CACHE, nullptr, [](GObject* manager, GAsyncResult* result, gpointer userData) {
     246        auto* test = static_cast<WebViewTest*>(userData);
     247        GList* dataList = webkit_website_data_manager_fetch_finish(WEBKIT_WEBSITE_DATA_MANAGER(manager), result, nullptr);
     248        g_assert(dataList);
     249        g_assert_cmpuint(g_list_length(dataList), ==, 1);
     250        WebKitWebsiteData* data = static_cast<WebKitWebsiteData*>(dataList->data);
     251        g_assert(data);
     252        WebKitSecurityOrigin* origin = webkit_security_origin_new_for_uri(kServer->getURIForPath("/").data());
     253        g_assert_cmpstr(webkit_website_data_get_name(data), ==, webkit_security_origin_get_host(origin));
     254        webkit_security_origin_unref(origin);
     255        g_list_free_full(dataList, reinterpret_cast<GDestroyNotify>(webkit_website_data_unref));
     256        test->quitMainLoop();
     257    }, test);
     258    g_main_loop_run(test->m_mainLoop);
     259}
     260
    210261static void testWebsiteDataCache(WebsiteDataTest* test, gconstpointer)
    211262{
     
    441492
    442493    WebsiteDataTest::add("WebKitWebsiteData", "configuration", testWebsiteDataConfiguration);
     494    WebViewTest::add("WebKitWebsiteData", "ephemeral", testWebsiteDataEphemeral);
    443495    WebsiteDataTest::add("WebKitWebsiteData", "cache", testWebsiteDataCache);
    444496    WebsiteDataTest::add("WebKitWebsiteData", "storage", testWebsiteDataStorage);
Note: See TracChangeset for help on using the changeset viewer.