Title: [233172] trunk
Revision
233172
Author
you...@apple.com
Date
2018-06-25 14:14:07 -0700 (Mon, 25 Jun 2018)

Log Message

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.

LayoutTests/imported/w3c:

* 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.

Source/WebKit:

* NetworkProcess/NetworkLoadChecker.cpp:
(WebKit::NetworkLoadChecker::validateResponse):

Modified Paths

Added Paths

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 };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to