Changeset 290507 in webkit


Ignore:
Timestamp:
Feb 25, 2022 7:49:58 AM (5 months ago)
Author:
youenn@apple.com
Message:

Non-simple CORS preflight fails due to cache-control header
https://bugs.webkit.org/show_bug.cgi?id=236837
<rdar://problem/89382796>

Reviewed by Chris Dumez.

Source/WebCore:

We fixed cache-control in https://bugs.webkit.org/show_bug.cgi?id=233916.
The fix to make the website work is to ensure that Content-Type is not cleared when going to service worker.
Covered by updated tests.

  • Modules/beacon/NavigatorBeacon.cpp:

LayoutTests:

  • http/wpt/service-workers/cache-control-request-expected.txt:
  • http/wpt/service-workers/cache-control-request.html:
  • http/wpt/service-workers/resources/cross-origin-allow-for-beacon.py: Added.
Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r290505 r290507  
     12022-02-25  Youenn Fablet  <youenn@apple.com>
     2
     3        Non-simple CORS preflight fails due to cache-control header
     4        https://bugs.webkit.org/show_bug.cgi?id=236837
     5        <rdar://problem/89382796>
     6
     7        Reviewed by Chris Dumez.
     8
     9        * http/wpt/service-workers/cache-control-request-expected.txt:
     10        * http/wpt/service-workers/cache-control-request.html:
     11        * http/wpt/service-workers/resources/cross-origin-allow-for-beacon.py: Added.
     12
    1132022-02-25  Kimmo Kinnunen  <kkinnunen@apple.com>
    214
  • trunk/LayoutTests/http/wpt/service-workers/cache-control-request-expected.txt

    r286655 r290507  
    22PASS Setup worker
    33PASS Ensure cache-control does not break service worker fetch handling
     4PASS Ensure beacon headers are not broken by service worker fetch handling
    45
  • trunk/LayoutTests/http/wpt/service-workers/cache-control-request.html

    r286655 r290507  
    66<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
    77<script src="/common/get-host-info.sub.js"></script>
     8<script src="/common/utils.js"></script>
    89</head>
    910<body>
     
    3435    iframe.remove();
    3536}, "Ensure cache-control does not break service worker fetch handling");
     37
     38promise_test(async (test) => {
     39    const iframe = await with_iframe("resources/empty.html");
     40
     41    const id = token();
     42    const blob = new Blob(["test"], { type: "application/badabaoo" });
     43
     44    iframe.contentWindow.navigator.sendBeacon(get_host_info().HTTP_REMOTE_ORIGIN +  "/WebKit/service-workers/resources/cross-origin-allow-for-beacon.py?token=" + id, blob);
     45    await new Promise(resolve => setTimeout(resolve, 50));
     46
     47    const response = await fetch("/WebKit/service-workers/resources/cross-origin-allow-for-beacon.py?token=" + id);
     48    assert_equals(await response.text(), "preflight ok");
     49
     50    iframe.remove();
     51}, "Ensure beacon headers are not broken by service worker fetch handling");
    3652</script>
    3753</body>
  • trunk/Source/WebCore/ChangeLog

    r290506 r290507  
     12022-02-25  Youenn Fablet  <youenn@apple.com>
     2
     3        Non-simple CORS preflight fails due to cache-control header
     4        https://bugs.webkit.org/show_bug.cgi?id=236837
     5        <rdar://problem/89382796>
     6
     7        Reviewed by Chris Dumez.
     8
     9        We fixed cache-control in https://bugs.webkit.org/show_bug.cgi?id=233916.
     10        The fix to make the website work is to ensure that Content-Type is not cleared when going to service worker.
     11        Covered by updated tests.
     12
     13        * Modules/beacon/NavigatorBeacon.cpp:
     14
    1152022-02-25  Zan Dobersek  <zdobersek@igalia.com>
    216
  • trunk/Source/WebCore/Modules/beacon/NavigatorBeacon.cpp

    r287675 r290507  
    146146        if (!mimeType.isEmpty()) {
    147147            request.setHTTPContentType(mimeType);
    148             if (!isCrossOriginSafeRequestHeader(HTTPHeaderName::ContentType, mimeType))
     148            if (!isCrossOriginSafeRequestHeader(HTTPHeaderName::ContentType, mimeType)) {
    149149                options.mode = FetchOptions::Mode::Cors;
     150                options.httpHeadersToKeep.add(HTTPHeadersToKeepFromCleaning::ContentType);
     151            }
    150152        }
    151153    }
Note: See TracChangeset for help on using the changeset viewer.