summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp95
1 files changed, 87 insertions, 8 deletions
diff --git a/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp b/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp
index d33c056bf..e412511f6 100644
--- a/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp
@@ -26,27 +26,106 @@
#include "config.h"
#include "WKKeyValueStorageManager.h"
+#include "APIDictionary.h"
+#include "APIWebsiteDataStore.h"
+#include "StorageManager.h"
#include "WKAPICast.h"
-#include "WebKeyValueStorageManager.h"
+#include "WebsiteDataStore.h"
+#include <wtf/RunLoop.h>
using namespace WebKit;
WKTypeID WKKeyValueStorageManagerGetTypeID()
{
- return toAPI(WebKeyValueStorageManager::APIType);
+ return toAPI(API::WebsiteDataStore::APIType);
}
-void WKKeyValueStorageManagerGetKeyValueStorageOrigins(WKKeyValueStorageManagerRef keyValueStorageManagerRef, void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction callback)
+WKStringRef WKKeyValueStorageManagerGetOriginKey()
{
- toImpl(keyValueStorageManagerRef)->getKeyValueStorageOrigins(ArrayCallback::create(context, callback));
+ static API::String& key = API::String::create("WebKeyValueStorageManagerStorageDetailsOriginKey").leakRef();
+ return toAPI(&key);
}
-void WKKeyValueStorageManagerDeleteEntriesForOrigin(WKKeyValueStorageManagerRef keyValueStorageManagerRef, WKSecurityOriginRef originRef)
+WKStringRef WKKeyValueStorageManagerGetCreationTimeKey()
{
- toImpl(keyValueStorageManagerRef)->deleteEntriesForOrigin(toImpl(originRef));
+ static API::String& key = API::String::create("WebKeyValueStorageManagerStorageDetailsCreationTimeKey").leakRef();
+ return toAPI(&key);
}
-void WKKeyValueStorageManagerDeleteAllEntries(WKKeyValueStorageManagerRef keyValueStorageManagerRef)
+WKStringRef WKKeyValueStorageManagerGetModificationTimeKey()
{
- toImpl(keyValueStorageManagerRef)->deleteAllEntries();
+ static API::String& key = API::String::create("WebKeyValueStorageManagerStorageDetailsModificationTimeKey").leakRef();
+ return toAPI(&key);
+}
+
+void WKKeyValueStorageManagerGetKeyValueStorageOrigins(WKKeyValueStorageManagerRef keyValueStorageManager, void* context, WKKeyValueStorageManagerGetKeyValueStorageOriginsFunction callback)
+
+{
+ StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager();
+ if (!storageManager) {
+ RunLoop::main().dispatch([context, callback] {
+ callback(toAPI(API::Array::create().ptr()), nullptr, context);
+ });
+ return;
+ }
+
+ storageManager->getLocalStorageOrigins([context, callback](HashSet<RefPtr<WebCore::SecurityOrigin>>&& securityOrigins) {
+ Vector<RefPtr<API::Object>> webSecurityOrigins;
+ webSecurityOrigins.reserveInitialCapacity(securityOrigins.size());
+ for (auto& origin : securityOrigins)
+ webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(*origin));
+
+ callback(toAPI(API::Array::create(WTFMove(webSecurityOrigins)).ptr()), nullptr, context);
+ });
+}
+
+void WKKeyValueStorageManagerGetStorageDetailsByOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, void* context, WKKeyValueStorageManagerGetStorageDetailsByOriginFunction callback)
+{
+ StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager();
+ if (!storageManager) {
+ RunLoop::main().dispatch([context, callback] {
+ callback(toAPI(API::Array::create().ptr()), nullptr, context);
+ });
+ return;
+ }
+
+ storageManager->getLocalStorageOriginDetails([context, callback](Vector<LocalStorageDatabaseTracker::OriginDetails> storageDetails) {
+ HashMap<String, RefPtr<API::Object>> detailsMap;
+ Vector<RefPtr<API::Object>> result;
+ result.reserveInitialCapacity(storageDetails.size());
+
+ for (const auto& originDetails : storageDetails) {
+ HashMap<String, RefPtr<API::Object>> detailsMap;
+
+ RefPtr<API::Object> origin = API::SecurityOrigin::create(WebCore::SecurityOrigin::createFromDatabaseIdentifier(originDetails.originIdentifier));
+
+ detailsMap.set(toImpl(WKKeyValueStorageManagerGetOriginKey())->string(), origin);
+ if (originDetails.creationTime)
+ detailsMap.set(toImpl(WKKeyValueStorageManagerGetCreationTimeKey())->string(), API::Double::create(originDetails.creationTime.valueOr(0)));
+ if (originDetails.modificationTime)
+ detailsMap.set(toImpl(WKKeyValueStorageManagerGetModificationTimeKey())->string(), API::Double::create(originDetails.modificationTime.valueOr(0)));
+
+ result.uncheckedAppend(API::Dictionary::create(WTFMove(detailsMap)));
+ }
+
+ callback(toAPI(API::Array::create(WTFMove(result)).ptr()), nullptr, context);
+ });
+}
+
+void WKKeyValueStorageManagerDeleteEntriesForOrigin(WKKeyValueStorageManagerRef keyValueStorageManager, WKSecurityOriginRef origin)
+{
+ StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager();
+ if (!storageManager)
+ return;
+
+ storageManager->deleteLocalStorageEntriesForOrigin(toImpl(origin)->securityOrigin());
+}
+
+void WKKeyValueStorageManagerDeleteAllEntries(WKKeyValueStorageManagerRef keyValueStorageManager)
+{
+ StorageManager* storageManager = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(keyValueStorageManager))->websiteDataStore().storageManager();
+ if (!storageManager)
+ return;
+
+ storageManager->deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point::min(), [] { });
}