Changeset 286944 in webkit
- Timestamp:
- Dec 13, 2021 2:41:06 AM (7 months ago)
- Location:
- trunk
- Files:
-
- 12 added
- 51 edited
- 2 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/tests/workers/service/resources/service-worker-download-worker.js (modified) (1 diff)
-
LayoutTests/http/tests/workers/service/service-worker-download-body.https-expected.txt (added)
-
LayoutTests/http/tests/workers/service/service-worker-download-body.https.html (copied) (copied from trunk/LayoutTests/http/tests/workers/service/service-worker-download.https.html) (2 diffs)
-
LayoutTests/http/tests/workers/service/service-worker-download-stream.https-expected.txt (added)
-
LayoutTests/http/tests/workers/service/service-worker-download-stream.https.html (copied) (copied from trunk/LayoutTests/http/tests/workers/service/service-worker-download.https.html) (2 diffs)
-
LayoutTests/http/tests/workers/service/service-worker-download.https-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/workers/service/service-worker-download.https.html (modified) (1 diff)
-
LayoutTests/http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https-expected.txt (added)
-
LayoutTests/http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https.html (added)
-
LayoutTests/http/wpt/service-workers/fetch-service-worker-preload-download.https-expected.txt (added)
-
LayoutTests/http/wpt/service-workers/fetch-service-worker-preload-download.https.html (added)
-
LayoutTests/http/wpt/service-workers/fetch-service-worker-preload-worker.js (modified) (1 diff)
-
LayoutTests/http/wpt/service-workers/resources/fetch-service-worker-preload-script.py (modified) (1 diff)
-
LayoutTests/platform/ios/http/wpt/service-workers (added)
-
LayoutTests/platform/ios/http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https-expected.txt (added)
-
LayoutTests/platform/ios/http/wpt/service-workers/fetch-service-worker-preload-download.https-expected.txt (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/workers/service/context/ServiceWorkerFetch.h (modified) (1 diff)
-
Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp (modified) (1 diff)
-
Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h (modified) (1 diff)
-
Source/WebKit/CMakeLists.txt (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/DerivedSources-input.xcfilelist (modified) (1 diff)
-
Source/WebKit/DerivedSources-output.xcfilelist (modified) (1 diff)
-
Source/WebKit/DerivedSources.make (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkLoad.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkLoad.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp (added)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.h (added)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in (added)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/storage/LocalStorageManager.h (modified) (1 diff)
-
Source/WebKit/Scripts/generate-unified-sources.sh (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/messages.py (modified) (2 diffs)
-
Source/WebKit/Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp (modified) (1 diff)
-
Source/WebKit/Sources.txt (modified) (2 diffs)
-
Source/WebKit/UnifiedSources-output.xcfilelist (modified) (1 diff)
-
Source/WebKit/WebKit.xcodeproj/project.pbxproj (modified) (8 diffs)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.messages.in (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp (modified) (7 diffs)
-
Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h (modified) (2 diffs)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (modified) (1 diff)
-
Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (modified) (1 diff)
-
Tools/WebKitTestRunner/TestController.cpp (modified) (4 diffs)
-
Tools/WebKitTestRunner/TestController.h (modified) (3 diffs)
-
Tools/WebKitTestRunner/TestInvocation.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r286942 r286944 1 2021-12-13 Youenn Fablet <youenn@apple.com> 2 3 Fix ServiceWorker downloads 4 https://bugs.webkit.org/show_bug.cgi?id=202142 5 <rdar://problem/55721934> 6 7 Reviewed by Alex Christensen. 8 9 * http/tests/workers/service/resources/service-worker-download-worker.js: 10 * http/tests/workers/service/service-worker-download-body.https-expected.txt: Added. 11 * http/tests/workers/service/service-worker-download-body.https.html: Added. 12 * http/tests/workers/service/service-worker-download-stream.https-expected.txt: Added. 13 * http/tests/workers/service/service-worker-download-stream.https.html: Added. 14 * http/tests/workers/service/service-worker-download.https-expected.txt: 15 * http/tests/workers/service/service-worker-download.https.html: 16 * http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https-expected.txt: Added. 17 * http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https.html: Added. 18 * http/wpt/service-workers/fetch-service-worker-preload-download.https-expected.txt: Added. 19 * http/wpt/service-workers/fetch-service-worker-preload-download.https.html: Added. 20 * http/wpt/service-workers/fetch-service-worker-preload-worker.js: 21 * http/wpt/service-workers/resources/fetch-service-worker-preload-script.py: 22 * platform/ios/http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https-expected.txt: Added. 23 * platform/ios/http/wpt/service-workers/fetch-service-worker-preload-download.https-expected.txt: Added. 24 1 25 2021-12-13 Martin Robinson <mrobinson@webkit.org> 2 26 -
trunk/LayoutTests/http/tests/workers/service/resources/service-worker-download-worker.js
r228551 r286944 1 1 self.addEventListener("fetch", (event) => { 2 if (event.request.url.includes("download-body")) { 3 const response = new Response("a download body", {"headers" : [["Content-Type", "application/binary"]]}); 4 event.respondWith(response); 5 return; 6 } 7 if (event.request.url.includes("download-stream")) { 8 const stream = new ReadableStream({ 9 start: (controller) => { 10 const encoder = new TextEncoder(); 11 controller.enqueue(encoder.encode("a first chunk, ")); 12 setTimeout(() => { controller.enqueue(encoder.encode("then a second chunk")); }, 100); 13 setTimeout(() => { controller.close(); }, 200); 14 } 15 }); 16 const response = new Response(stream, {"headers" : [["Content-Type", "application/binary"]]}); 17 event.respondWith(response); 18 return; 19 } 2 20 event.respondWith(fetch(event.request.url)); 3 21 }); -
trunk/LayoutTests/http/tests/workers/service/service-worker-download-body.https.html
r286943 r286944 8 8 testRunner.dumpAsText(); 9 9 testRunner.setShouldLogDownloadCallbacks(true); 10 testRunner.setShouldLogDownloadSize(true); 10 11 testRunner.waitUntilDownloadFinished(); 11 12 testRunner.setShouldDownloadUndisplayableMIMETypes(true); … … 15 16 { 16 17 await interceptedFrame("resources/service-worker-download-worker.js", "/workers/service/resources/"); 17 window.location = "/workers/service/resources/download-b inary.py";18 window.location = "/workers/service/resources/download-body"; 18 19 } 19 20 doTest(); -
trunk/LayoutTests/http/tests/workers/service/service-worker-download-stream.https.html
r286943 r286944 8 8 testRunner.dumpAsText(); 9 9 testRunner.setShouldLogDownloadCallbacks(true); 10 testRunner.setShouldLogDownloadSize(true); 10 11 testRunner.waitUntilDownloadFinished(); 11 12 testRunner.setShouldDownloadUndisplayableMIMETypes(true); … … 15 16 { 16 17 await interceptedFrame("resources/service-worker-download-worker.js", "/workers/service/resources/"); 17 window.location = "/workers/service/resources/download- binary.py";18 window.location = "/workers/service/resources/download-stream"; 18 19 } 19 20 doTest(); -
trunk/LayoutTests/http/tests/workers/service/service-worker-download.https-expected.txt
r274768 r286944 1 1 Download started. 2 2 Downloading URL with suggested filename "download-binary.py" 3 Download size: 9. 3 4 Download completed. 4 5 -
trunk/LayoutTests/http/tests/workers/service/service-worker-download.https.html
r274768 r286944 8 8 testRunner.dumpAsText(); 9 9 testRunner.setShouldLogDownloadCallbacks(true); 10 testRunner.setShouldLogDownloadSize(true); 10 11 testRunner.waitUntilDownloadFinished(); 11 12 testRunner.setShouldDownloadUndisplayableMIMETypes(true); -
trunk/LayoutTests/http/wpt/service-workers/fetch-service-worker-preload-worker.js
r286361 r286944 24 24 25 25 self.addEventListener('fetch', (event) => { 26 if (event.request.url.includes("no-fetch-event-handling")) 27 return; 26 28 event.respondWith(fetch(event.request)); 27 29 }); -
trunk/LayoutTests/http/wpt/service-workers/resources/fetch-service-worker-preload-script.py
r286361 r286944 32 32 value = b"nothing" 33 33 response.headers.set(b"Cache-Control", b"no-cache") 34 35 if b"download" in request.GET: 36 response.headers.set(b"Content-Type", b"text/vcard") 37 return value.decode() 38 34 39 response.headers.set(b"Content-Type", b"text/html") 35 40 return "<html><body><script>window.value = '%s';</script></body></html>" % value.decode() -
trunk/Source/WebCore/ChangeLog
r286943 r286944 1 2021-12-13 Youenn Fablet <youenn@apple.com> 2 3 Fix ServiceWorker downloads 4 https://bugs.webkit.org/show_bug.cgi?id=202142 5 <rdar://problem/55721934> 6 7 Reviewed by Alex Christensen. 8 9 Add API to ask the fetch task to become a download. 10 11 Tests: http/tests/workers/service/service-worker-download-body.https.html 12 http/tests/workers/service/service-worker-download-stream.https.html 13 http/wpt/service-workers/fetch-service-worker-preload-download-through-direct-preload.https.html 14 http/wpt/service-workers/fetch-service-worker-preload-download.https.html 15 16 * workers/service/context/ServiceWorkerFetch.h: 17 * workers/service/context/ServiceWorkerThreadProxy.cpp: 18 * workers/service/context/ServiceWorkerThreadProxy.h: 19 1 20 2021-12-13 Kimmo Kinnunen <kkinnunen@apple.com> 2 21 -
trunk/Source/WebCore/workers/service/context/ServiceWorkerFetch.h
r286419 r286944 59 59 virtual void cancel() = 0; 60 60 virtual void continueDidReceiveResponse() = 0; 61 virtual void convertFetchToDownload() = 0; 61 62 }; 62 63 -
trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.cpp
r286419 r286944 243 243 } 244 244 245 246 void ServiceWorkerThreadProxy::convertFetchToDownload(SWServerConnectionIdentifier connectionIdentifier, FetchIdentifier fetchIdentifier) 247 { 248 RELEASE_LOG(ServiceWorker, "ServiceWorkerThreadProxy::convertFetchToDownload %llu", fetchIdentifier.toUInt64()); 249 250 auto client = m_ongoingFetchTasks.take(std::make_pair(connectionIdentifier, fetchIdentifier)); 251 if (!client) 252 return; 253 254 postTaskForModeToWorkerOrWorkletGlobalScope([client = Ref { *client }] (auto&) { 255 client->convertFetchToDownload(); 256 }, WorkerRunLoop::defaultMode()); 257 } 258 245 259 void ServiceWorkerThreadProxy::continueDidReceiveFetchResponse(SWServerConnectionIdentifier connectionIdentifier, FetchIdentifier fetchIdentifier) 246 260 { -
trunk/Source/WebCore/workers/service/context/ServiceWorkerThreadProxy.h
r286419 r286944 78 78 WEBCORE_EXPORT void startFetch(SWServerConnectionIdentifier, FetchIdentifier, Ref<ServiceWorkerFetch::Client>&&, std::optional<ScriptExecutionContextIdentifier>&&, ResourceRequest&&, String&& referrer, FetchOptions&&, bool isServiceWorkerNavigationPreloadEnabled); 79 79 WEBCORE_EXPORT void cancelFetch(SWServerConnectionIdentifier, FetchIdentifier); 80 WEBCORE_EXPORT void convertFetchToDownload(SWServerConnectionIdentifier, FetchIdentifier); 80 81 WEBCORE_EXPORT void continueDidReceiveFetchResponse(SWServerConnectionIdentifier, FetchIdentifier); 81 82 WEBCORE_EXPORT void removeFetch(SWServerConnectionIdentifier, FetchIdentifier); -
trunk/Source/WebKit/CMakeLists.txt
r286601 r286944 198 198 NetworkProcess/NetworkSocketStream 199 199 200 NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask 200 201 NetworkProcess/ServiceWorker/ServiceWorkerFetchTask 201 202 NetworkProcess/ServiceWorker/WebSWServerConnection -
trunk/Source/WebKit/ChangeLog
r286943 r286944 1 2021-12-13 Youenn Fablet <youenn@apple.com> 2 3 Fix ServiceWorker downloads 4 https://bugs.webkit.org/show_bug.cgi?id=202142 5 <rdar://problem/55721934> 6 7 Reviewed by Alex Christensen. 8 9 Add ServiceWorkerDownloadTask class as a NetworkDataTask whose purpose is to download the content of a response given from service worker. 10 Add a way to convert ServiceWorkerFetchTask into downloads: 11 - If a preload is ongoing and can be used for navigation, use this preload as the download NetworkLoad. 12 - If a preload does not exist, create a ServiceWorkerDownloadTask and a corresponding NetworkLoad to start downloading the service worker response data. 13 When creating a ServiceWorkerDownloadTask, the WebServiceWorkerFetchTaskClient will be notified to start sending response data using ServiceWorkerDownloadTask 14 instead of ServiceWorkerFetchTask messages. This allows cancelling the ServiceWorkerFetchTask without any issue. 15 16 Note that the service worker lifetime is not augmented: if the service worker exits due to all its clients being closed, the download will fail. 17 18 Increase unified build files to 112. 19 20 * CMakeLists.txt: 21 * DerivedSources-input.xcfilelist: 22 * DerivedSources-output.xcfilelist: 23 * DerivedSources.make: 24 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 25 * NetworkProcess/NetworkLoad.cpp: 26 * NetworkProcess/NetworkLoad.h: 27 * NetworkProcess/NetworkResourceLoader.cpp: 28 * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp: Added. 29 * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.h: Added. 30 * NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in: Added. 31 * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp: 32 * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h: 33 * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp: 34 * NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h: 35 * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: 36 * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h: 37 * NetworkProcess/storage/NetworkStorageManager.cpp: 38 * Scripts/generate-unified-sources.sh: 39 * Scripts/webkit/messages.py: 40 * Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp: 41 (WebKit::TestWithCVPixelBuffer::didReceiveMessage): 42 * Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp: 43 (WebKit::TestWithIfMessage::didReceiveMessage): 44 * Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp: 45 (WebKit::TestWithImageData::didReceiveMessage): 46 * Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp: 47 (WebKit::TestWithLegacyReceiver::didReceiveTestWithLegacyReceiverMessage): 48 * Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp: 49 (WebKit::TestWithSemaphore::didReceiveMessage): 50 * Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp: 51 (WebKit::TestWithStreamBuffer::didReceiveMessage): 52 * Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp: 53 (WebKit::TestWithStream::didReceiveStreamMessage): 54 * Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp: 55 (WebKit::TestWithoutAttributes::didReceiveMessage): 56 * UIProcess/WebPageProxy.cpp: 57 (WebKit::WebPageProxy::receivedPolicyDecision): 58 * UIProcess/WebProcessPool.cpp: 59 (WebKit::WebProcessPool::download): 60 (WebKit::WebProcessPool::createDownloadProxy): 61 * Sources.txt: 62 * UnifiedSources-output.xcfilelist: 63 * WebKit.xcodeproj/project.pbxproj: 64 * WebProcess/Storage/WebSWContextManagerConnection.cpp: 65 * WebProcess/Storage/WebSWContextManagerConnection.h: 66 * WebProcess/Storage/WebSWContextManagerConnection.messages.in: 67 * WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp: 68 * WebProcess/Storage/WebServiceWorkerFetchTaskClient.h: 69 1 70 2021-12-13 Kimmo Kinnunen <kkinnunen@apple.com> 2 71 -
trunk/Source/WebKit/DerivedSources-input.xcfilelist
r286601 r286944 88 88 $(PROJECT_DIR)/NetworkProcess/NetworkSocketChannel.messages.in 89 89 $(PROJECT_DIR)/NetworkProcess/NetworkSocketStream.messages.in 90 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.messages.in 90 91 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.messages.in 91 92 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in -
trunk/Source/WebKit/DerivedSources-output.xcfilelist
r286601 r286944 397 397 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/SecItemShimProxyMessages.h 398 398 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/SecItemShimProxyMessagesReplies.h 399 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/ServiceWorkerDownloadTaskMessageReceiver.cpp 400 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/ServiceWorkerDownloadTaskMessages.h 401 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/ServiceWorkerDownloadTaskMessagesReplies.h 399 402 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/ServiceWorkerFetchTaskMessageReceiver.cpp 400 403 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/ServiceWorkerFetchTaskMessages.h -
trunk/Source/WebKit/DerivedSources.make
r286601 r286944 133 133 NetworkProcess/NetworkSocketChannel \ 134 134 NetworkProcess/ServiceWorker/WebSWServerConnection \ 135 NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask \ 135 136 NetworkProcess/ServiceWorker/ServiceWorkerFetchTask \ 136 137 NetworkProcess/ServiceWorker/WebSWServerToContextConnection \ -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r286012 r286944 696 696 RELEASE_ASSERT(RunLoop::isMain()); 697 697 698 // In case a response is served from service worker, we do not have yet the ability to convert the load. 699 if (!mainResourceLoadIdentifier || response.source() == ResourceResponse::Source::ServiceWorker) { 698 if (!mainResourceLoadIdentifier) { 700 699 m_networkProcess->downloadManager().startDownload(m_sessionID, downloadID, request, isNavigatingToAppBoundDomain); 701 700 return; -
trunk/Source/WebKit/NetworkProcess/NetworkLoad.cpp
r284301 r286944 57 57 } 58 58 59 NetworkLoad::NetworkLoad(NetworkLoadClient& client, NetworkSession& networkSession, const Function<RefPtr<NetworkDataTask>(NetworkDataTaskClient&)>& createTask) 60 : m_client(client) 61 , m_networkProcess(networkSession.networkProcess()) 62 , m_task(createTask(*this)) 63 { 64 } 65 59 66 void NetworkLoad::start() 60 67 { -
trunk/Source/WebKit/NetworkProcess/NetworkLoad.h
r284301 r286944 47 47 public: 48 48 NetworkLoad(NetworkLoadClient&, WebCore::BlobRegistryImpl*, NetworkLoadParameters&&, NetworkSession&); 49 NetworkLoad(NetworkLoadClient&, NetworkSession&, const Function<RefPtr<NetworkDataTask>(NetworkDataTaskClient&)>&); 49 50 ~NetworkLoad(); 50 51 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r286937 r286944 485 485 LOADER_RELEASE_LOG("convertToDownload: (downloadID=%" PRIu64 ", hasNetworkLoad=%d, hasResponseCompletionHandler=%d)", downloadID.toUInt64(), !!m_networkLoad, !!m_responseCompletionHandler); 486 486 487 #if ENABLE(SERVICE_WORKER) 488 if (m_serviceWorkerFetchTask && m_serviceWorkerFetchTask->convertToDownload(m_connection->networkProcess().downloadManager(), downloadID, request, response)) 489 return; 490 #endif 491 487 492 // This can happen if the resource came from the disk cache. 488 493 if (!m_networkLoad) { -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp
r286774 r286944 32 32 #include "FormDataReference.h" 33 33 #include "Logging.h" 34 #include "NetworkLoad.h" 34 35 #include "NetworkProcess.h" 35 36 #include "NetworkResourceLoader.h" … … 303 304 void ServiceWorkerFetchTask::cancelFromClient() 304 305 { 305 SWFETCH_RELEASE_LOG("cancelFromClient:"); 306 SWFETCH_RELEASE_LOG("cancelFromClient: isDone=%d", m_isDone); 307 if (m_isDone) 308 return; 309 306 310 sendToServiceWorker(Messages::WebSWContextManagerConnection::CancelFetch { m_serverConnectionIdentifier, m_serviceWorkerIdentifier, m_fetchIdentifier }); 307 311 } … … 419 423 } 420 424 425 bool ServiceWorkerFetchTask::convertToDownload(DownloadManager& manager, DownloadID downloadID, const ResourceRequest& request, const ResourceResponse& response) 426 { 427 if (m_preloader && !m_preloader->isServiceWorkerNavigationPreloadEnabled()) 428 return m_preloader->convertToDownload(manager, downloadID, request, response); 429 430 auto* session = this->session(); 431 if (!session || !m_serviceWorkerConnection) 432 return false; 433 434 m_isDone = true; 435 436 // FIXME: We might want to keep the service worker alive until the download ends. 437 RefPtr<ServiceWorkerDownloadTask> serviceWorkerDownloadTask; 438 auto serviceWorkerDownloadLoad = makeUnique<NetworkLoad>(m_loader, *session, [&](auto& client) { 439 serviceWorkerDownloadTask = ServiceWorkerDownloadTask::create(*session, client, *m_serviceWorkerConnection, m_serviceWorkerIdentifier, m_serverConnectionIdentifier, m_fetchIdentifier, request, downloadID); 440 return serviceWorkerDownloadTask.copyRef(); 441 }); 442 443 ResponseCompletionHandler completionHandler = [serviceWorkerDownloadTask = WTFMove(serviceWorkerDownloadTask)](auto policy) { 444 if (policy != PolicyAction::Download) { 445 serviceWorkerDownloadTask->stop(); 446 return; 447 } 448 serviceWorkerDownloadTask->start(); 449 }; 450 451 manager.convertNetworkLoadToDownload(downloadID, WTFMove(serviceWorkerDownloadLoad), WTFMove(completionHandler), { }, request, response); 452 return true; 453 } 454 421 455 } // namespace WebKit 422 456 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.h
r286361 r286944 29 29 30 30 #include "DataReference.h" 31 #include "DownloadID.h" 31 32 #include <WebCore/FetchIdentifier.h> 32 33 #include <WebCore/ResourceRequest.h> … … 55 56 56 57 namespace WebKit { 58 class DownloadManager; 57 59 class NetworkResourceLoader; 58 60 class NetworkSession; … … 85 87 void cannotHandle(); 86 88 void contextClosed(); 89 90 bool convertToDownload(DownloadManager&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&); 87 91 88 92 private: -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp
r286937 r286944 29 29 #if ENABLE(SERVICE_WORKER) 30 30 31 #include "DownloadManager.h" 31 32 #include "Logging.h" 32 33 #include "NetworkCache.h" … … 243 244 } 244 245 246 bool ServiceWorkerNavigationPreloader::convertToDownload(DownloadManager& manager, DownloadID downloadID, const WebCore::ResourceRequest& request, const WebCore::ResourceResponse& response) 247 { 248 if (!m_networkLoad) 249 return false; 250 251 manager.convertNetworkLoadToDownload(downloadID, std::exchange(m_networkLoad, nullptr), WTFMove(m_responseCompletionHandler), { }, request, response); 252 return true; 253 } 254 245 255 } // namespace WebKit 246 256 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.h
r286937 r286944 28 28 #if ENABLE(SERVICE_WORKER) 29 29 30 #include "DownloadID.h" 30 31 #include "NetworkCacheEntry.h" 31 32 #include "NetworkLoadClient.h" … … 40 41 namespace WebKit { 41 42 43 class DownloadManager; 42 44 class NetworkLoad; 43 45 class NetworkSession; … … 60 62 const WebCore::NetworkLoadMetrics& networkLoadMetrics() const { return m_networkLoadMetrics; } 61 63 bool isServiceWorkerNavigationPreloadEnabled() const { return m_state.enabled; } 64 65 bool convertToDownload(DownloadManager&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&); 62 66 63 67 private: -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp
r286012 r286944 34 34 #include "NetworkProcess.h" 35 35 #include "NetworkProcessProxyMessages.h" 36 #include "ServiceWorkerDownloadTaskMessages.h" 36 37 #include "ServiceWorkerFetchTask.h" 37 38 #include "ServiceWorkerFetchTaskMessages.h" … … 59 60 for (auto& fetch : fetches.values()) 60 61 fetch->contextClosed(); 62 63 auto downloads = WTFMove(m_ongoingDownloads); 64 for (auto& download : downloads.values()) 65 download->contextClosed(); 61 66 62 67 if (m_server && m_server->contextConnectionForRegistrableDomain(registrableDomain()) == this) … … 198 203 } 199 204 205 void WebSWServerToContextConnection::registerDownload(ServiceWorkerDownloadTask& task) 206 { 207 ASSERT(!m_ongoingDownloads.contains(task.fetchIdentifier())); 208 m_ongoingDownloads.add(task.fetchIdentifier(), task); 209 m_connection.connection().addThreadMessageReceiver(Messages::ServiceWorkerDownloadTask::messageReceiverName(), &task, task.fetchIdentifier().toUInt64()); 210 } 211 212 void WebSWServerToContextConnection::unregisterDownload(ServiceWorkerDownloadTask& task) 213 { 214 m_ongoingDownloads.remove(task.fetchIdentifier()); 215 m_connection.connection().removeThreadMessageReceiver(Messages::ServiceWorkerDownloadTask::messageReceiverName(), task.fetchIdentifier().toUInt64()); 216 } 217 200 218 WebCore::ProcessIdentifier WebSWServerToContextConnection::webProcessIdentifier() const 201 219 { -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h
r286012 r286944 30 30 #include "MessageReceiver.h" 31 31 #include "MessageSender.h" 32 #include "ServiceWorkerDownloadTask.h" 32 33 #include "ServiceWorkerFetchTask.h" 33 34 #include "WebPageProxyIdentifier.h" … … 75 76 void registerFetch(ServiceWorkerFetchTask&); 76 77 void unregisterFetch(ServiceWorkerFetchTask&); 78 void registerDownload(ServiceWorkerDownloadTask&); 79 void unregisterDownload(ServiceWorkerDownloadTask&); 77 80 78 81 WebCore::ProcessIdentifier webProcessIdentifier() const; 82 NetworkProcess& networkProcess() { return m_connection.networkProcess(); } 79 83 80 84 private: … … 104 108 WeakPtr<WebCore::SWServer> m_server; 105 109 HashMap<WebCore::FetchIdentifier, WeakPtr<ServiceWorkerFetchTask>> m_ongoingFetches; 110 HashMap<WebCore::FetchIdentifier, WeakPtr<ServiceWorkerDownloadTask>> m_ongoingDownloads; 106 111 bool m_isThrottleable { true }; 107 112 WebPageProxyIdentifier m_webPageProxyID; -
trunk/Source/WebKit/NetworkProcess/storage/LocalStorageManager.h
r286936 r286944 26 26 #pragma once 27 27 28 #include "Connection.h" 28 29 #include "StorageAreaIdentifier.h" 30 #include <wtf/WorkQueue.h> 29 31 30 32 namespace WebCore { -
trunk/Source/WebKit/Scripts/generate-unified-sources.sh
r286936 r286944 15 15 fi 16 16 17 UnifiedSourceCppFileCount=11 217 UnifiedSourceCppFileCount=115 18 18 UnifiedSourceMmFileCount=80 19 19 -
trunk/Source/WebKit/Scripts/webkit/messages.py
r286825 r286944 1127 1127 result.append(' return;\n') 1128 1128 result.append('#endif // ENABLE(IPC_TESTING_API)\n') 1129 result.append(' ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled stream message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());\n')1129 result.append(' ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled stream message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID());\n') 1130 1130 result.append('}\n') 1131 1131 elif async_messages or receiver.has_attribute(WANTS_DISPATCH_MESSAGE_ATTRIBUTE) or receiver.has_attribute(WANTS_ASYNC_DISPATCH_MESSAGE_ATTRIBUTE): … … 1150 1150 result.append(' return;\n') 1151 1151 result.append('#endif // ENABLE(IPC_TESTING_API)\n') 1152 result.append(' ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());\n')1152 result.append(' ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID());\n') 1153 1153 result.append('}\n') 1154 1154 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithCVPixelBufferMessageReceiver.cpp
r286005 r286944 54 54 return; 55 55 #endif // ENABLE(IPC_TESTING_API) 56 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());56 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 57 57 } 58 58 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithIfMessageMessageReceiver.cpp
r282755 r286944 55 55 return; 56 56 #endif // ENABLE(IPC_TESTING_API) 57 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());57 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 58 58 } 59 59 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithImageDataMessageReceiver.cpp
r282755 r286944 47 47 return; 48 48 #endif // ENABLE(IPC_TESTING_API) 49 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());49 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 50 50 } 51 51 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithLegacyReceiverMessageReceiver.cpp
r283702 r286944 136 136 return; 137 137 #endif // ENABLE(IPC_TESTING_API) 138 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());138 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 139 139 } 140 140 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithSemaphoreMessageReceiver.cpp
r282755 r286944 44 44 return; 45 45 #endif // ENABLE(IPC_TESTING_API) 46 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());46 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 47 47 } 48 48 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithStreamBufferMessageReceiver.cpp
r282755 r286944 44 44 return; 45 45 #endif // ENABLE(IPC_TESTING_API) 46 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());46 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 47 47 } 48 48 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithStreamMessageReceiver.cpp
r282115 r286944 61 61 return; 62 62 #endif // ENABLE(IPC_TESTING_API) 63 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled stream message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());63 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled stream message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 64 64 } 65 65 -
trunk/Source/WebKit/Scripts/webkit/tests/TestWithoutAttributesMessageReceiver.cpp
r283702 r286944 136 136 return; 137 137 #endif // ENABLE(IPC_TESTING_API) 138 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, description(decoder.messageName()), decoder.destinationID());138 ASSERT_NOT_REACHED_WITH_MESSAGE("Unhandled message %s to %" PRIu64, IPC::description(decoder.messageName()), decoder.destinationID()); 139 139 } 140 140 -
trunk/Source/WebKit/Sources.txt
r286936 r286944 134 134 NetworkProcess/PrivateClickMeasurement/PrivateClickMeasurementManagerProxy.cpp 135 135 136 NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp @no-unify 136 NetworkProcess/ServiceWorker/ServiceWorkerDownloadTask.cpp 137 NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp 137 138 NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp 138 139 NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp … … 881 882 RemoteTextureViewMessageReceiver.cpp 882 883 RemoteWebLockRegistryMessageReceiver.cpp 884 ServiceWorkerDownloadTaskMessageReceiver.cpp 883 885 WebBroadcastChannelRegistryMessageReceiver.cpp 884 886 WebLockRegistryProxyMessageReceiver.cpp -
trunk/Source/WebKit/UnifiedSources-output.xcfilelist
r286936 r286944 19 19 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource111.cpp 20 20 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource112.cpp 21 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource113.cpp 22 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource114.cpp 23 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource115.cpp 21 24 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource12-mm.mm 22 25 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/unified-sources/UnifiedSource12.cpp -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r286943 r286944 396 396 1CAECB6527465AE400AB78D0 /* UnifiedSource109.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CAECB5D27465AE300AB78D0 /* UnifiedSource109.cpp */; }; 397 397 1CAECB6627465AE400AB78D0 /* UnifiedSource111.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CAECB5E27465AE300AB78D0 /* UnifiedSource111.cpp */; }; 398 3CAECB6627465AE400AB78D0 /* UnifiedSource113.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CAECB5E27465AE300AB78D0 /* UnifiedSource113.cpp */; }; 399 4CAECB6627465AE400AB78D0 /* UnifiedSource114.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4CAECB5E27465AE300AB78D0 /* UnifiedSource114.cpp */; }; 400 5CAECB6627465AE400AB78D0 /* UnifiedSource115.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CAECB5E27465AE300AB78D0 /* UnifiedSource115.cpp */; }; 398 401 1CAECB6727465AE400AB78D0 /* UnifiedSource108.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CAECB5F27465AE300AB78D0 /* UnifiedSource108.cpp */; }; 399 402 1CAECB6827465AE400AB78D0 /* UnifiedSource110.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CAECB6027465AE300AB78D0 /* UnifiedSource110.cpp */; }; … … 882 885 41DC459C1E3DBB2800B11F51 /* LibWebRTCSocketClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DC459A1E3DBB2400B11F51 /* LibWebRTCSocketClient.h */; }; 883 886 41DD72AB2682167300A90C71 /* NWSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DD72AA2682167300A90C71 /* NWSPI.h */; }; 884 41DE7C6C22278F1E00532B65 /* ServiceWorkerFetchTask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41518536222704F6005430C6 /* ServiceWorkerFetchTask.cpp */; };885 887 41E0A7CB23B645CD00561060 /* WebSocketChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 417915AC2256BB7400D6F97E /* WebSocketChannel.cpp */; }; 886 888 41E242E026E0C908009A8C64 /* NetworkRTCUtilitiesCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41E242DF26E0C904009A8C64 /* NetworkRTCUtilitiesCocoa.mm */; }; … … 3217 3219 1CAECB5D27465AE300AB78D0 /* UnifiedSource109.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource109.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource109.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; 3218 3220 1CAECB5E27465AE300AB78D0 /* UnifiedSource111.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource111.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource111.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; 3221 3CAECB5E27465AE300AB78D0 /* UnifiedSource113.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource113.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource113.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; 3222 4CAECB5E27465AE300AB78D0 /* UnifiedSource114.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource114.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource114.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; 3223 5CAECB5E27465AE300AB78D0 /* UnifiedSource115.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource115.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource115.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; 3219 3224 1CAECB5F27465AE300AB78D0 /* UnifiedSource108.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource108.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource108.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; 3220 3225 1CAECB6027465AE300AB78D0 /* UnifiedSource110.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UnifiedSource110.cpp; path = "DerivedSources/WebKit/unified-sources/UnifiedSource110.cpp"; sourceTree = BUILT_PRODUCTS_DIR; }; … … 4189 4194 41FCD6BE23CE044000C62567 /* RemoteSampleBufferDisplayLayerManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteSampleBufferDisplayLayerManager.cpp; sourceTree = "<group>"; }; 4190 4195 41FCD6BF23CE044000C62567 /* RemoteSampleBufferDisplayLayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteSampleBufferDisplayLayerManager.h; sourceTree = "<group>"; }; 4196 41FFD2DA275A560B00501BBF /* ServiceWorkerDownloadTask.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ServiceWorkerDownloadTask.cpp; sourceTree = "<group>"; }; 4197 41FFD2DB275A560C00501BBF /* ServiceWorkerDownloadTask.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerDownloadTask.h; sourceTree = "<group>"; }; 4198 41FFD2DC275A6A9400501BBF /* ServiceWorkerDownloadTask.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = ServiceWorkerDownloadTask.messages.in; sourceTree = "<group>"; }; 4191 4199 4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedMemoryCocoa.cpp; sourceTree = "<group>"; }; 4192 4200 4459984122833E6000E61373 /* SyntheticEditingCommandType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SyntheticEditingCommandType.h; sourceTree = "<group>"; }; … … 8257 8265 1CAECB5E27465AE300AB78D0 /* UnifiedSource111.cpp */, 8258 8266 93E799D12760AA5A0074008A /* UnifiedSource112.cpp */, 8267 3CAECB5E27465AE300AB78D0 /* UnifiedSource113.cpp */, 8268 4CAECB5E27465AE300AB78D0 /* UnifiedSource114.cpp */, 8269 5CAECB5E27465AE300AB78D0 /* UnifiedSource115.cpp */, 8259 8270 ); 8260 8271 name = "unified-sources"; … … 10422 10433 isa = PBXGroup; 10423 10434 children = ( 10435 41FFD2DA275A560B00501BBF /* ServiceWorkerDownloadTask.cpp */, 10436 41FFD2DB275A560C00501BBF /* ServiceWorkerDownloadTask.h */, 10437 41FFD2DC275A6A9400501BBF /* ServiceWorkerDownloadTask.messages.in */, 10424 10438 41518536222704F6005430C6 /* ServiceWorkerFetchTask.cpp */, 10425 10439 41518535222704F5005430C6 /* ServiceWorkerFetchTask.h */, … … 15332 15346 7BCF70DE2615D06E00E4FB70 /* ScopedRenderingResourcesRequestCocoa.mm in Sources */, 15333 15347 E18E6917169B667B009B6670 /* SecItemShimProxyMessageReceiver.cpp in Sources */, 15334 41DE7C6C22278F1E00532B65 /* ServiceWorkerFetchTask.cpp in Sources */,15335 15348 2D92A787212B6AB100F493FD /* ShareableBitmap.cpp in Sources */, 15336 15349 2DC18FEBF337B9671C88E3CD /* SharedBufferCopy.cpp in Sources */, … … 15544 15557 1CAECB6627465AE400AB78D0 /* UnifiedSource111.cpp in Sources */, 15545 15558 93E799D22760AA5B0074008A /* UnifiedSource112.cpp in Sources */, 15559 3CAECB6627465AE400AB78D0 /* UnifiedSource113.cpp in Sources */, 15560 4CAECB6627465AE400AB78D0 /* UnifiedSource114.cpp in Sources */, 15561 5CAECB6627465AE400AB78D0 /* UnifiedSource115.cpp in Sources */, 15546 15562 E38A1FC023A551BF00D2374F /* UserInterfaceIdiom.mm in Sources */, 15547 15563 CD491B0D1E732E4D00009066 /* UserMediaCaptureManagerMessageReceiver.cpp in Sources */, -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.cpp
r286656 r286944 394 394 } 395 395 396 void WebSWContextManagerConnection::convertFetchToDownload(SWServerConnectionIdentifier serverConnectionIdentifier, ServiceWorkerIdentifier serviceWorkerIdentifier, FetchIdentifier fetchIdentifier) 397 { 398 if (auto* serviceWorkerThreadProxy = SWContextManager::singleton().serviceWorkerThreadProxy(serviceWorkerIdentifier)) 399 serviceWorkerThreadProxy->convertFetchToDownload(serverConnectionIdentifier, fetchIdentifier); 400 } 401 396 402 void WebSWContextManagerConnection::didFailHeartBeatCheck(ServiceWorkerIdentifier serviceWorkerIdentifier) 397 403 { -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.h
r286419 r286944 107 107 void close(); 108 108 void setThrottleState(bool isThrottleable); 109 void convertFetchToDownload(WebCore::SWServerConnectionIdentifier, WebCore::ServiceWorkerIdentifier, WebCore::FetchIdentifier); 110 void cancelFetchDownload(WebCore::ServiceWorkerIdentifier, WebCore::FetchIdentifier); 109 111 110 112 Ref<IPC::Connection> m_connectionToNetworkProcess; -
trunk/Source/WebKit/WebProcess/Storage/WebSWContextManagerConnection.messages.in
r286419 r286944 44 44 Close() 45 45 SetThrottleState(bool isThrottleable) 46 47 ConvertFetchToDownload(WebCore::SWServerConnectionIdentifier serverConnectionIdentifier, WebCore::ServiceWorkerIdentifier serviceWorkerIdentifier, WebCore::FetchIdentifier identifier) 46 48 } 47 49 -
trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp
r284095 r286944 31 31 #include "FormDataReference.h" 32 32 #include "Logging.h" 33 #include "ServiceWorkerDownloadTaskMessages.h" 33 34 #include "ServiceWorkerFetchTaskMessages.h" 34 35 #include "SharedBufferDataReference.h" … … 85 86 } 86 87 87 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { buffer.get(), static_cast<int64_t>(buffer->size()) }, m_fetchIdentifier); 88 if (m_isDownload) 89 m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveData { buffer.get(), static_cast<int64_t>(buffer->size()) }, m_fetchIdentifier); 90 else 91 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { buffer.get(), static_cast<int64_t>(buffer->size()) }, m_fetchIdentifier); 88 92 } 89 93 … … 108 112 URL blobURL = formData->asBlobURL(); 109 113 if (blobURL.isNull()) { 110 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveFormData { IPC::FormDataReference { WTFMove(formData) } }, m_fetchIdentifier); 114 if (m_isDownload) 115 m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveFormData { IPC::FormDataReference { WTFMove(formData) } }, m_fetchIdentifier); 116 else 117 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveFormData { IPC::FormDataReference { WTFMove(formData) } }, m_fetchIdentifier); 111 118 return; 112 119 } … … 136 143 return; 137 144 138 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { { data, size }, static_cast<int64_t>(size) }, m_fetchIdentifier); 145 if (m_isDownload) 146 m_connection->send(Messages::ServiceWorkerDownloadTask::DidReceiveData { { data, size }, static_cast<int64_t>(size) }, m_fetchIdentifier); 147 else 148 m_connection->send(Messages::ServiceWorkerFetchTask::DidReceiveData { { data, size }, static_cast<int64_t>(size) }, m_fetchIdentifier); 139 149 } 140 150 … … 158 168 } 159 169 160 m_connection->send(Messages::ServiceWorkerFetchTask::DidFail { error }, m_fetchIdentifier); 170 if (m_isDownload) 171 m_connection->send(Messages::ServiceWorkerDownloadTask::DidFail { error }, m_fetchIdentifier); 172 else 173 m_connection->send(Messages::ServiceWorkerFetchTask::DidFail { error }, m_fetchIdentifier); 161 174 162 175 cleanup(); … … 175 188 } 176 189 177 m_connection->send(Messages::ServiceWorkerFetchTask::DidFinish { }, m_fetchIdentifier); 190 if (m_isDownload) 191 m_connection->send(Messages::ServiceWorkerDownloadTask::DidFinish { }, m_fetchIdentifier); 192 else 193 m_connection->send(Messages::ServiceWorkerFetchTask::DidFinish { }, m_fetchIdentifier); 178 194 179 195 cleanup(); … … 193 209 { 194 210 m_connection = nullptr; 211 } 212 213 void WebServiceWorkerFetchTaskClient::convertFetchToDownload() 214 { 215 m_isDownload = true; 216 continueDidReceiveResponse(); 195 217 } 196 218 -
trunk/Source/WebKit/WebProcess/Storage/WebServiceWorkerFetchTaskClient.h
r284075 r286944 57 57 void cancel() final; 58 58 void continueDidReceiveResponse() final; 59 void convertFetchToDownload() final; 59 60 60 61 void cleanup(); … … 85 86 std::variant<std::nullptr_t, Ref<WebCore::SharedBuffer>, Ref<WebCore::FormData>, UniqueRef<WebCore::ResourceError>> m_responseData; 86 87 bool m_didFinish { false }; 88 bool m_isDownload { false }; 87 89 }; 88 90 -
trunk/Tools/ChangeLog
r286943 r286944 1 2021-12-13 Youenn Fablet <youenn@apple.com> 2 3 Fix ServiceWorker downloads 4 https://bugs.webkit.org/show_bug.cgi?id=202142 5 <rdar://problem/55721934> 6 7 Reviewed by Alex Christensen. 8 9 Add test runner API to log the total download size. 10 This helps ensuring that service worker loads are correctly downloaded and do not rely on networking. 11 12 * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: 13 * WebKitTestRunner/InjectedBundle/TestRunner.cpp: 14 * WebKitTestRunner/InjectedBundle/TestRunner.h: 15 * WebKitTestRunner/TestController.cpp: 16 * WebKitTestRunner/TestController.h: 17 * WebKitTestRunner/TestInvocation.cpp: 18 1 19 2021-12-13 Kimmo Kinnunen <kkinnunen@apple.com> 2 20 -
trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
r285089 r286944 40 40 undefined waitUntilDownloadFinished(); 41 41 undefined setShouldLogDownloadCallbacks(boolean value); 42 undefined setShouldLogDownloadSize(boolean value); 42 43 43 44 const unsigned short RENDER_TREE_SHOW_ALL_LAYERS = 1; -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
r285089 r286944 1009 1009 } 1010 1010 1011 void TestRunner::setShouldLogDownloadSize(bool value) 1012 { 1013 postPageMessage("SetShouldLogDownloadSize", value); 1014 } 1015 1011 1016 void TestRunner::setAuthenticationUsername(JSStringRef username) 1012 1017 { -
trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
r285089 r286944 216 216 bool shouldFinishAfterDownload() const { return m_shouldFinishAfterDownload; } 217 217 void setShouldLogDownloadCallbacks(bool); 218 void setShouldLogDownloadSize(bool); 218 219 219 220 bool shouldAllowEditing() const { return m_shouldAllowEditing; } -
trunk/Tools/WebKitTestRunner/TestController.cpp
r285993 r286944 147 147 TestController::downloadDidReceiveAuthenticationChallenge, 148 148 TestController::decideDestinationWithSuggestedFilename, 149 nullptr, // didWriteData149 TestController::downloadDidWriteData, 150 150 TestController::downloadDidFinish, 151 151 TestController::downloadDidFail … … 1109 1109 } 1110 1110 1111 m_downloadTotalBytesWritten = { }; 1112 1111 1113 return m_doneResetting; 1112 1114 } … … 2238 2240 void TestController::downloadDidFinish(WKDownloadRef) 2239 2241 { 2242 if (m_shouldLogDownloadSize) 2243 m_currentInvocation->outputText(makeString("Download size: ", m_downloadTotalBytesWritten.value_or(0), ".\n")); 2240 2244 if (m_shouldLogDownloadCallbacks) 2241 2245 m_currentInvocation->outputText("Download completed.\n"); … … 2268 2272 { 2269 2273 static_cast<TestController*>(const_cast<void*>(clientInfo))->didReceiveAuthenticationChallenge(nullptr, authenticationChallenge); 2274 } 2275 2276 void TestController::downloadDidWriteData(long long totalBytesWritten) 2277 { 2278 if (!m_shouldLogDownloadCallbacks) 2279 return; 2280 m_downloadTotalBytesWritten = totalBytesWritten; 2281 } 2282 2283 void TestController::downloadDidWriteData(WKDownloadRef download, long long bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite, const void* clientInfo) 2284 { 2285 static_cast<TestController*>(const_cast<void*>(clientInfo))->downloadDidWriteData(totalBytesWritten); 2270 2286 } 2271 2287 -
trunk/Tools/WebKitTestRunner/TestController.h
r284575 r286944 191 191 void setShouldLogCanAuthenticateAgainstProtectionSpace(bool shouldLog) { m_shouldLogCanAuthenticateAgainstProtectionSpace = shouldLog; } 192 192 void setShouldLogDownloadCallbacks(bool shouldLog) { m_shouldLogDownloadCallbacks = shouldLog; } 193 void setShouldLogDownloadSize(bool shouldLog) { m_shouldLogDownloadSize = shouldLog; } 193 194 194 195 bool isCurrentInvocation(TestInvocation* invocation) const { return invocation == m_currentInvocation.get(); } … … 474 475 bool downloadDidReceiveServerRedirectToURL(WKDownloadRef, WKURLRequestRef); 475 476 static void downloadDidReceiveAuthenticationChallenge(WKDownloadRef, WKAuthenticationChallengeRef, const void *clientInfo); 476 477 478 void downloadDidWriteData(long long totalBytesWritten); 479 static void downloadDidWriteData(WKDownloadRef, long long bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite, const void* clientInfo); 480 477 481 static void webProcessDidTerminate(WKPageRef, WKProcessTerminationReason, const void* clientInfo); 478 482 void webProcessDidTerminate(WKProcessTerminationReason); … … 664 668 665 669 bool m_isMediaKeySystemPermissionGranted { true }; 670 671 std::optional<long long> m_downloadTotalBytesWritten; 672 bool m_shouldLogDownloadSize { false }; 666 673 }; 667 674 -
trunk/Tools/WebKitTestRunner/TestInvocation.cpp
r285168 r286944 538 538 } 539 539 540 if (WKStringIsEqualToUTF8CString(messageName, "SetShouldLogDownloadSize")) { 541 TestController::singleton().setShouldLogDownloadSize(booleanValue(messageBody)); 542 return; 543 } 544 540 545 if (WKStringIsEqualToUTF8CString(messageName, "SetAuthenticationUsername")) { 541 546 WKStringRef username = stringValue(messageBody);
Note: See TracChangeset
for help on using the changeset viewer.