Title: [224344] trunk
Revision
224344
Author
[email protected]
Date
2017-11-02 10:46:48 -0700 (Thu, 02 Nov 2017)

Log Message

Service Worker fetch should transmit headers to its client
https://bugs.webkit.org/show_bug.cgi?id=179156

Patch by Youenn Fablet <[email protected]> on 2017-11-02
Reviewed by Chris Dumez.

Source/WebCore:

Covered by updated tests.

Making resourceResponse getter return a ResourceResponse with the headers of the FetchResponse Headers object.

* Modules/cache/DOMCache.cpp:
(WebCore::DOMCache::toConnectionRecord):
* Modules/fetch/FetchResponse.cpp:
(WebCore::FetchResponse::resourceResponse const):
* Modules/fetch/FetchResponse.h:

LayoutTests:

* http/tests/workers/service/basic-fetch.https-expected.txt:
* http/tests/workers/service/resources/basic-fetch-worker.js:
Adding header specific subtest.
* http/tests/workers/service/resources/image-fetch-worker.js:
Updating test so that image does not go in the memory cache.
Otherwise test is flaky when run multiple times on the same runner.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (224343 => 224344)


--- trunk/LayoutTests/ChangeLog	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/LayoutTests/ChangeLog	2017-11-02 17:46:48 UTC (rev 224344)
@@ -1,5 +1,19 @@
 2017-11-02  Youenn Fablet  <[email protected]>
 
+        Service Worker fetch should transmit headers to its client
+        https://bugs.webkit.org/show_bug.cgi?id=179156
+
+        Reviewed by Chris Dumez.
+
+        * http/tests/workers/service/basic-fetch.https-expected.txt:
+        * http/tests/workers/service/resources/basic-fetch-worker.js:
+        Adding header specific subtest.
+        * http/tests/workers/service/resources/image-fetch-worker.js:
+        Updating test so that image does not go in the memory cache.
+        Otherwise test is flaky when run multiple times on the same runner.
+
+2017-11-02  Youenn Fablet  <[email protected]>
+
         Fix WPT service worker tests using www1 URLs
         https://bugs.webkit.org/show_bug.cgi?id=179144
 

Modified: trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt (224343 => 224344)


--- trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt	2017-11-02 17:46:48 UTC (rev 224344)
@@ -1,8 +1,9 @@
-CONSOLE MESSAGE: line 12: test1 status code: 200
-CONSOLE MESSAGE: line 13: test1 status text: Hello from service worker
-CONSOLE MESSAGE: line 16: test1 source: Service worker
-CONSOLE MESSAGE: line 19: test2 status code: 500
-CONSOLE MESSAGE: line 20: test2 status text: Error from service worker
-CONSOLE MESSAGE: line 23: test2 source: Service worker
-CONSOLE MESSAGE: line 32: test3 fetch failed as expected
+test1 status code: 200
+test1 status text: Hello from service worker
+test1 header Hello: World
+test1 source: Service worker
+test2 status code: 500
+test2 status text: Error from service worker
+test2 source: Service worker
+test3 fetch failed as expected
 

Modified: trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js (224343 => 224344)


--- trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js	2017-11-02 17:46:48 UTC (rev 224344)
@@ -1,6 +1,6 @@
 self.addEventListener("fetch", (event) => {
     if (event.request.url.indexOf("test1") !== -1) {
-        event.respondWith(new Response(null, { status: 200, statusText: "Hello from service worker" }));
+        event.respondWith(new Response(null, { status: 200, statusText: "Hello from service worker", headers: [["Hello", "World"]] }));
         return;
     }
     if (event.request.url.indexOf("test2") !== -1) {

Modified: trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js (224343 => 224344)


--- trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js	2017-11-02 17:46:48 UTC (rev 224344)
@@ -1,8 +1,3 @@
-function done()
-{
-    finishSWTest();
-}
-
 async function test()
 {
     try {
@@ -9,30 +4,31 @@
         await navigator.serviceWorker.register("resources/basic-fetch-worker.js", { });
 
         var response = await fetch("test1");
-        console.log("test1 status code: " + response.status);
-        console.log("test1 status text: " + response.statusText);
+        log("test1 status code: " + response.status);
+        log("test1 status text: " + response.statusText);
+        log("test1 header Hello: " + response.headers.get("hello"));
 
         if (window.internals)
-            console.log("test1 source: " + internals.fetchResponseSource(response));
+            log("test1 source: " + internals.fetchResponseSource(response));
 
         var response = await fetch("test2");
-        console.log("test2 status code: " + response.status);
-        console.log("test2 status text: " + response.statusText);
+        log("test2 status code: " + response.status);
+        log("test2 status text: " + response.statusText);
 
         if (window.internals)
-            console.log("test2 source: " + internals.fetchResponseSource(response));
+            log("test2 source: " + internals.fetchResponseSource(response));
 
         try {
             response = await fetch("test3");
-            console.log("test3 fetch succeeded unexpectedly");
-            console.log("test3 status code: " + response.status);
-            console.log("test3 status text: " + response.statusText);
+            log("test3 fetch succeeded unexpectedly");
+            log("test3 status code: " + response.status);
+            log("test3 status text: " + response.statusText);
 
         } catch (e) {
-            console.log("test3 fetch failed as expected");
+            log("test3 fetch failed as expected");
         }
     } catch(e) {
-        console.log("Got exception: " + e);
+        log("Got exception: " + e);
     }
     finishSWTest();
 }

Modified: trunk/LayoutTests/http/tests/workers/service/resources/image-fetch-worker.js (224343 => 224344)


--- trunk/LayoutTests/http/tests/workers/service/resources/image-fetch-worker.js	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/LayoutTests/http/tests/workers/service/resources/image-fetch-worker.js	2017-11-02 17:46:48 UTC (rev 224344)
@@ -1,3 +1,4 @@
+var response;
 var status = "no status";
 self.addEventListener("fetch", (event) => {
     if (event.request.url.indexOf("status") !== -1) {
@@ -10,8 +11,13 @@
         return;
     }
     status = "Fetching " + event.request.url.substring(0, event.request.url.length - 18);
-    event.respondWith(fetch(event.request.url.substring(0, event.request.url.length - 18)).then((response) => {
+    event.respondWith(fetch(event.request.url.substring(0, event.request.url.length - 18)).then((r) => {
+        response = r;
         status = "Got response for " + event.request.url.substring(0, event.request.url.length - 18) + ", status code is " + response.status;
-        return response;
+        return response.arrayBuffer();
+    }).then((buffer) => {
+        var headers = new Headers(response.headers);
+        headers.set("cache-control", "no-cache");
+        return new Response(buffer, {headers: headers});
     }));
 });

Modified: trunk/Source/WebCore/ChangeLog (224343 => 224344)


--- trunk/Source/WebCore/ChangeLog	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/Source/WebCore/ChangeLog	2017-11-02 17:46:48 UTC (rev 224344)
@@ -1,3 +1,20 @@
+2017-11-02  Youenn Fablet  <[email protected]>
+
+        Service Worker fetch should transmit headers to its client
+        https://bugs.webkit.org/show_bug.cgi?id=179156
+
+        Reviewed by Chris Dumez.
+
+        Covered by updated tests.
+
+        Making resourceResponse getter return a ResourceResponse with the headers of the FetchResponse Headers object.
+
+        * Modules/cache/DOMCache.cpp:
+        (WebCore::DOMCache::toConnectionRecord):
+        * Modules/fetch/FetchResponse.cpp:
+        (WebCore::FetchResponse::resourceResponse const):
+        * Modules/fetch/FetchResponse.h:
+
 2017-11-02  Chris Dumez  <[email protected]>
 
         Update SWServerJobQueue to follow the Service Worker specification more closely

Modified: trunk/Source/WebCore/Modules/cache/DOMCache.cpp (224343 => 224344)


--- trunk/Source/WebCore/Modules/cache/DOMCache.cpp	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/Source/WebCore/Modules/cache/DOMCache.cpp	2017-11-02 17:46:48 UTC (rev 224344)
@@ -480,11 +480,7 @@
 
 Record DOMCache::toConnectionRecord(const FetchRequest& request, FetchResponse& response, DOMCacheEngine::ResponseBody&& responseBody)
 {
-    // FIXME: Add a setHTTPHeaderFields on ResourceResponseBase.
-    ResourceResponse cachedResponse = response.resourceResponse();
-    for (auto& header : response.headers().internalHeaders())
-        cachedResponse.setHTTPHeaderField(header.key, header.value);
-
+    auto cachedResponse = response.resourceResponse();
     ResourceRequest cachedRequest = request.internalRequest();
     cachedRequest.setHTTPHeaderFields(request.headers().internalHeaders());
 

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp (224343 => 224344)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp	2017-11-02 17:46:48 UTC (rev 224344)
@@ -438,4 +438,13 @@
     return !isActive();
 }
 
+ResourceResponse FetchResponse::resourceResponse() const
+{
+    auto response = m_response;
+    // FIXME: Add a setHTTPHeaderFields on ResourceResponseBase.
+    for (auto& header : headers().internalHeaders())
+        response.setHTTPHeaderField(header.key, header.value);
+    return response;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/fetch/FetchResponse.h (224343 => 224344)


--- trunk/Source/WebCore/Modules/fetch/FetchResponse.h	2017-11-02 17:46:02 UTC (rev 224343)
+++ trunk/Source/WebCore/Modules/fetch/FetchResponse.h	2017-11-02 17:46:48 UTC (rev 224344)
@@ -95,7 +95,7 @@
     void consumeBodyWhenLoaded(ConsumeDataCallback&&);
     void consumeBodyFromReadableStream(ConsumeDataCallback&&);
 
-    const ResourceResponse& resourceResponse() const { return m_response; }
+    WEBCORE_EXPORT ResourceResponse resourceResponse() const;
 
     uint64_t bodySizeWithPadding() const { return m_bodySizeWithPadding; }
     void setBodySizeWithPadding(uint64_t size) { m_bodySizeWithPadding = size; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to