Changeset 228025 in webkit
- Timestamp:
- Feb 2, 2018 1:08:58 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r228015 r228025 1 2018-02-02 Youenn Fablet <youenn@apple.com> 2 3 Clearing all service worker registrations should wait for importing service worker registration to finish 4 https://bugs.webkit.org/show_bug.cgi?id=182407 5 6 Reviewed by Chris Dumez. 7 8 Covered by existing tests and the service worker API test being no longer flaky. 9 10 * workers/service/server/SWServer.cpp: 11 (WebCore::SWServer::registrationStoreImportComplete): 12 (WebCore::SWServer::clearAll): 13 (WebCore::SWServer::clear): 14 (WebCore::SWServer::getOriginsWithRegistrations): 15 * workers/service/server/SWServer.h: 16 1 17 2018-02-02 Chris Dumez <cdumez@apple.com> 2 18 -
trunk/Source/WebCore/workers/service/server/SWServer.cpp
r227989 r228025 115 115 m_importCompleted = true; 116 116 m_originStore->importComplete(); 117 118 auto clearCallbacks = WTFMove(m_clearCompletionCallbacks); 119 for (auto& callback : clearCallbacks) 120 callback(); 121 117 122 performGetOriginsWithRegistrationsCallbacks(); 118 123 } … … 183 188 } 184 189 185 void SWServer::clearAll(WTF::CompletionHandler<void()>&& completionHandler) 186 { 190 void SWServer::clearAll(CompletionHandler<void()>&& completionHandler) 191 { 192 if (!m_importCompleted) { 193 m_clearCompletionCallbacks.append([this, completionHandler = WTFMove(completionHandler)] () mutable { 194 ASSERT(m_importCompleted); 195 clearAll(WTFMove(completionHandler)); 196 }); 197 return; 198 } 199 187 200 m_jobQueues.clear(); 188 201 while (!m_registrations.isEmpty()) … … 194 207 } 195 208 196 void SWServer::clear(const SecurityOrigin& origin, WTF::CompletionHandler<void()>&& completionHandler) 197 { 209 void SWServer::clear(const SecurityOrigin& origin, CompletionHandler<void()>&& completionHandler) 210 { 211 if (!m_importCompleted) { 212 m_clearCompletionCallbacks.append([this, origin = makeRef(origin), completionHandler = WTFMove(completionHandler)] () mutable { 213 ASSERT(m_importCompleted); 214 clear(origin, WTFMove(completionHandler)); 215 }); 216 return; 217 } 218 198 219 m_jobQueues.removeIf([&](auto& keyAndValue) { 199 220 return keyAndValue.key.relatesToOrigin(origin); … … 209 230 return contextData.registration.key.relatesToOrigin(origin); 210 231 }); 232 233 if (registrationsToRemove.isEmpty()) 234 return; 211 235 212 236 // Calling SWServerRegistration::clear() takes care of updating m_registrations, m_originStore and m_registrationStore. … … 772 796 } 773 797 774 void SWServer::getOriginsWithRegistrations( WTF::Function<void(const HashSet<SecurityOriginData>&)>callback)798 void SWServer::getOriginsWithRegistrations(Function<void(const HashSet<SecurityOriginData>&)>&& callback) 775 799 { 776 800 m_getOriginsWithRegistrationsCallbacks.append(WTFMove(callback)); -
trunk/Source/WebCore/workers/service/server/SWServer.h
r227989 r228025 175 175 void registrationStoreDatabaseFailedToOpen(); 176 176 177 WEBCORE_EXPORT void getOriginsWithRegistrations( WTF::Function<void(const HashSet<SecurityOriginData>&)>);177 WEBCORE_EXPORT void getOriginsWithRegistrations(Function<void(const HashSet<SecurityOriginData>&)>&&); 178 178 179 179 PAL::SessionID sessionID() const { return m_sessionID; } … … 228 228 PAL::SessionID m_sessionID; 229 229 bool m_importCompleted { false }; 230 Vector<WTF::Function<void(const HashSet<SecurityOriginData>&)>> m_getOriginsWithRegistrationsCallbacks; 230 Vector<CompletionHandler<void()>> m_clearCompletionCallbacks; 231 Vector<Function<void(const HashSet<SecurityOriginData>&)>> m_getOriginsWithRegistrationsCallbacks; 231 232 }; 232 233 -
trunk/Source/WebKit/ChangeLog
r228021 r228025 1 2018-02-02 Youenn Fablet <youenn@apple.com> 2 3 Clearing all service worker registrations should wait for importing service worker registration to finish 4 https://bugs.webkit.org/show_bug.cgi?id=182407 5 6 Reviewed by Chris Dumez. 7 8 Updating API to take a completion handler. 9 10 * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: 11 (WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations): 12 * UIProcess/API/C/WKWebsiteDataStoreRef.h: 13 1 14 2018-02-02 Fujii Hironori <Hironori.Fujii@sony.com> 2 15 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.cpp
r227943 r228025 394 394 } 395 395 396 void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef )396 void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreRemoveAllServiceWorkerRegistrationsCallback callback) 397 397 { 398 398 #if ENABLE(SERVICE_WORKER) 399 399 OptionSet<WebKit::WebsiteDataType> dataTypes = WebKit::WebsiteDataType::ServiceWorkerRegistrations; 400 WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, -WallTime::infinity(), [] { }); 400 WebKit::toImpl(dataStoreRef)->websiteDataStore().removeData(dataTypes, -WallTime::infinity(), [context, callback] { 401 callback(context); 402 }); 401 403 #else 402 404 UNUSED_PARAM(dataStoreRef); -
trunk/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreRef.h
r227933 r228025 84 84 WK_EXPORT void WKWebsiteDataStoreRemoveAllFetchCaches(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreRemoveFetchCacheRemovalFunction callback); 85 85 86 typedef void (*WKWebsiteDataStoreRemoveAllServiceWorkerRegistrationsCallback)(void* functionContext); 87 WK_EXPORT void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef, void* context, WKWebsiteDataStoreRemoveAllServiceWorkerRegistrationsCallback callback); 88 86 89 WK_EXPORT void WKWebsiteDataStoreRemoveAllIndexedDatabases(WKWebsiteDataStoreRef dataStoreRef); 87 WK_EXPORT void WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKWebsiteDataStoreRef dataStoreRef);88 90 89 91 typedef void (*WKWebsiteDataStoreGetFetchCacheOriginsFunction)(WKArrayRef, void*); -
trunk/Tools/ChangeLog
r228019 r228025 1 2018-02-02 Youenn Fablet <youenn@apple.com> 2 3 Clearing all service worker registrations should wait for importing service worker registration to finish 4 https://bugs.webkit.org/show_bug.cgi?id=182407 5 6 Reviewed by Chris Dumez. 7 8 Make sure we finish clearing service worker registrations before running tests. 9 10 * WebKitTestRunner/TestController.cpp: 11 (WTR::TestController::resetStateToConsistentValues): 12 (WTR::ClearServiceWorkerRegistrationsCallbackContext::ClearServiceWorkerRegistrationsCallbackContext): 13 (WTR::clearServiceWorkerRegistrationsCallback): 14 (WTR::TestController::clearServiceWorkerRegistrations): 15 * WebKitTestRunner/TestController.h: 16 1 17 2018-02-02 Youenn Fablet <youenn@apple.com> 2 18 -
trunk/Tools/WebKitTestRunner/TestController.cpp
r228019 r228025 783 783 WKContextClearCachedCredentials(TestController::singleton().context()); 784 784 785 WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(WKContextGetWebsiteDataStore(platformContext())); 786 785 clearServiceWorkerRegistrations(); 787 786 clearDOMCaches(); 788 787 … … 2330 2329 2331 2330 #if PLATFORM(COCOA) && WK_API_ENABLED 2331 struct ClearServiceWorkerRegistrationsCallbackContext { 2332 explicit ClearServiceWorkerRegistrationsCallbackContext(TestController& controller) 2333 : testController(controller) 2334 { 2335 } 2336 2337 TestController& testController; 2338 bool done { false }; 2339 }; 2340 2341 static void clearServiceWorkerRegistrationsCallback(void* userData) 2342 { 2343 auto* context = static_cast<ClearServiceWorkerRegistrationsCallbackContext*>(userData); 2344 context->done = true; 2345 context->testController.notifyDone(); 2346 } 2347 #endif 2348 2349 void TestController::clearServiceWorkerRegistrations() 2350 { 2351 #if PLATFORM(COCOA) && WK_API_ENABLED 2352 auto websiteDataStore = WKContextGetWebsiteDataStore(platformContext()); 2353 ClearServiceWorkerRegistrationsCallbackContext context(*this); 2354 2355 WKWebsiteDataStoreRemoveAllServiceWorkerRegistrations(websiteDataStore, &context, clearServiceWorkerRegistrationsCallback); 2356 2357 if (!context.done) 2358 runUntil(context.done, m_currentInvocation->shortTimeout()); 2359 #endif 2360 } 2361 2362 #if PLATFORM(COCOA) && WK_API_ENABLED 2332 2363 struct ClearDOMCacheCallbackContext { 2333 2364 explicit ClearDOMCacheCallbackContext(TestController& controller) -
trunk/Tools/WebKitTestRunner/TestController.h
r225622 r228025 193 193 void removeAllSessionCredentials(); 194 194 195 void clearServiceWorkerRegistrations(); 196 195 197 void clearDOMCache(WKStringRef origin); 196 198 void clearDOMCaches();
Note: See TracChangeset
for help on using the changeset viewer.