<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[185950] trunk</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/185950">185950</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-06-25 00:51:32 -0700 (Thu, 25 Jun 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>[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.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2PlatformGTKcmake">trunk/Source/WebKit2/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitPrivateh">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebContextcpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebContexth">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkdocswebkit2gtk40sectionstxt">trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkdocswebkit2gtk40types">trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkwebkit2h">trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2GtkTestWebKitWebContextcpp">trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp</a></li>
<li><a href="#trunkToolsTestWebKitAPIgtkWebKit2GtkTestMainh">trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h</a></li>
<li><a href="#trunkToolsTestWebKitAPIgtkWebKit2GtkWebViewTestcpp">trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebsiteDataManagercpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebsiteDataManagerh">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebsiteDataManagerPrivateh">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/ChangeLog        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -1,5 +1,56 @@
</span><span class="cx"> 2015-06-25 Carlos Garcia Campos <cgarcia@igalia.com>
</span><span class="cx">
</span><ins>+ [GTK] Add initial WebKitWebsiteDataManager API for process configuration options
+ https://bugs.webkit.org/show_bug.cgi?id=146149
+
+ Reviewed by Sergio Villar Senin.
+
+ 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.
+
+2015-06-25 Carlos Garcia Campos <cgarcia@igalia.com>
+
</ins><span class="cx"> [GTK] Do not use legacy data store options in WebKit2 GTK+ API
</span><span class="cx"> https://bugs.webkit.org/show_bug.cgi?id=146145
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformGTK.cmake (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformGTK.cmake        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/PlatformGTK.cmake        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -251,6 +251,9 @@
</span><span class="cx"> UIProcess/API/gtk/WebKitWebViewBaseAccessible.h
</span><span class="cx"> UIProcess/API/gtk/WebKitWebViewBasePrivate.h
</span><span class="cx"> UIProcess/API/gtk/WebKitWebViewPrivate.h
</span><ins>+ UIProcess/API/gtk/WebKitWebsiteDataManager.cpp
+ UIProcess/API/gtk/WebKitWebsiteDataManager.h
+ UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h
</ins><span class="cx"> UIProcess/API/gtk/WebKitWindowProperties.cpp
</span><span class="cx"> UIProcess/API/gtk/WebKitWindowProperties.h
</span><span class="cx"> UIProcess/API/gtk/WebKitWindowPropertiesPrivate.h
</span><span class="lines">@@ -399,6 +402,7 @@
</span><span class="cx"> ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebResource.h
</span><span class="cx"> ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebView.h
</span><span class="cx"> ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebViewBase.h
</span><ins>+ ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWebsiteDataManager.h
</ins><span class="cx"> ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitWindowProperties.h
</span><span class="cx"> ${WEBKIT2_DIR}/UIProcess/API/gtk/webkit2.h
</span><span class="cx"> )
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitPrivate.h        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -127,4 +127,10 @@
</span><span class="cx"> SnapshotRegionFullDocument
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+#if ENABLE(NETWORK_CACHE)
+static const char networkCacheSubdirectory[] = "WebKitCache";
+#else
+static const char networkCacheSubdirectory[] = "webkit";
+#endif
+
</ins><span class="cx"> #endif // WebKitPrivate_h
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx"> #include "WebKitWebContextPrivate.h"
</span><span class="cx"> #include "WebKitWebViewBasePrivate.h"
</span><span class="cx"> #include "WebKitWebViewPrivate.h"
</span><ins>+#include "WebKitWebsiteDataManagerPrivate.h"
</ins><span class="cx"> #include "WebNotificationManagerProxy.h"
</span><span class="cx"> #include <WebCore/FileSystem.h>
</span><span class="cx"> #include <WebCore/IconDatabase.h>
</span><span class="lines">@@ -102,7 +103,7 @@
</span><span class="cx"> PROP_0,
</span><span class="cx">
</span><span class="cx"> PROP_LOCAL_STORAGE_DIRECTORY,
</span><del>- PROP_INDEXED_DB_DIRECTORY
</del><ins>+ PROP_WEBSITE_DATA_MANAGER
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> enum {
</span><span class="lines">@@ -173,7 +174,7 @@
</span><span class="cx"> #if ENABLE(NOTIFICATIONS)
</span><span class="cx"> RefPtr<WebKitNotificationProvider> notificationProvider;
</span><span class="cx"> #endif
</span><del>- RefPtr<WebsiteDataStore> websiteDataStore;
</del><ins>+ GRefPtr<WebKitWebsiteDataManager> websiteDataManager;
</ins><span class="cx">
</span><span class="cx"> CString faviconDatabaseDirectory;
</span><span class="cx"> WebKitTLSErrorsPolicy tlsErrorsPolicy;
</span><span class="lines">@@ -238,8 +239,8 @@
</span><span class="cx"> case PROP_LOCAL_STORAGE_DIRECTORY:
</span><span class="cx"> g_value_set_string(value, context->priv->localStorageDirectory.data());
</span><span class="cx"> break;
</span><del>- case PROP_INDEXED_DB_DIRECTORY:
- g_value_set_string(value, context->priv->indexedDBDirectory.data());
</del><ins>+ case PROP_WEBSITE_DATA_MANAGER:
+ g_value_set_object(value, webkit_web_context_get_website_data_manager(context));
</ins><span class="cx"> break;
</span><span class="cx"> default:
</span><span class="cx"> G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
</span><span class="lines">@@ -254,9 +255,11 @@
</span><span class="cx"> case PROP_LOCAL_STORAGE_DIRECTORY:
</span><span class="cx"> context->priv->localStorageDirectory = g_value_get_string(value);
</span><span class="cx"> break;
</span><del>- case PROP_INDEXED_DB_DIRECTORY:
- context->priv->indexedDBDirectory = g_value_get_string(value);
</del><ins>+ case PROP_WEBSITE_DATA_MANAGER: {
+ gpointer manager = g_value_get_object(value);
+ context->priv->websiteDataManager = manager ? WEBKIT_WEBSITE_DATA_MANAGER(manager) : nullptr;
</ins><span class="cx"> break;
</span><ins>+ }
</ins><span class="cx"> default:
</span><span class="cx"> G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
</span><span class="cx"> }
</span><span class="lines">@@ -286,14 +289,20 @@
</span><span class="cx">
</span><span class="cx"> WebKitWebContext* webContext = WEBKIT_WEB_CONTEXT(object);
</span><span class="cx"> WebKitWebContextPrivate* priv = webContext->priv;
</span><del>- if (!priv->localStorageDirectory.isNull())
</del><ins>+ if (priv->websiteDataManager) {
+ configuration.setLocalStorageDirectory(WebCore::filenameToString(webkit_website_data_manager_get_local_storage_directory(priv->websiteDataManager.get())));
+ configuration.setDiskCacheDirectory(WebCore::pathByAppendingComponent(WebCore::filenameToString(webkit_website_data_manager_get_disk_cache_directory(priv->websiteDataManager.get())), networkCacheSubdirectory));
+ configuration.setApplicationCacheDirectory(WebCore::filenameToString(webkit_website_data_manager_get_offline_application_cache_directory(priv->websiteDataManager.get())));
+ configuration.setIndexedDBDatabaseDirectory(WebCore::filenameToString(webkit_website_data_manager_get_indexeddb_directory(priv->websiteDataManager.get())));
+ configuration.setWebSQLDatabaseDirectory(WebCore::filenameToString(webkit_website_data_manager_get_websql_directory(priv->websiteDataManager.get())));
+ } else if (!priv->localStorageDirectory.isNull())
</ins><span class="cx"> configuration.setLocalStorageDirectory(WebCore::filenameToString(priv->localStorageDirectory.data()));
</span><del>- if (!priv->indexedDBDirectory.isNull())
- configuration.setIndexedDBDatabaseDirectory(WebCore::filenameToString(priv->indexedDBDirectory.data()));
</del><span class="cx">
</span><span class="cx"> priv->context = WebProcessPool::create(configuration);
</span><span class="cx">
</span><del>- priv->websiteDataStore = WebsiteDataStore::create(websiteDataStoreConfigurationForWebProcessPoolConfiguration(configuration));
</del><ins>+ if (!priv->websiteDataManager)
+ priv->websiteDataManager = webkitWebsiteDataManagerCreate(websiteDataStoreConfigurationForWebProcessPoolConfiguration(configuration));
+
</ins><span class="cx"> priv->requestManager = priv->context->supplement<WebSoupCustomProtocolRequestManager>();
</span><span class="cx">
</span><span class="cx"> priv->tlsErrorsPolicy = WEBKIT_TLS_ERRORS_POLICY_FAIL;
</span><span class="lines">@@ -344,6 +353,8 @@
</span><span class="cx"> * The directory where local storage data will be saved.
</span><span class="cx"> *
</span><span class="cx"> * Since: 2.8
</span><ins>+ *
+ * Deprecated: 2.10. Use #WebKitWebsiteDataManager:local-storage-directory instead.
</ins><span class="cx"> */
</span><span class="cx"> g_object_class_install_property(
</span><span class="cx"> gObjectClass,
</span><span class="lines">@@ -356,20 +367,20 @@
</span><span class="cx"> static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
</span><span class="cx">
</span><span class="cx"> /**
</span><del>- * WebKitWebContext:indexed-db-directory:
</del><ins>+ * WebKitWebContext:website-data-manager:
</ins><span class="cx"> *
</span><del>- * The directory where IndexedDB databases will be saved.
</del><ins>+ * The #WebKitWebsiteDataManager associated with this context.
</ins><span class="cx"> *
</span><span class="cx"> * Since: 2.10
</span><span class="cx"> */
</span><span class="cx"> g_object_class_install_property(
</span><span class="cx"> gObjectClass,
</span><del>- PROP_INDEXED_DB_DIRECTORY,
- g_param_spec_string(
- "indexed-db-directory",
- _("IndexedDB Directory"),
- _("The directory where IndexedDB databases will be saved"),
- nullptr,
</del><ins>+ PROP_WEBSITE_DATA_MANAGER,
+ g_param_spec_object(
+ "website-data-manager",
+ _("Website Data Manager"),
+ _("The WebKitWebsiteDataManager associated with this context"),
+ WEBKIT_TYPE_WEBSITE_DATA_MANAGER,
</ins><span class="cx"> static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
</span><span class="cx">
</span><span class="cx"> /**
</span><span class="lines">@@ -444,6 +455,40 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> /**
</span><ins>+ * webkit_web_context_new_with_website_data_manager:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Create a new #WebKitWebContext with a #WebKitWebsiteDataManager.
+ *
+ * Returns: (transfer full): a newly created #WebKitWebContext
+ *
+ * Since: 2.10
+ */
+WebKitWebContext* webkit_web_context_new_with_website_data_manager(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ return WEBKIT_WEB_CONTEXT(g_object_new(WEBKIT_TYPE_WEB_CONTEXT, "website-data-manager", manager, nullptr));
+}
+
+/**
+ * webkit_web_context_get_website_data_manager:
+ * @context: the #WebKitWebContext
+ *
+ * Get the #WebKitWebsiteDataManager of @context.
+ *
+ * Returns: (transfer none): a #WebKitWebsiteDataManager
+ *
+ * Since: 2.10
+ */
+WebKitWebsiteDataManager* webkit_web_context_get_website_data_manager(WebKitWebContext* context)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), nullptr);
+
+ return context->priv->websiteDataManager.get();
+}
+
+/**
</ins><span class="cx"> * webkit_web_context_set_cache_model:
</span><span class="cx"> * @context: the #WebKitWebContext
</span><span class="cx"> * @cache_model: a #WebKitCacheModel
</span><span class="lines">@@ -1039,17 +1084,18 @@
</span><span class="cx"> * Set the directory where disk cache files will be stored
</span><span class="cx"> * This method must be called before loading anything in this context, otherwise
</span><span class="cx"> * it will not have any effect.
</span><ins>+ *
+ * Note that this method overrides the directory set in the #WebKitWebsiteDataManager,
+ * but it doesn't change the value returned by webkit_website_data_manager_get_disk_cache_directory()
+ * since the #WebKitWebsiteDataManager is immutable.
+ *
+ * Deprecated: 2.10. Use webkit_web_context_new_with_website_data_manager() instead.
</ins><span class="cx"> */
</span><span class="cx"> void webkit_web_context_set_disk_cache_directory(WebKitWebContext* context, const char* directory)
</span><span class="cx"> {
</span><span class="cx"> g_return_if_fail(WEBKIT_IS_WEB_CONTEXT(context));
</span><span class="cx"> g_return_if_fail(directory);
</span><span class="cx">
</span><del>-#if ENABLE(NETWORK_CACHE)
- static const char networkCacheSubdirectory[] = "WebKitCache";
-#else
- static const char networkCacheSubdirectory[] = "webkit";
-#endif
</del><span class="cx"> context->priv->context->configuration().setDiskCacheDirectory(WebCore::pathByAppendingComponent(WebCore::filenameToString(directory), networkCacheSubdirectory));
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1232,8 +1278,8 @@
</span><span class="cx"> webPageConfiguration.preferences = webkitSettingsGetPreferences(webkit_web_view_get_settings(webView));
</span><span class="cx"> webPageConfiguration.relatedPage = relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr;
</span><span class="cx"> webPageConfiguration.userContentController = userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr;
</span><del>- webPageConfiguration.websiteDataStore = context->priv->websiteDataStore.get();
- webPageConfiguration.sessionID = context->priv->websiteDataStore->sessionID();
</del><ins>+ webPageConfiguration.websiteDataStore = &webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get());
+ webPageConfiguration.sessionID = webPageConfiguration.websiteDataStore->sessionID();
</ins><span class="cx"> webkitWebViewBaseCreateWebPage(webViewBase, context->priv->context.get(), WTF::move(webPageConfiguration));
</span><span class="cx">
</span><span class="cx"> WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include <webkit2/WebKitFaviconDatabase.h>
</span><span class="cx"> #include <webkit2/WebKitSecurityManager.h>
</span><span class="cx"> #include <webkit2/WebKitURISchemeRequest.h>
</span><ins>+#include <webkit2/WebKitWebsiteDataManager.h>
</ins><span class="cx">
</span><span class="cx"> G_BEGIN_DECLS
</span><span class="cx">
</span><span class="lines">@@ -148,6 +149,12 @@
</span><span class="cx"> WEBKIT_API WebKitWebContext *
</span><span class="cx"> webkit_web_context_new (void);
</span><span class="cx">
</span><ins>+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);
+
</ins><span class="cx"> WEBKIT_API void
</span><span class="cx"> webkit_web_context_set_cache_model (WebKitWebContext *context,
</span><span class="cx"> WebKitCacheModel cache_model);
</span><span class="lines">@@ -234,7 +241,7 @@
</span><span class="cx"> webkit_web_context_prefetch_dns (WebKitWebContext *context,
</span><span class="cx"> const gchar *hostname);
</span><span class="cx">
</span><del>-WEBKIT_API void
</del><ins>+WEBKIT_DEPRECATED_FOR(webkit_web_context_new_with_website_data_manager) void
</ins><span class="cx"> webkit_web_context_set_disk_cache_directory (WebKitWebContext *context,
</span><span class="cx"> const gchar *directory);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebsiteDataManagercpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp (0 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp         (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -0,0 +1,485 @@
</span><ins>+/*
+ * Copyright (C) 2015 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2,1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "WebKitWebsiteDataManager.h"
+
+#include "APIWebsiteDataStore.h"
+#include "WebKitWebsiteDataManagerPrivate.h"
+#include <WebCore/FileSystem.h>
+#include <glib/gi18n-lib.h>
+#include <wtf/glib/GUniquePtr.h>
+
+using namespace WebKit;
+
+/**
+ * SECTION: WebKitWebsiteDataManager
+ * @Short_description: Website data manager
+ * @Title: WebKitWebsiteDataManager
+ * @See_also: #WebKitWebContext
+ *
+ * WebKitWebsiteDataManager allows you to manage the data that websites
+ * can store in the client file system like databases or caches.
+ * You can use WebKitWebsiteDataManager to configure the local directories
+ * where the Website data will be stored, by creating a new manager with
+ * webkit_website_data_manager_new() passing the values you want to set.
+ * You can set all the possible configuration values or only some of them,
+ * a default value will be used automatically for the configuration options
+ * not provided. #WebKitWebsiteDataManager:base-data-directory and
+ * #WebKitWebsiteDataManager:base-cache-directory are two special properties
+ * that can be used to set a common base directory for all Website data and
+ * caches. It's possible to provide both, a base directory and a specific value,
+ * but in that case, the specific value takes precedence over the base directory.
+ * The newly created WebKitWebsiteDataManager must be passed as a construct property
+ * to a #WebKitWebContext, you can use webkit_web_context_new_with_website_data_manager()
+ * to create a new #WebKitWebContext with a WebKitWebsiteDataManager.
+ * In case you don't want to set any specific configuration, you don't need to create
+ * a WebKitWebsiteDataManager, the #WebKitWebContext will create a WebKitWebsiteDataManager
+ * with the default configuration. To get the WebKitWebsiteDataManager of a #WebKitWebContext
+ * you can use webkit_web_context_get_website_data_manager().
+ *
+ * Since: 2.10
+ */
+
+enum {
+ PROP_0,
+
+ PROP_BASE_DATA_DIRECTORY,
+ PROP_BASE_CACHE_DIRECTORY,
+ PROP_LOCAL_STORAGE_DIRECTORY,
+ PROP_DISK_CACHE_DIRECTORY,
+ PROP_APPLICATION_CACHE_DIRECTORY,
+ PROP_INDEXEDDB_DIRECTORY,
+ PROP_WEBSQL_DIRECTORY
+};
+
+struct _WebKitWebsiteDataManagerPrivate {
+ RefPtr<WebsiteDataStore> websiteDataStore;
+ GUniquePtr<char> baseDataDirectory;
+ GUniquePtr<char> baseCacheDirectory;
+ GUniquePtr<char> localStorageDirectory;
+ GUniquePtr<char> diskCacheDirectory;
+ GUniquePtr<char> applicationCacheDirectory;
+ GUniquePtr<char> indexedDBDirectory;
+ GUniquePtr<char> webSQLDirectory;
+};
+
+WEBKIT_DEFINE_TYPE(WebKitWebsiteDataManager, webkit_website_data_manager, G_TYPE_OBJECT)
+
+static void webkitWebsiteDataManagerGetProperty(GObject* object, guint propID, GValue* value, GParamSpec* paramSpec)
+{
+ WebKitWebsiteDataManager* manager = WEBKIT_WEBSITE_DATA_MANAGER(object);
+
+ switch (propID) {
+ case PROP_BASE_DATA_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_base_data_directory(manager));
+ break;
+ case PROP_BASE_CACHE_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_base_cache_directory(manager));
+ break;
+ case PROP_LOCAL_STORAGE_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_local_storage_directory(manager));
+ break;
+ case PROP_DISK_CACHE_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_disk_cache_directory(manager));
+ break;
+ case PROP_APPLICATION_CACHE_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_offline_application_cache_directory(manager));
+ break;
+ case PROP_INDEXEDDB_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_indexeddb_directory(manager));
+ break;
+ case PROP_WEBSQL_DIRECTORY:
+ g_value_set_string(value, webkit_website_data_manager_get_websql_directory(manager));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
+ }
+}
+
+static void webkitWebsiteDataManagerSetProperty(GObject* object, guint propID, const GValue* value, GParamSpec* paramSpec)
+{
+ WebKitWebsiteDataManager* manager = WEBKIT_WEBSITE_DATA_MANAGER(object);
+
+ switch (propID) {
+ case PROP_BASE_DATA_DIRECTORY:
+ manager->priv->baseDataDirectory.reset(g_value_dup_string(value));
+ break;
+ case PROP_BASE_CACHE_DIRECTORY:
+ manager->priv->baseCacheDirectory.reset(g_value_dup_string(value));
+ break;
+ case PROP_LOCAL_STORAGE_DIRECTORY:
+ manager->priv->localStorageDirectory.reset(g_value_dup_string(value));
+ break;
+ case PROP_DISK_CACHE_DIRECTORY:
+ manager->priv->diskCacheDirectory.reset(g_value_dup_string(value));
+ break;
+ case PROP_APPLICATION_CACHE_DIRECTORY:
+ manager->priv->applicationCacheDirectory.reset(g_value_dup_string(value));
+ break;
+ case PROP_INDEXEDDB_DIRECTORY:
+ manager->priv->indexedDBDirectory.reset(g_value_dup_string(value));
+ break;
+ case PROP_WEBSQL_DIRECTORY:
+ manager->priv->webSQLDirectory.reset(g_value_dup_string(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propID, paramSpec);
+ }
+}
+
+static void webkitWebsiteDataManagerConstructed(GObject* object)
+{
+ G_OBJECT_CLASS(webkit_website_data_manager_parent_class)->constructed(object);
+
+ WebKitWebsiteDataManagerPrivate* priv = WEBKIT_WEBSITE_DATA_MANAGER(object)->priv;
+ if (priv->baseDataDirectory) {
+ if (!priv->localStorageDirectory)
+ priv->localStorageDirectory.reset(g_build_filename(priv->baseDataDirectory.get(), "localstorage", nullptr));
+ if (!priv->indexedDBDirectory)
+ priv->indexedDBDirectory.reset(g_build_filename(priv->baseDataDirectory.get(), "databases", "indexeddb", nullptr));
+ if (!priv->webSQLDirectory)
+ priv->webSQLDirectory.reset(g_build_filename(priv->baseDataDirectory.get(), "databases", nullptr));
+ }
+
+ if (priv->baseCacheDirectory) {
+ if (!priv->diskCacheDirectory)
+ priv->diskCacheDirectory.reset(g_strdup(priv->baseCacheDirectory.get()));
+ if (!priv->applicationCacheDirectory)
+ priv->applicationCacheDirectory.reset(g_build_filename(priv->baseCacheDirectory.get(), "applications", nullptr));
+ }
+}
+
+static void webkit_website_data_manager_class_init(WebKitWebsiteDataManagerClass* findClass)
+{
+ GObjectClass* gObjectClass = G_OBJECT_CLASS(findClass);
+
+ gObjectClass->get_property = webkitWebsiteDataManagerGetProperty;
+ gObjectClass->set_property = webkitWebsiteDataManagerSetProperty;
+ gObjectClass->constructed = webkitWebsiteDataManagerConstructed;
+
+ /**
+ * WebKitWebsiteDataManager:base-data-directory:
+ *
+ * The base directory for Website data. This is used as a base directory
+ * for any Website data when no specific data directory has been provided.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_BASE_DATA_DIRECTORY,
+ g_param_spec_string(
+ "base-data-directory",
+ _("Base Data Directory"),
+ _("The base directory for Website data"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebsiteDataManager:base-cache-directory:
+ *
+ * The base directory for Website cache. This is used as a base directory
+ * for any Website cache when no specific cache directory has been provided.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_BASE_CACHE_DIRECTORY,
+ g_param_spec_string(
+ "base-cache-directory",
+ _("Base Cache Directory"),
+ _("The base directory for Website cache"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebsiteDataManager:local-storage-directory:
+ *
+ * The directory where local storage data will be stored.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_LOCAL_STORAGE_DIRECTORY,
+ g_param_spec_string(
+ "local-storage-directory",
+ _("Local Storage Directory"),
+ _("The directory where local storage data will be stored"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebsiteDataManager:disk-cache-directory:
+ *
+ * The directory where HTTP disk cache will be stored.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_DISK_CACHE_DIRECTORY,
+ g_param_spec_string(
+ "disk-cache-directory",
+ _("Disk Cache Directory"),
+ _("The directory where HTTP disk cache will be stored"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebsiteDataManager:offline-application-cache-directory:
+ *
+ * The directory where offline web application cache will be stored.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_APPLICATION_CACHE_DIRECTORY,
+ g_param_spec_string(
+ "offline-application-cache-directory",
+ _("Offline Web Application Cache Directory"),
+ _("The directory where offline web application cache will be stored"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebsiteDataManager:indexeddb-directory:
+ *
+ * The directory where IndexedDB databases will be stored.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_INDEXEDDB_DIRECTORY,
+ g_param_spec_string(
+ "indexeddb-directory",
+ _("IndexedDB Directory"),
+ _("The directory where IndexedDB databases will be stored"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebsiteDataManager:websql-directory:
+ *
+ * The directory where WebSQL databases will be stored.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_WEBSQL_DIRECTORY,
+ g_param_spec_string(
+ "websql-directory",
+ _("WebSQL Directory"),
+ _("The directory where WebSQL databases will be stored"),
+ nullptr,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+}
+
+WebKitWebsiteDataManager* webkitWebsiteDataManagerCreate(WebsiteDataStore::Configuration&& configuration)
+{
+ WebKitWebsiteDataManager* manager = WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, nullptr));
+ manager->priv->websiteDataStore = WebsiteDataStore::create(WTF::move(configuration));
+
+ return manager;
+}
+
+WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager* manager)
+{
+ WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+ if (!priv->websiteDataStore) {
+ WebsiteDataStore::Configuration configuration;
+ configuration.localStorageDirectory = !priv->localStorageDirectory ?
+ API::WebsiteDataStore::defaultLocalStorageDirectory() : WebCore::filenameToString(priv->localStorageDirectory.get());
+ configuration.networkCacheDirectory = !priv->diskCacheDirectory ?
+ API::WebsiteDataStore::defaultNetworkCacheDirectory() : WebCore::pathByAppendingComponent(WebCore::filenameToString(priv->diskCacheDirectory.get()), networkCacheSubdirectory);
+ configuration.applicationCacheDirectory = !priv->applicationCacheDirectory ?
+ API::WebsiteDataStore::defaultApplicationCacheDirectory() : WebCore::filenameToString(priv->applicationCacheDirectory.get());
+ configuration.webSQLDatabaseDirectory = !priv->webSQLDirectory ?
+ API::WebsiteDataStore::defaultWebSQLDatabaseDirectory() : WebCore::filenameToString(priv->webSQLDirectory.get());
+ configuration.mediaKeysStorageDirectory = API::WebsiteDataStore::defaultMediaKeysStorageDirectory();
+ priv->websiteDataStore = WebsiteDataStore::create(WTF::move(configuration));
+ }
+
+ return *priv->websiteDataStore;
+}
+
+/**
+ * webkit_website_data_manager_new:
+ * @first_option_name: name of the first option to set
+ * @...: value of first option, followed by more options, %NULL-terminated
+ *
+ * Creates a new #WebKitWebsiteDataManager with the given options. It must
+ * be passed as construction parameter of a #WebKitWebContext.
+ *
+ * Returns: (transfer full): the newly created #WebKitWebsiteDataManager
+ *
+ * Since: 2.10
+ */
+WebKitWebsiteDataManager* webkit_website_data_manager_new(const gchar* firstOptionName, ...)
+{
+ va_list args;
+ va_start(args, firstOptionName);
+ WebKitWebsiteDataManager* manager = WEBKIT_WEBSITE_DATA_MANAGER(g_object_new_valist(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, firstOptionName, args));
+ va_end(args);
+
+ return manager;
+}
+
+/**
+ * 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.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_base_data_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ return manager->priv->baseDataDirectory.get();
+}
+
+/**
+ * webkit_website_data_manager_get_base_cache_directory:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get the #WebKitWebsiteDataManager:base-cache-directory property.
+ *
+ * Returns: the base directory for Website cache, or %NULL if
+ * #WebKitWebsiteDataManager:base-cache-directory was not provided.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_base_cache_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ return manager->priv->baseCacheDirectory.get();
+}
+
+/**
+ * webkit_website_data_manager_get_local_storage_directory:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get the #WebKitWebsiteDataManager:local-storage-directory property.
+ *
+ * Returns: the directory where local storage data is stored.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_local_storage_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+ if (!priv->localStorageDirectory)
+ priv->localStorageDirectory.reset(g_strdup(API::WebsiteDataStore::defaultLocalStorageDirectory().utf8().data()));
+ return priv->localStorageDirectory.get();
+}
+
+/**
+ * webkit_website_data_manager_get_disk_cache_directory:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get the #WebKitWebsiteDataManager:disk-cache-directory property.
+ *
+ * Returns: the directory where HTTP disk cache is stored.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_disk_cache_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+ if (!priv->diskCacheDirectory) {
+ // The default directory already has the subdirectory.
+ priv->diskCacheDirectory.reset(g_strdup(WebCore::directoryName(API::WebsiteDataStore::defaultNetworkCacheDirectory()).utf8().data()));
+ }
+ return priv->diskCacheDirectory.get();
+}
+
+/**
+ * webkit_website_data_manager_get_offline_application_cache_directory:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get the #WebKitWebsiteDataManager:offline-application-cache-directory property.
+ *
+ * Returns: the directory where offline web application cache is stored.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_offline_application_cache_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+ if (!priv->applicationCacheDirectory)
+ priv->applicationCacheDirectory.reset(g_strdup(API::WebsiteDataStore::defaultApplicationCacheDirectory().utf8().data()));
+ return priv->applicationCacheDirectory.get();
+}
+
+/**
+ * webkit_website_data_manager_get_indexeddb_directory:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get the #WebKitWebsiteDataManager:indexeddb-directory property.
+ *
+ * Returns: the directory where IndexedDB databases are stored.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_indexeddb_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+ if (!priv->indexedDBDirectory)
+ priv->indexedDBDirectory.reset(g_strdup(API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory().utf8().data()));
+ return priv->indexedDBDirectory.get();
+}
+
+/**
+ * webkit_website_data_manager_get_websql_directory:
+ * @manager: a #WebKitWebsiteDataManager
+ *
+ * Get the #WebKitWebsiteDataManager:websql-directory property.
+ *
+ * Returns: the directory where WebSQL databases are stored.
+ *
+ * Since: 2.10
+ */
+const gchar* webkit_website_data_manager_get_websql_directory(WebKitWebsiteDataManager* manager)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager), nullptr);
+
+ WebKitWebsiteDataManagerPrivate* priv = manager->priv;
+ if (!priv->webSQLDirectory)
+ priv->webSQLDirectory.reset(g_strdup(API::WebsiteDataStore::defaultWebSQLDatabaseDirectory().utf8().data()));
+ return priv->webSQLDirectory.get();
+}
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebsiteDataManagerh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h (0 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h         (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.h        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+/*
+ * Copyright (C) 2015 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2,1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION)
+#error "Only <webkit2/webkit2.h> can be included directly."
+#endif
+
+#ifndef WebKitWebsiteDataManager_h
+#define WebKitWebsiteDataManager_h
+
+#include <glib-object.h>
+#include <webkit2/WebKitDefines.h>
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_WEBSITE_DATA_MANAGER (webkit_website_data_manager_get_type())
+#define WEBKIT_WEBSITE_DATA_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEBSITE_DATA_MANAGER, WebKitWebsiteDataManager))
+#define WEBKIT_IS_WEBSITE_DATA_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_WEBSITE_DATA_MANAGER))
+#define WEBKIT_WEBSITE_DATA_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_WEBSITE_DATA_MANAGER, WebKitWebsiteDataManagerClass))
+#define WEBKIT_IS_WEBSITE_DATA_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_WEBSITE_DATA_MANAGER))
+#define WEBKIT_WEBSITE_DATA_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_WEBSITE_DATA_MANAGER, WebKitWebsiteDataManagerClass))
+
+typedef struct _WebKitWebsiteDataManager WebKitWebsiteDataManager;
+typedef struct _WebKitWebsiteDataManagerClass WebKitWebsiteDataManagerClass;
+typedef struct _WebKitWebsiteDataManagerPrivate WebKitWebsiteDataManagerPrivate;
+
+struct _WebKitWebsiteDataManager {
+ GObject parent;
+
+ WebKitWebsiteDataManagerPrivate *priv;
+};
+
+struct _WebKitWebsiteDataManagerClass {
+ GObjectClass parent_class;
+
+ void (*_webkit_reserved0) (void);
+ void (*_webkit_reserved1) (void);
+ void (*_webkit_reserved2) (void);
+ void (*_webkit_reserved3) (void);
+};
+
+WEBKIT_API GType
+webkit_website_data_manager_get_type (void);
+
+WEBKIT_API WebKitWebsiteDataManager *
+webkit_website_data_manager_new (const gchar *first_option_name,
+ ...);
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_base_data_directory (WebKitWebsiteDataManager *manager);
+
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_base_cache_directory (WebKitWebsiteDataManager *manager);
+
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_local_storage_directory (WebKitWebsiteDataManager *manager);
+
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_disk_cache_directory (WebKitWebsiteDataManager *manager);
+
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_offline_application_cache_directory (WebKitWebsiteDataManager *manager);
+
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_indexeddb_directory (WebKitWebsiteDataManager *manager);
+
+WEBKIT_API const gchar *
+webkit_website_data_manager_get_websql_directory (WebKitWebsiteDataManager *manager);
+
+G_END_DECLS
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebsiteDataManagerPrivateh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h (0 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h         (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -0,0 +1,29 @@
</span><ins>+/*
+ * Copyright (C) 2015 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WebKitWebsiteDataManagerPrivate_h
+#define WebKitWebsiteDataManagerPrivate_h
+
+#include "WebKitPrivate.h"
+#include "WebsiteDataStore.h"
+
+WebKitWebsiteDataManager* webkitWebsiteDataManagerCreate(WebKit::WebsiteDataStore::Configuration&&);
+WebKit::WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager*);
+
+#endif // WebKitWebsiteDataManagerPrivate_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkdocswebkit2gtk40sectionstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -29,6 +29,8 @@
</span><span class="cx"> WebKitTLSErrorsPolicy
</span><span class="cx"> webkit_web_context_get_default
</span><span class="cx"> webkit_web_context_new
</span><ins>+webkit_web_context_new_with_website_data_manager
+webkit_web_context_get_website_data_manager
</ins><span class="cx"> webkit_web_context_get_cache_model
</span><span class="cx"> webkit_web_context_set_cache_model
</span><span class="cx"> webkit_web_context_clear_cache
</span><span class="lines">@@ -1147,6 +1149,32 @@
</span><span class="cx"> </SECTION>
</span><span class="cx">
</span><span class="cx"> <SECTION>
</span><ins>+<FILE>WebKitWebsiteDataManager</FILE>
+WebKitWebsiteDataManager
+webkit_website_data_manager_new
+webkit_website_data_manager_get_base_data_directory
+webkit_website_data_manager_get_base_cache_directory
+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
+
+<SUBSECTION Standard>
+WebKitWebsiteDataManagerClass
+WEBKIT_TYPE_WEBSITE_DATA_MANAGER
+WEBKIT_WEBSITE_DATA_MANAGER
+WEBKIT_IS_WEBSITE_DATA_MANAGER
+WEBKIT_WEBSITE_DATA_MANAGER_CLASS
+WEBKIT_IS_WEBSITE_DATA_MANAGER_CLASS
+WEBKIT_WEBSITE_DATA_MANAGER_GET_CLASS
+
+<SUBSECTION Private>
+WebKitWebsiteDataManagerPrivate
+webkit_website_data_manager_get_type
+</SECTION>
+
+<SECTION>
</ins><span class="cx"> <FILE>WebKitWebExtension</FILE>
</span><span class="cx"> WebKitWebExtension
</span><span class="cx"> WebKitWebExtensionInitializeFunction
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkdocswebkit2gtk40types"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -29,3 +29,4 @@
</span><span class="cx"> webkit_certificate_info_get_type
</span><span class="cx"> webkit_user_content_manager_get_type
</span><span class="cx"> webkit_web_hit_test_result_get_type
</span><ins>+webkit_website_data_manager_get_type
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkwebkit2h"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -72,6 +72,7 @@
</span><span class="cx"> #include <webkit2/WebKitWebResource.h>
</span><span class="cx"> #include <webkit2/WebKitWebView.h>
</span><span class="cx"> #include <webkit2/WebKitWebViewBase.h>
</span><ins>+#include <webkit2/WebKitWebsiteDataManager.h>
</ins><span class="cx"> #include <webkit2/WebKitWindowProperties.h>
</span><span class="cx">
</span><span class="cx"> #undef __WEBKIT2_H_INSIDE__
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Tools/ChangeLog        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2015-06-25 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ [GTK] Add initial WebKitWebsiteDataManager API for process configuration options
+ https://bugs.webkit.org/show_bug.cgi?id=146149
+
+ Reviewed by Sergio Villar Senin.
+
+ 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.
+
</ins><span class="cx"> 2015-06-24 Jason Marcell <jmarcell@apple.com>
</span><span class="cx">
</span><span class="cx"> Work towards: Add status of Safari projects on iOS Dashboard on build-safari
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2GtkTestWebKitWebContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitWebContext.cpp        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -39,14 +39,86 @@
</span><span class="cx">
</span><span class="cx"> static void testWebContextConfiguration(WebViewTest* test, gconstpointer)
</span><span class="cx"> {
</span><ins>+ WebKitWebsiteDataManager* manager = webkit_web_context_get_website_data_manager(test->m_webContext.get());
+ g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(manager));
+
+ // Base directories are not used by TestMain.
+ g_assert(!webkit_website_data_manager_get_base_data_directory(manager));
+ g_assert(!webkit_website_data_manager_get_base_cache_directory(manager));
+
</ins><span class="cx"> GUniquePtr<char> localStorageDirectory(g_build_filename(Test::dataDirectory(), "local-storage", nullptr));
</span><ins>+ g_assert_cmpstr(localStorageDirectory.get(), ==, webkit_website_data_manager_get_local_storage_directory(manager));
</ins><span class="cx"> g_assert(g_file_test(localStorageDirectory.get(), G_FILE_TEST_IS_DIR));
</span><span class="cx">
</span><span class="cx"> test->loadURI(kServer->getURIForPath("/empty").data());
</span><span class="cx"> test->waitUntilLoadFinished();
</span><span class="cx"> test->runJavaScriptAndWaitUntilFinished("window.indexedDB.open('TestDatabase');", nullptr);
</span><span class="cx"> GUniquePtr<char> indexedDBDirectory(g_build_filename(Test::dataDirectory(), "indexeddb", nullptr));
</span><ins>+ g_assert_cmpstr(indexedDBDirectory.get(), ==, webkit_website_data_manager_get_indexeddb_directory(manager));
</ins><span class="cx"> g_assert(g_file_test(indexedDBDirectory.get(), G_FILE_TEST_IS_DIR));
</span><ins>+
+ test->loadURI(kServer->getURIForPath("/appcache").data());
+ test->waitUntilLoadFinished();
+ GUniquePtr<char> applicationCacheDirectory(g_build_filename(Test::dataDirectory(), "appcache", nullptr));
+ g_assert_cmpstr(applicationCacheDirectory.get(), ==, webkit_website_data_manager_get_offline_application_cache_directory(manager));
+ GUniquePtr<char> applicationCacheDatabase(g_build_filename(applicationCacheDirectory.get(), "ApplicationCache.db", nullptr));
+ unsigned triesCount = 4;
+ while (!g_file_test(applicationCacheDatabase.get(), G_FILE_TEST_IS_REGULAR) && --triesCount)
+ test->wait(0.25);
+ g_assert(triesCount);
+
+
+ GUniquePtr<char> webSQLDirectory(g_build_filename(Test::dataDirectory(), "websql", nullptr));
+ g_assert_cmpstr(webSQLDirectory.get(), ==, webkit_website_data_manager_get_websql_directory(manager));
+#if 0 // FIXME: We need API to set the database quota for an origin to be able to test this.
+ test->runJavaScriptAndWaitUntilFinished("db = openDatabase(\"TestDatabase\", \"1.0\", \"TestDatabase\", 1);", &error);
+ g_assert(g_file_test(webSQLDirectory.get(), G_FILE_TEST_IS_DIR));
+#endif
+
+ GUniquePtr<char> diskCacheDirectory(g_build_filename(Test::dataDirectory(), "disk-cache", nullptr));
+ g_assert_cmpstr(diskCacheDirectory.get(), ==, webkit_website_data_manager_get_disk_cache_directory(manager));
+ g_assert(g_file_test(diskCacheDirectory.get(), G_FILE_TEST_IS_DIR));
+
+ // The default context should have a different manager with different configuration.
+ WebKitWebsiteDataManager* defaultManager = webkit_web_context_get_website_data_manager(webkit_web_context_get_default());
+ g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(defaultManager));
+ g_assert(manager != defaultManager);
+ g_assert_cmpstr(webkit_website_data_manager_get_local_storage_directory(manager), !=, webkit_website_data_manager_get_local_storage_directory(defaultManager));
+ g_assert_cmpstr(webkit_website_data_manager_get_indexeddb_directory(manager), !=, webkit_website_data_manager_get_indexeddb_directory(defaultManager));
+ g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(manager), !=, webkit_website_data_manager_get_disk_cache_directory(defaultManager));
+ g_assert_cmpstr(webkit_website_data_manager_get_offline_application_cache_directory(manager), !=, webkit_website_data_manager_get_offline_application_cache_directory(defaultManager));
+ g_assert_cmpstr(webkit_website_data_manager_get_websql_directory(manager), !=, webkit_website_data_manager_get_websql_directory(defaultManager));
+
+ // Using Test::dataDirectory() we get the default configuration but for a differrent prefix.
+ GRefPtr<WebKitWebsiteDataManager> baseDataManager = adoptGRef(webkit_website_data_manager_new("base-data-directory", Test::dataDirectory(), "base-cache-directory", Test::dataDirectory(), nullptr));
+ g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(baseDataManager.get()));
+
+ localStorageDirectory.reset(g_build_filename(Test::dataDirectory(), "localstorage", nullptr));
+ g_assert_cmpstr(webkit_website_data_manager_get_local_storage_directory(baseDataManager.get()), ==, localStorageDirectory.get());
+
+ indexedDBDirectory.reset(g_build_filename(Test::dataDirectory(), "databases", "indexeddb", nullptr));
+ g_assert_cmpstr(webkit_website_data_manager_get_indexeddb_directory(baseDataManager.get()), ==, indexedDBDirectory.get());
+
+ applicationCacheDirectory.reset(g_build_filename(Test::dataDirectory(), "applications", nullptr));
+ g_assert_cmpstr(webkit_website_data_manager_get_offline_application_cache_directory(baseDataManager.get()), ==, applicationCacheDirectory.get());
+
+ webSQLDirectory.reset(g_build_filename(Test::dataDirectory(), "databases", nullptr));
+ g_assert_cmpstr(webkit_website_data_manager_get_websql_directory(baseDataManager.get()), ==, webSQLDirectory.get());
+
+ g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(baseDataManager.get()), ==, Test::dataDirectory());
+
+ // Any specific configuration provided takes precedence over base dirs.
+ indexedDBDirectory.reset(g_build_filename(Test::dataDirectory(), "mycustomindexeddb", nullptr));
+ applicationCacheDirectory.reset(g_build_filename(Test::dataDirectory(), "mycustomappcache", nullptr));
+ baseDataManager = adoptGRef(webkit_website_data_manager_new("base-data-directory", Test::dataDirectory(), "base-cache-directory", Test::dataDirectory(),
+ "indexeddb-directory", indexedDBDirectory.get(), "offline-application-cache-directory", applicationCacheDirectory.get(), nullptr));
+ g_assert_cmpstr(webkit_website_data_manager_get_indexeddb_directory(baseDataManager.get()), ==, indexedDBDirectory.get());
+ g_assert_cmpstr(webkit_website_data_manager_get_offline_application_cache_directory(baseDataManager.get()), ==, applicationCacheDirectory.get());
+ // The resutl should be the same as previous manager.
+ g_assert_cmpstr(webkit_website_data_manager_get_local_storage_directory(baseDataManager.get()), ==, localStorageDirectory.get());
+ g_assert_cmpstr(webkit_website_data_manager_get_websql_directory(baseDataManager.get()), ==, webSQLDirectory.get());
+ g_assert_cmpstr(webkit_website_data_manager_get_disk_cache_directory(baseDataManager.get()), ==, Test::dataDirectory());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> class PluginsTest: public Test {
</span><span class="lines">@@ -351,6 +423,20 @@
</span><span class="cx"> soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, emptyHTML, strlen(emptyHTML));
</span><span class="cx"> soup_message_body_complete(message->response_body);
</span><span class="cx"> soup_message_set_status(message, SOUP_STATUS_OK);
</span><ins>+ } else if (g_str_equal(path, "/appcache")) {
+ const char* appcacheHTML = "<html manifest=appcache.manifest><body></body></html>";
+ soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, appcacheHTML, strlen(appcacheHTML));
+ soup_message_body_complete(message->response_body);
+ soup_message_set_status(message, SOUP_STATUS_OK);
+ } else if (g_str_equal(path, "/appcache.manifest")) {
+ const char* appcacheManifest = "CACHE MANIFEST\nCACHE:\nappcache/foo.txt\n";
+ soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, appcacheManifest, strlen(appcacheManifest));
+ soup_message_body_complete(message->response_body);
+ soup_message_set_status(message, SOUP_STATUS_OK);
+ } else if (g_str_equal(path, "/appcache/foo.txt")) {
+ soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, "foo", 3);
+ soup_message_body_complete(message->response_body);
+ soup_message_set_status(message, SOUP_STATUS_OK);
</ins><span class="cx"> } else
</span><span class="cx"> soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPIgtkWebKit2GtkTestMainh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/TestMain.h        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -69,19 +69,22 @@
</span><span class="cx"> {
</span><span class="cx"> GUniquePtr<char> localStorageDirectory(g_build_filename(dataDirectory(), "local-storage", nullptr));
</span><span class="cx"> GUniquePtr<char> indexedDBDirectory(g_build_filename(dataDirectory(), "indexeddb", nullptr));
</span><del>- m_webContext = adoptGRef(WEBKIT_WEB_CONTEXT(g_object_new(WEBKIT_TYPE_WEB_CONTEXT,
- "local-storage-directory", localStorageDirectory.get(),
- "indexed-db-directory", indexedDBDirectory.get(),
- nullptr)));
</del><ins>+ GUniquePtr<char> diskCacheDirectory(g_build_filename(dataDirectory(), "disk-cache", nullptr));
+ GUniquePtr<char> applicationCacheDirectory(g_build_filename(dataDirectory(), "appcache", nullptr));
+ GUniquePtr<char> webSQLDirectory(g_build_filename(dataDirectory(), "websql", nullptr));
+ GRefPtr<WebKitWebsiteDataManager> websiteDataManager = adoptGRef(webkit_website_data_manager_new(
+ "local-storage-directory", localStorageDirectory.get(), "indexeddb-directory", indexedDBDirectory.get(),
+ "disk-cache-directory", diskCacheDirectory.get(), "offline-application-cache-directory", applicationCacheDirectory.get(),
+ "websql-directory", webSQLDirectory.get(), nullptr));
</ins><span class="cx">
</span><ins>+ m_webContext = adoptGRef(webkit_web_context_new_with_website_data_manager(websiteDataManager.get()));
</ins><span class="cx"> g_signal_connect(m_webContext.get(), "initialize-web-extensions", G_CALLBACK(initializeWebExtensionsCallback), this);
</span><del>- GUniquePtr<char> diskCacheDirectory(g_build_filename(dataDirectory(), "disk-cache", nullptr));
- webkit_web_context_set_disk_cache_directory(m_webContext.get(), diskCacheDirectory.get());
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ~Test()
</span><span class="cx"> {
</span><span class="cx"> g_signal_handlers_disconnect_matched(m_webContext.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
</span><ins>+ m_webContext = nullptr;
</ins><span class="cx"> if (m_watchedObjects.isEmpty())
</span><span class="cx"> return;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPIgtkWebKit2GtkWebViewTestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp (185949 => 185950)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp        2015-06-25 07:15:56 UTC (rev 185949)
+++ trunk/Tools/TestWebKitAPI/gtk/WebKit2Gtk/WebViewTest.cpp        2015-06-25 07:51:32 UTC (rev 185950)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx">
</span><span class="cx"> #include <JavaScriptCore/JSRetainPtr.h>
</span><span class="cx"> #include <WebCore/GUniquePtrGtk.h>
</span><ins>+#include <wtf/glib/GMainLoopSource.h>
</ins><span class="cx">
</span><span class="cx"> WebViewTest::WebViewTest(WebKitUserContentManager* userContentManager)
</span><span class="cx"> : m_webView(WEBKIT_WEB_VIEW(g_object_ref_sink(g_object_new(WEBKIT_TYPE_WEB_VIEW, "web-context", m_webContext.get(), "user-content-manager", userContentManager, nullptr))))
</span><span class="lines">@@ -179,15 +180,10 @@
</span><span class="cx"> quitMainLoop();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static gboolean quitMainLoopIdleCallback(WebViewTest* test)
-{
- test->quitMainLoop();
- return FALSE;
-}
-
</del><span class="cx"> void WebViewTest::wait(double seconds)
</span><span class="cx"> {
</span><del>- g_timeout_add_seconds(seconds, reinterpret_cast<GSourceFunc>(quitMainLoopIdleCallback), this);
</del><ins>+ GMainLoopSource::scheduleAfterDelayAndDeleteOnDestroy("WebViewTest wait", [this] { quitMainLoop(); },
+ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::duration<double>(seconds)));
</ins><span class="cx"> g_main_loop_run(m_mainLoop);
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>