From 6db11cf540d6be513f8b3ce7b46ee070435a946d Mon Sep 17 00:00:00 2001 From: Youenn Fablet Date: Thu, 20 Apr 2023 23:35:57 -0700 Subject: [PATCH] Use more Functions in BackgroundFetchStoreImpl https://bugs.webkit.org/show_bug.cgi?id=255729 rdar://108090601 Reviewed by Sihui Liu. Using more Functions to remove usage of lambda copy constructors. * Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp: (WebKit::BackgroundFetchStoreImpl::initializeFetches): (WebKit::BackgroundFetchStoreImpl::clearFetch): (WebKit::BackgroundFetchStoreImpl::storeFetch): (WebKit::BackgroundFetchStoreImpl::storeFetchResponseBodyChunk): Canonical link: https://commits.webkit.org/263213@main --- .../storage/BackgroundFetchStoreImpl.cpp | 40 +++++++++++++------ .../storage/BackgroundFetchStoreImpl.h | 6 +++ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp b/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp index 8b74afd73e23..a9967c8f0990 100644 --- a/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp +++ b/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp @@ -84,7 +84,7 @@ void BackgroundFetchStoreImpl::initializeFetches(const ServiceWorkerRegistration initializeFetches({ key.topOrigin(), SecurityOriginData::fromURL(key.scope()) }, WTFMove(callback)); } -void BackgroundFetchStoreImpl::initializeFetches(const ClientOrigin& origin, CompletionHandler&& callback) +void BackgroundFetchStoreImpl::initializeFetches(const WebCore::ClientOrigin& origin, CompletionHandler&& callback) { if (!m_manager) { callback(); @@ -98,7 +98,8 @@ void BackgroundFetchStoreImpl::initializeFetches(const ClientOrigin& origin, Com } addResult.iterator->value.initializationCallbacks.append(WTFMove(callback)); - auto internalCallback = [origin, weakEngine = WeakPtr { m_server->backgroundFetchEngine() }, protectedThis = Ref { *this }, manager = m_manager](Vector, String>>&& fetches) { + + initializeFetchesInternal(origin, [origin, weakEngine = WeakPtr { m_server->backgroundFetchEngine() }, protectedThis = Ref { *this }, manager = m_manager](Vector, String>>&& fetches) { if (weakEngine && manager) { for (auto& fetch : fetches) { weakEngine->addFetchFromStore({ fetch.first->data(), fetch.first->size() }, [&](auto& key, auto& identifier) { @@ -122,8 +123,11 @@ void BackgroundFetchStoreImpl::initializeFetches(const ClientOrigin& origin, Com auto callbacks = std::exchange(iterator->value.initializationCallbacks, { }); for (auto& callback : callbacks) callback(); - }; + }); +} +void BackgroundFetchStoreImpl::initializeFetchesInternal(const WebCore::ClientOrigin& origin, CompletionHandler, String>>&&)>&& internalCallback) +{ m_manager->dispatchTaskToBackgroundFetchManager(origin, [internalCallback = WTFMove(internalCallback)](auto* backgroundFetchManager) mutable { if (!backgroundFetchManager) { callOnMainRunLoop([internalCallback = WTFMove(internalCallback)]() mutable { @@ -160,12 +164,15 @@ void BackgroundFetchStoreImpl::clearFetch(const ServiceWorkerRegistrationKey& ke } m_filenameToFetch.remove(fetchStorageIdentifier); - auto internalCallback = [protectedThis = Ref { *this }, fetchStorageIdentifier, callback = WTFMove(callback)]() mutable { + clearFetchInternal(origin, fetchStorageIdentifier, [protectedThis = Ref { *this }, fetchStorageIdentifier, callback = WTFMove(callback)]() mutable { if (protectedThis->m_manager) protectedThis->m_manager->notifyBackgroundFetchChange(fetchStorageIdentifier, BackgroundFetchChange::Removal); callback(); - }; + }); +} +void BackgroundFetchStoreImpl::clearFetchInternal(const WebCore::ClientOrigin& origin, const String& fetchStorageIdentifier, CompletionHandler&& internalCallback) +{ m_manager->dispatchTaskToBackgroundFetchManager(origin, [fetchStorageIdentifier = crossThreadCopy(fetchStorageIdentifier), internalCallback = WTFMove(internalCallback)](auto* backgroundFetchManager) mutable { if (!backgroundFetchManager) { callOnMainRunLoop(WTFMove(internalCallback)); @@ -200,15 +207,18 @@ void BackgroundFetchStoreImpl::clearAllFetches(const ServiceWorkerRegistrationKe return true; }); - auto internalCallback = [protectedThis = Ref { *this }, fetchStorageIdentifiers, callback = WTFMove(callback)]() mutable { + clearAllFetchesInternal(origin, fetchStorageIdentifiers, [protectedThis = Ref { *this }, fetchStorageIdentifiers, callback = WTFMove(callback)]() mutable { if (protectedThis->m_manager) { for (auto& fetchStorageIdentifier : fetchStorageIdentifiers) protectedThis->m_manager->notifyBackgroundFetchChange(fetchStorageIdentifier, BackgroundFetchChange::Removal); } callback(); - }; + }); +} - m_manager->dispatchTaskToBackgroundFetchManager(origin, [fetchStorageIdentifiers = crossThreadCopy(WTFMove(fetchStorageIdentifiers)), internalCallback = WTFMove(internalCallback)](auto* backgroundFetchManager) mutable { +void BackgroundFetchStoreImpl::clearAllFetchesInternal(const WebCore::ClientOrigin& origin, const Vector& fetchStorageIdentifiers, CompletionHandler&& internalCallback) +{ + m_manager->dispatchTaskToBackgroundFetchManager(origin, [fetchStorageIdentifiers = crossThreadCopy(fetchStorageIdentifiers), internalCallback = WTFMove(internalCallback)](auto* backgroundFetchManager) mutable { if (!backgroundFetchManager) { callOnMainRunLoop(WTFMove(internalCallback)); return; @@ -238,15 +248,18 @@ void BackgroundFetchStoreImpl::storeFetch(const ServiceWorkerRegistrationKey& ke if (isNewFetchStorageIdentifier) fetchStorageIdentifier = BackgroundFetchStoreManager::createNewStorageIdentifier(); - auto internalCallback = [protectedThis = Ref { *this }, origin, key, identifier, fetchStorageIdentifier, isNewFetchStorageIdentifier, callback = WTFMove(callback)](StoreResult result) mutable { + storeFetchInternal(origin, fetchStorageIdentifier, downloadTotal, uploadTotal, responseBodyIndexToClear, WTFMove(fetch), [protectedThis = Ref { *this }, origin, key, identifier, fetchStorageIdentifier, isNewFetchStorageIdentifier, callback = WTFMove(callback)](StoreResult result) mutable { if (result == StoreResult::OK) { if (protectedThis->m_manager) protectedThis->m_manager->notifyBackgroundFetchChange(fetchStorageIdentifier, isNewFetchStorageIdentifier ? BackgroundFetchChange::Addition : BackgroundFetchChange::Update); protectedThis->registerFetch(origin, key, identifier, WTFMove(fetchStorageIdentifier)); } callback(result); - }; + }); +} +void BackgroundFetchStoreImpl::storeFetchInternal(const WebCore::ClientOrigin& origin, const String& fetchStorageIdentifier, uint64_t downloadTotal, uint64_t uploadTotal, std::optional responseBodyIndexToClear, Vector&& fetch, CompletionHandler&& internalCallback) +{ m_manager->dispatchTaskToBackgroundFetchManager(origin, [fetchStorageIdentifier = crossThreadCopy(fetchStorageIdentifier), downloadTotal, uploadTotal, responseBodyIndexToClear, fetch = WTFMove(fetch), internalCallback = WTFMove(internalCallback)](auto* backgroundFetchManager) mutable { if (!backgroundFetchManager) { callOnMainRunLoop([internalCallback = WTFMove(internalCallback)]() mutable { @@ -282,12 +295,15 @@ void BackgroundFetchStoreImpl::storeFetchResponseBodyChunk(const ServiceWorkerRe return; } - auto internalCallback = [protectedThis = Ref { *this }, fetchStorageIdentifier, callback = WTFMove(callback)](StoreResult result) mutable { + storeFetchResponseBodyChunkInternal(origin, fetchStorageIdentifier, index, data, [protectedThis = Ref { *this }, fetchStorageIdentifier, callback = WTFMove(callback)](StoreResult result) mutable { if (result == StoreResult::OK && protectedThis->m_manager) protectedThis->m_manager->notifyBackgroundFetchChange(fetchStorageIdentifier, BackgroundFetchChange::Update); callback(result); - }; + }); +} +void BackgroundFetchStoreImpl::storeFetchResponseBodyChunkInternal(const WebCore::ClientOrigin& origin, const String& fetchStorageIdentifier, size_t index, const SharedBuffer& data, CompletionHandler&& internalCallback) +{ m_manager->dispatchTaskToBackgroundFetchManager(origin, [fetchStorageIdentifier = crossThreadCopy(fetchStorageIdentifier), index, data = Ref { data }, internalCallback = WTFMove(internalCallback)](auto* backgroundFetchManager) mutable { if (!backgroundFetchManager) { callOnMainRunLoop([internalCallback = WTFMove(internalCallback)]() mutable { diff --git a/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.h b/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.h index 62051c12fe34..fe1a1d426e0b 100644 --- a/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.h +++ b/Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.h @@ -66,6 +66,12 @@ class BackgroundFetchStoreImpl : public WebCore::BackgroundFetchStore { void storeFetchResponseBodyChunk(const WebCore::ServiceWorkerRegistrationKey&, const String&, size_t, const WebCore::SharedBuffer&, CompletionHandler&&) final; void retrieveResponseBody(const WebCore::ServiceWorkerRegistrationKey&, const String&, size_t, RetrieveRecordResponseBodyCallback&&) final; + void initializeFetchesInternal(const WebCore::ClientOrigin&, CompletionHandler, String>>&&)>&&); + void clearFetchInternal(const WebCore::ClientOrigin&, const String&, CompletionHandler&&); + void clearAllFetchesInternal(const WebCore::ClientOrigin&, const Vector&, CompletionHandler&&); + void storeFetchInternal(const WebCore::ClientOrigin&, const String&, uint64_t, uint64_t, std::optional, Vector&&, CompletionHandler&&); + void storeFetchResponseBodyChunkInternal(const WebCore::ClientOrigin&, const String&, size_t index, const WebCore::SharedBuffer&, CompletionHandler&&); + String getFilename(const WebCore::ServiceWorkerRegistrationKey&, const String&); void registerFetch(const WebCore::ClientOrigin&, const WebCore::ServiceWorkerRegistrationKey&, const String& backgroundFetchIdentifier, String&& fetchStorageIdentifier); void loadAllFetches(CompletionHandler&&);