Changeset 185950 in webkit


Ignore:
Timestamp:
Jun 25, 2015 12:51:32 AM (9 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Add initial WebKitWebsiteDataManager API for process configuration options
https://bugs.webkit.org/show_bug.cgi?id=146149

Reviewed by Sergio Villar Senin.

Source/WebKit2:

Add WebKitWebsiteDataManager to replace the different ways we have
to configure data store
directories. WebKitWebContext:indexed-db-directory property has
been removed, since it was added only in trunk, and
WebKitWebContext:local-storage-directory has been deprecated. The
method webkit_web_context_set_disk_cache_directory() has been
deprecated too in favor of WebKitWebsiteDataManager.

  • PlatformGTK.cmake: Add new files to compilation.
  • UIProcess/API/gtk/WebKitPrivate.h: Move networkCacheSubdirectory

definition here.

  • UIProcess/API/gtk/WebKitWebContext.cpp:

(webkitWebContextGetProperty): Replace indexed-db-directory getter
with website-data-manager one.
(webkitWebContextSetProperty): Replace indexed-db-directory setter
with website-data-manager one.
(webkitWebContextConstructed): Use the user provided
WebKitWebsiteDataManager to configure the context or create a
default WebKitWebsiteDataManager if not provided.
(webkit_web_context_class_init): Replace indexed-db-directory
property with website-data-manager.
(webkit_web_context_new_with_website_data_manager):
(webkit_web_context_get_website_data_manager):
(webkitWebContextCreatePageForWebView): Get the WebsiteDataStore
from the WebKitWebsiteDataManager.

  • UIProcess/API/gtk/WebKitWebContext.h:
  • UIProcess/API/gtk/WebKitWebsiteDataManager.cpp: Added.

(webkitWebsiteDataManagerGetProperty):
(webkitWebsiteDataManagerSetProperty):
(webkit_website_data_manager_class_init):
(webkitWebsiteDataManagerCreate):
(webkitWebsiteDataManagerGetDataStore):
(webkit_website_data_manager_new):
(webkit_website_data_manager_get_local_storage_directory):
(webkit_website_data_manager_get_disk_cache_directory):
(webkit_website_data_manager_get_offline_application_cache_directory):
(webkit_website_data_manager_get_indexeddb_directory):
(webkit_website_data_manager_get_websql_directory):

  • UIProcess/API/gtk/WebKitWebsiteDataManager.h: Added.
  • UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h: Added.
  • UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
  • UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_website_data_manager_get_type.
  • UIProcess/API/gtk/webkit2.h: Include WebKitWebsiteDataManager.h.

Tools:

Update unit tests to use WebKitWebsiteDataManager.

  • TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:

(testWebContextConfiguration):
(serverCallback):

  • TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:

(Test::Test): Use WebKitWebsiteDataManager and set all possible
values to ensure unit tests don't write outside the temporary directory.
(Test::~Test): Explicitly reset the web context to ensure its
objects are released before the leaks check.

  • TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:

(WebViewTest::wait): Fix the GSource used, since we are receiving
a double in seconds, but using g_timeout_add_seconds() that
expects an unsigned in seconds. Use GMainLoopSource to correctly
handle the value and simplify the code.

Location:
trunk
Files:
3 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r185949 r185950  
     12015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add initial WebKitWebsiteDataManager API for process configuration options
     4        https://bugs.webkit.org/show_bug.cgi?id=146149
     5
     6        Reviewed by Sergio Villar Senin.
     7
     8        Add WebKitWebsiteDataManager to replace the different ways we have
     9        to configure data store
     10        directories. WebKitWebContext:indexed-db-directory property has
     11        been removed, since it was added only in trunk, and
     12        WebKitWebContext:local-storage-directory has been deprecated. The
     13        method webkit_web_context_set_disk_cache_directory() has been
     14        deprecated too in favor of WebKitWebsiteDataManager.
     15
     16        * PlatformGTK.cmake: Add new files to compilation.
     17        * UIProcess/API/gtk/WebKitPrivate.h: Move networkCacheSubdirectory
     18        definition here.
     19        * UIProcess/API/gtk/WebKitWebContext.cpp:
     20        (webkitWebContextGetProperty): Replace indexed-db-directory getter
     21        with website-data-manager one.
     22        (webkitWebContextSetProperty): Replace indexed-db-directory setter
     23        with website-data-manager one.
     24        (webkitWebContextConstructed): Use the user provided
     25        WebKitWebsiteDataManager to configure the context or create a
     26        default WebKitWebsiteDataManager if not provided.
     27        (webkit_web_context_class_init): Replace indexed-db-directory
     28        property with website-data-manager.
     29        (webkit_web_context_new_with_website_data_manager):
     30        (webkit_web_context_get_website_data_manager):
     31        (webkitWebContextCreatePageForWebView): Get the WebsiteDataStore
     32        from the WebKitWebsiteDataManager.
     33        * UIProcess/API/gtk/WebKitWebContext.h:
     34        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp: Added.
     35        (webkitWebsiteDataManagerGetProperty):
     36        (webkitWebsiteDataManagerSetProperty):
     37        (webkit_website_data_manager_class_init):
     38        (webkitWebsiteDataManagerCreate):
     39        (webkitWebsiteDataManagerGetDataStore):
     40        (webkit_website_data_manager_new):
     41        (webkit_website_data_manager_get_local_storage_directory):
     42        (webkit_website_data_manager_get_disk_cache_directory):
     43        (webkit_website_data_manager_get_offline_application_cache_directory):
     44        (webkit_website_data_manager_get_indexeddb_directory):
     45        (webkit_website_data_manager_get_websql_directory):
     46        * UIProcess/API/gtk/WebKitWebsiteDataManager.h: Added.
     47        * UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h: Added.
     48        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
     49        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_website_data_manager_get_type.
     50        * UIProcess/API/gtk/webkit2.h: Include WebKitWebsiteDataManager.h.
     51
    1522015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>
    253
  • trunk/Source/WebKit2/PlatformGTK.cmake

    r185949 r185950  
    252252    UIProcess/API/gtk/WebKitWebViewBasePrivate.h
    253253    UIProcess/API/gtk/WebKitWebViewPrivate.h
     254    UIProcess/API/gtk/WebKitWebsiteDataManager.cpp
     255    UIProcess/API/gtk/WebKitWebsiteDataManager.h
     256    UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h
    254257    UIProcess/API/gtk/WebKitWindowProperties.cpp
    255258    UIProcess/API/gtk/WebKitWindowProperties.h
     
    400403    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebView.h
    401404    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebViewBase.h
     405    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebsiteDataManager.h
    402406    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWindowProperties.h
    403407    ${WEBKIT2_DIR}/UIProcess/API/gtk/webkit2.h
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h

    r183936 r185950  
    128128};
    129129
     130#if ENABLE(NETWORK_CACHE)
     131static const char networkCacheSubdirectory[] = "WebKitCache";
     132#else
     133static const char networkCacheSubdirectory[] = "webkit";
     134#endif
     135
    130136#endif // WebKitPrivate_h
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp

    r185949 r185950  
    4848#include "WebKitWebViewBasePrivate.h"
    4949#include "WebKitWebViewPrivate.h"
     50#include "WebKitWebsiteDataManagerPrivate.h"
    5051#include "WebNotificationManagerProxy.h"
    5152#include <WebCore/FileSystem.h>
     
    103104
    104105    PROP_LOCAL_STORAGE_DIRECTORY,
    105     PROP_INDEXED_DB_DIRECTORY
     106    PROP_WEBSITE_DATA_MANAGER
    106107};
    107108
     
    174175    RefPtr<WebKitNotificationProvider> notificationProvider;
    175176#endif
    176     RefPtr<WebsiteDataStore> websiteDataStore;
     177    GRefPtr<WebKitWebsiteDataManager> websiteDataManager;
    177178
    178179    CString faviconDatabaseDirectory;
     
    239240        g_value_set_string(value, context->priv->localStorageDirectory.data());
    240241        break;
    241     case PROP_INDEXED_DB_DIRECTORY:
    242         g_value_set_string(value, context->priv->indexedDBDirectory.data());
     242    case PROP_WEBSITE_DATA_MANAGER:
     243        g_value_set_object(value, webkit_web_context_get_website_data_manager(context));
    243244        break;
    244245    default:
     
    255256        context->priv->localStorageDirectory = g_value_get_string(value);
    256257        break;
    257     case PROP_INDEXED_DB_DIRECTORY:
    258         context->priv->indexedDBDirectory = g_value_get_string(value);
     258    case PROP_WEBSITE_DATA_MANAGER: {
     259        gpointer manager = g_value_get_object(value);
     260        context->priv->websiteDataManager = manager ? WEBKIT_WEBSITE_DATA_MANAGER(manager) : nullptr;
    259261        break;
     262    }
    260263    default:
    261264        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
     
    287290    WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object);
    288291    WebKitWebContextPrivate* priv = webContext->priv;
    289     if (!priv->localStorageDirectory.isNull())
     292    if (priv->websiteDataManager) {
     293        configuration.setLocalStorageDirectory(WebCore::filenameToString(webkit_website_data_manager_get_local_storage_directory(priv->websiteDataManager.get())));
     294        configuration.setDiskCacheDirectory(WebCore::pathByAppendingComponent(WebCore::filenameToString(webkit_website_data_manager_get_disk_cache_directory(priv->websiteDataManager.get())), networkCacheSubdirectory));
     295        configuration.setApplicationCacheDirectory(WebCore::filenameToString(webkit_website_data_manager_get_offline_application_cache_directory(priv->websiteDataManager.get())));
     296        configuration.setIndexedDBDatabaseDirectory(WebCore::filenameToString(webkit_website_data_manager_get_indexeddb_directory(priv->websiteDataManager.get())));
     297        configuration.setWebSQLDatabaseDirectory(WebCore::filenameToString(webkit_website_data_manager_get_websql_directory(priv->websiteDataManager.get())));
     298    } else if (!priv->localStorageDirectory.isNull())
    290299        configuration.setLocalStorageDirectory(WebCore::filenameToString(priv->localStorageDirectory.data()));
    291     if (!priv->indexedDBDirectory.isNull())
    292         configuration.setIndexedDBDatabaseDirectory(WebCore::filenameToString(priv->indexedDBDirectory.data()));
    293300
    294301    priv->context = WebProcessPool::create(configuration);
    295302
    296     priv->websiteDataStore = WebsiteDataStore::create(websiteDataStoreConfigurationForWebProcessPoolConfiguration(configuration));
     303    if (!priv->websiteDataManager)
     304        priv->websiteDataManager = webkitWebsiteDataManagerCreate(websiteDataStoreConfigurationForWebProcessPoolConfiguration(configuration));
     305
    297306    priv->requestManager = priv->context->supplement<WebSoupCustomProtocolRequestManager>();
    298307
     
    345354     *
    346355     * Since: 2.8
     356     *
     357     * Deprecated: 2.10. Use #WebKitWebsiteDataManager:local-storage-directory instead.
    347358     */
    348359    g_object_class_install_property(
     
    357368
    358369    /**
    359      * WebKitWebContext:indexed-db-directory:
     370     * WebKitWebContext:website-data-manager:
    360371     *
    361      * The directory where IndexedDB databases will be saved.
     372     * The #WebKitWebsiteDataManager associated with this context.
    362373     *
    363374     * Since: 2.10
     
    365376    g_object_class_install_property(
    366377        gObjectClass,
    367         PROP_INDEXED_DB_DIRECTORY,
    368         g_param_spec_string(
    369             "indexed-db-directory",
    370             _("IndexedDB Directory"),
    371             _("The directory where IndexedDB databases will be saved"),
    372             nullptr,
     378        PROP_WEBSITE_DATA_MANAGER,
     379        g_param_spec_object(
     380            "website-data-manager",
     381            _("Website Data Manager"),
     382            _("The WebKitWebsiteDataManager associated with this context"),
     383            WEBKIT_TYPE_WEBSITE_DATA_MANAGER,
    373384            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
    374385
     
    445456
    446457/**
     458 * webkit_web_context_new_with_website_data_manager:
     459 * @manager: a #WebKitWebsiteDataManager
     460 *
     461 * Create a new #WebKitWebContext with a #WebKitWebsiteDataManager.
     462 *
     463 * Returns: (transfer full): a newly created #WebKitWebContext
     464 *
     465 * Since: 2.10
     466 */
     467WebKitWebContext* webkit_web_context_new_with_website_data_manager(WebKitWebsiteDataManager* manager)
     468{
     469    g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
     470
     471    return WEBKIT_WEB_CONTEXT(g_object_new(WEBKIT_TYPE_WEB_CONTEXT, "website-data-manager", manager, nullptr));
     472}
     473
     474/**
     475 * webkit_web_context_get_website_data_manager:
     476 * @context: the #WebKitWebContext
     477 *
     478 * Get the #WebKitWebsiteDataManager of @context.
     479 *
     480 * Returns: (transfer none): a #WebKitWebsiteDataManager
     481 *
     482 * Since: 2.10
     483 */
     484WebKitWebsiteDataManager* webkit_web_context_get_website_data_manager(WebKitWebContext* context)
     485{
     486    g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), nullptr);
     487
     488    return context->priv->websiteDataManager.get();
     489}
     490
     491/**
    447492 * webkit_web_context_set_cache_model:
    448493 * @context: the #WebKitWebContext
     
    10401085 * This method must be called before loading anything in this context, otherwise
    10411086 * it will not have any effect.
     1087 *
     1088 * Note that this method overrides the directory set in the #WebKitWebsiteDataManager,
     1089 * but it doesn't change the value returned by webkit_website_data_manager_get_disk_cache_directory()
     1090 * since the #WebKitWebsiteDataManager is immutable.
     1091 *
     1092 * Deprecated: 2.10. Use webkit_web_context_new_with_website_data_manager() instead.
    10421093 */
    10431094void webkit_web_context_set_disk_cache_directory(WebKitWebContext* context, const char* directory)
     
    10461097    g_return_if_fail(directory);
    10471098
    1048 #if ENABLE(NETWORK_CACHE)
    1049     static const char networkCacheSubdirectory[] = "WebKitCache";
    1050 #else
    1051     static const char networkCacheSubdirectory[] = "webkit";
    1052 #endif
    10531099    context->priv->context->configuration().setDiskCacheDirectory(WebCore::pathByAppendingComponent(WebCore::filenameToString(directory), networkCacheSubdirectory));
    10541100}
     
    12331279    webPageConfiguration.relatedPage = relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr;
    12341280    webPageConfiguration.userContentController = userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr;
    1235     webPageConfiguration.websiteDataStore = context->priv->websiteDataStore.get();
    1236     webPageConfiguration.sessionID = context->priv->websiteDataStore->sessionID();
     1281    webPageConfiguration.websiteDataStore = &webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get());
     1282    webPageConfiguration.sessionID = webPageConfiguration.websiteDataStore->sessionID();
    12371283    webkitWebViewBaseCreateWebPage(webViewBase, context->priv->context.get(), WTF::move(webPageConfiguration));
    12381284
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h

    r176256 r185950  
    3232#include <webkit2/WebKitSecurityManager.h>
    3333#include <webkit2/WebKitURISchemeRequest.h>
     34#include <webkit2/WebKitWebsiteDataManager.h>
    3435
    3536G_BEGIN_DECLS
     
    149150webkit_web_context_new                              (void);
    150151
     152WEBKIT_API WebKitWebContext *
     153webkit_web_context_new_with_website_data_manager    (WebKitWebsiteDataManager      *manager);
     154
     155WEBKIT_API WebKitWebsiteDataManager *
     156webkit_web_context_get_website_data_manager         (WebKitWebContext              *context);
     157
    151158WEBKIT_API void
    152159webkit_web_context_set_cache_model                  (WebKitWebContext              *context,
     
    235242                                                     const gchar                   *hostname);
    236243
    237 WEBKIT_API void
     244WEBKIT_DEPRECATED_FOR(webkit_web_context_new_with_website_data_manager) void
    238245webkit_web_context_set_disk_cache_directory         (WebKitWebContext              *context,
    239246                                                     const gchar                   *directory);
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r183992 r185950  
    3030webkit_web_context_get_default
    3131webkit_web_context_new
     32webkit_web_context_new_with_website_data_manager
     33webkit_web_context_get_website_data_manager
    3234webkit_web_context_get_cache_model
    3335webkit_web_context_set_cache_model
     
    11481150
    11491151<SECTION>
     1152<FILE>WebKitWebsiteDataManager</FILE>
     1153WebKitWebsiteDataManager
     1154webkit_website_data_manager_new
     1155webkit_website_data_manager_get_base_data_directory
     1156webkit_website_data_manager_get_base_cache_directory
     1157webkit_website_data_manager_get_local_storage_directory
     1158webkit_website_data_manager_get_disk_cache_directory
     1159webkit_website_data_manager_get_offline_application_cache_directory
     1160webkit_website_data_manager_get_indexeddb_directory
     1161webkit_website_data_manager_get_websql_directory
     1162
     1163<SUBSECTION Standard>
     1164WebKitWebsiteDataManagerClass
     1165WEBKIT_TYPE_WEBSITE_DATA_MANAGER
     1166WEBKIT_WEBSITE_DATA_MANAGER
     1167WEBKIT_IS_WEBSITE_DATA_MANAGER
     1168WEBKIT_WEBSITE_DATA_MANAGER_CLASS
     1169WEBKIT_IS_WEBSITE_DATA_MANAGER_CLASS
     1170WEBKIT_WEBSITE_DATA_MANAGER_GET_CLASS
     1171
     1172<SUBSECTION Private>
     1173WebKitWebsiteDataManagerPrivate
     1174webkit_website_data_manager_get_type
     1175</SECTION>
     1176
     1177<SECTION>
    11501178<FILE>WebKitWebExtension</FILE>
    11511179WebKitWebExtension
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types

    r179111 r185950  
    3030webkit_user_content_manager_get_type
    3131webkit_web_hit_test_result_get_type
     32webkit_website_data_manager_get_type
  • trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h

    r179984 r185950  
    7373#include <webkit2/WebKitWebView.h>
    7474#include <webkit2/WebKitWebViewBase.h>
     75#include <webkit2/WebKitWebsiteDataManager.h>
    7576#include <webkit2/WebKitWindowProperties.h>
    7677
  • trunk/Tools/ChangeLog

    r185931 r185950  
     12015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add initial WebKitWebsiteDataManager API for process configuration options
     4        https://bugs.webkit.org/show_bug.cgi?id=146149
     5
     6        Reviewed by Sergio Villar Senin.
     7
     8        Update unit tests to use WebKitWebsiteDataManager.
     9
     10        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp:
     11        (testWebContextConfiguration):
     12        (serverCallback):
     13        * TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h:
     14        (Test::Test): Use WebKitWebsiteDataManager and set all possible
     15        values to ensure unit tests don't write outside the temporary directory.
     16        (Test::~Test): Explicitly reset the web context to ensure its
     17        objects are released before the leaks check.
     18        * TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp:
     19        (WebViewTest::wait): Fix the GSource used, since we are receiving
     20        a double in seconds, but using g_timeout_add_seconds() that
     21        expects an unsigned in seconds. Use GMainLoopSource to correctly
     22        handle the value and simplify the code.
     23
    1242015-06-24  Jason Marcell  <jmarcell@apple.com>
    225
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp

    r185553 r185950  
    4040static void testWebContextConfiguration(WebViewTest* test, gconstpointer)
    4141{
     42    WebKitWebsiteDataManager* manager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
     43    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
     44    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(manager));
     45
     46    // Base directories are not used by TestMain.
     47    g_assert(!webkit_website_data_manager_get_base_data_directory(manager));
     48    g_assert(!webkit_website_data_manager_get_base_cache_directory(manager));
     49
    4250    GUniquePtr<char> localStorageDirectory(g_build_filename(Test::dataDirectory(), "local-storage", nullptr));
     51    g_assert_cmpstr(localStorageDirectory.get(), ==, webkit_website_data_manager_get_local_storage_directory(manager));
    4352    g_assert(g_file_test(localStorageDirectory.get(), G_FILE_TEST_IS_DIR));
    4453
     
    4756    test->runJavaScriptAndWaitUntilFinished("window.indexedDB.open('TestDatabase');", nullptr);
    4857    GUniquePtr<char> indexedDBDirectory(g_build_filename(Test::dataDirectory(), "indexeddb", nullptr));
     58    g_assert_cmpstr(indexedDBDirectory.get(), ==, webkit_website_data_manager_get_indexeddb_directory(manager));
    4959    g_assert(g_file_test(indexedDBDirectory.get(), G_FILE_TEST_IS_DIR));
     60
     61    test->loadURI(kServer->getURIForPath("/appcache").data());
     62    test->waitUntilLoadFinished();
     63    GUniquePtr<char> applicationCacheDirectory(g_build_filename(Test::dataDirectory(), "appcache", nullptr));
     64    g_assert_cmpstr(applicationCacheDirectory.get(), ==, webkit_website_data_manager_get_offline_application_cache_directory(manager));
     65    GUniquePtr<char> applicationCacheDatabase(g_build_filename(applicationCacheDirectory.get(), "ApplicationCache.db", nullptr));
     66    unsigned triesCount = 4;
     67    while (!g_file_test(applicationCacheDatabase.get(), G_FILE_TEST_IS_REGULAR) && --triesCount)
     68        test->wait(0.25);
     69    g_assert(triesCount);
     70
     71
     72    GUniquePtr<char> webSQLDirectory(g_build_filename(Test::dataDirectory(), "websql", nullptr));
     73    g_assert_cmpstr(webSQLDirectory.get(), ==, webkit_website_data_manager_get_websql_directory(manager));
     74#if 0 // FIXME: We need API to set the database quota for an origin to be able to test this.
     75    test->runJavaScriptAndWaitUntilFinished("db = openDatabase(\"TestDatabase\", \"1.0\", \"TestDatabase\", 1);", &error);
     76    g_assert(g_file_test(webSQLDirectory.get(), G_FILE_TEST_IS_DIR));
     77#endif
     78
     79    GUniquePtr<char> diskCacheDirectory(g_build_filename(Test::dataDirectory(), "disk-cache", nullptr));
     80    g_assert_cmpstr(diskCacheDirectory.get(), ==, webkit_website_data_manager_get_disk_cache_directory(manager));
     81    g_assert(g_file_test(diskCacheDirectory.get(), G_FILE_TEST_IS_DIR));
     82
     83    // The default context should have a different manager with different configuration.
     84    WebKitWebsiteDataManager* defaultManager = webkit_web_context_get_website_data_manager(webkit_web_context_get_default());
     85    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(defaultManager));
     86    g_assert(manager != defaultManager);
     87    g_assert_cmpstr(webkit_website_data_manager_get_local_storage_directory(manager), !=, webkit_website_data_manager_get_local_storage_directory(defaultManager));
     88    g_assert_cmpstr(webkit_website_data_manager_get_indexeddb_directory(manager), !=, webkit_website_data_manager_get_indexeddb_directory(defaultManager));
     89    g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(manager), !=, webkit_website_data_manager_get_disk_cache_directory(defaultManager));
     90    g_assert_cmpstr(webkit_website_data_manager_get_offline_application_cache_directory(manager), !=, webkit_website_data_manager_get_offline_application_cache_directory(defaultManager));
     91    g_assert_cmpstr(webkit_website_data_manager_get_websql_directory(manager), !=, webkit_website_data_manager_get_websql_directory(defaultManager));
     92
     93    // Using Test::dataDirectory() we get the default configuration but for a differrent prefix.
     94    GRefPtr<WebKitWebsiteDataManager> baseDataManager = adoptGRef(webkit_website_data_manager_new("base-data-directory", Test::dataDirectory(), "base-cache-directory", Test::dataDirectory(), nullptr));
     95    g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(baseDataManager.get()));
     96
     97    localStorageDirectory.reset(g_build_filename(Test::dataDirectory(), "localstorage", nullptr));
     98    g_assert_cmpstr(webkit_website_data_manager_get_local_storage_directory(baseDataManager.get()), ==, localStorageDirectory.get());
     99
     100    indexedDBDirectory.reset(g_build_filename(Test::dataDirectory(), "databases", "indexeddb", nullptr));
     101    g_assert_cmpstr(webkit_website_data_manager_get_indexeddb_directory(baseDataManager.get()), ==, indexedDBDirectory.get());
     102
     103    applicationCacheDirectory.reset(g_build_filename(Test::dataDirectory(), "applications", nullptr));
     104    g_assert_cmpstr(webkit_website_data_manager_get_offline_application_cache_directory(baseDataManager.get()), ==, applicationCacheDirectory.get());
     105
     106    webSQLDirectory.reset(g_build_filename(Test::dataDirectory(), "databases", nullptr));
     107    g_assert_cmpstr(webkit_website_data_manager_get_websql_directory(baseDataManager.get()), ==, webSQLDirectory.get());
     108
     109    g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(baseDataManager.get()), ==, Test::dataDirectory());
     110
     111    // Any specific configuration provided takes precedence over base dirs.
     112    indexedDBDirectory.reset(g_build_filename(Test::dataDirectory(), "mycustomindexeddb", nullptr));
     113    applicationCacheDirectory.reset(g_build_filename(Test::dataDirectory(), "mycustomappcache", nullptr));
     114    baseDataManager = adoptGRef(webkit_website_data_manager_new("base-data-directory", Test::dataDirectory(), "base-cache-directory", Test::dataDirectory(),
     115        "indexeddb-directory", indexedDBDirectory.get(), "offline-application-cache-directory", applicationCacheDirectory.get(), nullptr));
     116    g_assert_cmpstr(webkit_website_data_manager_get_indexeddb_directory(baseDataManager.get()), ==, indexedDBDirectory.get());
     117    g_assert_cmpstr(webkit_website_data_manager_get_offline_application_cache_directory(baseDataManager.get()), ==, applicationCacheDirectory.get());
     118    // The resutl should be the same as previous manager.
     119    g_assert_cmpstr(webkit_website_data_manager_get_local_storage_directory(baseDataManager.get()), ==, localStorageDirectory.get());
     120    g_assert_cmpstr(webkit_website_data_manager_get_websql_directory(baseDataManager.get()), ==, webSQLDirectory.get());
     121    g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(baseDataManager.get()), ==, Test::dataDirectory());
    50122}
    51123
     
    350422        const char* emptyHTML = "<html><body></body></html>";
    351423        soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, emptyHTML, strlen(emptyHTML));
     424        soup_message_body_complete(message->response_body);
     425        soup_message_set_status(message, SOUP_STATUS_OK);
     426    } else if (g_str_equal(path, "/appcache")) {
     427        const char* appcacheHTML = "<html manifest=appcache.manifest><body></body></html>";
     428        soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, appcacheHTML, strlen(appcacheHTML));
     429        soup_message_body_complete(message->response_body);
     430        soup_message_set_status(message, SOUP_STATUS_OK);
     431    } else if (g_str_equal(path, "/appcache.manifest")) {
     432        const char* appcacheManifest = "CACHE MANIFEST\nCACHE:\nappcache/foo.txt\n";
     433        soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, appcacheManifest, strlen(appcacheManifest));
     434        soup_message_body_complete(message->response_body);
     435        soup_message_set_status(message, SOUP_STATUS_OK);
     436    } else if (g_str_equal(path, "/appcache/foo.txt")) {
     437        soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, "foo", 3);
    352438        soup_message_body_complete(message->response_body);
    353439        soup_message_set_status(message, SOUP_STATUS_OK);
  • trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h

    r185502 r185950  
    7070        GUniquePtr<char> localStorageDirectory(g_build_filename(dataDirectory(), "local-storage", nullptr));
    7171        GUniquePtr<char> indexedDBDirectory(g_build_filename(dataDirectory(), "indexeddb", nullptr));
    72         m_webContext = adoptGRef(WEBKIT_WEB_CONTEXT(g_object_new(WEBKIT_TYPE_WEB_CONTEXT,
    73             "local-storage-directory", localStorageDirectory.get(),
    74             "indexed-db-directory", indexedDBDirectory.get(),
    75             nullptr)));
     72        GUniquePtr<char> diskCacheDirectory(g_build_filename(dataDirectory(), "disk-cache", nullptr));
     73        GUniquePtr<char> applicationCacheDirectory(g_build_filename(dataDirectory(), "appcache", nullptr));
     74        GUniquePtr<char> webSQLDirectory(g_build_filename(dataDirectory(), "websql", nullptr));
     75        GRefPtr<WebKitWebsiteDataManager> websiteDataManager = adoptGRef(webkit_website_data_manager_new(
     76            "local-storage-directory", localStorageDirectory.get(), "indexeddb-directory", indexedDBDirectory.get(),
     77            "disk-cache-directory", diskCacheDirectory.get(), "offline-application-cache-directory", applicationCacheDirectory.get(),
     78            "websql-directory", webSQLDirectory.get(), nullptr));
    7679
     80        m_webContext = adoptGRef(webkit_web_context_new_with_website_data_manager(websiteDataManager.get()));
    7781        g_signal_connect(m_webContext.get(), "initialize-web-extensions", G_CALLBACK(initializeWebExtensionsCallback), this);
    78         GUniquePtr<char> diskCacheDirectory(g_build_filename(dataDirectory(), "disk-cache", nullptr));
    79         webkit_web_context_set_disk_cache_directory(m_webContext.get(), diskCacheDirectory.get());
    8082    }
    8183
     
    8385    {
    8486        g_signal_handlers_disconnect_matched(m_webContext.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
     87        m_webContext = nullptr;
    8588        if (m_watchedObjects.isEmpty())
    8689            return;
  • trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp

    r185508 r185950  
    2424#include <JavaScriptCore/JSRetainPtr.h>
    2525#include <WebCore/GUniquePtrGtk.h>
     26#include <wtf/glib/GMainLoopSource.h>
    2627
    2728WebViewTest::WebViewTest(WebKitUserContentManager* userContentManager)
     
    180181}
    181182
    182 static gboolean quitMainLoopIdleCallback(WebViewTest* test)
    183 {
    184     test->quitMainLoop();
    185     return FALSE;
    186 }
    187 
    188183void WebViewTest::wait(double seconds)
    189184{
    190     g_timeout_add_seconds(seconds, reinterpret_cast<GSourceFunc>(quitMainLoopIdleCallback), this);
     185    GMainLoopSource::scheduleAfterDelayAndDeleteOnDestroy("WebViewTest wait", [this] { quitMainLoop(); },
     186        std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::duration<double>(seconds)));
    191187    g_main_loop_run(m_mainLoop);
    192188}
Note: See TracChangeset for help on using the changeset viewer.