Title: [237535] branches/safari-606-branch
Revision
237535
Author
[email protected]
Date
2018-10-28 17:03:25 -0700 (Sun, 28 Oct 2018)

Log Message

Cherry-pick r237060. rdar://problem/45435468

    IOS 12 - Service worker cache not shared when added to homescreen
    https://bugs.webkit.org/show_bug.cgi?id=190269
    <rdar://problem/45009961>

    Reviewed by Alex Christensen.

    Source/WebCore:

    Expose Cache Storage API when Service Worker API is exposed.
    This is used for API tests.

    * dom/ScriptExecutionContext.h: Make hasServiceWorkerScheme
    available outside SERVICE_WORKER compilation flag since used by DOMWindowCaches.
    * dom/ScriptExecutionContext.cpp: Ditto.
    * Modules/cache/DOMWindowCaches.idl:

    Source/WebKit:

    NetworkProcessProxy does not always have all its stores in its hash map.
    Make sure to check for the default web process pool store when grabbing cache storage parameters from a given session ID.

    Add a way to remove the default website data for testing.
    This is used in the new API test.

    * UIProcess/API/APIWebsiteDataStore.cpp:
    (API::WebsiteDataStore::deleteDefaultDataStoreForTesting):
    * UIProcess/API/APIWebsiteDataStore.h:
    * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
    (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
    * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
    * UIProcess/Network/NetworkProcessProxy.cpp:
    (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):

    Tools:

    * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
    Add test to ensure that CacheStorage use the default website data store parameters.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237060 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-606-branch/Source/WebCore/ChangeLog (237534 => 237535)


--- branches/safari-606-branch/Source/WebCore/ChangeLog	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebCore/ChangeLog	2018-10-29 00:03:25 UTC (rev 237535)
@@ -1,5 +1,65 @@
 2018-10-28  Babak Shafiei  <[email protected]>
 
+        Cherry-pick r237060. rdar://problem/45435468
+
+    IOS 12 - Service worker cache not shared when added to homescreen
+    https://bugs.webkit.org/show_bug.cgi?id=190269
+    <rdar://problem/45009961>
+    
+    Reviewed by Alex Christensen.
+    
+    Source/WebCore:
+    
+    Expose Cache Storage API when Service Worker API is exposed.
+    This is used for API tests.
+    
+    * dom/ScriptExecutionContext.h: Make hasServiceWorkerScheme
+    available outside SERVICE_WORKER compilation flag since used by DOMWindowCaches.
+    * dom/ScriptExecutionContext.cpp: Ditto.
+    * Modules/cache/DOMWindowCaches.idl:
+    
+    Source/WebKit:
+    
+    NetworkProcessProxy does not always have all its stores in its hash map.
+    Make sure to check for the default web process pool store when grabbing cache storage parameters from a given session ID.
+    
+    Add a way to remove the default website data for testing.
+    This is used in the new API test.
+    
+    * UIProcess/API/APIWebsiteDataStore.cpp:
+    (API::WebsiteDataStore::deleteDefaultDataStoreForTesting):
+    * UIProcess/API/APIWebsiteDataStore.h:
+    * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+    (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
+    * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
+    * UIProcess/Network/NetworkProcessProxy.cpp:
+    (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
+    Add test to ensure that CacheStorage use the default website data store parameters.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237060 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-10-11  Youenn Fablet  <[email protected]>
+
+            IOS 12 - Service worker cache not shared when added to homescreen
+            https://bugs.webkit.org/show_bug.cgi?id=190269
+            <rdar://problem/45009961>
+
+            Reviewed by Alex Christensen.
+
+            Expose Cache Storage API when Service Worker API is exposed.
+            This is used for API tests.
+
+            * dom/ScriptExecutionContext.h: Make hasServiceWorkerScheme
+            available outside SERVICE_WORKER compilation flag since used by DOMWindowCaches.
+            * dom/ScriptExecutionContext.cpp: Ditto.
+            * Modules/cache/DOMWindowCaches.idl:
+
+2018-10-28  Babak Shafiei  <[email protected]>
+
         Cherry-pick r237395. rdar://problem/45574503
 
     Only report resource timing to parent frame for the first iframe load

Modified: branches/safari-606-branch/Source/WebCore/Modules/cache/DOMWindowCaches.idl (237534 => 237535)


--- branches/safari-606-branch/Source/WebCore/Modules/cache/DOMWindowCaches.idl	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebCore/Modules/cache/DOMWindowCaches.idl	2018-10-29 00:03:25 UTC (rev 237535)
@@ -26,5 +26,5 @@
 [
     EnabledAtRuntime=CacheAPI,
 ] partial interface DOMWindow {
-    [CallWith=ScriptExecutionContext, MayThrowException, SecureContext, SameObject] readonly attribute DOMCacheStorage caches;
+    [CallWith=ScriptExecutionContext, MayThrowException, SecureContext, ContextHasServiceWorkerScheme, SameObject] readonly attribute DOMCacheStorage caches;
 };

Modified: branches/safari-606-branch/Source/WebCore/dom/ScriptExecutionContext.cpp (237534 => 237535)


--- branches/safari-606-branch/Source/WebCore/dom/ScriptExecutionContext.cpp	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebCore/dom/ScriptExecutionContext.cpp	2018-10-29 00:03:25 UTC (rev 237535)
@@ -561,8 +561,6 @@
     return m_domainForCachePartition.isNull() ? topOrigin().domainForCachePartition() : m_domainForCachePartition;
 }
 
-#if ENABLE(SERVICE_WORKER)
-
 bool ScriptExecutionContext::hasServiceWorkerScheme()
 {
     ASSERT(securityOrigin());
@@ -569,6 +567,8 @@
     return SchemeRegistry::isServiceWorkerContainerCustomScheme(securityOrigin()->protocol());
 }
 
+#if ENABLE(SERVICE_WORKER)
+
 ServiceWorker* ScriptExecutionContext::activeServiceWorker() const
 {
     return m_activeServiceWorker.get();

Modified: branches/safari-606-branch/Source/WebCore/dom/ScriptExecutionContext.h (237534 => 237535)


--- branches/safari-606-branch/Source/WebCore/dom/ScriptExecutionContext.h	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebCore/dom/ScriptExecutionContext.h	2018-10-29 00:03:25 UTC (rev 237535)
@@ -244,8 +244,8 @@
     WEBCORE_EXPORT String domainForCachePartition() const;
     void setDomainForCachePartition(String&& domain) { m_domainForCachePartition = WTFMove(domain); }
 
+    bool hasServiceWorkerScheme();
 #if ENABLE(SERVICE_WORKER)
-    bool hasServiceWorkerScheme();
     ServiceWorker* activeServiceWorker() const;
     void setActiveServiceWorker(RefPtr<ServiceWorker>&&);
 

Modified: branches/safari-606-branch/Source/WebKit/ChangeLog (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/ChangeLog	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/ChangeLog	2018-10-29 00:03:25 UTC (rev 237535)
@@ -1,5 +1,72 @@
 2018-10-28  Babak Shafiei  <[email protected]>
 
+        Cherry-pick r237060. rdar://problem/45435468
+
+    IOS 12 - Service worker cache not shared when added to homescreen
+    https://bugs.webkit.org/show_bug.cgi?id=190269
+    <rdar://problem/45009961>
+    
+    Reviewed by Alex Christensen.
+    
+    Source/WebCore:
+    
+    Expose Cache Storage API when Service Worker API is exposed.
+    This is used for API tests.
+    
+    * dom/ScriptExecutionContext.h: Make hasServiceWorkerScheme
+    available outside SERVICE_WORKER compilation flag since used by DOMWindowCaches.
+    * dom/ScriptExecutionContext.cpp: Ditto.
+    * Modules/cache/DOMWindowCaches.idl:
+    
+    Source/WebKit:
+    
+    NetworkProcessProxy does not always have all its stores in its hash map.
+    Make sure to check for the default web process pool store when grabbing cache storage parameters from a given session ID.
+    
+    Add a way to remove the default website data for testing.
+    This is used in the new API test.
+    
+    * UIProcess/API/APIWebsiteDataStore.cpp:
+    (API::WebsiteDataStore::deleteDefaultDataStoreForTesting):
+    * UIProcess/API/APIWebsiteDataStore.h:
+    * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+    (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
+    * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
+    * UIProcess/Network/NetworkProcessProxy.cpp:
+    (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
+    Add test to ensure that CacheStorage use the default website data store parameters.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237060 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-10-11  Youenn Fablet  <[email protected]>
+
+            IOS 12 - Service worker cache not shared when added to homescreen
+            https://bugs.webkit.org/show_bug.cgi?id=190269
+            <rdar://problem/45009961>
+
+            Reviewed by Alex Christensen.
+
+            NetworkProcessProxy does not always have all its stores in its hash map.
+            Make sure to check for the default web process pool store when grabbing cache storage parameters from a given session ID.
+
+            Add a way to remove the default website data for testing.
+            This is used in the new API test.
+
+            * UIProcess/API/APIWebsiteDataStore.cpp:
+            (API::WebsiteDataStore::deleteDefaultDataStoreForTesting):
+            * UIProcess/API/APIWebsiteDataStore.h:
+            * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+            (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
+            * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
+            * UIProcess/Network/NetworkProcessProxy.cpp:
+            (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
+
+2018-10-28  Babak Shafiei  <[email protected]>
+
         Apply patch. rdar://problem/45523764
 
     2018-10-28  John Wilander  <[email protected]>

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/API/APIWebsiteDataStore.cpp	2018-10-29 00:03:25 UTC (rev 237535)
@@ -31,21 +31,32 @@
 
 namespace API {
 
-static WebsiteDataStore* globalDefaultDataStore;
+static RefPtr<WebsiteDataStore>& globalDefaultDataStore()
+{
+    static NeverDestroyed<RefPtr<WebsiteDataStore>> globalDefaultDataStore;
+    return globalDefaultDataStore.get();
+}
 
+
 Ref<WebsiteDataStore> WebsiteDataStore::defaultDataStore()
 {
     WebKit::InitializeWebKit2();
 
-    if (!globalDefaultDataStore)
-        globalDefaultDataStore = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), PAL::SessionID::defaultSessionID())).leakRef();
+    auto& store = globalDefaultDataStore();
+    if (!store)
+        store = adoptRef(new WebsiteDataStore(defaultDataStoreConfiguration(), PAL::SessionID::defaultSessionID()));
 
-    return *globalDefaultDataStore;
+    return *store;
 }
 
+void WebsiteDataStore::deleteDefaultDataStoreForTesting()
+{
+    globalDefaultDataStore() = nullptr;
+}
+
 bool WebsiteDataStore::defaultDataStoreExists()
 {
-    return globalDefaultDataStore;
+    return !!globalDefaultDataStore();
 }
 
 Ref<WebsiteDataStore> WebsiteDataStore::createNonPersistentDataStore()

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/API/APIWebsiteDataStore.h	2018-10-29 00:03:25 UTC (rev 237535)
@@ -36,6 +36,7 @@
 public:
     static Ref<WebsiteDataStore> defaultDataStore();
     static bool defaultDataStoreExists();
+    static void deleteDefaultDataStoreForTesting();
 
     static Ref<WebsiteDataStore> createNonPersistentDataStore();
     static Ref<WebsiteDataStore> createLegacy(WebKit::WebsiteDataStore::Configuration);

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2018-10-29 00:03:25 UTC (rev 237535)
@@ -186,6 +186,11 @@
     return API::WebsiteDataStore::defaultDataStoreExists();
 }
 
++ (void)_deleteDefaultDataStoreForTesting
+{
+    return API::WebsiteDataStore::deleteDefaultDataStoreForTesting();
+}
+
 - (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration
 {
     if (!(self = [super init]))

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h	2018-10-29 00:03:25 UTC (rev 237535)
@@ -40,6 +40,7 @@
 
 + (NSSet<NSString *> *)_allWebsiteDataTypesIncludingPrivate;
 + (BOOL)_defaultDataStoreExists;
++ (void)_deleteDefaultDataStoreForTesting;
 
 - (instancetype)_initWithConfiguration:(_WKWebsiteDataStoreConfiguration *)configuration WK_API_AVAILABLE(macosx(10.13), ios(11.0));
 

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2018-10-29 00:03:25 UTC (rev 237535)
@@ -606,22 +606,40 @@
         m_websiteDataStores.remove(sessionID);
 }
 
+WebsiteDataStore* NetworkProcessProxy::websiteDataStoreFromSessionID(PAL::SessionID sessionID)
+{
+    auto iterator = m_websiteDataStores.find(sessionID);
+    if (iterator != m_websiteDataStores.end())
+        return iterator->value.get();
+
+    if (auto* websiteDataStore = m_processPool.websiteDataStore()) {
+        if (sessionID == websiteDataStore->websiteDataStore().sessionID())
+            return &websiteDataStore->websiteDataStore();
+    }
+
+    if (sessionID != PAL::SessionID::defaultSessionID())
+        return nullptr;
+
+    return &API::WebsiteDataStore::defaultDataStore()->websiteDataStore();
+}
+
 void NetworkProcessProxy::retrieveCacheStorageParameters(PAL::SessionID sessionID)
 {
-    auto iterator = m_websiteDataStores.find(sessionID);
-    if (iterator == m_websiteDataStores.end()) {
+    auto* store = websiteDataStoreFromSessionID(sessionID);
+
+    if (!store) {
+        RELEASE_LOG_ERROR(CacheStorage, "%p - NetworkProcessProxy is unable to retrieve CacheStorage parameters from the given session ID %" PRIu64, this, sessionID.sessionID());
         auto quota = m_processPool.websiteDataStore() ? m_processPool.websiteDataStore()->websiteDataStore().cacheStoragePerOriginQuota() : WebsiteDataStore::defaultCacheStoragePerOriginQuota;
         send(Messages::NetworkProcess::SetCacheStorageParameters { sessionID, quota, { }, { } }, 0);
         return;
     }
 
-    auto& store = *iterator->value;
-    auto& cacheStorageDirectory = store.cacheStorageDirectory();
+    auto& cacheStorageDirectory = store->cacheStorageDirectory();
     SandboxExtension::Handle cacheStorageDirectoryExtensionHandle;
     if (!cacheStorageDirectory.isEmpty())
         SandboxExtension::createHandleForReadWriteDirectory(cacheStorageDirectory, cacheStorageDirectoryExtensionHandle);
 
-    send(Messages::NetworkProcess::SetCacheStorageParameters { sessionID, store.cacheStoragePerOriginQuota(), cacheStorageDirectory, cacheStorageDirectoryExtensionHandle }, 0);
+    send(Messages::NetworkProcess::SetCacheStorageParameters { sessionID, store->cacheStoragePerOriginQuota(), cacheStorageDirectory, cacheStorageDirectoryExtensionHandle }, 0);
 }
 
 #if ENABLE(CONTENT_EXTENSIONS)

Modified: branches/safari-606-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (237534 => 237535)


--- branches/safari-606-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2018-10-29 00:03:25 UTC (rev 237535)
@@ -157,6 +157,8 @@
     void contentExtensionRules(UserContentControllerIdentifier);
 #endif
 
+    WebsiteDataStore* websiteDataStoreFromSessionID(PAL::SessionID);
+
     // ProcessLauncher::Client
     void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override;
 

Modified: branches/safari-606-branch/Tools/ChangeLog (237534 => 237535)


--- branches/safari-606-branch/Tools/ChangeLog	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Tools/ChangeLog	2018-10-29 00:03:25 UTC (rev 237535)
@@ -1,5 +1,60 @@
 2018-10-28  Babak Shafiei  <[email protected]>
 
+        Cherry-pick r237060. rdar://problem/45435468
+
+    IOS 12 - Service worker cache not shared when added to homescreen
+    https://bugs.webkit.org/show_bug.cgi?id=190269
+    <rdar://problem/45009961>
+    
+    Reviewed by Alex Christensen.
+    
+    Source/WebCore:
+    
+    Expose Cache Storage API when Service Worker API is exposed.
+    This is used for API tests.
+    
+    * dom/ScriptExecutionContext.h: Make hasServiceWorkerScheme
+    available outside SERVICE_WORKER compilation flag since used by DOMWindowCaches.
+    * dom/ScriptExecutionContext.cpp: Ditto.
+    * Modules/cache/DOMWindowCaches.idl:
+    
+    Source/WebKit:
+    
+    NetworkProcessProxy does not always have all its stores in its hash map.
+    Make sure to check for the default web process pool store when grabbing cache storage parameters from a given session ID.
+    
+    Add a way to remove the default website data for testing.
+    This is used in the new API test.
+    
+    * UIProcess/API/APIWebsiteDataStore.cpp:
+    (API::WebsiteDataStore::deleteDefaultDataStoreForTesting):
+    * UIProcess/API/APIWebsiteDataStore.h:
+    * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+    (+[WKWebsiteDataStore _deleteDefaultDataStoreForTesting]):
+    * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
+    * UIProcess/Network/NetworkProcessProxy.cpp:
+    (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters):
+    
+    Tools:
+    
+    * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
+    Add test to ensure that CacheStorage use the default website data store parameters.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@237060 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-10-11  Youenn Fablet  <[email protected]>
+
+            IOS 12 - Service worker cache not shared when added to homescreen
+            https://bugs.webkit.org/show_bug.cgi?id=190269
+            <rdar://problem/45009961>
+
+            Reviewed by Alex Christensen.
+
+            * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm:
+            Add test to ensure that CacheStorage use the default website data store parameters.
+
+2018-10-28  Babak Shafiei  <[email protected]>
+
         Cherry-pick r237135. rdar://problem/45562440
 
     [iOS] Can't select text after dismissing the keyboard when changing focus

Modified: branches/safari-606-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm (237534 => 237535)


--- branches/safari-606-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm	2018-10-28 23:01:57 UTC (rev 237534)
+++ branches/safari-606-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm	2018-10-29 00:03:25 UTC (rev 237535)
@@ -194,7 +194,33 @@
 }
 @end
 
+static const char* mainCacheStorageBytes = R"SWRESOURCE(
+<script>
 
+function log(msg)
+{
+    window.webkit.messageHandlers.sw.postMessage(msg);
+}
+
+async function doTest()
+{
+    const keys = await window.caches.keys();
+    if (!keys.length) {
+        const cache = await window.caches.open("my cache");
+        log("No cache storage data");
+        return;
+    }
+    if (keys.length !== 1) {
+        log("Unexpected cache number");
+        return;
+    }
+    log("Some cache storage data: " + keys[0]);
+}
+doTest();
+
+</script>
+)SWRESOURCE";
+
 static const char* mainBytes = R"SWRESOURCE(
 <script>
 
@@ -541,6 +567,63 @@
     done = false;
 }
 
+TEST(ServiceWorkers, CacheStorageRestoreFromDisk)
+{
+    ASSERT(mainCacheStorageBytes);
+    [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins];
+
+    // Start with a clean slate data store
+    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() {
+        done = true;
+    }];
+
+    TestWebKitAPI::Util::run(&done);
+    done = false;
+
+    [WKWebsiteDataStore _deleteDefaultDataStoreForTesting];
+
+    auto handler = adoptNS([[SWSchemes alloc] init]);
+    handler->resources.set("sw://host/main.html", ResourceInfo { @"text/html", mainCacheStorageBytes });
+
+    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    auto messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"No cache storage data"]);
+
+    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
+    [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
+
+    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+    [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];
+
+    // Trigger creation of network process.
+    [webView.get().configuration.processPool _syncNetworkProcessCookies];
+
+    auto *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
+    [webView loadRequest:request];
+
+    TestWebKitAPI::Util::run(&done);
+    done = false;
+
+    webView = nullptr;
+    configuration = nullptr;
+    messageHandler = nullptr;
+
+    configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    messageHandler = adoptNS([[SWMessageHandlerForRestoreFromDiskTest alloc] initWithExpectedMessage:@"Some cache storage data: my cache"]);
+
+    [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"];
+    [configuration setURLSchemeHandler:handler.get() forURLScheme:@"SW"];
+
+    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+    [webView.get().configuration.processPool _registerURLSchemeServiceWorkersCanHandle:@"sw"];
+
+    request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"sw://host/main.html"]];
+    [webView loadRequest:request];
+
+    TestWebKitAPI::Util::run(&done);
+    done = false;
+}
+
+
 TEST(ServiceWorkers, FetchAfterRestoreFromDisk)
 {
     ASSERT(mainForFetchTestBytes);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to