[webkit-changes] [WebKit/WebKit] ec8ff5: Content downloaded with fetch() API when Content-E...

Ryan Reno noreply at github.com
Wed Nov 16 15:08:07 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ec8ff55e6568cd38eb629339e589d5d97c077d95
      https://github.com/WebKit/WebKit/commit/ec8ff55e6568cd38eb629339e589d5d97c077d95
  Author: Ryan Reno <rreno at apple.com>
  Date:   2022-11-16 (Wed, 16 Nov 2022)

  Changed paths:
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.html
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.js
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.serviceworker-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.serviceworker.html
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.sharedworker-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.sharedworker.html
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.worker-expected.txt
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.worker.html
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.octetstream.gz
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.octetstream.gz.headers
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.text.gz
    A LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.text.gz.headers
    M LayoutTests/platform/mac-wk1/TestExpectations
    M Source/WebCore/Modules/fetch/FetchLoader.cpp
    M Source/WebCore/loader/ResourceLoader.cpp
    M Source/WebCore/loader/ResourceLoader.h
    M Source/WebCore/loader/ResourceLoaderOptions.h
    M Source/WebCore/loader/ThreadableLoader.cpp
    M Source/WebCore/platform/network/BlobResourceHandle.cpp
    M Source/WebCore/platform/network/ResourceHandle.cpp
    M Source/WebCore/platform/network/ResourceHandle.h
    M Source/WebCore/platform/network/ResourceHandleInternal.h
    M Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp
    M Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp
    M Source/WebCore/platform/network/mac/ResourceHandleMac.mm
    M Source/WebCore/xml/XMLHttpRequest.cpp
    M Source/WebKit/NetworkProcess/NetworkLoadParameters.h
    M Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp
    M Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp
    M Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp
    M Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
    M Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm
    M Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
    M Source/WebKitLegacy/WebCoreSupport/PingHandle.h

  Log Message:
  -----------
  Content downloaded with fetch() API when Content-Encoding: gzip is set is not decompressed
https://bugs.webkit.org/show_bug.cgi?id=247421
rdar://101935292

Reviewed by Brent Fulgham.

In 195247 at main we adopted CFNetwork SPI to opt-out of content encoding sniffing for XMLHttpRequest.
Content encoding sniffing would cause responses with `Content-Encoding: gzip` and
`Content-Type: application/octet-stream` to be treated as `Content-Type: application/gzip` and
`Content-Encoding: identity` on macOS. The user and developer visible behavior is that the gzipped data
is not decompressed.

This brings that change forward to Fetch requests by setting the ContentEncodingSniffingPolicy flag
in the FetchLoader. As an additional step this also renames the ContentEncodingSniffingPolicy flags to
Default and Disable and replaces raw bools representing those flags with the enum itself.

On iOS the flag has no effect since the default behavior is to opt-out of sniffing.

* LayoutTests/platform/mac-wk1/TestExpectations:
    Skip new worker tests since workers are unsupported in WK1.

* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.js: Added.
(string_appeared_here.forEach.contentType.promise_test.async t):
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.serviceworker-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.serviceworker.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.sharedworker-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.sharedworker.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.worker-expected.txt: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/gzip-body.any.worker.html: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.octetstream.gz: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.octetstream.gz.headers: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.text.gz: Added.
* LayoutTests/imported/w3c/web-platform-tests/fetch/content-encoding/resources/foo.text.gz.headers: Added.

* Source/WebCore/Modules/fetch/FetchLoader.cpp:
(WebCore::FetchLoader::start):
* Source/WebCore/loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::start):
* Source/WebCore/loader/ResourceLoader.h:
(WebCore::ResourceLoader::contentEncodingSniffingPolicy const):
(WebCore::ResourceLoader::shouldSniffContentEncoding const): Deleted.
* Source/WebCore/loader/ResourceLoaderOptions.h:
(WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
* Source/WebCore/loader/ThreadableLoader.cpp:
(WebCore::ThreadableLoaderOptions::isolatedCopy const):
* Source/WebCore/platform/network/BlobResourceHandle.cpp:
(WebCore::BlobResourceHandle::BlobResourceHandle):
* Source/WebCore/platform/network/ResourceHandle.cpp:
(WebCore::ResourceHandle::ResourceHandle):
(WebCore::ResourceHandle::create):
(WebCore::ResourceHandle::contentEncodingSniffingPolicy const):
(WebCore::ResourceHandle::shouldContentEncodingSniff const): Deleted.
* Source/WebCore/platform/network/ResourceHandle.h:
* Source/WebCore/platform/network/ResourceHandleInternal.h:
(WebCore::ResourceHandleInternal::ResourceHandleInternal):
* Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:
(WebCore::ResourceHandle::createCFURLConnection):
(WebCore::ResourceHandle::start):
(WebCore::ResourceHandle::platformLoadResourceSynchronously):
* Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:
(WebCore::ResourceHandle::platformLoadResourceSynchronously):
* Source/WebCore/platform/network/mac/ResourceHandleMac.mm:
(WebCore::ResourceHandle::applySniffingPoliciesIfNeeded):
(WebCore::ResourceHandle::createNSURLConnection):
(WebCore::ResourceHandle::start):
(WebCore::ResourceHandle::platformLoadResourceSynchronously):
* Source/WebCore/xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::createRequest):
* Source/WebKit/NetworkProcess/NetworkLoadParameters.h:
* Source/WebKit/NetworkProcess/ServiceWorker/ServiceWorkerSoftUpdateLoader.cpp:
(WebKit::ServiceWorkerSoftUpdateLoader::loadFromNetwork):
* Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
(WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
* Source/WebKit/NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
(WebKit::NetworkCache::SpeculativeLoadManager::preconnectForSubresource):
* Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
* Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded):
(WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
* Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
(WebKit::WebLoaderStrategy::loadResourceSynchronously):
* Source/WebKitLegacy/WebCoreSupport/PingHandle.h:

Canonical link: https://commits.webkit.org/256755@main




More information about the webkit-changes mailing list