Changeset 224344 in webkit


Ignore:
Timestamp:
Nov 2, 2017 10:46:48 AM (6 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Youenn Fablet <youenn@apple.com> 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.

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r224343 r224344  
     12017-11-02  Youenn Fablet  <youenn@apple.com>
     2
     3        Service Worker fetch should transmit headers to its client
     4        https://bugs.webkit.org/show_bug.cgi?id=179156
     5
     6        Reviewed by Chris Dumez.
     7
     8        * http/tests/workers/service/basic-fetch.https-expected.txt:
     9        * http/tests/workers/service/resources/basic-fetch-worker.js:
     10        Adding header specific subtest.
     11        * http/tests/workers/service/resources/image-fetch-worker.js:
     12        Updating test so that image does not go in the memory cache.
     13        Otherwise test is flaky when run multiple times on the same runner.
     14
    1152017-11-02  Youenn Fablet  <youenn@apple.com>
    216
  • trunk/LayoutTests/http/tests/workers/service/basic-fetch.https-expected.txt

    r223785 r224344  
    1 CONSOLE MESSAGE: line 12: test1 status code: 200
    2 CONSOLE MESSAGE: line 13: test1 status text: Hello from service worker
    3 CONSOLE MESSAGE: line 16: test1 source: Service worker
    4 CONSOLE MESSAGE: line 19: test2 status code: 500
    5 CONSOLE MESSAGE: line 20: test2 status text: Error from service worker
    6 CONSOLE MESSAGE: line 23: test2 source: Service worker
    7 CONSOLE MESSAGE: line 32: test3 fetch failed as expected
     1test1 status code: 200
     2test1 status text: Hello from service worker
     3test1 header Hello: World
     4test1 source: Service worker
     5test2 status code: 500
     6test2 status text: Error from service worker
     7test2 source: Service worker
     8test3 fetch failed as expected
    89
  • trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch-worker.js

    r223839 r224344  
    11self.addEventListener("fetch", (event) => {
    22    if (event.request.url.indexOf("test1") !== -1) {
    3         event.respondWith(new Response(null, { status: 200, statusText: "Hello from service worker" }));
     3        event.respondWith(new Response(null, { status: 200, statusText: "Hello from service worker", headers: [["Hello", "World"]] }));
    44        return;
    55    }
  • trunk/LayoutTests/http/tests/workers/service/resources/basic-fetch.js

    r223785 r224344  
    1 function done()
    2 {
    3     finishSWTest();
    4 }
    5 
    61async function test()
    72{
     
    105
    116        var response = await fetch("test1");
    12         console.log("test1 status code: " + response.status);
    13         console.log("test1 status text: " + response.statusText);
     7        log("test1 status code: " + response.status);
     8        log("test1 status text: " + response.statusText);
     9        log("test1 header Hello: " + response.headers.get("hello"));
    1410
    1511        if (window.internals)
    16             console.log("test1 source: " + internals.fetchResponseSource(response));
     12            log("test1 source: " + internals.fetchResponseSource(response));
    1713
    1814        var response = await fetch("test2");
    19         console.log("test2 status code: " + response.status);
    20         console.log("test2 status text: " + response.statusText);
     15        log("test2 status code: " + response.status);
     16        log("test2 status text: " + response.statusText);
    2117
    2218        if (window.internals)
    23             console.log("test2 source: " + internals.fetchResponseSource(response));
     19            log("test2 source: " + internals.fetchResponseSource(response));
    2420
    2521        try {
    2622            response = await fetch("test3");
    27             console.log("test3 fetch succeeded unexpectedly");
    28             console.log("test3 status code: " + response.status);
    29             console.log("test3 status text: " + response.statusText);
     23            log("test3 fetch succeeded unexpectedly");
     24            log("test3 status code: " + response.status);
     25            log("test3 status text: " + response.statusText);
    3026
    3127        } catch (e) {
    32             console.log("test3 fetch failed as expected");
     28            log("test3 fetch failed as expected");
    3329        }
    3430    } catch(e) {
    35         console.log("Got exception: " + e);
     31        log("Got exception: " + e);
    3632    }
    3733    finishSWTest();
  • trunk/LayoutTests/http/tests/workers/service/resources/image-fetch-worker.js

    r224059 r224344  
     1var response;
    12var status = "no status";
    23self.addEventListener("fetch", (event) => {
     
    1112    }
    1213    status = "Fetching " + event.request.url.substring(0, event.request.url.length - 18);
    13     event.respondWith(fetch(event.request.url.substring(0, event.request.url.length - 18)).then((response) => {
     14    event.respondWith(fetch(event.request.url.substring(0, event.request.url.length - 18)).then((r) => {
     15        response = r;
    1416        status = "Got response for " + event.request.url.substring(0, event.request.url.length - 18) + ", status code is " + response.status;
    15         return response;
     17        return response.arrayBuffer();
     18    }).then((buffer) => {
     19        var headers = new Headers(response.headers);
     20        headers.set("cache-control", "no-cache");
     21        return new Response(buffer, {headers: headers});
    1622    }));
    1723});
  • trunk/Source/WebCore/ChangeLog

    r224341 r224344  
     12017-11-02  Youenn Fablet  <youenn@apple.com>
     2
     3        Service Worker fetch should transmit headers to its client
     4        https://bugs.webkit.org/show_bug.cgi?id=179156
     5
     6        Reviewed by Chris Dumez.
     7
     8        Covered by updated tests.
     9
     10        Making resourceResponse getter return a ResourceResponse with the headers of the FetchResponse Headers object.
     11
     12        * Modules/cache/DOMCache.cpp:
     13        (WebCore::DOMCache::toConnectionRecord):
     14        * Modules/fetch/FetchResponse.cpp:
     15        (WebCore::FetchResponse::resourceResponse const):
     16        * Modules/fetch/FetchResponse.h:
     17
    1182017-11-02  Chris Dumez  <cdumez@apple.com>
    219
  • trunk/Source/WebCore/Modules/cache/DOMCache.cpp

    r223476 r224344  
    481481Record DOMCache::toConnectionRecord(const FetchRequest& request, FetchResponse& response, DOMCacheEngine::ResponseBody&& responseBody)
    482482{
    483     // FIXME: Add a setHTTPHeaderFields on ResourceResponseBase.
    484     ResourceResponse cachedResponse = response.resourceResponse();
    485     for (auto& header : response.headers().internalHeaders())
    486         cachedResponse.setHTTPHeaderField(header.key, header.value);
    487 
     483    auto cachedResponse = response.resourceResponse();
    488484    ResourceRequest cachedRequest = request.internalRequest();
    489485    cachedRequest.setHTTPHeaderFields(request.headers().internalHeaders());
  • trunk/Source/WebCore/Modules/fetch/FetchResponse.cpp

    r223073 r224344  
    439439}
    440440
     441ResourceResponse FetchResponse::resourceResponse() const
     442{
     443    auto response = m_response;
     444    // FIXME: Add a setHTTPHeaderFields on ResourceResponseBase.
     445    for (auto& header : headers().internalHeaders())
     446        response.setHTTPHeaderField(header.key, header.value);
     447    return response;
     448}
     449
    441450} // namespace WebCore
  • trunk/Source/WebCore/Modules/fetch/FetchResponse.h

    r223073 r224344  
    9696    void consumeBodyFromReadableStream(ConsumeDataCallback&&);
    9797
    98     const ResourceResponse& resourceResponse() const { return m_response; }
     98    WEBCORE_EXPORT ResourceResponse resourceResponse() const;
    9999
    100100    uint64_t bodySizeWithPadding() const { return m_bodySizeWithPadding; }
Note: See TracChangeset for help on using the changeset viewer.