DocumentThreadableLoader should ensure service worker is not reused if redirection comes from the network
https://bugs.webkit.org/show_bug.cgi?id=182137
Patch by Youenn Fablet <youenn@apple.com> on 2018-01-25
Reviewed by Chris Dumez.
LayoutTests/imported/w3c:
* web-platform-tests/service-workers/service-worker/fetch-request-fallback.https-expected.txt:
Source/WebCore:
Covered by rebased test.
In case redirection does not come from memory cache or service worker, disable service worker interception when following the redirection.
* loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::redirectReceived):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@227626 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/loader/DocumentThreadableLoader.cpp b/Source/WebCore/loader/DocumentThreadableLoader.cpp
index 44ab9c2..4f4be1a 100644
--- a/Source/WebCore/loader/DocumentThreadableLoader.cpp
+++ b/Source/WebCore/loader/DocumentThreadableLoader.cpp
@@ -293,6 +293,10 @@
m_originalHeaders->remove(HTTPHeaderName::Authorization);
request.setHTTPHeaderFields(*m_originalHeaders);
+#if ENABLE(SERVICE_WORKER)
+ if (redirectResponse.source() != ResourceResponse::Source::ServiceWorker && redirectResponse.source() != ResourceResponse::Source::MemoryCache)
+ m_options.serviceWorkersMode = ServiceWorkersMode::None;
+#endif
makeCrossOriginAccessRequest(ResourceRequest(request));
completionHandler(WTFMove(request));
}