- Revision
- 294987
- Author
- mattwood...@apple.com
- Date
- 2022-05-27 22:25:49 -0700 (Fri, 27 May 2022)
Log Message
Use desktop User Agent when preconnecting for loads that are predicted to use desktop content mode
https://bugs.webkit.org/show_bug.cgi?id=240938
Reviewed by Geoffrey Garen.
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _preconnectToServer:]):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::loadRequestWithNavigationShared):
(WebKit::WebPageProxy::preconnectTo):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::useDesktopClassBrowsing const):
(WebKit::WebPageProxy::predictedUserAgentForRequest const):
(WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):
* Source/WebKit/UIProcess/mac/WebPageProxyMac.mm:
(WebKit::WebPageProxy::predictedUserAgentForRequest const):
Canonical link: https://commits.webkit.org/251091@main
Modified Paths
Diff
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (294986 => 294987)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2022-05-28 05:24:00 UTC (rev 294986)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2022-05-28 05:25:49 UTC (rev 294987)
@@ -3438,7 +3438,7 @@
- (void)_preconnectToServer:(NSURL *)url
{
THROW_IF_SUSPENDED;
- _page->preconnectTo(url);
+ _page->preconnectTo(url, _page->userAgent());
}
- (BOOL)_canUseCredentialStorage
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (294986 => 294987)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2022-05-28 05:24:00 UTC (rev 294986)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2022-05-28 05:25:49 UTC (rev 294987)
@@ -1447,7 +1447,7 @@
addPlatformLoadParameters(process, loadParameters);
if (shouldTreatAsContinuingLoad == ShouldTreatAsContinuingLoad::No)
- preconnectTo(url);
+ preconnectTo(url, predictedUserAgentForRequest(loadParameters.request));
navigation.setIsLoadedWithNavigationShared(true);
@@ -4697,7 +4697,7 @@
m_pageLoadState.setNetworkRequestsInProgress(transaction, networkRequestsInProgress);
}
-void WebPageProxy::preconnectTo(const URL& url)
+void WebPageProxy::preconnectTo(const URL& url, const String& userAgent)
{
if (!m_websiteDataStore->configuration().allowsServerPreconnect())
return;
@@ -4704,7 +4704,7 @@
auto storedCredentialsPolicy = m_canUseCredentialStorage ? WebCore::StoredCredentialsPolicy::Use : WebCore::StoredCredentialsPolicy::DoNotUse;
- websiteDataStore().networkProcess().preconnectTo(sessionID(), identifier(), webPageID(), url, userAgent(), storedCredentialsPolicy, isNavigatingToAppBoundDomain(), m_lastNavigationWasAppInitiated ? LastNavigationWasAppInitiated::Yes : LastNavigationWasAppInitiated::No);
+ websiteDataStore().networkProcess().preconnectTo(sessionID(), identifier(), webPageID(), url, userAgent, storedCredentialsPolicy, isNavigatingToAppBoundDomain(), m_lastNavigationWasAppInitiated ? LastNavigationWasAppInitiated::Yes : LastNavigationWasAppInitiated::No);
}
void WebPageProxy::setCanUseCredentialStorage(bool canUseCredentialStorage)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (294986 => 294987)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2022-05-28 05:24:00 UTC (rev 294986)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2022-05-28 05:25:49 UTC (rev 294987)
@@ -1085,6 +1085,11 @@
void setCustomUserAgent(const String&);
const String& customUserAgent() const { return m_customUserAgent; }
static String standardUserAgent(const String& applicationName = String());
+#if PLATFORM(IOS_FAMILY)
+ String predictedUserAgentForRequest(const WebCore::ResourceRequest&) const;
+#else
+ String predictedUserAgentForRequest(const WebCore::ResourceRequest&) const { return userAgent(); }
+#endif
bool supportsTextEncoding() const;
void setCustomTextEncodingName(const String&);
@@ -1972,7 +1977,7 @@
WebPopupMenuProxy* activePopupMenu() const { return m_activePopupMenu.get(); }
- void preconnectTo(const URL&);
+ void preconnectTo(const URL&, const String& userAgent);
bool canUseCredentialStorage() { return m_canUseCredentialStorage; }
void setCanUseCredentialStorage(bool);
@@ -2433,6 +2438,7 @@
bool isValidPerformActionOnElementAuthorizationToken(const String& authorizationToken) const;
bool isDesktopClassBrowsingRecommended(const WebCore::ResourceRequest&) const;
+ bool useDesktopClassBrowsing(const API::WebsitePolicies&, const WebCore::ResourceRequest&) const;
#endif
void focusedFrameChanged(const std::optional<WebCore::FrameIdentifier>&);
Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (294986 => 294987)
--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2022-05-28 05:24:00 UTC (rev 294986)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm 2022-05-28 05:25:49 UTC (rev 294987)
@@ -1420,31 +1420,51 @@
return shouldRecommendDesktopClassBrowsing;
}
-WebContentMode WebPageProxy::effectiveContentModeAfterAdjustingPolicies(API::WebsitePolicies& policies, const WebCore::ResourceRequest& request)
+bool WebPageProxy::useDesktopClassBrowsing(const API::WebsitePolicies& policies, const WebCore::ResourceRequest& request) const
{
- if (m_preferences->mediaSourceEnabled()) {
- // FIXME: This is a compatibility hack to ensure that turning MSE on via the existing preference still enables MSE.
- policies.setMediaSourcePolicy(WebsiteMediaSourcePolicy::Enable);
- }
-
- bool useDesktopBrowsingMode;
switch (policies.preferredContentMode()) {
case WebContentMode::Recommended: {
- useDesktopBrowsingMode = isDesktopClassBrowsingRecommended(request);
- break;
+ return isDesktopClassBrowsingRecommended(request);
}
case WebContentMode::Mobile:
- useDesktopBrowsingMode = false;
- break;
+ return false;
case WebContentMode::Desktop:
- useDesktopBrowsingMode = !policies.allowSiteSpecificQuirksToOverrideContentMode() || desktopClassBrowsingRecommendedForRequest(request) != RecommendDesktopClassBrowsingForRequest::No;
- break;
+ return !policies.allowSiteSpecificQuirksToOverrideContentMode() || desktopClassBrowsingRecommendedForRequest(request) != RecommendDesktopClassBrowsingForRequest::No;
default:
ASSERT_NOT_REACHED();
- useDesktopBrowsingMode = false;
- break;
+ return false;
}
+}
+String WebPageProxy::predictedUserAgentForRequest(const WebCore::ResourceRequest& request) const
+{
+ if (!customUserAgent().isEmpty())
+ return customUserAgent();
+ if (!m_configuration->defaultWebsitePolicies())
+ return userAgent();
+
+ const API::WebsitePolicies& policies = *m_configuration->defaultWebsitePolicies();
+ if (!policies.customUserAgent().isEmpty())
+ return policies.customUserAgent();
+
+ if (policies.applicationNameForDesktopUserAgent().isEmpty())
+ return userAgent();
+
+ if (!useDesktopClassBrowsing(policies, request))
+ return userAgent();
+
+ return standardUserAgentWithApplicationName(policies.applicationNameForDesktopUserAgent(), emptyString(), UserAgentType::Desktop);
+}
+
+WebContentMode WebPageProxy::effectiveContentModeAfterAdjustingPolicies(API::WebsitePolicies& policies, const WebCore::ResourceRequest& request)
+{
+ if (m_preferences->mediaSourceEnabled()) {
+ // FIXME: This is a compatibility hack to ensure that turning MSE on via the existing preference still enables MSE.
+ policies.setMediaSourcePolicy(WebsiteMediaSourcePolicy::Enable);
+ }
+
+ bool useDesktopBrowsingMode = useDesktopClassBrowsing(policies, request);
+
m_preferFasterClickOverDoubleTap = false;
if (!useDesktopBrowsingMode) {