Changeset 271291 in webkit
- Timestamp:
- Jan 8, 2021, 5:18:52 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkProcess.cpp (modified) (3 diffs)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r271287 r271291 1 2021-01-08 Youenn Fablet <youenn@apple.com> 2 3 Make sure that if NetworkProcess clears DOMCache, it also clears service worker registrations 4 https://bugs.webkit.org/show_bug.cgi?id=220408 5 <rdar://problem/72360003> 6 7 Reviewed by Alex Christensen. 8 9 It is expected that clearing DOM cache mandates clearing service worker registrations 10 as service workers expect cache entries added at install time to stay. 11 It is hard for clients to enforce this so it is best to handle it in Network Process. 12 When DOMCache is cleared, service worker registrations will also be cleared. 13 The reverse is not guaranteed. 14 Covered by API test. 15 16 * NetworkProcess/NetworkProcess.cpp: 17 (WebKit::NetworkProcess::deleteWebsiteData): 18 (WebKit::NetworkProcess::deleteWebsiteDataForOrigins): 19 (WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains): 20 1 21 2021-01-07 Alex Christensen <achristensen@webkit.org> 2 22 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r271184 r271291 1576 1576 1577 1577 #if ENABLE(SERVICE_WORKER) 1578 if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && !sessionID.isEphemeral()) 1578 bool clearServiceWorkers = websiteDataTypes.contains(WebsiteDataType::DOMCache) || websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations); 1579 if (clearServiceWorkers && !sessionID.isEphemeral()) 1579 1580 swServerForSession(sessionID).clearAll([clearTasksHandler] { }); 1580 1581 #endif … … 1689 1690 1690 1691 #if ENABLE(SERVICE_WORKER) 1691 if (websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations) && !sessionID.isEphemeral()) { 1692 bool clearServiceWorkers = websiteDataTypes.contains(WebsiteDataType::DOMCache) || websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations); 1693 if (clearServiceWorkers && !sessionID.isEphemeral()) { 1692 1694 auto& server = swServerForSession(sessionID); 1693 1695 for (auto& originData : originDatas) … … 1899 1901 #if ENABLE(SERVICE_WORKER) 1900 1902 path = m_serviceWorkerInfo.get(sessionID).databasePath; 1901 if (!path.isEmpty() && websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations)) { 1903 bool clearServiceWorkers = websiteDataTypes.contains(WebsiteDataType::DOMCache) || websiteDataTypes.contains(WebsiteDataType::ServiceWorkerRegistrations); 1904 if (clearServiceWorkers && !path.isEmpty()) { 1902 1905 swServerForSession(sessionID).getOriginsWithRegistrations([this, sessionID, domainsToDeleteAllNonCookieWebsiteDataFor, callbackAggregator](const HashSet<SecurityOriginData>& securityOrigins) mutable { 1903 1906 for (auto& securityOrigin : securityOrigins) { -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
r267763 r271291 2301 2301 2302 2302 #endif // HAVE(TLS_PROTOCOL_VERSION_T) 2303 2304 TEST(ServiceWorkers, ClearDOMCacheAlsoIncludesServiceWorkerRegistrations) 2305 { 2306 [WKWebsiteDataStore _allowWebsiteDataRecordsForAllOrigins]; 2307 2308 // Start with a clean slate data store 2309 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes] modifiedSince:[NSDate distantPast] completionHandler:^() { 2310 done = true; 2311 }]; 2312 TestWebKitAPI::Util::run(&done); 2313 done = false; 2314 2315 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 2316 2317 auto messageHandler = adoptNS([[SWMessageHandler alloc] init]); 2318 [[configuration userContentController] addScriptMessageHandler:messageHandler.get() name:@"sw"]; 2319 2320 ServiceWorkerTCPServer server({ 2321 { "text/html", mainBytes }, 2322 { "application/javascript", scriptBytes }, 2323 }); 2324 2325 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 2326 [webView loadRequest:server.request()]; 2327 TestWebKitAPI::Util::run(&done); 2328 done = false; 2329 2330 // Fetch SW records 2331 auto websiteDataTypes = adoptNS([[NSSet alloc] initWithArray:@[WKWebsiteDataTypeServiceWorkerRegistrations]]); 2332 static bool readyToContinue; 2333 [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:websiteDataTypes.get() completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) { 2334 EXPECT_EQ(1U, dataRecords.count); 2335 readyToContinue = true; 2336 }]; 2337 TestWebKitAPI::Util::run(&readyToContinue); 2338 readyToContinue = false; 2339 2340 // Clear DOM Cache 2341 auto typesToRemove = adoptNS([[NSSet alloc] initWithArray:@[WKWebsiteDataTypeFetchCache]]); 2342 [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:typesToRemove.get() modifiedSince:[NSDate distantPast] completionHandler:^() { 2343 done = true; 2344 }]; 2345 TestWebKitAPI::Util::run(&done); 2346 done = false; 2347 2348 // Fetch SW records again 2349 [[WKWebsiteDataStore defaultDataStore] fetchDataRecordsOfTypes:websiteDataTypes.get() completionHandler:^(NSArray<WKWebsiteDataRecord *> *dataRecords) { 2350 EXPECT_EQ(0U, dataRecords.count); 2351 readyToContinue = true; 2352 }]; 2353 TestWebKitAPI::Util::run(&readyToContinue); 2354 readyToContinue = false; 2355 }
Note:
See TracChangeset
for help on using the changeset viewer.