Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: eeb51f0ea0f0e1f38d9330d3113c5392b6dad50f
      
https://github.com/WebKit/WebKit/commit/eeb51f0ea0f0e1f38d9330d3113c5392b6dad50f
  Author: Ben Nham <[email protected]>
  Date:   2023-03-02 (Thu, 02 Mar 2023)

  Changed paths:
    M LayoutTests/TestExpectations
    A 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-allowed.h2.window-expected.txt
    A 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-allowed.h2.window.html
    A 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-allowed.h2.window.js
    A 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-blocked.h2.window-expected.txt
    A 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-blocked.h2.window.html
    A 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-blocked.h2.window.js
    A LayoutTests/http/wpt/loading/early-hints/preconnect.h2.window-expected.txt
    A LayoutTests/http/wpt/loading/early-hints/preconnect.h2.window.html
    A LayoutTests/http/wpt/loading/early-hints/preconnect.h2.window.js
    A LayoutTests/http/wpt/loading/early-hints/resources/blank.png
    A LayoutTests/http/wpt/loading/early-hints/resources/blank.png.headers
    A LayoutTests/http/wpt/loading/early-hints/resources/constants.sub.js
    A LayoutTests/http/wpt/loading/early-hints/resources/preconnect.h2.py
    A LayoutTests/http/wpt/loading/early-hints/resources/preconnect.html
    M LayoutTests/imported/w3c/resources/config.json
    M LayoutTests/platform/ios-wk2/TestExpectations
    M LayoutTests/platform/mac-wk2/TestExpectations
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/Headers.cmake
    M Source/WebCore/loader/LinkHeader.h
    A Source/WebKit/NetworkProcess/EarlyHintsResourceLoader.cpp
    A Source/WebKit/NetworkProcess/EarlyHintsResourceLoader.h
    M Source/WebKit/NetworkProcess/NetworkDataTask.cpp
    M Source/WebKit/NetworkProcess/NetworkDataTask.h
    M Source/WebKit/NetworkProcess/NetworkLoad.cpp
    M Source/WebKit/NetworkProcess/NetworkLoad.h
    M Source/WebKit/NetworkProcess/NetworkLoadClient.h
    M Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp
    M Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h
    M 
Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.serialization.in
    M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
    M Source/WebKit/NetworkProcess/NetworkResourceLoader.h
    M Source/WebKit/NetworkProcess/cache/NetworkCacheEntry.cpp
    M Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm
    M Source/WebKit/Sources.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
    M Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py
    M Tools/Scripts/webkitpy/port/base.py
    M Tools/Scripts/webkitpy/port/driver.py
    M Tools/Scripts/webkitpy/port/test.py

  Log Message:
  -----------
  Support preconnect via HTTP early hints
https://bugs.webkit.org/show_bug.cgi?id=253120
rdar://106055702

Reviewed by Youenn Fablet.

This adds support for preconnect via HTTP early hints (as documented in RFC8297 
and the HTML
spec). A number of websites already use these, e.g. many Shopify websites send 
an early hint to
preconnect to cdn.shopify.com.

NetworkProcess parses and processes the early hint. The 103 Early Hints 
response is piped back from
the NSURLSessionDataTask delegate method back to NetworkResourceLoader. 
NetworkResourceLoader passes
the early hint response to EarlyHintsResourceLoader. EarlyHintsResourceLoader 
then parses the
response headers for a Content-Security-Policy (if it exists) and any Link 
headers with
`rel=preconnect`. EarlyHintsResourceLoader then starts preconnecting to origins 
that pass the CSP
check.

Like Chrome, we only handle the first 103 response on top level navigation 
received over HTTP/2 or
higher. This avoids having to think about various edge cases, e.g. a 103 
response with a CSP
followed by another 103 response with a differing CSP.

For testing, I wanted to use the existing early hints preconnect test in 
upstream WPT, but it
doesn't work right now due to bug 253043. Instead, I added a WebKit-only WPT to 
test early
preconnection with and without a CSP. Note that this required slightly changing 
our WPT driver to
properly invoke HTTP/2-only response handlers.

* LayoutTests/TestExpectations:
* 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-allowed.h2.window-expected.txt:
 Added.
* 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-allowed.h2.window.html: 
Added.
* LayoutTests/http/wpt/loading/early-hints/preconnect-csp-allowed.h2.window.js: 
Added.
(test):
* 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-blocked.h2.window-expected.txt:
 Added.
* 
LayoutTests/http/wpt/loading/early-hints/preconnect-csp-blocked.h2.window.html: 
Added.
* LayoutTests/http/wpt/loading/early-hints/preconnect-csp-blocked.h2.window.js: 
Added.
(test):
* LayoutTests/http/wpt/loading/early-hints/preconnect.h2.window-expected.txt: 
Added.
* LayoutTests/http/wpt/loading/early-hints/preconnect.h2.window.html: Added.
* LayoutTests/http/wpt/loading/early-hints/preconnect.h2.window.js: Added.
(test):
* LayoutTests/http/wpt/loading/early-hints/resources/blank.png: Added.
* LayoutTests/http/wpt/loading/early-hints/resources/blank.png.headers: Added.
* LayoutTests/http/wpt/loading/early-hints/resources/constants.sub.js: Added.
* LayoutTests/http/wpt/loading/early-hints/resources/preconnect.h2.py: Added.
(handle_headers):
(main):
* LayoutTests/http/wpt/loading/early-hints/resources/preconnect.html: Added.
* LayoutTests/imported/w3c/resources/config.json:
* LayoutTests/platform/ios-wk2/TestExpectations:
* LayoutTests/platform/mac-wk2/TestExpectations:
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebCore/Headers.cmake:
* Source/WebCore/loader/LinkHeader.h:
* Source/WebKit/NetworkProcess/EarlyHintsResourceLoader.cpp: Added.
(WebKit::EarlyHintsResourceLoader::EarlyHintsResourceLoader):
(WebKit::EarlyHintsResourceLoader::addConsoleMessage):
(WebKit::EarlyHintsResourceLoader::enqueueSecurityPolicyViolationEvent):
(WebKit::EarlyHintsResourceLoader::handleEarlyHintsResponse):
(WebKit::EarlyHintsResourceLoader::constructPreconnectRequest):
(WebKit::EarlyHintsResourceLoader::startPreconnectTask):
* Source/WebKit/NetworkProcess/EarlyHintsResourceLoader.h: Added.
* Source/WebKit/NetworkProcess/NetworkDataTask.cpp:
(WebKit::NetworkDataTask::didReceiveInformationalResponse):
* Source/WebKit/NetworkProcess/NetworkDataTask.h:
(WebKit::NetworkDataTaskClient::didReceiveInformationalResponse):
* Source/WebKit/NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::didReceiveInformationalResponse):
* Source/WebKit/NetworkProcess/NetworkLoad.h:
* Source/WebKit/NetworkProcess/NetworkLoadClient.h:
(WebKit::NetworkLoadClient::didReceiveInformationalResponse):
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h:
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.serialization.in:
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::didReceiveInformationalResponse):
* Source/WebKit/NetworkProcess/NetworkResourceLoader.h:
* Source/WebKit/NetworkProcess/cache/NetworkCacheEntry.cpp:
* Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate URLSession:task:_didReceiveInformationalResponse:]):
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::addParametersShared):
* Tools/Scripts/webkitpy/layout_tests/servers/web_platform_test_server.py:
(base_h2_url):
(base_url_list):
* Tools/Scripts/webkitpy/port/base.py:
(Port.web_platform_test_server_base_h2_url):
* Tools/Scripts/webkitpy/port/driver.py:
(Driver.__init__):
(Driver.wpt_webkit_test_path_to_uri):
* Tools/Scripts/webkitpy/port/test.py:

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to