Title: [294987] trunk/Source/WebKit/UIProcess
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) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to