Diff
Modified: trunk/Source/WebCore/ChangeLog (285223 => 285224)
--- trunk/Source/WebCore/ChangeLog 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebCore/ChangeLog 2021-11-03 20:24:42 UTC (rev 285224)
@@ -1,3 +1,20 @@
+2021-11-03 Chris Dumez <cdu...@apple.com>
+
+ Clicking a link should preconnect to destination as first party
+ https://bugs.webkit.org/show_bug.cgi?id=232668
+
+ Reviewed by Alex Christensen.
+
+ Clicking a link should preconnect to destination as first party, not third-party. Otherwise, the
+ preconnect is wasted when session isolation based on registrable domain is enabled. This is a
+ follow-up to r284730.
+
+ * html/HTMLAnchorElement.cpp:
+ (WebCore::HTMLAnchorElement::handleClick):
+ * loader/LinkLoader.cpp:
+ (WebCore::LinkLoader::preconnectIfNeeded):
+ * loader/LoaderStrategy.h:
+
2021-11-03 Devin Rousso <drou...@apple.com>
[Modern Media Controls] should show tracks button/menu for <audio>
Modified: trunk/Source/WebCore/html/HTMLAnchorElement.cpp (285223 => 285224)
--- trunk/Source/WebCore/html/HTMLAnchorElement.cpp 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.cpp 2021-11-03 20:24:42 UTC (rev 285224)
@@ -541,9 +541,9 @@
sendPings(completedURL);
// Preconnect to the link's target for improved page load time.
- if (completedURL.protocolIsInHTTPFamily()) {
+ if (completedURL.protocolIsInHTTPFamily() && ((frame->isMainFrame() && isSelfTargetFrameName(effectiveTarget)) || isBlankTargetFrameName(effectiveTarget))) {
auto storageCredentialsPolicy = frame->page() && frame->page()->canUseCredentialStorage() ? StoredCredentialsPolicy::Use : StoredCredentialsPolicy::DoNotUse;
- platformStrategies()->loaderStrategy()->preconnectTo(frame->loader(), completedURL, storageCredentialsPolicy, nullptr);
+ platformStrategies()->loaderStrategy()->preconnectTo(frame->loader(), completedURL, storageCredentialsPolicy, LoaderStrategy::ShouldPreconnectAsFirstParty::Yes, nullptr);
}
}
Modified: trunk/Source/WebCore/loader/LinkLoader.cpp (285223 => 285224)
--- trunk/Source/WebCore/loader/LinkLoader.cpp 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebCore/loader/LinkLoader.cpp 2021-11-03 20:24:42 UTC (rev 285224)
@@ -217,7 +217,7 @@
if (equalIgnoringASCIICase(params.crossOrigin, "anonymous") && document.securityOrigin().isSameOriginDomain(SecurityOrigin::create(href)))
storageCredentialsPolicy = StoredCredentialsPolicy::DoNotUse;
ASSERT(document.frame()->loader().networkingContext());
- platformStrategies()->loaderStrategy()->preconnectTo(document.frame()->loader(), href, storageCredentialsPolicy, [weakDocument = WeakPtr { document }, href](ResourceError error) {
+ platformStrategies()->loaderStrategy()->preconnectTo(document.frame()->loader(), href, storageCredentialsPolicy, LoaderStrategy::ShouldPreconnectAsFirstParty::No, [weakDocument = WeakPtr { document }, href](ResourceError error) {
if (!weakDocument)
return;
Modified: trunk/Source/WebCore/loader/LoaderStrategy.h (285223 => 285224)
--- trunk/Source/WebCore/loader/LoaderStrategy.h 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebCore/loader/LoaderStrategy.h 2021-11-03 20:24:42 UTC (rev 285224)
@@ -79,7 +79,8 @@
virtual void startPingLoad(Frame&, ResourceRequest&, const HTTPHeaderMap& originalRequestHeaders, const FetchOptions&, ContentSecurityPolicyImposition, PingLoadCompletionHandler&& = { }) = 0;
using PreconnectCompletionHandler = Function<void(const ResourceError&)>;
- virtual void preconnectTo(FrameLoader&, const URL&, StoredCredentialsPolicy, PreconnectCompletionHandler&&) = 0;
+ enum class ShouldPreconnectAsFirstParty : bool { No, Yes };
+ virtual void preconnectTo(FrameLoader&, const URL&, StoredCredentialsPolicy, ShouldPreconnectAsFirstParty, PreconnectCompletionHandler&&) = 0;
virtual void setCaptureExtraNetworkLoadMetricsEnabled(bool) = 0;
Modified: trunk/Source/WebKit/ChangeLog (285223 => 285224)
--- trunk/Source/WebKit/ChangeLog 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebKit/ChangeLog 2021-11-03 20:24:42 UTC (rev 285224)
@@ -1,3 +1,18 @@
+2021-11-03 Chris Dumez <cdu...@apple.com>
+
+ Clicking a link should preconnect to destination as first party
+ https://bugs.webkit.org/show_bug.cgi?id=232668
+
+ Reviewed by Alex Christensen.
+
+ Clicking a link should preconnect to destination as first party, not third-party. Otherwise, the
+ preconnect is wasted when session isolation based on registrable domain is enabled. This is a
+ follow-up to r284730.
+
+ * WebProcess/Network/WebLoaderStrategy.cpp:
+ (WebKit::WebLoaderStrategy::preconnectTo):
+ * WebProcess/Network/WebLoaderStrategy.h:
+
2021-11-03 Jer Noble <jer.no...@apple.com>
[Catalina] HLS streams will not select HDR variants when GPU Process is enabled
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (285223 => 285224)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2021-11-03 20:24:42 UTC (rev 285224)
@@ -766,7 +766,7 @@
completionHandler(WTFMove(error), WTFMove(response));
}
-void WebLoaderStrategy::preconnectTo(FrameLoader& frameLoader, const URL& url, StoredCredentialsPolicy storedCredentialsPolicy, PreconnectCompletionHandler&& completionHandler)
+void WebLoaderStrategy::preconnectTo(FrameLoader& frameLoader, const URL& url, StoredCredentialsPolicy storedCredentialsPolicy, ShouldPreconnectAsFirstParty shouldPreconnectAsFirstParty, PreconnectCompletionHandler&& completionHandler)
{
auto* webFrameLoaderClient = toWebFrameLoaderClient(frameLoader.client());
if (!webFrameLoaderClient) {
@@ -782,10 +782,10 @@
return;
}
- preconnectTo(ResourceRequest { url }, *webPage, webFrame, storedCredentialsPolicy, WTFMove(completionHandler));
+ preconnectTo(ResourceRequest { url }, *webPage, webFrame, storedCredentialsPolicy, shouldPreconnectAsFirstParty, WTFMove(completionHandler));
}
-void WebLoaderStrategy::preconnectTo(WebCore::ResourceRequest&& request, WebPage& webPage, WebFrame& webFrame, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, PreconnectCompletionHandler&& completionHandler)
+void WebLoaderStrategy::preconnectTo(WebCore::ResourceRequest&& request, WebPage& webPage, WebFrame& webFrame, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, ShouldPreconnectAsFirstParty shouldPreconnectAsFirstParty, PreconnectCompletionHandler&& completionHandler)
{
if (webPage.corePage() && !webPage.corePage()->allowsLoadFromURL(request.url(), MainFrameMainResource::No)) {
if (completionHandler)
@@ -794,7 +794,10 @@
}
if (auto* document = webPage.mainFrame()->document()) {
- request.setFirstPartyForCookies(document->firstPartyForCookies());
+ if (shouldPreconnectAsFirstParty == ShouldPreconnectAsFirstParty::Yes)
+ request.setFirstPartyForCookies(request.url());
+ else
+ request.setFirstPartyForCookies(document->firstPartyForCookies());
if (auto* loader = document->loader())
request.setIsAppInitiated(loader->lastNavigationWasAppInitiated());
}
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h (285223 => 285224)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h 2021-11-03 20:24:42 UTC (rev 285224)
@@ -69,8 +69,8 @@
void startPingLoad(WebCore::Frame&, WebCore::ResourceRequest&, const WebCore::HTTPHeaderMap& originalRequestHeaders, const WebCore::FetchOptions&, WebCore::ContentSecurityPolicyImposition, PingLoadCompletionHandler&&) final;
void didFinishPingLoad(WebCore::ResourceLoaderIdentifier pingLoadIdentifier, WebCore::ResourceError&&, WebCore::ResourceResponse&&);
- void preconnectTo(WebCore::ResourceRequest&&, WebPage&, WebFrame&, WebCore::StoredCredentialsPolicy, PreconnectCompletionHandler&& = nullptr);
- void preconnectTo(WebCore::FrameLoader&, const URL&, WebCore::StoredCredentialsPolicy, PreconnectCompletionHandler&&) final;
+ void preconnectTo(WebCore::ResourceRequest&&, WebPage&, WebFrame&, WebCore::StoredCredentialsPolicy, ShouldPreconnectAsFirstParty, PreconnectCompletionHandler&& = nullptr);
+ void preconnectTo(WebCore::FrameLoader&, const URL&, WebCore::StoredCredentialsPolicy, ShouldPreconnectAsFirstParty, PreconnectCompletionHandler&&) final;
void didFinishPreconnection(WebCore::ResourceLoaderIdentifier preconnectionIdentifier, WebCore::ResourceError&&);
void setCaptureExtraNetworkLoadMetricsEnabled(bool) final;
Modified: trunk/Source/WebKitLegacy/ChangeLog (285223 => 285224)
--- trunk/Source/WebKitLegacy/ChangeLog 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebKitLegacy/ChangeLog 2021-11-03 20:24:42 UTC (rev 285224)
@@ -1,3 +1,18 @@
+2021-11-03 Chris Dumez <cdu...@apple.com>
+
+ Clicking a link should preconnect to destination as first party
+ https://bugs.webkit.org/show_bug.cgi?id=232668
+
+ Reviewed by Alex Christensen.
+
+ Clicking a link should preconnect to destination as first party, not third-party. Otherwise, the
+ preconnect is wasted when session isolation based on registrable domain is enabled. This is a
+ follow-up to r284730.
+
+ * WebCoreSupport/WebResourceLoadScheduler.cpp:
+ (WebResourceLoadScheduler::preconnectTo):
+ * WebCoreSupport/WebResourceLoadScheduler.h:
+
2021-10-29 Alex Christensen <achristen...@webkit.org>
Remove code inside ENABLE(NETSCAPE_PLUGIN_API)
Modified: trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.cpp (285223 => 285224)
--- trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.cpp 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.cpp 2021-11-03 20:24:42 UTC (rev 285224)
@@ -402,7 +402,7 @@
NetworkStateNotifier::singleton().addListener(WTFMove(listener));
}
-void WebResourceLoadScheduler::preconnectTo(FrameLoader&, const URL&, StoredCredentialsPolicy, PreconnectCompletionHandler&&)
+void WebResourceLoadScheduler::preconnectTo(FrameLoader&, const URL&, StoredCredentialsPolicy, ShouldPreconnectAsFirstParty, PreconnectCompletionHandler&&)
{
}
Modified: trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.h (285223 => 285224)
--- trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.h 2021-11-03 20:14:47 UTC (rev 285223)
+++ trunk/Source/WebKitLegacy/WebCoreSupport/WebResourceLoadScheduler.h 2021-11-03 20:24:42 UTC (rev 285224)
@@ -59,7 +59,7 @@
void startPingLoad(WebCore::Frame&, WebCore::ResourceRequest&, const WebCore::HTTPHeaderMap&, const WebCore::FetchOptions&, WebCore::ContentSecurityPolicyImposition, PingLoadCompletionHandler&&) final;
- void preconnectTo(WebCore::FrameLoader&, const URL&, WebCore::StoredCredentialsPolicy, PreconnectCompletionHandler&&) final;
+ void preconnectTo(WebCore::FrameLoader&, const URL&, WebCore::StoredCredentialsPolicy, ShouldPreconnectAsFirstParty, PreconnectCompletionHandler&&) final;
void setCaptureExtraNetworkLoadMetricsEnabled(bool) final { }