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/ChangeLog b/Source/WebCore/ChangeLog
index 3d58d41e..c870820 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,5 +1,18 @@
2018-01-25 Youenn Fablet <youenn@apple.com>
+ DocumentThreadableLoader should ensure service worker is not reused if redirection comes from the network
+ https://bugs.webkit.org/show_bug.cgi?id=182137
+
+ Reviewed by Chris Dumez.
+
+ 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):
+
+2018-01-25 Youenn Fablet <youenn@apple.com>
+
DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
https://bugs.webkit.org/show_bug.cgi?id=182115
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));
}