Diff
Modified: trunk/Source/WebKit2/ChangeLog (183092 => 183093)
--- trunk/Source/WebKit2/ChangeLog 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/ChangeLog 2015-04-22 02:46:45 UTC (rev 183093)
@@ -1,5 +1,43 @@
2015-04-21 Anders Carlsson <[email protected]>
+ WKWebsiteDataStore doesn't track and remove IndexedDB databases
+ https://bugs.webkit.org/show_bug.cgi?id=144032
+ rdar://problem/20242856
+
+ Reviewed by Tim Horton.
+
+ * DatabaseProcess/DatabaseProcess.cpp:
+ (WebKit::DatabaseProcess::fetchWebsiteData):
+ (WebKit::DatabaseProcess::deleteWebsiteData):
+ (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
+ * DatabaseProcess/DatabaseProcess.h:
+ * DatabaseProcess/DatabaseProcess.messages.in:
+ * Shared/WebsiteData/WebsiteDataTypes.h:
+ * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
+ * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
+ (dataTypesToString):
+ * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
+ (WebKit::toWebsiteDataTypes):
+ (WebKit::toWKWebsiteDataTypes):
+ * UIProcess/Databases/DatabaseProcessProxy.cpp:
+ (WebKit::generateCallbackID):
+ (WebKit::DatabaseProcessProxy::~DatabaseProcessProxy):
+ (WebKit::DatabaseProcessProxy::fetchWebsiteData):
+ (WebKit::DatabaseProcessProxy::deleteWebsiteData):
+ (WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
+ (WebKit::DatabaseProcessProxy::didClose):
+ (WebKit::DatabaseProcessProxy::didFetchWebsiteData):
+ (WebKit::DatabaseProcessProxy::didDeleteWebsiteData):
+ (WebKit::DatabaseProcessProxy::didDeleteWebsiteDataForOrigins):
+ * UIProcess/Databases/DatabaseProcessProxy.h:
+ * UIProcess/Databases/DatabaseProcessProxy.messages.in:
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::fetchData):
+ (WebKit::WebsiteDataStore::removeData):
+
+2015-04-21 Anders Carlsson <[email protected]>
+
Add module maps for WebKit
https://bugs.webkit.org/show_bug.cgi?id=144026
rdar://problem/19665428
Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp (183092 => 183093)
--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp 2015-04-22 02:46:45 UTC (rev 183093)
@@ -38,6 +38,7 @@
#include "WebOriginDataManager.h"
#include "WebOriginDataManagerMessages.h"
#include "WebOriginDataManagerProxyMessages.h"
+#include "WebsiteData.h"
#include <WebCore/FileSystem.h>
#include <WebCore/NotImplemented.h>
#include <WebCore/TextEncoding.h>
@@ -198,6 +199,115 @@
#endif
}
+void DatabaseProcess::fetchWebsiteData(SessionID, uint64_t websiteDataTypes, uint64_t callbackID)
+{
+ struct CallbackAggregator final : public ThreadSafeRefCounted<CallbackAggregator> {
+ explicit CallbackAggregator(std::function<void (WebsiteData)> completionHandler)
+ : m_completionHandler(WTF::move(completionHandler))
+ {
+ }
+
+ ~CallbackAggregator()
+ {
+ ASSERT(RunLoop::isMain());
+
+ auto completionHandler = WTF::move(m_completionHandler);
+ auto websiteData = WTF::move(m_websiteData);
+
+ RunLoop::main().dispatch([completionHandler, websiteData] {
+ completionHandler(websiteData);
+ });
+ }
+
+ std::function<void (WebsiteData)> m_completionHandler;
+ WebsiteData m_websiteData;
+ };
+
+ RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator([this, callbackID](WebsiteData websiteData) {
+ parentProcessConnection()->send(Messages::DatabaseProcessProxy::DidFetchWebsiteData(callbackID, websiteData), 0);
+ }));
+
+ if (websiteDataTypes & WebsiteDataTypeIndexedDBDatabases) {
+ // FIXME: Pick the right database store based on the session ID.
+ postDatabaseTask(std::make_unique<AsyncTask>([callbackAggregator, websiteDataTypes, this] {
+
+ Vector<RefPtr<SecurityOrigin>> securityOrigins;
+
+ for (const auto& originData : getIndexedDatabaseOrigins())
+ securityOrigins.append(originData.securityOrigin());
+
+ RunLoop::main().dispatch([callbackAggregator, securityOrigins] {
+ for (const auto& securityOrigin : securityOrigins)
+ callbackAggregator->m_websiteData.entries.append(WebsiteData::Entry { securityOrigin, WebsiteDataTypeIndexedDBDatabases });
+ });
+ }));
+ }
+}
+
+void DatabaseProcess::deleteWebsiteData(WebCore::SessionID, uint64_t websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID)
+{
+ struct CallbackAggregator final : public ThreadSafeRefCounted<CallbackAggregator> {
+ explicit CallbackAggregator(std::function<void ()> completionHandler)
+ : m_completionHandler(WTF::move(completionHandler))
+ {
+ }
+
+ ~CallbackAggregator()
+ {
+ ASSERT(RunLoop::isMain());
+
+ RunLoop::main().dispatch(WTF::move(m_completionHandler));
+ }
+
+ std::function<void ()> m_completionHandler;
+ };
+
+ RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator([this, callbackID]() {
+ parentProcessConnection()->send(Messages::DatabaseProcessProxy::DidDeleteWebsiteData(callbackID), 0);
+ }));
+
+ if (websiteDataTypes & WebsiteDataTypeIndexedDBDatabases) {
+ postDatabaseTask(std::make_unique<AsyncTask>([this, callbackAggregator, modifiedSince] {
+ double startDate = std::chrono::system_clock::to_time_t(modifiedSince);
+
+ deleteIndexedDatabaseEntriesModifiedBetweenDates(startDate, std::numeric_limits<double>::max());
+ RunLoop::main().dispatch([callbackAggregator] { });
+ }));
+ }
+}
+
+void DatabaseProcess::deleteWebsiteDataForOrigins(WebCore::SessionID, uint64_t websiteDataTypes, const Vector<SecurityOriginData>& origins, uint64_t callbackID)
+{
+ struct CallbackAggregator final : public ThreadSafeRefCounted<CallbackAggregator> {
+ explicit CallbackAggregator(std::function<void ()> completionHandler)
+ : m_completionHandler(WTF::move(completionHandler))
+ {
+ }
+
+ ~CallbackAggregator()
+ {
+ ASSERT(RunLoop::isMain());
+
+ RunLoop::main().dispatch(WTF::move(m_completionHandler));
+ }
+
+ std::function<void ()> m_completionHandler;
+ };
+
+ RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator([this, callbackID]() {
+ parentProcessConnection()->send(Messages::DatabaseProcessProxy::DidDeleteWebsiteDataForOrigins(callbackID), 0);
+ }));
+
+ if (websiteDataTypes & WebsiteDataTypeIndexedDBDatabases) {
+ postDatabaseTask(std::make_unique<AsyncTask>([this, origins, callbackAggregator] {
+ for (const auto& origin: origins)
+ deleteIndexedDatabaseEntriesForOrigin(origin);
+
+ RunLoop::main().dispatch([callbackAggregator] { });
+ }));
+ }
+}
+
Vector<SecurityOriginData> DatabaseProcess::getIndexedDatabaseOrigins()
{
Vector<SecurityOriginData> results;
Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h (183092 => 183093)
--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h 2015-04-22 02:46:45 UTC (rev 183093)
@@ -88,6 +88,10 @@
void initializeDatabaseProcess(const DatabaseProcessCreationParameters&);
void createDatabaseToWebProcessConnection();
+ void fetchWebsiteData(WebCore::SessionID, uint64_t websiteDataTypes, uint64_t callbackID);
+ void deleteWebsiteData(WebCore::SessionID, uint64_t websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, uint64_t websiteDataTypes, const Vector<SecurityOriginData>& origins, uint64_t callbackID);
+
// For execution on work queue thread only
void performNextDatabaseTask();
void ensurePathExists(const String&);
Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.messages.in (183092 => 183093)
--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.messages.in 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.messages.in 2015-04-22 02:46:45 UTC (rev 183093)
@@ -28,6 +28,10 @@
# Creates a connection for communication with a WebProcess
CreateDatabaseToWebProcessConnection()
+
+ FetchWebsiteData(WebCore::SessionID sessionID, uint64_t websiteDataTypes, uint64_t callbackID)
+ DeleteWebsiteData(WebCore::SessionID sessionID, uint64_t websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID)
+ DeleteWebsiteDataForOrigins(WebCore::SessionID sessionID, uint64_t websiteDataTypes, Vector<WebKit::SecurityOriginData> origins, uint64_t callbackID)
}
#endif // ENABLE(DATABASE_PROCESS)
Modified: trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h (183092 => 183093)
--- trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h 2015-04-22 02:46:45 UTC (rev 183093)
@@ -35,6 +35,7 @@
WebsiteDataTypeOfflineWebApplicationCache = 1 << 3,
WebsiteDataTypeLocalStorage = 1 << 4,
WebsiteDataTypeWebSQLDatabases = 1 << 5,
+ WebsiteDataTypeIndexedDBDatabases = 1 << 6,
};
};
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.h (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.h 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.h 2015-04-22 02:46:45 UTC (rev 183093)
@@ -38,6 +38,7 @@
WK_EXTERN NSString * const WKWebsiteDataTypeCookies WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
WK_EXTERN NSString * const WKWebsiteDataTypeLocalStorage WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
WK_EXTERN NSString * const WKWebsiteDataTypeWebSQLDatabases WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
+WK_EXTERN NSString * const WKWebsiteDataTypeIndexedDBDatabases WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
WK_CLASS_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA)
@interface WKWebsiteDataRecord : NSObject
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm 2015-04-22 02:46:45 UTC (rev 183093)
@@ -35,6 +35,7 @@
NSString * const WKWebsiteDataTypeCookies = @"WKWebsiteDataTypeCookies";
NSString * const WKWebsiteDataTypeLocalStorage = @"WKWebsiteDataTypeLocalStorage";
NSString * const WKWebsiteDataTypeWebSQLDatabases = @"WKWebsiteDataTypeWebSQLDatabases";
+NSString * const WKWebsiteDataTypeIndexedDBDatabases = @"WKWebsiteDataTypeIndexedDBDatabases";
@implementation WKWebsiteDataRecord
@@ -61,6 +62,8 @@
[array addObject:@"Local Storage"];
if ([dataTypes containsObject:WKWebsiteDataTypeWebSQLDatabases])
[array addObject:@"Web SQL"];
+ if ([dataTypes containsObject:WKWebsiteDataTypeIndexedDBDatabases])
+ [array addObject:@"IndexedDB"];
return [array componentsJoinedByString:@", "];
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h 2015-04-22 02:46:45 UTC (rev 183093)
@@ -56,6 +56,8 @@
websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeLocalStorage;
if ([wkWebsiteDataTypes containsObject:WKWebsiteDataTypeWebSQLDatabases])
websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeWebSQLDatabases;
+ if ([wkWebsiteDataTypes containsObject:WKWebsiteDataTypeIndexedDBDatabases])
+ websiteDataTypes |= WebsiteDataTypes::WebsiteDataTypeIndexedDBDatabases;
return static_cast<WebsiteDataTypes>(websiteDataTypes);
}
@@ -78,6 +80,8 @@
[wkWebsiteDataTypes addObject:WKWebsiteDataTypeLocalStorage];
if (websiteDataTypes & WebsiteDataTypes::WebsiteDataTypeWebSQLDatabases)
[wkWebsiteDataTypes addObject:WKWebsiteDataTypeWebSQLDatabases];
+ if (websiteDataTypes & WebsiteDataTypes::WebsiteDataTypeIndexedDBDatabases)
+ [wkWebsiteDataTypes addObject:WKWebsiteDataTypeIndexedDBDatabases];
return wkWebsiteDataTypes;
}
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp 2015-04-22 02:46:45 UTC (rev 183093)
@@ -31,6 +31,7 @@
#include "WebOriginDataManagerProxy.h"
#include "WebOriginDataManagerProxyMessages.h"
#include "WebProcessPool.h"
+#include "WebsiteData.h"
#include <WebCore/NotImplemented.h>
#if ENABLE(DATABASE_PROCESS)
@@ -39,6 +40,13 @@
namespace WebKit {
+static uint64_t generateCallbackID()
+{
+ static uint64_t callbackID;
+
+ return ++callbackID;
+}
+
PassRefPtr<DatabaseProcessProxy> DatabaseProcessProxy::create(WebProcessPool* processPool)
{
return adoptRef(new DatabaseProcessProxy(processPool));
@@ -53,9 +61,11 @@
DatabaseProcessProxy::~DatabaseProcessProxy()
{
+ ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
+ ASSERT(m_pendingDeleteWebsiteDataCallbacks.isEmpty());
+ ASSERT(m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty());
}
-
void DatabaseProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
{
launchOptions.processType = ProcessLauncher::DatabaseProcess;
@@ -75,6 +85,38 @@
}
}
+void DatabaseProcessProxy::fetchWebsiteData(SessionID sessionID, WebsiteDataTypes dataTypes, std::function<void (WebsiteData)> completionHandler)
+{
+ ASSERT(canSendMessage());
+
+ uint64_t callbackID = generateCallbackID();
+ m_pendingFetchWebsiteDataCallbacks.add(callbackID, WTF::move(completionHandler));
+
+ send(Messages::DatabaseProcess::FetchWebsiteData(sessionID, dataTypes, callbackID), 0);
+}
+
+void DatabaseProcessProxy::deleteWebsiteData(WebCore::SessionID sessionID, WebsiteDataTypes dataTypes, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler)
+{
+ auto callbackID = generateCallbackID();
+
+ m_pendingDeleteWebsiteDataCallbacks.add(callbackID, WTF::move(completionHandler));
+ send(Messages::DatabaseProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
+}
+
+void DatabaseProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, WebsiteDataTypes dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()> completionHandler)
+{
+ ASSERT(canSendMessage());
+
+ uint64_t callbackID = generateCallbackID();
+ m_pendingDeleteWebsiteDataForOriginsCallbacks.add(callbackID, WTF::move(completionHandler));
+
+ Vector<SecurityOriginData> originData;
+ for (auto& origin : origins)
+ originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
+
+ send(Messages::DatabaseProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData, callbackID), 0);
+}
+
void DatabaseProcessProxy::getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply> reply)
{
m_pendingConnectionReplies.append(reply);
@@ -102,6 +144,18 @@
#endif
}
+ for (const auto& callback : m_pendingFetchWebsiteDataCallbacks.values())
+ callback(WebsiteData());
+ m_pendingFetchWebsiteDataCallbacks.clear();
+
+ for (const auto& callback : m_pendingDeleteWebsiteDataCallbacks.values())
+ callback();
+ m_pendingDeleteWebsiteDataCallbacks.clear();
+
+ for (const auto& callback : m_pendingDeleteWebsiteDataForOriginsCallbacks.values())
+ callback();
+ m_pendingDeleteWebsiteDataForOriginsCallbacks.clear();
+
// Tell ProcessPool to forget about this database process. This may cause us to be deleted.
m_processPool->databaseProcessCrashed(this);
}
@@ -125,6 +179,24 @@
#endif
}
+void DatabaseProcessProxy::didFetchWebsiteData(uint64_t callbackID, const WebsiteData& websiteData)
+{
+ auto callback = m_pendingFetchWebsiteDataCallbacks.take(callbackID);
+ callback(websiteData);
+}
+
+void DatabaseProcessProxy::didDeleteWebsiteData(uint64_t callbackID)
+{
+ auto callback = m_pendingDeleteWebsiteDataCallbacks.take(callbackID);
+ callback();
+}
+
+void DatabaseProcessProxy::didDeleteWebsiteDataForOrigins(uint64_t callbackID)
+{
+ auto callback = m_pendingDeleteWebsiteDataForOriginsCallbacks.take(callbackID);
+ callback();
+}
+
void DatabaseProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier)
{
ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h 2015-04-22 02:46:45 UTC (rev 183093)
@@ -31,8 +31,14 @@
#include "ChildProcessProxy.h"
#include "ProcessLauncher.h"
#include "WebProcessProxyMessages.h"
+#include "WebsiteDataTypes.h"
#include <wtf/Deque.h>
+namespace WebCore {
+class SecurityOrigin;
+class SessionID;
+}
+
namespace WebKit {
class WebProcessPool;
@@ -42,6 +48,10 @@
static PassRefPtr<DatabaseProcessProxy> create(WebProcessPool*);
~DatabaseProcessProxy();
+ void fetchWebsiteData(WebCore::SessionID, WebsiteDataTypes, std::function<void (WebsiteData)> completionHandler);
+ void deleteWebsiteData(WebCore::SessionID, WebsiteDataTypes, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, WebsiteDataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()> completionHandler);
+
void getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply>);
private:
@@ -61,6 +71,9 @@
// Message handlers
void didCreateDatabaseToWebProcessConnection(const IPC::Attachment&);
+ void didFetchWebsiteData(uint64_t callbackID, const WebsiteData&);
+ void didDeleteWebsiteData(uint64_t callbackID);
+ void didDeleteWebsiteDataForOrigins(uint64_t callbackID);
// ProcessLauncher::Client
virtual void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override;
@@ -71,6 +84,10 @@
unsigned m_numPendingConnectionRequests;
Deque<RefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply>> m_pendingConnectionReplies;
+
+ HashMap<uint64_t, std::function<void (WebsiteData)>> m_pendingFetchWebsiteDataCallbacks;
+ HashMap<uint64_t, std::function<void ()>> m_pendingDeleteWebsiteDataCallbacks;
+ HashMap<uint64_t, std::function<void ()>> m_pendingDeleteWebsiteDataForOriginsCallbacks;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.messages.in (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.messages.in 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.messages.in 2015-04-22 02:46:45 UTC (rev 183093)
@@ -24,6 +24,10 @@
messages -> DatabaseProcessProxy LegacyReceiver {
DidCreateDatabaseToWebProcessConnection(IPC::Attachment connectionIdentifier)
+
+ DidFetchWebsiteData(uint64_t callbackID, struct WebKit::WebsiteData websiteData)
+ DidDeleteWebsiteData(uint64_t callbackID)
+ DidDeleteWebsiteDataForOrigins(uint64_t callbackID)
}
#endif // ENABLE(DATABASE_PROCESS)
Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2015-04-22 02:46:45 UTC (rev 183093)
@@ -300,6 +300,7 @@
#if ENABLE(DATABASE_PROCESS)
void ensureDatabaseProcess();
+ DatabaseProcessProxy* databaseProcess() { return m_databaseProcess.get(); }
void getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply>);
void databaseProcessCrashed(DatabaseProcessProxy*);
#endif
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (183092 => 183093)
--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2015-04-22 02:37:07 UTC (rev 183092)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2015-04-22 02:46:45 UTC (rev 183093)
@@ -319,6 +319,23 @@
});
}
+#if ENABLE(DATABASE_PROCESS)
+ if (dataTypes & WebsiteDataTypeIndexedDBDatabases && !isNonPersistent()) {
+ HashSet<WebProcessPool*> processPools;
+ for (auto& process : processes())
+ processPools.add(&process->processPool());
+
+ for (auto& processPool : processPools) {
+ processPool->ensureDatabaseProcess();
+
+ callbackAggregator->addPendingCallback();
+ processPool->databaseProcess()->fetchWebsiteData(m_sessionID, dataTypes, [callbackAggregator](WebsiteData websiteData) {
+ callbackAggregator->removePendingCallback(WTF::move(websiteData));
+ });
+ }
+ }
+#endif
+
callbackAggregator->callIfNeeded();
}
@@ -475,6 +492,23 @@
});
}
+#if ENABLE(DATABASE_PROCESS)
+ if (dataTypes & WebsiteDataTypeIndexedDBDatabases && !isNonPersistent()) {
+ HashSet<WebProcessPool*> processPools;
+ for (auto& process : processes())
+ processPools.add(&process->processPool());
+
+ for (auto& processPool : processPools) {
+ processPool->ensureDatabaseProcess();
+
+ callbackAggregator->addPendingCallback();
+ processPool->databaseProcess()->deleteWebsiteData(m_sessionID, dataTypes, modifiedSince, [callbackAggregator]() {
+ callbackAggregator->removePendingCallback();
+ });
+ }
+ }
+#endif
+
// There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
callbackAggregator->callIfNeeded();
}
@@ -631,6 +665,23 @@
});
}
+#if ENABLE(DATABASE_PROCESS)
+ if (dataTypes & WebsiteDataTypeIndexedDBDatabases && !isNonPersistent()) {
+ HashSet<WebProcessPool*> processPools;
+ for (auto& process : processes())
+ processPools.add(&process->processPool());
+
+ for (auto& processPool : processPools) {
+ processPool->ensureDatabaseProcess();
+
+ callbackAggregator->addPendingCallback();
+ processPool->databaseProcess()->deleteWebsiteDataForOrigins(m_sessionID, dataTypes, origins, [callbackAggregator]() {
+ callbackAggregator->removePendingCallback();
+ });
+ }
+ }
+#endif
+
// There's a chance that we don't have any pending callbacks. If so, we want to dispatch the completion handler right away.
callbackAggregator->callIfNeeded();
}