Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (233171 => 233172)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2018-06-25 21:04:55 UTC (rev 233171)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2018-06-25 21:14:07 UTC (rev 233172)
@@ -1,3 +1,15 @@
+2018-06-25 Youenn Fablet <you...@apple.com>
+
+ NetworkLoadChecker should not check CORS for 304 responses triggered by WebProcess revalidation
+ https://bugs.webkit.org/show_bug.cgi?id=186939
+ <rdar://problem/40941725>
+
+ Reviewed by Chris Dumez.
+
+ * web-platform-tests/cors/resources/cache-304.py: Added.
+ * web-platform-tests/cors/script-304-expected.txt: Added.
+ * web-platform-tests/cors/script-304.html: Added.
+
2018-06-19 Youenn Fablet <you...@apple.com>
RTCRtpSender.replaceTrack(null) ends current track
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cache-304.py (0 => 233172)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cache-304.py (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/cors/resources/cache-304.py 2018-06-25 21:14:07 UTC (rev 233172)
@@ -0,0 +1,10 @@
+def main(request, response):
+ match = request.headers.get("If-None-Match", None)
+ if match is not None and match == "mybestscript-v1":
+ response.status = (304, "YEP")
+ return ""
+ response.headers.set("Access-Control-Allow-Origin", "*")
+ response.headers.set("Cache-Control", "must-revalidate")
+ response.headers.set("ETag", "mybestscript-v1")
+ response.headers.set("Content-Type", "text/_javascript_")
+ return "function hep() { }"
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/cors/script-304-expected.txt (0 => 233172)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/cors/script-304-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/cors/script-304-expected.txt 2018-06-25 21:14:07 UTC (rev 233172)
@@ -0,0 +1,4 @@
+
+PASS Load a fresh cross-origin script
+PASS Reload same cross-origin script from the memory cache after revalidation
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/cors/script-304.html (0 => 233172)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/cors/script-304.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/cors/script-304.html 2018-06-25 21:14:07 UTC (rev 233172)
@@ -0,0 +1,40 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <div id="testDiv"></div>
+ <script>
+
+const scriptURL = get_host_info().HTTP_REMOTE_ORIGIN + "/cors/resources/cache-304.py?" + token();
+
+function loadScript(test)
+{
+ const script = document.createElement("script");
+ script.crossOrigin = "anonymous";
+ script.src = ""
+ return new Promise((resolve, reject) => {
+ // Let's add a small timeout so that the script is fully loaded in memory cache before reloading it.
+ script._onload_ = test.step_timeout(resolve, 50);
+ script._onerror_ = reject;
+ testDiv.appendChild(script);
+ });
+}
+
+promise_test((test) => {
+ return loadScript(test);
+}, "Load a fresh cross-origin script");
+
+promise_test((test) => {
+ return loadScript(test);
+}, "Reload same cross-origin script from the memory cache after revalidation");
+
+</script>
+ </body>
+</html>
+
Modified: trunk/Source/WebKit/ChangeLog (233171 => 233172)
--- trunk/Source/WebKit/ChangeLog 2018-06-25 21:04:55 UTC (rev 233171)
+++ trunk/Source/WebKit/ChangeLog 2018-06-25 21:14:07 UTC (rev 233172)
@@ -1,3 +1,14 @@
+2018-06-25 Youenn Fablet <you...@apple.com>
+
+ NetworkLoadChecker should not check CORS for 304 responses triggered by WebProcess revalidation
+ https://bugs.webkit.org/show_bug.cgi?id=186939
+ <rdar://problem/40941725>
+
+ Reviewed by Chris Dumez.
+
+ * NetworkProcess/NetworkLoadChecker.cpp:
+ (WebKit::NetworkLoadChecker::validateResponse):
+
2018-06-25 Keith Rollin <krol...@apple.com>
Adjust UNEXPORTED_SYMBOL_LDFLAGS for LTO
Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp (233171 => 233172)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp 2018-06-25 21:04:55 UTC (rev 233171)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp 2018-06-25 21:14:07 UTC (rev 233172)
@@ -160,6 +160,10 @@
ASSERT(m_options.mode == FetchOptions::Mode::Cors);
+ // If we have a 304, the cached response is in WebProcess so we let WebProcess do the CORS check on the cached response.
+ if (response.httpStatusCode() == 304)
+ return { };
+
String errorMessage;
if (!passesAccessControlCheck(response, m_storedCredentialsPolicy, *m_origin, errorMessage))
return ResourceError { String { }, 0, m_url, WTFMove(errorMessage), ResourceError::Type::AccessControl };