Diff
Modified: trunk/LayoutTests/ChangeLog (291339 => 291340)
--- trunk/LayoutTests/ChangeLog 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/LayoutTests/ChangeLog 2022-03-16 12:52:33 UTC (rev 291340)
@@ -1,5 +1,15 @@
2022-03-16 Youenn Fablet <you...@apple.com>
+ redirectCount returns 0 when using a Service Worker
+ https://bugs.webkit.org/show_bug.cgi?id=235710
+ <rdar://problem/88432190>
+
+ Reviewed by Chris Dumez.
+
+ * http/wpt/service-workers/navigation-redirect-main-frame.https.html:
+
+2022-03-16 Youenn Fablet <you...@apple.com>
+
LayoutTests/webaudio tests are skipped in iOS
https://bugs.webkit.org/show_bug.cgi?id=237889
Modified: trunk/LayoutTests/http/wpt/service-workers/navigation-redirect-main-frame.https.html (291339 => 291340)
--- trunk/LayoutTests/http/wpt/service-workers/navigation-redirect-main-frame.https.html 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/LayoutTests/http/wpt/service-workers/navigation-redirect-main-frame.https.html 2022-03-16 12:52:33 UTC (rev 291340)
@@ -7,14 +7,19 @@
async function doTest()
{
if (window.location.hash === "#redirected") {
+ let status = "PASS";
+ if (window.performance.navigation.redirectCount !== 1)
+ status = "FAIL: redirectCount is " + window.performance.navigation.redirectCount;
+ else if (window.testRunner) {
+ if (!testRunner.didReceiveServerRedirectForProvisionalNavigation)
+ status = "FAIL: no server redirect for provisional navigation ";
+ testRunner.clearDidReceiveServerRedirectForProvisionalNavigation();
+ }
+
+ document.body.innerHTML = status;
+
if (window.testRunner)
- document.body.innerHTML = testRunner.didReceiveServerRedirectForProvisionalNavigation ? "PASS" : "FAIL";
- else
- document.body.innerHTML = "PASS";
- if (window.testRunner) {
- testRunner.clearDidReceiveServerRedirectForProvisionalNavigation();
testRunner.notifyDone();
- }
return;
}
var registration = await navigator.serviceWorker.register("navigation-redirect-main-frame-worker.js", { scope : "resources" });
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (291339 => 291340)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2022-03-16 12:52:33 UTC (rev 291340)
@@ -1,3 +1,14 @@
+2022-03-16 Youenn Fablet <you...@apple.com>
+
+ redirectCount returns 0 when using a Service Worker
+ https://bugs.webkit.org/show_bug.cgi?id=235710
+ <rdar://problem/88432190>
+
+ Reviewed by Chris Dumez.
+
+ * web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https-expected.txt:
+ * web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt:
+
2022-03-15 Commit Queue <commit-qu...@webkit.org>
Unreviewed, reverting r291282.
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https-expected.txt (291339 => 291340)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https-expected.txt 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/navigation-preload/resource-timing.https-expected.txt 2022-03-16 12:52:33 UTC (rev 291340)
@@ -1,4 +1,3 @@
+PASS Navigation Preload Resource Timing.
-FAIL Navigation Preload Resource Timing. assert_greater_than: transferSize must greater then encodedBodySize. expected a number greater than 0 but got 0
-
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt (291339 => 291340)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/redirected-response.https-expected.txt 2022-03-16 12:52:33 UTC (rev 291340)
@@ -19,7 +19,7 @@
PASS mode: "manual", manually-generated redirect response
PASS mode: "follow", generated relative redirect response
PASS mode: "error", generated relative redirect response
-FAIL mode: "manual", generated relative redirect response promise_test: Unhandled rejection with value: object "TypeError: Load failed"
+PASS mode: "manual", generated relative redirect response
PASS Fetch should follow the redirect response 20 times
PASS Fetch should not follow the redirect response 21 times.
PASS The URL for the service worker redirected request should be propagated to response.
Modified: trunk/Source/WebKit/ChangeLog (291339 => 291340)
--- trunk/Source/WebKit/ChangeLog 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/ChangeLog 2022-03-16 12:52:33 UTC (rev 291340)
@@ -1,3 +1,24 @@
+2022-03-16 Youenn Fablet <you...@apple.com>
+
+ redirectCount returns 0 when using a Service Worker
+ https://bugs.webkit.org/show_bug.cgi?id=235710
+ <rdar://problem/88432190>
+
+ Reviewed by Chris Dumez.
+
+ Pass an optional NetworkLoadMetrics when sending the response to web process.
+ Include the redirectCount value computed by NetworkResourceLoader.
+ Make service worker redirections go through NetworkResourceLoader to set the redirectCount value and for correctness.
+
+ Covered by updated test.
+
+ * NetworkProcess/NetworkResourceLoader.cpp:
+ * NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
+ (WebKit::ServiceWorkerFetchTask::processRedirectResponse):
+ * WebProcess/Network/WebResourceLoader.cpp:
+ * WebProcess/Network/WebResourceLoader.h:
+ * WebProcess/Network/WebResourceLoader.messages.in:
+
2022-03-16 Pablo Saavedra <psaave...@igalia.com>
[GTK][WPE] Crash during the WebPage::close() related to GL resources destruction
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (291339 => 291340)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp 2022-03-16 12:52:33 UTC (rev 291340)
@@ -559,6 +559,19 @@
cleanup(LoadResult::Cancel);
}
+std::optional<NetworkLoadMetrics> NetworkResourceLoader::computeResponseMetrics(const ResourceResponse& response) const
+{
+ if (parameters().options.mode != FetchOptions::Mode::Navigate)
+ return { };
+
+ NetworkLoadMetrics networkLoadMetrics;
+ if (auto* metrics = response.deprecatedNetworkLoadMetricsOrNull())
+ networkLoadMetrics = *metrics;
+ networkLoadMetrics.redirectCount = m_redirectCount;
+
+ return networkLoadMetrics;
+}
+
void NetworkResourceLoader::transferToNewWebProcess(NetworkConnectionToWebProcess& newConnection, WebCore::ResourceLoaderIdentifier newCoreIdentifier)
{
m_connection = newConnection;
@@ -570,7 +583,7 @@
ASSERT(m_responseCompletionHandler || m_cacheEntryWaitingForContinueDidReceiveResponse);
#endif
bool willWaitForContinueDidReceiveResponse = true;
- send(Messages::WebResourceLoader::DidReceiveResponse { m_response, m_privateRelayed, willWaitForContinueDidReceiveResponse });
+ send(Messages::WebResourceLoader::DidReceiveResponse { m_response, m_privateRelayed, willWaitForContinueDidReceiveResponse, computeResponseMetrics(m_response) });
}
bool NetworkResourceLoader::shouldInterruptLoadForXFrameOptions(const String& xFrameOptions, const URL& url)
@@ -857,7 +870,7 @@
{
auto browsingContextGroupSwitchDecision = toBrowsingContextGroupSwitchDecision(m_currentCoopEnforcementResult);
if (browsingContextGroupSwitchDecision == BrowsingContextGroupSwitchDecision::StayInGroup) {
- send(Messages::WebResourceLoader::DidReceiveResponse { response, privateRelayed, needsContinueDidReceiveResponseMessage });
+ send(Messages::WebResourceLoader::DidReceiveResponse { response, privateRelayed, needsContinueDidReceiveResponseMessage, computeResponseMetrics(response) });
return;
}
@@ -1021,6 +1034,16 @@
void NetworkResourceLoader::willSendRedirectedRequest(ResourceRequest&& request, ResourceRequest&& redirectRequest, ResourceResponse&& redirectResponse)
{
+ willSendRedirectedRequestInternal(WTFMove(request), WTFMove(redirectRequest), WTFMove(redirectResponse), IsFromServiceWorker::No);
+}
+
+void NetworkResourceLoader::willSendServiceWorkerRedirectedRequest(ResourceRequest&& request, ResourceRequest&& redirectRequest, ResourceResponse&& redirectResponse)
+{
+ willSendRedirectedRequestInternal(WTFMove(request), WTFMove(redirectRequest), WTFMove(redirectResponse), IsFromServiceWorker::Yes);
+}
+
+void NetworkResourceLoader::willSendRedirectedRequestInternal(ResourceRequest&& request, ResourceRequest&& redirectRequest, ResourceResponse&& redirectResponse, IsFromServiceWorker isFromServiceWorker)
+{
LOADER_RELEASE_LOG("willSendRedirectedRequest:");
++m_redirectCount;
m_redirectResponse = redirectResponse;
@@ -1042,9 +1065,11 @@
addConsoleMessage(MessageSource::PrivateClickMeasurement, MessageLevel::Error, result.error());
}
- auto maxAgeCap = validateCacheEntryForMaxAgeCapValidation(request, redirectRequest, redirectResponse);
- if (redirectResponse.source() == ResourceResponse::Source::Network && canUseCachedRedirect(request))
- m_cache->storeRedirect(request, redirectResponse, redirectRequest, maxAgeCap);
+ if (isFromServiceWorker == IsFromServiceWorker::No) {
+ auto maxAgeCap = validateCacheEntryForMaxAgeCapValidation(request, redirectRequest, redirectResponse);
+ if (redirectResponse.source() == ResourceResponse::Source::Network && canUseCachedRedirect(request))
+ m_cache->storeRedirect(request, redirectResponse, redirectRequest, maxAgeCap);
+ }
if (isMainResource() && shouldInterruptNavigationForCrossOriginEmbedderPolicy(redirectResponse)) {
this->didFailLoading(ResourceError { errorDomainWebKitInternal, 0, redirectRequest.url(), "Redirection was blocked by Cross-Origin-Embedder-Policy"_s, ResourceError::Type::AccessControl });
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h (291339 => 291340)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h 2022-03-16 12:52:33 UTC (rev 291340)
@@ -165,6 +165,8 @@
void deref() const final { RefCounted<NetworkResourceLoader>::deref(); }
#endif
+ void willSendServiceWorkerRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&);
+
private:
NetworkResourceLoader(NetworkResourceLoadParameters&&, NetworkConnectionToWebProcess&, Messages::NetworkConnectionToWebProcess::PerformSynchronousLoadDelayedReply&&);
@@ -242,6 +244,10 @@
void startContentFiltering(WebCore::ResourceRequest&);
#endif
+ enum class IsFromServiceWorker : bool { No, Yes };
+ void willSendRedirectedRequestInternal(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&&, IsFromServiceWorker);
+ std::optional<WebCore::NetworkLoadMetrics> computeResponseMetrics(const WebCore::ResourceResponse&) const;
+
const NetworkResourceLoadParameters m_parameters;
Ref<NetworkConnectionToWebProcess> m_connection;
Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp (291339 => 291340)
--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp 2022-03-16 12:52:33 UTC (rev 291340)
@@ -183,7 +183,7 @@
response.setSource(ResourceResponse::Source::ServiceWorker);
auto newRequest = m_currentRequest.redirectedRequest(response, m_loader.parameters().shouldClearReferrerOnHTTPSToHTTPRedirect);
- sendToClient(Messages::WebResourceLoader::WillSendRequest { newRequest, IPC::FormDataReference { newRequest.httpBody() }, response });
+ m_loader.willSendServiceWorkerRedirectedRequest(ResourceRequest(m_currentRequest), WTFMove(newRequest), WTFMove(response));
}
void ServiceWorkerFetchTask::didReceiveResponse(WebCore::ResourceResponse&& response, bool needsContinueDidReceiveResponseMessage)
Modified: trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp (291339 => 291340)
--- trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerNavigationPreloader.cpp 2022-03-16 12:52:33 UTC (rev 291340)
@@ -154,8 +154,10 @@
void ServiceWorkerNavigationPreloader::willSendRedirectedRequest(ResourceRequest&&, ResourceRequest&&, ResourceResponse&& response)
{
- didReceiveResponse(WTFMove(response), PrivateRelayed::No, [](auto) { });
- didComplete();
+ didReceiveResponse(WTFMove(response), PrivateRelayed::No, [weakThis = WeakPtr { *this }](auto) {
+ if (weakThis)
+ weakThis->didComplete();
+ });
}
void ServiceWorkerNavigationPreloader::didReceiveResponse(ResourceResponse&& response, PrivateRelayed, ResponseCompletionHandler&& completionHandler)
Modified: trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp (291339 => 291340)
--- trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.cpp 2022-03-16 12:52:33 UTC (rev 291340)
@@ -149,7 +149,7 @@
m_coreLoader->didSendData(bytesSent, totalBytesToBeSent);
}
-void WebResourceLoader::didReceiveResponse(const ResourceResponse& response, PrivateRelayed privateRelayed, bool needsContinueDidReceiveResponseMessage)
+void WebResourceLoader::didReceiveResponse(ResourceResponse&& response, PrivateRelayed privateRelayed, bool needsContinueDidReceiveResponseMessage, std::optional<NetworkLoadMetrics>&& metrics)
{
LOG(Network, "(WebProcess) WebResourceLoader::didReceiveResponse for '%s'. Status %d.", m_coreLoader->url().string().latin1().data(), response.httpStatusCode());
WEBRESOURCELOADER_RELEASE_LOG("didReceiveResponse: (httpStatusCode=%d)", response.httpStatusCode());
@@ -156,6 +156,9 @@
Ref<WebResourceLoader> protectedThis(*this);
+ if (metrics)
+ response.setDeprecatedNetworkLoadMetrics(Box<NetworkLoadMetrics>::create(WTFMove(*metrics)));
+
if (privateRelayed == PrivateRelayed::Yes && mainFrameMainResource() == MainFrameMainResource::Yes)
WebProcess::singleton().setHadMainFrameMainResourcePrivateRelayed();
Modified: trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.h (291339 => 291340)
--- trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.h 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.h 2022-03-16 12:52:33 UTC (rev 291340)
@@ -85,7 +85,7 @@
void willSendRequest(WebCore::ResourceRequest&&, IPC::FormDataReference&& requestBody, WebCore::ResourceResponse&&);
void didSendData(uint64_t bytesSent, uint64_t totalBytesToBeSent);
- void didReceiveResponse(const WebCore::ResourceResponse&, PrivateRelayed, bool needsContinueDidReceiveResponseMessage);
+ void didReceiveResponse(WebCore::ResourceResponse&&, PrivateRelayed, bool needsContinueDidReceiveResponseMessage, std::optional<WebCore::NetworkLoadMetrics>&&);
void didReceiveData(const IPC::SharedBufferCopy& data, int64_t encodedDataLength);
void didFinishResourceLoad(const WebCore::NetworkLoadMetrics&);
void didFailResourceLoad(const WebCore::ResourceError&);
Modified: trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.messages.in (291339 => 291340)
--- trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.messages.in 2022-03-16 12:05:08 UTC (rev 291339)
+++ trunk/Source/WebKit/WebProcess/Network/WebResourceLoader.messages.in 2022-03-16 12:52:33 UTC (rev 291340)
@@ -23,7 +23,7 @@
messages -> WebResourceLoader LegacyReceiver {
WillSendRequest(WebCore::ResourceRequest request, IPC::FormDataReference requestBody, WebCore::ResourceResponse redirectResponse)
DidSendData(uint64_t bytesSent, uint64_t totalBytesToBeSent)
- DidReceiveResponse(WebCore::ResourceResponse response, enum:bool WebKit::PrivateRelayed privateRelayed, bool needsContinueDidReceiveResponseMessage)
+ DidReceiveResponse(WebCore::ResourceResponse response, enum:bool WebKit::PrivateRelayed privateRelayed, bool needsContinueDidReceiveResponseMessage, std::optional<WebCore::NetworkLoadMetrics> optionalNetworkLoadMetrics)
DidReceiveData(IPC::SharedBufferCopy data, int64_t encodedDataLength)
DidFinishResourceLoad(WebCore::NetworkLoadMetrics networkLoadMetrics)
DidFailResourceLoad(WebCore::ResourceError error)