[webkit-changes] [WebKit/WebKit] 642038: Add support for pausing and resuming background fe...
youennf
noreply at github.com
Tue Mar 14 04:49:29 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6420384c096fc03eba04e7002a7e92e2ec88f6c4
https://github.com/WebKit/WebKit/commit/6420384c096fc03eba04e7002a7e92e2ec88f6c4
Author: Youenn Fablet <youennf at gmail.com>
Date: 2023-03-14 (Tue, 14 Mar 2023)
Changed paths:
A LayoutTests/http/wpt/background-fetch/background-fetch-pause-resume.window-expected.txt
A LayoutTests/http/wpt/background-fetch/background-fetch-pause-resume.window.html
A LayoutTests/http/wpt/background-fetch/background-fetch-pause-resume.window.js
A LayoutTests/http/wpt/background-fetch/resources/trickle-range.py
M Source/WebCore/workers/service/background-fetch/BackgroundFetch.cpp
M Source/WebCore/workers/service/background-fetch/BackgroundFetch.h
M Source/WebCore/workers/service/background-fetch/BackgroundFetchEngine.cpp
M Source/WebCore/workers/service/background-fetch/BackgroundFetchStore.h
M Source/WebCore/workers/service/server/SWServer.h
M Source/WebCore/workers/service/server/SWServerDelegate.h
M Source/WebKit/NetworkProcess/BackgroundFetchLoad.cpp
M Source/WebKit/NetworkProcess/BackgroundFetchLoad.h
M Source/WebKit/NetworkProcess/NetworkSession.cpp
M Source/WebKit/NetworkProcess/NetworkSession.h
M Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp
M Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.h
M Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreManager.cpp
M Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreManager.h
M Source/WebKit/Shared/BackgroundFetchState.h
M Source/WebKit/Shared/BackgroundFetchState.serialization.in
M Source/WebKit/Shared/Cocoa/BackgroundFetchStateCocoa.mm
M Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
M Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
M Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h
M Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
M Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
M Tools/WebKitTestRunner/TestController.cpp
M Tools/WebKitTestRunner/TestController.h
M Tools/WebKitTestRunner/TestInvocation.cpp
M Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm
Log Message:
-----------
Add support for pausing and resuming background fetches
https://bugs.webkit.org/show_bug.cgi?id=253308
rdar://problem/106192062
Reviewed by Sihui Liu.
Add support for the pausedFlag as defined in https://wicg.github.io/background-fetch/#background-fetch-paused-flag.
When pause is called, we stop the loader if active.
When resuming, we restart the loader. If there is already some downloaded data, we use a range request.
If the response is not a range response, we clear response body and start writing the data from start.
If the response is a range response, we validate it as per spec and we store the data.
We store the paused flag in the store and do not restart background fetches if it is paused.
We expose the paused flag in BackgroundFetchState as well.
Drive-by fix to correctly expose downloaded (it was exposed as uploaded previously).
Add test runner API to get the currewnt downloaded size.
Covered by newly added test.
* LayoutTests/http/wpt/background-fetch/background-fetch-pause-resume.window-expected.txt: Added.
* LayoutTests/http/wpt/background-fetch/background-fetch-pause-resume.window.html: Added.
* LayoutTests/http/wpt/background-fetch/background-fetch-pause-resume.window.js: Added.
(backgroundFetchDownloaded):
(backgroundFetchIsPaused):
(promise_test.async t):
* LayoutTests/http/wpt/background-fetch/resources/trickle-range.py: Added.
(main):
* Source/WebCore/workers/service/background-fetch/BackgroundFetch.cpp:
(WebCore::BackgroundFetch::BackgroundFetch):
(WebCore::BackgroundFetch::pause):
(WebCore::BackgroundFetch::resume):
(WebCore::BackgroundFetch::storeResponse):
(WebCore::BackgroundFetch::setRecords):
(WebCore::BackgroundFetch::Record::complete):
(WebCore::BackgroundFetch::Record::pause):
(WebCore::extractContentRangeValues):
(WebCore::validatePartialResponse):
(WebCore::BackgroundFetch::Record::didReceiveResponse):
(WebCore::BackgroundFetch::doStore):
(WebCore::BackgroundFetch::createFromStore):
* Source/WebCore/workers/service/background-fetch/BackgroundFetch.h:
(WebCore::BackgroundFetch::pausedFlagIsSet const):
(WebCore::BackgroundFetch::doStore):
(WebCore::BackgroundFetch::setRecords): Deleted.
* Source/WebCore/workers/service/background-fetch/BackgroundFetchEngine.cpp:
(WebCore::BackgroundFetchEngine::startBackgroundFetch):
(WebCore::BackgroundFetchEngine::notifyBackgroundFetchUpdate):
(WebCore::BackgroundFetchEngine::pauseBackgroundFetch):
(WebCore::BackgroundFetchEngine::resumeBackgroundFetch):
* Source/WebCore/workers/service/background-fetch/BackgroundFetchStore.h:
* Source/WebCore/workers/service/server/SWServer.h:
(WebCore::SWServer::createBackgroundFetchRecordLoader):
* Source/WebCore/workers/service/server/SWServerDelegate.h:
* Source/WebKit/NetworkProcess/BackgroundFetchLoad.cpp:
(WebKit::BackgroundFetchLoad::BackgroundFetchLoad):
* Source/WebKit/NetworkProcess/BackgroundFetchLoad.h:
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::createBackgroundFetchRecordLoader):
* Source/WebKit/NetworkProcess/NetworkSession.h:
* Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.cpp:
(WebKit::BackgroundFetchStoreImpl::storeFetch):
(WebKit::BackgroundFetchStoreImpl::getBackgroundFetchState):
* Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreImpl.h:
* Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreManager.cpp:
(WebKit::BackgroundFetchStoreManager::storeFetch):
(WebKit::BackgroundFetchStoreManager::storeFetchAfterQuotaCheck):
* Source/WebKit/NetworkProcess/storage/BackgroundFetchStoreManager.h:
* Source/WebKit/Shared/BackgroundFetchState.h:
* Source/WebKit/Shared/BackgroundFetchState.serialization.in:
* Source/WebKit/Shared/Cocoa/BackgroundFetchStateCocoa.mm:
(WebKit::BackgroundFetchState::toDictionary const):
* Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
(WTR::InjectedBundle::backgroundFetchState):
* Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:
* Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::backgroundFetchState):
* Tools/WebKitTestRunner/InjectedBundle/TestRunner.h:
* Tools/WebKitTestRunner/TestController.cpp:
(WTR::TestController::backgroundFetchState):
* Tools/WebKitTestRunner/TestController.h:
* Tools/WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
* Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm:
(WTR::TestController::setBackgroundFetchPermission):
(WTR::TestController::lastAddedBackgroundFetchIdentifier const):
(WTR::TestController::lastRemovedBackgroundFetchIdentifier const):
(WTR::TestController::lastUpdatedBackgroundFetchIdentifier const):
(WTR::TestController::backgroundFetchState):
Canonical link: https://commits.webkit.org/261625@main
More information about the webkit-changes
mailing list