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