Title: [223158] trunk/Source/WebKit
Revision
223158
Author
cdu...@apple.com
Date
2017-10-10 17:01:28 -0700 (Tue, 10 Oct 2017)

Log Message

[WK2] Add API to clear service worker registrations
https://bugs.webkit.org/show_bug.cgi?id=178085
<rdar://problem/34866025>

Reviewed by Ryosuke Niwa.

Add API to clear service worker registrations. Although the request to
clear the registration is passed on to the StorageProcess, it is currently
a no-op on StorageProcess side until we actually persist service worker
registrations on disk.

* Shared/WebsiteData/WebsiteDataType.h:
* StorageProcess/StorageProcess.cpp:
(WebKit::StorageProcess::fetchWebsiteData):
(WebKit::StorageProcess::deleteWebsiteData):
(WebKit::StorageProcess::deleteWebsiteDataForOrigins):
* UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
(WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations):
* UIProcess/API/C/WKWebsiteDataStoreRef.h:
* UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
* UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
(dataTypesToString):
* UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
(WebKit::toWebsiteDataType):
(WebKit::toWKWebsiteDataTypes):
* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(+[WKWebsiteDataStore allWebsiteDataTypes]):
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchDataAndApply):
(WebKit::WebsiteDataStore::removeData):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (223157 => 223158)


--- trunk/Source/WebKit/ChangeLog	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/ChangeLog	2017-10-11 00:01:28 UTC (rev 223158)
@@ -1,3 +1,36 @@
+2017-10-10  Chris Dumez  <cdu...@apple.com>
+
+        [WK2] Add API to clear service worker registrations
+        https://bugs.webkit.org/show_bug.cgi?id=178085
+        <rdar://problem/34866025>
+
+        Reviewed by Ryosuke Niwa.
+
+        Add API to clear service worker registrations. Although the request to
+        clear the registration is passed on to the StorageProcess, it is currently
+        a no-op on StorageProcess side until we actually persist service worker
+        registrations on disk.
+
+        * Shared/WebsiteData/WebsiteDataType.h:
+        * StorageProcess/StorageProcess.cpp:
+        (WebKit::StorageProcess::fetchWebsiteData):
+        (WebKit::StorageProcess::deleteWebsiteData):
+        (WebKit::StorageProcess::deleteWebsiteDataForOrigins):
+        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
+        (WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations):
+        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
+        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
+        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
+        (dataTypesToString):
+        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
+        (WebKit::toWebsiteDataType):
+        (WebKit::toWKWebsiteDataTypes):
+        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+        (+[WKWebsiteDataStore allWebsiteDataTypes]):
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::fetchDataAndApply):
+        (WebKit::WebsiteDataStore::removeData):
+
 2017-10-10  Commit Queue  <commit-qu...@webkit.org>
 
         Unreviewed, rolling out r223130.

Modified: trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h (223157 => 223158)


--- trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/Shared/WebsiteData/WebsiteDataType.h	2017-10-11 00:01:28 UTC (rev 223158)
@@ -45,6 +45,9 @@
 #endif
     ResourceLoadStatistics = 1 << 12,
     Credentials = 1 << 13,
+#if ENABLE(SERVICE_WORKER)
+    ServiceWorkerRegistrations = 1 << 14,
+#endif
 };
 
 };

Modified: trunk/Source/WebKit/StorageProcess/StorageProcess.cpp (223157 => 223158)


--- trunk/Source/WebKit/StorageProcess/StorageProcess.cpp	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/StorageProcess/StorageProcess.cpp	2017-10-11 00:01:28 UTC (rev 223158)
@@ -183,18 +183,18 @@
 
 void StorageProcess::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, uint64_t callbackID)
 {
-#if ENABLE(INDEXED_DATABASE)
     auto completionHandler = [this, callbackID](const WebsiteData& websiteData) {
         parentProcessConnection()->send(Messages::StorageProcessProxy::DidFetchWebsiteData(callbackID, websiteData), 0);
     };
 
+#if ENABLE(SERVICE_WORKER)
+    if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations))
+        notImplemented();
+#endif
+
+#if ENABLE(INDEXED_DATABASE)
     String path = m_idbDatabasePaths.get(sessionID);
-    if (path.isEmpty() || !websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
-        completionHandler({ });
-        return;
-    }
-
-    if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
+    if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
         // FIXME: Pick the right database store based on the session ID.
         postStorageTask(CrossThreadTask([this, completionHandler = WTFMove(completionHandler), path = WTFMove(path)]() mutable {
             RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), securityOrigins = indexedDatabaseOrigins(path)] {
@@ -205,40 +205,53 @@
                 completionHandler(websiteData);
             });
         }));
+        return;
     }
 #endif
+
+    completionHandler({ });
 }
 
 void StorageProcess::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, std::chrono::system_clock::time_point modifiedSince, uint64_t callbackID)
 {
-#if ENABLE(INDEXED_DATABASE)
     auto completionHandler = [this, callbackID]() {
         parentProcessConnection()->send(Messages::StorageProcessProxy::DidDeleteWebsiteData(callbackID), 0);
     };
 
-    if (!websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
-        completionHandler();
+#if ENABLE(SERVICE_WORKER)
+    if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations))
+        notImplemented();
+#endif
+
+#if ENABLE(INDEXED_DATABASE)
+    if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
+        idbServer(sessionID).closeAndDeleteDatabasesModifiedSince(modifiedSince, WTFMove(completionHandler));
         return;
     }
+#endif
 
-    idbServer(sessionID).closeAndDeleteDatabasesModifiedSince(modifiedSince, WTFMove(completionHandler));
-#endif
+    completionHandler();
 }
 
 void StorageProcess::deleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, const Vector<SecurityOriginData>& securityOriginDatas, uint64_t callbackID)
 {
-#if ENABLE(INDEXED_DATABASE)
     auto completionHandler = [this, callbackID]() {
         parentProcessConnection()->send(Messages::StorageProcessProxy::DidDeleteWebsiteDataForOrigins(callbackID), 0);
     };
 
+#if ENABLE(SERVICE_WORKER)
+    if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations))
+        notImplemented();
+#endif
+
+#if ENABLE(INDEXED_DATABASE)
     if (!websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases)) {
-        completionHandler();
+        idbServer(sessionID).closeAndDeleteDatabasesForOrigins(securityOriginDatas, WTFMove(completionHandler));
         return;
     }
+#endif
 
-    idbServer(sessionID).closeAndDeleteDatabasesForOrigins(securityOriginDatas, WTFMove(completionHandler));
-#endif
+    completionHandler();
 }
 
 #if ENABLE(SANDBOX_EXTENSIONS)

Modified: trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp	2017-10-11 00:01:28 UTC (rev 223158)
@@ -324,3 +324,13 @@
     OptionSet<WebKit::WebsiteDataType> dataTypes = WebKit::WebsiteDataType::IndexedDBDatabases;
     WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, std::chrono::system_clock::time_point::min(), [] { });
 }
+
+void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef)
+{
+#if ENABLE(SERVICE_WORKER)
+    OptionSet<WebKit::WebsiteDataType> dataTypes = WebKit::WebsiteDataType::ServiceWorkerRegistrations;
+    WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, std::chrono::system_clock::time_point::min(), [] { });
+#else
+    UNUSED_PARAM(dataStoreRef);
+#endif
+}

Modified: trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h	2017-10-11 00:01:28 UTC (rev 223158)
@@ -71,6 +71,7 @@
 WK_EXPORT void WKWebsiteDataStoreStatisticsClearThroughWebsiteDataRemoval(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreStatisticsClearThroughWebsiteDataRemovalFunction callback);
 WK_EXPORT void WKWebsiteDataStoreStatisticsResetToConsistentState(WKWebsiteDataStoreRef dataStoreRef);
 WK_EXPORT void WKWebsiteDataStoreRemoveAllIndexedDatabases(WKWebsiteDataStoreRef dataStoreRef);
+WK_EXPORT void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef);
 
 #ifdef __cplusplus
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.h (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.h	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.h	2017-10-11 00:01:28 UTC (rev 223158)
@@ -55,6 +55,9 @@
 /*! @constant WKWebsiteDataTypeIndexedDBDatabases IndexedDB databases. */
 WK_EXTERN NSString * const WKWebsiteDataTypeIndexedDBDatabases WK_API_AVAILABLE(macosx(10.11), ios(9.0));
 
+/*! @constant WKWebsiteDataTypeServiceWorkerRegistrations Service worker registrations. */
+WK_EXTERN NSString * const WKWebsiteDataTypeServiceWorkerRegistrations WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 /*! A WKWebsiteDataRecord represents website data, grouped by domain name using the public suffix list. */
 WK_CLASS_AVAILABLE(macosx(10.11), ios(9.0))
 @interface WKWebsiteDataRecord : NSObject

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm	2017-10-11 00:01:28 UTC (rev 223158)
@@ -40,6 +40,7 @@
 NSString * const WKWebsiteDataTypeLocalStorage = @"WKWebsiteDataTypeLocalStorage";
 NSString * const WKWebsiteDataTypeWebSQLDatabases = @"WKWebsiteDataTypeWebSQLDatabases";
 NSString * const WKWebsiteDataTypeIndexedDBDatabases = @"WKWebsiteDataTypeIndexedDBDatabases";
+NSString * const WKWebsiteDataTypeServiceWorkerRegistrations = @"WKWebsiteDataTypeServiceWorkerRegistrations";
 
 NSString * const _WKWebsiteDataTypeMediaKeys = @"_WKWebsiteDataTypeMediaKeys";
 NSString * const _WKWebsiteDataTypeHSTSCache = @"_WKWebsiteDataTypeHSTSCache";
@@ -80,6 +81,8 @@
         [array addObject:@"Web SQL"];
     if ([dataTypes containsObject:WKWebsiteDataTypeIndexedDBDatabases])
         [array addObject:@"IndexedDB"];
+    if ([dataTypes containsObject:WKWebsiteDataTypeServiceWorkerRegistrations])
+        [array addObject:@"Service Worker Registrations"];
     if ([dataTypes containsObject:_WKWebsiteDataTypeHSTSCache])
         [array addObject:@"HSTS Cache"];
     if ([dataTypes containsObject:_WKWebsiteDataTypeMediaKeys])

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h	2017-10-11 00:01:28 UTC (rev 223158)
@@ -58,6 +58,10 @@
         return WebsiteDataType::WebSQLDatabases;
     if ([websiteDataType isEqualToString:WKWebsiteDataTypeIndexedDBDatabases])
         return WebsiteDataType::IndexedDBDatabases;
+#if ENABLE(SERVICE_WORKER)
+    if ([websiteDataType isEqualToString:WKWebsiteDataTypeServiceWorkerRegistrations])
+        return WebsiteDataType::ServiceWorkerRegistrations;
+#endif
     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeHSTSCache])
         return WebsiteDataType::HSTSCache;
     if ([websiteDataType isEqualToString:_WKWebsiteDataTypeMediaKeys])
@@ -107,6 +111,10 @@
         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeWebSQLDatabases];
     if (websiteDataTypes.contains(WebsiteDataType::IndexedDBDatabases))
         [wkWebsiteDataTypes addObject:WKWebsiteDataTypeIndexedDBDatabases];
+#if ENABLE(SERVICE_WORKER)
+    if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations))
+        [wkWebsiteDataTypes addObject:WKWebsiteDataTypeServiceWorkerRegistrations];
+#endif
     if (websiteDataTypes.contains(WebsiteDataType::HSTSCache))
         [wkWebsiteDataTypes addObject:_WKWebsiteDataTypeHSTSCache];
     if (websiteDataTypes.contains(WebsiteDataType::MediaKeys))

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2017-10-11 00:01:28 UTC (rev 223158)
@@ -95,7 +95,7 @@
     static dispatch_once_t onceToken;
     static NSSet *allWebsiteDataTypes;
     dispatch_once(&onceToken, ^{
-        allWebsiteDataTypes = [[NSSet alloc] initWithArray:@[ WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeOfflineWebApplicationCache, WKWebsiteDataTypeCookies, WKWebsiteDataTypeSessionStorage, WKWebsiteDataTypeLocalStorage, WKWebsiteDataTypeIndexedDBDatabases, WKWebsiteDataTypeWebSQLDatabases ]];
+        allWebsiteDataTypes = [[NSSet alloc] initWithArray:@[ WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache, WKWebsiteDataTypeOfflineWebApplicationCache, WKWebsiteDataTypeCookies, WKWebsiteDataTypeSessionStorage, WKWebsiteDataTypeLocalStorage, WKWebsiteDataTypeIndexedDBDatabases, WKWebsiteDataTypeServiceWorkerRegistrations, WKWebsiteDataTypeWebSQLDatabases ]];
     });
 
     return allWebsiteDataTypes;

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (223157 => 223158)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-10-10 23:46:05 UTC (rev 223157)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-10-11 00:01:28 UTC (rev 223158)
@@ -426,7 +426,11 @@
         });
     }
 
-    if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases) && isPersistent()) {
+    if ((dataTypes.contains(WebsiteDataType::IndexedDBDatabases)
+#if ENABLE(SERVICE_WORKER)
+        || dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)
+#endif
+        ) && isPersistent()) {
         for (auto& processPool : processPools()) {
             processPool->ensureStorageProcessAndWebsiteDataStore(this);
 
@@ -720,7 +724,11 @@
         });
     }
 
-    if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases) && isPersistent()) {
+    if ((dataTypes.contains(WebsiteDataType::IndexedDBDatabases)
+#if ENABLE(SERVICE_WORKER)
+        || dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)
+#endif
+        ) && isPersistent()) {
         for (auto& processPool : processPools()) {
             processPool->ensureStorageProcessAndWebsiteDataStore(this);
 
@@ -999,7 +1007,11 @@
         });
     }
 
-    if (dataTypes.contains(WebsiteDataType::IndexedDBDatabases) && isPersistent()) {
+    if ((dataTypes.contains(WebsiteDataType::IndexedDBDatabases)
+#if ENABLE(SERVICE_WORKER)
+        || dataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)
+#endif
+        ) && isPersistent()) {
         for (auto& processPool : processPools()) {
             processPool->ensureStorageProcessAndWebsiteDataStore(this);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to