⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 246118 in webkit


Ignore:
Timestamp:
Jun 5, 2019, 11:23:06 AM (7 years ago)
Author:
Wenson Hsieh
Message:

Upstream content mode support into open source from WebKitAdditions
https://bugs.webkit.org/show_bug.cgi?id=198484
<rdar://problem/51355671>

Reviewed by Andy Estes.

Source/WebCore:

  • Modules/modern-media-controls/media/media-controller.js:

(MediaController.prototype.get layoutTraits):

Adjust modern media controls code to use iOS-style controls on PLATFORM(IOS_FAMILY), instead of depending on the
navigator's platform name or the presence of touch events.

  • page/Quirks.cpp:

(WebCore::shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost):
(WebCore::shouldEmulateUndoRedoInHiddenEditableAreasForHost):

  • page/SettingsBase.h:
  • rendering/RenderThemeIOS.mm:

(WebCore::RenderThemeIOS::mediaControlsScript):

Source/WebCore/PAL:

Add some new constants to MobileGestaltSPI.h.

  • pal/spi/ios/MobileGestaltSPI.h:

Source/WebKit:

Move code for handling WKContentMode into open source. No change in behavior, for internal builds.

  • Shared/API/Cocoa/WebKit.apinotes:
  • Shared/WebContentMode.h: Renamed from Source/WebKit/Shared/WebCompatibilityMode.h.
  • Shared/WebPreferences.yaml:
  • UIProcess/API/APINavigation.h:

(API::Navigation::setEffectiveContentMode):
(API::Navigation::effectiveContentMode const):
(API::Navigation::setEffectiveCompatibilityMode): Deleted.
(API::Navigation::effectiveCompatibilityMode const): Deleted.

  • UIProcess/API/APINavigationClient.h:

(API::NavigationClient::shouldBypassContentModeSafeguards const):
(API::NavigationClient::shouldBypassCompatibilityModeSafeguards const): Deleted.

  • UIProcess/API/APIWebsitePolicies.cpp:

(API::WebsitePolicies::copy const):

  • UIProcess/API/APIWebsitePolicies.h:
  • UIProcess/API/Cocoa/WKNavigation.h:
  • UIProcess/API/Cocoa/WKNavigation.mm:

(-[WKNavigation effectiveContentMode]):

  • UIProcess/API/Cocoa/WKWebpagePreferences.h:
  • UIProcess/API/Cocoa/WKWebpagePreferences.mm:

(WebKit::contentMode):
(WebKit::webContentMode):
(-[WKWebpagePreferences _allowSiteSpecificQuirksToOverrideCompatibilityMode]):
(-[WKWebpagePreferences _setAllowSiteSpecificQuirksToOverrideCompatibilityMode:]):
(-[WKWebpagePreferences setPreferredContentMode:]):
(-[WKWebpagePreferences preferredContentMode]):

  • UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:
  • UIProcess/Cocoa/NavigationState.h:
  • UIProcess/Cocoa/NavigationState.mm:

(WebKit::NavigationState::NavigationClient::shouldBypassContentModeSafeguards const):
(WebKit::NavigationState::NavigationClient::shouldBypassCompatibilityModeSafeguards const): Deleted.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):
(WebKit::WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies): Deleted.

  • UIProcess/WebPageProxy.h:
  • UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::desktopClassBrowsingSupported):
(WebKit::webViewSizeIsNarrow):
(WebKit::desktopClassBrowsingRecommendedForRequest):
(WebKit::desktopClassBrowsingRecommended):
(WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):

  • WebKit.xcodeproj/project.pbxproj:

Tools:

Change the "useModernCompatibilityMode" layout test option to instead be "contentMode", with values of either
"mobile" or "desktop".

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/ios/PreferredCompatibilityMode.mm: Removed.
  • TestWebKitAPI/ios/PreferredContentMode.mm: Added.

(-[ContentModeNavigationDelegate setDecidePolicyForNavigationActionWithPreferences:]):
(-[ContentModeNavigationDelegate decidePolicyForNavigationActionWithPreferences]):
(-[ContentModeNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
(+[WKWebpagePreferences preferencesWithContentMode:]):
(-[WKWebView navigatorUserAgent]):
(-[WKWebView navigatorPlatform]):
(-[WKWebView loadTestPageNamed:withPolicyDecisionHandler:]):
(-[WKWebView loadHTMLString:withPolicyDecisionHandler:]):
(-[WKWebView loadTestPageNamed:andExpectEffectiveContentMode:withPolicyDecisionHandler:]):
(-[NSString shouldContainStrings:]):
(IPhoneUserInterfaceSwizzler::IPhoneUserInterfaceSwizzler):
(IPhoneUserInterfaceSwizzler::phoneUserInterfaceIdiom):
(TestWebKitAPI::setUpWebViewForPreferredContentModeTestingWithoutNavigationDelegate):
(TestWebKitAPI::setUpWebViewForPreferredContentModeTesting):
(TestWebKitAPI::makeContentModeDecisionHandler):
(TestWebKitAPI::TEST):

  • WebKitTestRunner/TestController.cpp:

(WTR::updateTestOptionsFromTestHeader):

  • WebKitTestRunner/TestController.h:
  • WebKitTestRunner/TestOptions.h:

(WTR::TestOptions::hasSameInitializationOptions const):

  • WebKitTestRunner/cocoa/TestControllerCocoa.mm:

(WTR::TestController::platformCreateWebView):
(WTR::TestController::configureContentMode):
(WTR::TestController::enableModernCompatibilityMode): Deleted.

LayoutTests:

Explicitly opt a few tests into desktop or mobile content mode.

  • fast/media/ios/ipad/enable-MediaSource-API-in-modern-compatibility-mode.html:
  • fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode-expected.html:
  • fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode.html:
  • media/modern-media-controls/media-controller/ios/media-controller-ios-layout-traits-modern-compatibility-mode.html:
  • platform/ipad/fast/css/webkit-overflow-scrolling-parsing-modern-compatibility-mode.html:
  • platform/ipad/fast/viewport/empty-meta.html:
  • platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html:
  • platform/ipad/media/modern-media-controls/media-documents/media-document-audio-ios-sizing.html:
Location:
trunk
Files:
1 added
1 deleted
40 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r246117 r246118  
     12019-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Upstream content mode support into open source from WebKitAdditions
     4        https://bugs.webkit.org/show_bug.cgi?id=198484
     5        <rdar://problem/51355671>
     6
     7        Reviewed by Andy Estes.
     8
     9        Explicitly opt a few tests into desktop or mobile content mode.
     10
     11        * fast/media/ios/ipad/enable-MediaSource-API-in-modern-compatibility-mode.html:
     12        * fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode-expected.html:
     13        * fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode.html:
     14        * media/modern-media-controls/media-controller/ios/media-controller-ios-layout-traits-modern-compatibility-mode.html:
     15        * platform/ipad/fast/css/webkit-overflow-scrolling-parsing-modern-compatibility-mode.html:
     16        * platform/ipad/fast/viewport/empty-meta.html:
     17        * platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html:
     18        * platform/ipad/media/modern-media-controls/media-documents/media-document-audio-ios-sizing.html:
     19
    1202019-06-05  Shawn Roberts  <sroberts@apple.com>
    221
  • trunk/LayoutTests/fast/media/ios/ipad/enable-MediaSource-API-in-modern-compatibility-mode.html

    r244197 r246118  
    1 <!-- webkit-test-runner [ shouldUseModernCompatibilityMode=true ] -->
     1<!-- webkit-test-runner [ contentMode=desktop ] -->
    22<!DOCTYPE html>
    33<html>
  • trunk/LayoutTests/fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode-expected.html

    r245483 r246118  
    1 <!DOCTYPE html> <!-- webkit-test-runner [ shouldUseModernCompatibilityMode=true internal:AsyncOverflowScrollingEnabled=true ] -->
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=desktop internal:AsyncOverflowScrollingEnabled=true ] -->
    22<html>
    33<head>
  • trunk/LayoutTests/fast/scrolling/ipad/overflow-scrolling-touch-enabled-stacking-modern-compatibility-mode.html

    r245483 r246118  
    1 <!DOCTYPE html> <!-- webkit-test-runner [ shouldUseModernCompatibilityMode=true internal:AsyncOverflowScrollingEnabled=true ] -->
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=desktop internal:AsyncOverflowScrollingEnabled=true ] -->
    22<html>
    33<head>
  • trunk/LayoutTests/media/modern-media-controls/media-controller/ios/media-controller-ios-layout-traits-modern-compatibility-mode.html

    r244253 r246118  
    1 <!DOCTYPE html><!-- webkit-test-runner [ shouldUseModernCompatibilityMode=true ] -->
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=desktop ] -->
    22<script src="../../../../resources/js-test-pre.js"></script>
    33<script src="../../resources/media-controls-utils.js" type="text/javascript"></script>
  • trunk/LayoutTests/platform/ipad/fast/css/webkit-overflow-scrolling-parsing-modern-compatibility-mode.html

    r245483 r246118  
    1 <!DOCTYPE html> <!-- webkit-test-runner [ shouldUseModernCompatibilityMode=true ] -->
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=desktop ] -->
    22<html>
    33<head>
  • trunk/LayoutTests/platform/ipad/fast/viewport/empty-meta.html

    r240150 r246118  
    1 <!DOCTYPE html>
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=mobile ] -->
    22
    33<html>
  • trunk/LayoutTests/platform/ipad/fast/viewport/viewport-unchanged-by-minimum-effective-width-if-not-ignore-meta-viewport.html

    r240150 r246118  
    1 <!DOCTYPE html>
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=mobile ] -->
    22<html>
    33<head>
  • trunk/LayoutTests/platform/ipad/media/modern-media-controls/media-documents/media-document-audio-ios-sizing.html

    r240150 r246118  
     1<!DOCTYPE html> <!-- webkit-test-runner [ contentMode=mobile ] -->
    12<script src="../../../../../resources/js-test-pre.js"></script>
    23<meta name="viewport" content="width=device-width, initial-scale=1">
  • trunk/Source/WebCore/ChangeLog

    r246115 r246118  
     12019-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Upstream content mode support into open source from WebKitAdditions
     4        https://bugs.webkit.org/show_bug.cgi?id=198484
     5        <rdar://problem/51355671>
     6
     7        Reviewed by Andy Estes.
     8
     9        * Modules/modern-media-controls/media/media-controller.js:
     10        (MediaController.prototype.get layoutTraits):
     11
     12        Adjust modern media controls code to use iOS-style controls on PLATFORM(IOS_FAMILY), instead of depending on the
     13        navigator's platform name or the presence of touch events.
     14
     15        * page/Quirks.cpp:
     16        (WebCore::shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost):
     17        (WebCore::shouldEmulateUndoRedoInHiddenEditableAreasForHost):
     18        * page/SettingsBase.h:
     19        * rendering/RenderThemeIOS.mm:
     20        (WebCore::RenderThemeIOS::mediaControlsScript):
     21
    1222019-06-05  Saam Barati  <sbarati@apple.com>
    223
  • trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js

    r244259 r246118  
    100100            return LayoutTraits.Compact;
    101101
    102         // The window.navigator.platform !== "MacIntel" is strictly used for the test infrastructure since touch events are off for open-source bots.
    103         let traits = GestureRecognizer.SupportsTouches || window.navigator.platform !== "MacIntel" ? LayoutTraits.iOS : LayoutTraits.macOS;
     102        let traits = window.isIOSFamily ? LayoutTraits.iOS : LayoutTraits.macOS;
    104103        if (this.isFullscreen)
    105104            return traits | LayoutTraits.Fullscreen;
  • trunk/Source/WebCore/PAL/ChangeLog

    r246039 r246118  
     12019-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Upstream content mode support into open source from WebKitAdditions
     4        https://bugs.webkit.org/show_bug.cgi?id=198484
     5        <rdar://problem/51355671>
     6
     7        Reviewed by Andy Estes.
     8
     9        Add some new constants to MobileGestaltSPI.h.
     10
     11        * pal/spi/ios/MobileGestaltSPI.h:
     12
    1132019-06-03  Don Olmstead  <don.olmstead@sony.com>
    214
  • trunk/Source/WebCore/PAL/pal/spi/ios/MobileGestaltSPI.h

    r237266 r246118  
    3939
    4040static const CFStringRef kMGQAppleInternalInstallCapability = CFSTR("apple-internal-install");
     41static const CFStringRef kMGQMainScreenClass = CFSTR("main-screen-class");
    4142static const CFStringRef kMGQMainScreenPitch = CFSTR("main-screen-pitch");
    4243static const CFStringRef kMGQMainScreenScale = CFSTR("main-screen-scale");
     
    5657    MGDeviceClassWatch   = 6,
    5758} MGDeviceClass;
     59
     60typedef enum {
     61    MGScreenClassPad2          = 4,
     62    MGScreenClassPad3          = 6,
     63    MGScreenClassPad4          = 7,
     64} MGScreenClass;
    5865
    5966#endif
  • trunk/Source/WebCore/page/Quirks.cpp

    r246099 r246118  
    229229}
    230230
    231 #if USE(APPLE_INTERNAL_SDK)
    232 #import <WebKitAdditions/QuirksAdditions.cpp>
    233 #else
    234 
    235 static bool shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost(const StringView&)
    236 {
    237     return false;
    238 }
    239 
    240 static bool shouldEmulateUndoRedoInHiddenEditableAreasForHost(const StringView&)
    241 {
    242     return false;
    243 }
    244 
    245 #endif
     231static bool shouldSuppressAutocorrectionAndAutocaptializationInHiddenEditableAreasForHost(const StringView& host)
     232{
     233#if PLATFORM(IOS_FAMILY)
     234    return equalLettersIgnoringASCIICase(host, "docs.google.com");
     235#else
     236    UNUSED_PARAM(host);
     237    return false;
     238#endif
     239}
     240
     241static bool shouldEmulateUndoRedoInHiddenEditableAreasForHost(const StringView& host)
     242{
     243#if PLATFORM(IOS_FAMILY)
     244    return equalLettersIgnoringASCIICase(host, "docs.google.com");
     245#else
     246    UNUSED_PARAM(host);
     247    return false;
     248#endif
     249}
    246250
    247251bool Quirks::shouldDispatchSyntheticMouseEventsWhenModifyingSelection() const
  • trunk/Source/WebCore/page/SettingsBase.h

    r246048 r246118  
    217217    float m_maxTextAutosizingScaleIncrease { defaultMaxTextAutosizingScaleIncrease };
    218218#endif
    219 
    220 #if USE(APPLE_INTERNAL_SDK)
    221 #include <WebKitAdditions/SettingsAdditions.h>
    222 #endif
    223219};
    224220
  • trunk/Source/WebCore/rendering/RenderThemeIOS.mm

    r244848 r246118  
    13931393
    13941394            StringBuilder scriptBuilder;
     1395            scriptBuilder.append("window.isIOSFamily = true;");
    13951396            scriptBuilder.append([NSString stringWithContentsOfFile:[bundle pathForResource:@"modern-media-controls-localized-strings" ofType:@"js"] encoding:NSUTF8StringEncoding error:nil]);
    13961397            scriptBuilder.append([NSString stringWithContentsOfFile:[bundle pathForResource:@"modern-media-controls" ofType:@"js" inDirectory:@"modern-media-controls"] encoding:NSUTF8StringEncoding error:nil]);
  • trunk/Source/WebKit/ChangeLog

    r246116 r246118  
     12019-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Upstream content mode support into open source from WebKitAdditions
     4        https://bugs.webkit.org/show_bug.cgi?id=198484
     5        <rdar://problem/51355671>
     6
     7        Reviewed by Andy Estes.
     8
     9        Move code for handling WKContentMode into open source. No change in behavior, for internal builds.
     10
     11        * Shared/API/Cocoa/WebKit.apinotes:
     12        * Shared/WebContentMode.h: Renamed from Source/WebKit/Shared/WebCompatibilityMode.h.
     13        * Shared/WebPreferences.yaml:
     14        * UIProcess/API/APINavigation.h:
     15        (API::Navigation::setEffectiveContentMode):
     16        (API::Navigation::effectiveContentMode const):
     17        (API::Navigation::setEffectiveCompatibilityMode): Deleted.
     18        (API::Navigation::effectiveCompatibilityMode const): Deleted.
     19        * UIProcess/API/APINavigationClient.h:
     20        (API::NavigationClient::shouldBypassContentModeSafeguards const):
     21        (API::NavigationClient::shouldBypassCompatibilityModeSafeguards const): Deleted.
     22        * UIProcess/API/APIWebsitePolicies.cpp:
     23        (API::WebsitePolicies::copy const):
     24        * UIProcess/API/APIWebsitePolicies.h:
     25        * UIProcess/API/Cocoa/WKNavigation.h:
     26        * UIProcess/API/Cocoa/WKNavigation.mm:
     27        (-[WKNavigation effectiveContentMode]):
     28        * UIProcess/API/Cocoa/WKWebpagePreferences.h:
     29        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
     30        (WebKit::contentMode):
     31        (WebKit::webContentMode):
     32        (-[WKWebpagePreferences _allowSiteSpecificQuirksToOverrideCompatibilityMode]):
     33        (-[WKWebpagePreferences _setAllowSiteSpecificQuirksToOverrideCompatibilityMode:]):
     34        (-[WKWebpagePreferences setPreferredContentMode:]):
     35        (-[WKWebpagePreferences preferredContentMode]):
     36        * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h:
     37        * UIProcess/Cocoa/NavigationState.h:
     38        * UIProcess/Cocoa/NavigationState.mm:
     39        (WebKit::NavigationState::NavigationClient::shouldBypassContentModeSafeguards const):
     40        (WebKit::NavigationState::NavigationClient::shouldBypassCompatibilityModeSafeguards const): Deleted.
     41        * UIProcess/WebPageProxy.cpp:
     42        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
     43        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):
     44        (WebKit::WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies): Deleted.
     45        * UIProcess/WebPageProxy.h:
     46        * UIProcess/ios/WebPageProxyIOS.mm:
     47        (WebKit::desktopClassBrowsingSupported):
     48        (WebKit::webViewSizeIsNarrow):
     49        (WebKit::desktopClassBrowsingRecommendedForRequest):
     50        (WebKit::desktopClassBrowsingRecommended):
     51        (WebKit::WebPageProxy::effectiveContentModeAfterAdjustingPolicies):
     52        * WebKit.xcodeproj/project.pbxproj:
     53
    1542019-06-05  Tim Horton  <timothy_horton@apple.com>
    255
  • trunk/Source/WebKit/Shared/API/Cocoa/WebKit.apinotes

    r244866 r246118  
    201201- Name: WKErrorCode
    202202  NSErrorDomain: WKErrorDomain
    203 #if USE(APPLE_INTERNAL_SDK)
    204 #import <WebKitAdditions/WebKitAdditions.apinotes>
    205 #endif
     203- Name: WKContentMode
     204  SwiftName: WKWebpagePreferences.ContentMode
  • trunk/Source/WebKit/Shared/WebContentMode.h

    r246117 r246118  
    3030namespace WebKit {
    3131
    32 enum class WebCompatibilityMode : uint8_t {
     32enum class WebContentMode : uint8_t {
    3333    Recommended,
    34     Legacy,
    35     Modern,
     34    Mobile,
     35    Desktop
    3636};
    3737
  • trunk/Source/WebKit/Shared/WebPreferences.yaml

    r246048 r246118  
    10711071  condition: PLATFORM(IOS_FAMILY)
    10721072
    1073 UseModernCompatibilityModeByDefault:
    1074   type: bool
    1075   defaultValue: false
    1076   humanReadableName: "Use Modern Compatibility Mode"
    1077   humanReadableDescription: "Use modern compatibility mode by default"
    1078   webcoreBinding: none
    1079   category: debug
    1080 
    10811073SimpleLineLayoutDebugBordersEnabled:
    10821074  type: bool
  • trunk/Source/WebKit/UIProcess/API/APINavigation.h

    r244444 r246118  
    3131#include "NavigationActionData.h"
    3232#include "WebBackForwardListItem.h"
    33 #include "WebCompatibilityMode.h"
     33#include "WebContentMode.h"
    3434#include <WebCore/AdClickAttribution.h>
    3535#include <WebCore/ProcessIdentifier.h>
     
    143143    const WebCore::SecurityOriginData& destinationFrameSecurityOrigin() const { return m_destinationFrameSecurityOrigin; }
    144144
    145     void setEffectiveCompatibilityMode(WebKit::WebCompatibilityMode compatibilityMode) { m_effectiveCompatibilityMode = compatibilityMode; }
    146     WebKit::WebCompatibilityMode effectiveCompatibilityMode() const { return m_effectiveCompatibilityMode; }
     145    void setEffectiveContentMode(WebKit::WebContentMode mode) { m_effectiveContentMode = mode; }
     146    WebKit::WebContentMode effectiveContentMode() const { return m_effectiveContentMode; }
    147147
    148148#if !LOG_DISABLED
     
    174174    WebCore::SecurityOriginData m_destinationFrameSecurityOrigin;
    175175    bool m_userContentExtensionsEnabled { true };
    176     WebKit::WebCompatibilityMode m_effectiveCompatibilityMode { WebKit::WebCompatibilityMode::Recommended };
     176    WebKit::WebContentMode m_effectiveContentMode { WebKit::WebContentMode::Recommended };
    177177};
    178178
  • trunk/Source/WebKit/UIProcess/API/APINavigationClient.h

    r244367 r246118  
    9292
    9393    virtual void didReceiveAuthenticationChallenge(WebKit::WebPageProxy&, WebKit::AuthenticationChallengeProxy& challenge) { challenge.listener().completeChallenge(WebKit::AuthenticationChallengeDisposition::PerformDefaultHandling); }
    94     virtual bool shouldBypassCompatibilityModeSafeguards() const { return false; }
     94    virtual bool shouldBypassContentModeSafeguards() const { return false; }
    9595
    9696    // FIXME: These function should not be part of this client.
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp

    r245483 r246118  
    5858    policies->setCustomJavaScriptUserAgentAsSiteSpecificQuirks(m_customJavaScriptUserAgentAsSiteSpecificQuirks);
    5959    policies->setCustomNavigatorPlatform(m_customNavigatorPlatform);
    60     policies->setPreferredCompatibilityMode(m_preferredCompatibilityMode);
     60    policies->setPreferredContentMode(m_preferredContentMode);
    6161    policies->setMetaViewportPolicy(m_metaViewportPolicy);
    6262    policies->setMediaSourcePolicy(m_mediaSourcePolicy);
     
    7575        customHeaderFields.uncheckedAppend(field);
    7676    policies->setCustomHeaderFields(WTFMove(customHeaderFields));
    77     policies->setAllowSiteSpecificQuirksToOverrideCompatibilityMode(m_allowSiteSpecificQuirksToOverrideCompatibilityMode);
     77    policies->setAllowSiteSpecificQuirksToOverrideContentMode(m_allowSiteSpecificQuirksToOverrideContentMode);
    7878    policies->setApplicationNameForUserAgentWithModernCompatibility(m_applicationNameForUserAgentWithModernCompatibility);
    7979    return policies;
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h

    r245483 r246118  
    2727
    2828#include "APIObject.h"
    29 #include "WebCompatibilityMode.h"
     29#include "WebContentMode.h"
    3030#include "WebsiteAutoplayPolicy.h"
    3131#include "WebsiteAutoplayQuirk.h"
     
    9494    const WTF::String& customNavigatorPlatform() const { return m_customNavigatorPlatform; }
    9595
    96     WebKit::WebCompatibilityMode preferredCompatibilityMode() const { return m_preferredCompatibilityMode; }
    97     void setPreferredCompatibilityMode(WebKit::WebCompatibilityMode mode) { m_preferredCompatibilityMode = mode; }
     96    WebKit::WebContentMode preferredContentMode() const { return m_preferredContentMode; }
     97    void setPreferredContentMode(WebKit::WebContentMode mode) { m_preferredContentMode = mode; }
    9898
    9999    WebKit::WebsiteMetaViewportPolicy metaViewportPolicy() const { return m_metaViewportPolicy; }
     
    109109    void setLegacyOverflowScrollingTouchPolicy(WebKit::WebsiteLegacyOverflowScrollingTouchPolicy policy) { m_legacyOverflowScrollingTouchPolicy = policy; }
    110110
    111     bool allowSiteSpecificQuirksToOverrideCompatibilityMode() const { return m_allowSiteSpecificQuirksToOverrideCompatibilityMode; }
    112     void setAllowSiteSpecificQuirksToOverrideCompatibilityMode(bool value) { m_allowSiteSpecificQuirksToOverrideCompatibilityMode = value; }
     111    bool allowSiteSpecificQuirksToOverrideContentMode() const { return m_allowSiteSpecificQuirksToOverrideContentMode; }
     112    void setAllowSiteSpecificQuirksToOverrideContentMode(bool value) { m_allowSiteSpecificQuirksToOverrideContentMode = value; }
    113113
    114114    WTF::String applicationNameForUserAgentWithModernCompatibility() const { return m_applicationNameForUserAgentWithModernCompatibility; }
     
    131131    WTF::String m_customJavaScriptUserAgentAsSiteSpecificQuirks;
    132132    WTF::String m_customNavigatorPlatform;
    133     WebKit::WebCompatibilityMode m_preferredCompatibilityMode { WebKit::WebCompatibilityMode::Recommended };
     133    WebKit::WebContentMode m_preferredContentMode { WebKit::WebContentMode::Recommended };
    134134    WebKit::WebsiteMetaViewportPolicy m_metaViewportPolicy { WebKit::WebsiteMetaViewportPolicy::Default };
    135135    WebKit::WebsiteMediaSourcePolicy m_mediaSourcePolicy { WebKit::WebsiteMediaSourcePolicy::Default };
    136136    WebKit::WebsiteSimulatedMouseEventsDispatchPolicy m_simulatedMouseEventsDispatchPolicy { WebKit::WebsiteSimulatedMouseEventsDispatchPolicy::Default };
    137137    WebKit::WebsiteLegacyOverflowScrollingTouchPolicy m_legacyOverflowScrollingTouchPolicy { WebKit::WebsiteLegacyOverflowScrollingTouchPolicy::Default };
    138     bool m_allowSiteSpecificQuirksToOverrideCompatibilityMode { false };
     138    bool m_allowSiteSpecificQuirksToOverrideContentMode { false };
    139139    WTF::String m_applicationNameForUserAgentWithModernCompatibility;
    140140};
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.h

    r244444 r246118  
    3737@interface WKNavigation : NSObject
    3838
    39 #if USE(APPLE_INTERNAL_SDK)
    40 #import <WebKitAdditions/WKNavigationAdditions.h>
    41 #endif
     39/*! The content mode used when loading this webpage.
     40 @discussion The value is either WKContentModeMobile or WKContentModeDesktop.
     41 */
     42@property (nonatomic, readonly) WKContentMode effectiveContentMode WK_API_AVAILABLE(ios(WK_IOS_TBA));
    4243
    4344@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm

    r244444 r246118  
    4646}
    4747
    48 #if USE(APPLE_INTERNAL_SDK)
    49 #import <WebKitAdditions/WKNavigationAdditions.mm>
    50 #endif
     48#if PLATFORM(IOS_FAMILY)
     49
     50- (WKContentMode)effectiveContentMode
     51{
     52    return WebKit::contentMode(_navigation->effectiveContentMode());
     53}
     54
     55#endif // PLATFORM(IOS_FAMILY)
    5156
    5257#pragma mark WKObject protocol implementation
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.h

    r244242 r246118  
    2828#import <Foundation/Foundation.h>
    2929
    30 #if USE(APPLE_INTERNAL_SDK)
    31 #import <WebKitAdditions/WKWebpagePreferencesAdditionsBefore.h>
    32 #endif
     30/*! @enum WKContentMode
     31 @abstract A content mode represents the type of content to load, as well as
     32 additional layout and rendering adaptations that are applied as a result of
     33 loading the content
     34 @constant WKContentModeRecommended  The recommended content mode for the current platform
     35 @constant WKContentModeMobile       Represents content targeting mobile browsers
     36 @constant WKContentModeDesktop      Represents content targeting desktop browsers
     37 @discussion WKContentModeRecommended behaves like WKContentModeMobile on iPhone and iPad mini
     38 and WKContentModeDesktop on other iPad models as well as Mac.
     39 */
     40typedef NS_ENUM(NSInteger, WKContentMode) {
     41    WKContentModeRecommended,
     42    WKContentModeMobile,
     43    WKContentModeDesktop
     44} WK_API_AVAILABLE(ios(WK_IOS_TBA));
    3345
    3446/*! A WKWebpagePreferences object is a collection of properties that
     
    3951@interface WKWebpagePreferences : NSObject
    4052
    41 #if USE(APPLE_INTERNAL_SDK)
    42 #import <WebKitAdditions/WKWebpagePreferencesAdditionsAfter.h>
    43 #endif
     53/*! @abstract A WKContentMode indicating the content mode to prefer
     54 when loading and rendering a webpage.
     55 @discussion The default value is WKContentModeRecommended. The stated
     56 preference is ignored on subframe navigation
     57 */
     58@property (nonatomic) WKContentMode preferredContentMode WK_API_AVAILABLE(ios(WK_IOS_TBA));
    4459
    4560@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm

    r245481 r246118  
    3030#import "WKWebpagePreferencesInternal.h"
    3131#import "WKWebsiteDataStoreInternal.h"
    32 #import "WebCompatibilityMode.h"
     32#import "WebContentMode.h"
    3333#import "_WKCustomHeaderFieldsInternal.h"
    3434#import "_WKWebsitePoliciesInternal.h"
    3535#import <wtf/RetainPtr.h>
    3636
    37 #if USE(APPLE_INTERNAL_SDK)
    38 #import <WebKitAdditions/WKWebpagePreferencesAdditionsBefore.mm>
    39 #endif
     37#if PLATFORM(IOS_FAMILY)
     38
     39namespace WebKit {
     40
     41WKContentMode contentMode(WebKit::WebContentMode contentMode)
     42{
     43    switch (contentMode) {
     44    case WebKit::WebContentMode::Recommended:
     45        return WKContentModeRecommended;
     46    case WebKit::WebContentMode::Mobile:
     47        return WKContentModeMobile;
     48    case WebKit::WebContentMode::Desktop:
     49        return WKContentModeDesktop;
     50    }
     51    ASSERT_NOT_REACHED();
     52    return WKContentModeRecommended;
     53}
     54
     55WebKit::WebContentMode webContentMode(WKContentMode contentMode)
     56{
     57    switch (contentMode) {
     58    case WKContentModeRecommended:
     59        return WebKit::WebContentMode::Recommended;
     60    case WKContentModeMobile:
     61        return WebKit::WebContentMode::Mobile;
     62    case WKContentModeDesktop:
     63        return WebKit::WebContentMode::Desktop;
     64    }
     65    ASSERT_NOT_REACHED();
     66    return WebKit::WebContentMode::Recommended;
     67}
     68
     69} // namespace WebKit
     70
     71#endif // PLATFORM(IOS_FAMILY)
    4072
    4173@implementation WKWebpagePreferences
     
    277309- (BOOL)_allowSiteSpecificQuirksToOverrideCompatibilityMode
    278310{
    279     return _websitePolicies->allowSiteSpecificQuirksToOverrideCompatibilityMode();
     311    return _websitePolicies->allowSiteSpecificQuirksToOverrideContentMode();
    280312}
    281313
    282314- (void)_setAllowSiteSpecificQuirksToOverrideCompatibilityMode:(BOOL)value
    283315{
    284     _websitePolicies->setAllowSiteSpecificQuirksToOverrideCompatibilityMode(value);
     316    _websitePolicies->setAllowSiteSpecificQuirksToOverrideContentMode(value);
    285317}
    286318
     
    300332}
    301333
    302 #if USE(APPLE_INTERNAL_SDK)
    303 #import <WebKitAdditions/WKWebpagePreferencesAdditionsAfter.mm>
    304 #endif
     334#if PLATFORM(IOS_FAMILY)
     335
     336- (void)setPreferredContentMode:(WKContentMode)contentMode
     337{
     338    _websitePolicies->setPreferredContentMode(WebKit::webContentMode(contentMode));
     339}
     340
     341- (WKContentMode)preferredContentMode
     342{
     343    return WebKit::contentMode(_websitePolicies->preferredContentMode());
     344}
     345
     346#endif // PLATFORM(IOS_FAMILY)
    305347
    306348@end
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h

    r244444 r246118  
    3737};
    3838
    39 #if USE(APPLE_INTERNAL_SDK)
    40 #import <WebKitAdditions/WKWebpagePreferencesInternalAdditions.h>
     39#if PLATFORM(IOS_FAMILY)
     40WKContentMode contentMode(WebContentMode);
     41WebContentMode webContentMode(WKContentMode);
    4142#endif
    4243
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h

    r244367 r246118  
    110110        void renderingProgressDidChange(WebPageProxy&, OptionSet<WebCore::LayoutMilestone>) override;
    111111
    112         bool shouldBypassCompatibilityModeSafeguards() const final;
     112        bool shouldBypassContentModeSafeguards() const final;
    113113
    114114        void didReceiveAuthenticationChallenge(WebPageProxy&, AuthenticationChallengeProxy&) override;
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm

    r244367 r246118  
    940940}
    941941
    942 bool NavigationState::NavigationClient::shouldBypassCompatibilityModeSafeguards() const
     942bool NavigationState::NavigationClient::shouldBypassContentModeSafeguards() const
    943943{
    944944    return m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForNavigationActionWithPreferencesDecisionHandler;
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r245807 r246118  
    46544654                }
    46554655                if (policies)
    4656                     navigation->setEffectiveCompatibilityMode(effectiveCompatibilityModeAfterAdjustingPolicies(*policies, navigation->currentRequest()));
     4656                    navigation->setEffectiveContentMode(effectiveContentModeAfterAdjustingPolicies(*policies, navigation->currentRequest()));
    46574657            }
    46584658            receivedNavigationPolicyDecision(policyAction, navigation.get(), processSwapRequestedByClient, frame, policies.get(), WTFMove(sender));
     
    91319131#endif // ENABLE(SPEECH_SYNTHESIS)
    91329132
    9133 #if !PLATFORM(IOS_FAMILY) || !USE(APPLE_INTERNAL_SDK)
    9134 
    9135 WebCompatibilityMode WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies(API::WebsitePolicies&, const WebCore::ResourceRequest&)
    9136 {
    9137     return WebCompatibilityMode::Recommended;
    9138 }
    9139 
    9140 #endif // !PLATFORM(IOS_FAMILY) || !USE(APPLE_INTERNAL_SDK)
     9133#if !PLATFORM(IOS_FAMILY)
     9134
     9135WebContentMode WebPageProxy::effectiveContentModeAfterAdjustingPolicies(API::WebsitePolicies&, const WebCore::ResourceRequest&)
     9136{
     9137    return WebContentMode::Recommended;
     9138}
     9139
     9140#endif // !PLATFORM(IOS_FAMILY)
    91419141
    91429142void WebPageProxy::addObserver(WebViewDidMoveToWindowObserver& observer)
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r245998 r246118  
    297297enum class ProcessSwapRequestedByClient;
    298298enum class UndoOrRedo : bool;
    299 enum class WebCompatibilityMode : uint8_t;
     299enum class WebContentMode : uint8_t;
    300300
    301301#if USE(QUICK_LOOK)
     
    16481648    void beginSafeBrowsingCheck(const URL&, bool, WebFramePolicyListenerProxy&);
    16491649
    1650     WebCompatibilityMode effectiveCompatibilityModeAfterAdjustingPolicies(API::WebsitePolicies&, const WebCore::ResourceRequest&);
     1650    WebContentMode effectiveContentModeAfterAdjustingPolicies(API::WebsitePolicies&, const WebCore::ResourceRequest&);
    16511651
    16521652    void willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, const Vector<std::pair<String, String>>& textFieldValues, uint64_t listenerID, const UserData&);
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r245998 r246118  
    6464#import <WebCore/UserAgent.h>
    6565#import <WebCore/ValidationBubble.h>
     66#import <pal/spi/ios/MobileGestaltSPI.h>
    6667#import <wtf/text/TextStream.h>
    6768
     
    12621263#endif
    12631264
    1264 #if USE(APPLE_INTERNAL_SDK)
    1265 #import <WebKitAdditions/WebPageProxyIOSAdditions.mm>
     1265static bool desktopClassBrowsingSupported()
     1266{
     1267    static bool supportsDesktopClassBrowsing = false;
     1268    static dispatch_once_t onceToken;
     1269    dispatch_once(&onceToken, ^{
     1270#if PLATFORM(IOSMAC)
     1271        supportsDesktopClassBrowsing = true;
     1272#else
     1273        supportsDesktopClassBrowsing = currentUserInterfaceIdiomIsPad();
    12661274#endif
     1275    });
     1276    return supportsDesktopClassBrowsing;
     1277}
     1278
     1279#if !PLATFORM(IOSMAC)
     1280
     1281static bool webViewSizeIsNarrow(WebCore::IntSize viewSize)
     1282{
     1283    return !viewSize.isEmpty() && viewSize.width() <= 375;
     1284}
     1285
     1286#endif // !PLATFORM(IOSMAC)
     1287
     1288static bool desktopClassBrowsingRecommendedForRequest(const WebCore::ResourceRequest& request)
     1289{
     1290    // FIXME: This should be additionally gated on site-specific quirks being enabled. However, site-specific quirks are already
     1291    // disabled by default in WKWebView, so we would need a new preference for controlling site-specific quirks that are on-by-default
     1292    // in all apps, but may be turned off via SPI (or via Web Inspector). See also: <rdar://problem/50035167>.
     1293    auto host = request.url().host();
     1294    if (equalLettersIgnoringASCIICase(host, "tv.kakao.com") || host.endsWithIgnoringASCIICase(".tv.kakao.com"))
     1295        return false;
     1296
     1297    if (equalLettersIgnoringASCIICase(host, "tving.com") || host.endsWithIgnoringASCIICase(".tving.com"))
     1298        return false;
     1299
     1300    if (equalLettersIgnoringASCIICase(host, "live.iqiyi.com") || host.endsWithIgnoringASCIICase(".live.iqiyi.com"))
     1301        return false;
     1302
     1303    if (equalLettersIgnoringASCIICase(host, "video.sina.com.cn") || host.endsWithIgnoringASCIICase(".video.sina.com.cn"))
     1304        return false;
     1305
     1306    if (equalLettersIgnoringASCIICase(host, "huya.com") || host.endsWithIgnoringASCIICase(".huya.com"))
     1307        return false;
     1308
     1309    if (equalLettersIgnoringASCIICase(host, "video.tudou.com") || host.endsWithIgnoringASCIICase(".video.tudou.com"))
     1310        return false;
     1311
     1312    if (equalLettersIgnoringASCIICase(host, "cctv.com") || host.endsWithIgnoringASCIICase(".cctv.com"))
     1313        return false;
     1314
     1315    if (equalLettersIgnoringASCIICase(host, "v.china.com.cn"))
     1316        return false;
     1317
     1318    return true;
     1319}
     1320
     1321enum class IgnoreAppCompatibilitySafeguards : bool { No, Yes };
     1322static bool desktopClassBrowsingRecommended(const WebCore::ResourceRequest& request, WebCore::IntSize viewSize, IgnoreAppCompatibilitySafeguards ignoreSafeguards)
     1323{
     1324    if (!desktopClassBrowsingRecommendedForRequest(request))
     1325        return false;
     1326
     1327#if !PLATFORM(IOSMAC)
     1328    if (webViewSizeIsNarrow(viewSize))
     1329        return false;
     1330#endif
     1331
     1332    static bool shouldRecommendDesktopClassBrowsing = false;
     1333    static dispatch_once_t onceToken;
     1334    dispatch_once(&onceToken, ^{
     1335#if PLATFORM(IOSMAC)
     1336        UNUSED_PARAM(ignoreSafeguards);
     1337        shouldRecommendDesktopClassBrowsing = true;
     1338#else
     1339        // While desktop-class browsing is supported on all iPad models, it is not recommended for iPad mini.
     1340        auto screenClass = MGGetSInt32Answer(kMGQMainScreenClass, MGScreenClassPad2);
     1341        shouldRecommendDesktopClassBrowsing = screenClass != MGScreenClassPad3 && screenClass != MGScreenClassPad4 && desktopClassBrowsingSupported();
     1342        if (ignoreSafeguards == IgnoreAppCompatibilitySafeguards::No && !linkedOnOrAfter(WebKit::SDKVersion::FirstWithModernCompabilityModeByDefault)) {
     1343            // Opt out apps that haven't yet built against the iOS 13 SDK to limit any incompatibilities as a result of enabling desktop-class browsing by default in
     1344            // WKWebView on appropriately-sized iPad models.
     1345            shouldRecommendDesktopClassBrowsing = false;
     1346        }
     1347#endif
     1348    });
     1349    return shouldRecommendDesktopClassBrowsing;
     1350}
     1351
     1352WebContentMode WebPageProxy::effectiveContentModeAfterAdjustingPolicies(API::WebsitePolicies& policies, const WebCore::ResourceRequest& request)
     1353{
     1354    if (m_preferences->mediaSourceEnabled()) {
     1355        // FIXME: This is a compatibility hack to ensure that turning MSE on via the existing preference still enables MSE.
     1356        policies.setMediaSourcePolicy(WebsiteMediaSourcePolicy::Enable);
     1357    }
     1358
     1359    auto viewSize = this->viewSize();
     1360    bool useDesktopBrowsingMode;
     1361    switch (policies.preferredContentMode()) {
     1362    case WebContentMode::Recommended: {
     1363        auto ignoreSafeguards = m_navigationClient->shouldBypassContentModeSafeguards() ? IgnoreAppCompatibilitySafeguards::Yes : IgnoreAppCompatibilitySafeguards::No;
     1364        useDesktopBrowsingMode = desktopClassBrowsingRecommended(request, viewSize, ignoreSafeguards);
     1365        break;
     1366    }
     1367    case WebContentMode::Mobile:
     1368        useDesktopBrowsingMode = false;
     1369        break;
     1370    case WebContentMode::Desktop:
     1371        useDesktopBrowsingMode = !policies.allowSiteSpecificQuirksToOverrideContentMode() || desktopClassBrowsingRecommendedForRequest(request);
     1372        break;
     1373    default:
     1374        ASSERT_NOT_REACHED();
     1375        useDesktopBrowsingMode = false;
     1376        break;
     1377    }
     1378
     1379    if (!useDesktopBrowsingMode)
     1380        return WebContentMode::Mobile;
     1381
     1382    if (policies.customUserAgent().isEmpty() && customUserAgent().isEmpty()) {
     1383        auto applicationName = policies.applicationNameForUserAgentWithModernCompatibility();
     1384        if (applicationName.isEmpty())
     1385            applicationName = applicationNameForUserAgent();
     1386        policies.setCustomUserAgent(standardUserAgentWithApplicationName(applicationName, UserAgentType::Desktop));
     1387    }
     1388
     1389    if (policies.customNavigatorPlatform().isEmpty()) {
     1390        // FIXME: Grab this from WebCore instead of hard-coding it here.
     1391        policies.setCustomNavigatorPlatform("MacIntel"_s);
     1392    }
     1393
     1394    if (desktopClassBrowsingSupported()) {
     1395        // Apply some additional desktop-class browsing behaviors on supported devices.
     1396        policies.setMetaViewportPolicy(WebsiteMetaViewportPolicy::Ignore);
     1397        policies.setMediaSourcePolicy(WebsiteMediaSourcePolicy::Enable);
     1398        policies.setSimulatedMouseEventsDispatchPolicy(WebsiteSimulatedMouseEventsDispatchPolicy::Allow);
     1399        policies.setLegacyOverflowScrollingTouchPolicy(WebsiteLegacyOverflowScrollingTouchPolicy::Disable);
     1400    }
     1401
     1402    return WebContentMode::Desktop;
     1403}
    12671404
    12681405} // namespace WebKit
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r246048 r246118  
    16581658                F42D634122A0EFDF00D2FB3A /* WebAutocorrectionData.h in Headers */ = {isa = PBXBuildFile; fileRef = F42D633F22A0EFD300D2FB3A /* WebAutocorrectionData.h */; };
    16591659                F430E9422247335F005FE053 /* WebsiteMetaViewportPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F430E941224732A9005FE053 /* WebsiteMetaViewportPolicy.h */; };
    1660                 F430E94422473DFF005FE053 /* WebCompatibilityMode.h in Headers */ = {isa = PBXBuildFile; fileRef = F430E94322473DB8005FE053 /* WebCompatibilityMode.h */; };
     1660                F430E94422473DFF005FE053 /* WebContentMode.h in Headers */ = {isa = PBXBuildFile; fileRef = F430E94322473DB8005FE053 /* WebContentMode.h */; };
    16611661                F438CD1C2241421400DE6DDA /* WKWebpagePreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = F438CD1B224140A600DE6DDA /* WKWebpagePreferences.h */; settings = {ATTRIBUTES = (Public, ); }; };
    16621662                F438CD1F22414D4000DE6DDA /* WKWebpagePreferencesInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = F438CD1E22414D4000DE6DDA /* WKWebpagePreferencesInternal.h */; };
     
    46334633                F42D634022A0EFD300D2FB3A /* WebAutocorrectionData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WebAutocorrectionData.mm; path = ios/WebAutocorrectionData.mm; sourceTree = "<group>"; };
    46344634                F430E941224732A9005FE053 /* WebsiteMetaViewportPolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebsiteMetaViewportPolicy.h; sourceTree = "<group>"; };
    4635                 F430E94322473DB8005FE053 /* WebCompatibilityMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebCompatibilityMode.h; sourceTree = "<group>"; };
     4635                F430E94322473DB8005FE053 /* WebContentMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebContentMode.h; sourceTree = "<group>"; };
    46364636                F438CD1B224140A600DE6DDA /* WKWebpagePreferences.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKWebpagePreferences.h; sourceTree = "<group>"; };
    46374637                F438CD1D22414AD600DE6DDA /* WKWebpagePreferences.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebpagePreferences.mm; sourceTree = "<group>"; };
     
    52155215                                518D2CAC12D5153B003BB93B /* WebBackForwardListItem.h */,
    52165216                                BCF50726124329AA005955AE /* WebCertificateInfo.h */,
    5217                                 F430E94322473DB8005FE053 /* WebCompatibilityMode.h */,
    52185217                                7C4ABECE1AA8E9F00088AA37 /* WebCompiledContentRuleList.cpp */,
    52195218                                7C4ABECF1AA8E9F00088AA37 /* WebCompiledContentRuleList.h */,
     
    52255224                                BC4A628D147312BE006C681A /* WebConnectionClient.cpp */,
    52265225                                BC4A628E147312BE006C681A /* WebConnectionClient.h */,
     5226                                F430E94322473DB8005FE053 /* WebContentMode.h */,
    52275227                                512935D51288D19400A4B695 /* WebContextMenuItem.cpp */,
    52285228                                512935D61288D19400A4B695 /* WebContextMenuItem.h */,
     
    96179617                                3F87B9C0158940D80090FF62 /* WebColorPicker.h in Headers */,
    96189618                                728E86F11795188C0087879E /* WebColorPickerMac.h in Headers */,
    9619                                 F430E94422473DFF005FE053 /* WebCompatibilityMode.h in Headers */,
    96209619                                7C4ABED11AA8E9F00088AA37 /* WebCompiledContentRuleList.h in Headers */,
    96219620                                7C4ABED51AA8FCB80088AA37 /* WebCompiledContentRuleListData.h in Headers */,
     
    96249623                                1A1FEC1D1627B45700700F6D /* WebConnectionMessages.h in Headers */,
    96259624                                BC4A62A814744EC7006C681A /* WebConnectionToWebProcess.h in Headers */,
     9625                                F430E94422473DFF005FE053 /* WebContentMode.h in Headers */,
    96269626                                31A505FA1680025500A930EB /* WebContextClient.h in Headers */,
    96279627                                BC09B8F9147460F7005F5625 /* WebContextConnectionClient.h in Headers */,
  • trunk/Tools/ChangeLog

    r246103 r246118  
     12019-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Upstream content mode support into open source from WebKitAdditions
     4        https://bugs.webkit.org/show_bug.cgi?id=198484
     5        <rdar://problem/51355671>
     6
     7        Reviewed by Andy Estes.
     8
     9        Change the "useModernCompatibilityMode" layout test option to instead be "contentMode", with values of either
     10        "mobile" or "desktop".
     11
     12        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     13        * TestWebKitAPI/ios/PreferredCompatibilityMode.mm: Removed.
     14        * TestWebKitAPI/ios/PreferredContentMode.mm: Added.
     15        (-[ContentModeNavigationDelegate setDecidePolicyForNavigationActionWithPreferences:]):
     16        (-[ContentModeNavigationDelegate decidePolicyForNavigationActionWithPreferences]):
     17        (-[ContentModeNavigationDelegate webView:decidePolicyForNavigationAction:preferences:decisionHandler:]):
     18        (+[WKWebpagePreferences preferencesWithContentMode:]):
     19        (-[WKWebView navigatorUserAgent]):
     20        (-[WKWebView navigatorPlatform]):
     21        (-[WKWebView loadTestPageNamed:withPolicyDecisionHandler:]):
     22        (-[WKWebView loadHTMLString:withPolicyDecisionHandler:]):
     23        (-[WKWebView loadTestPageNamed:andExpectEffectiveContentMode:withPolicyDecisionHandler:]):
     24        (-[NSString shouldContainStrings:]):
     25        (IPhoneUserInterfaceSwizzler::IPhoneUserInterfaceSwizzler):
     26        (IPhoneUserInterfaceSwizzler::phoneUserInterfaceIdiom):
     27        (TestWebKitAPI::setUpWebViewForPreferredContentModeTestingWithoutNavigationDelegate):
     28        (TestWebKitAPI::setUpWebViewForPreferredContentModeTesting):
     29        (TestWebKitAPI::makeContentModeDecisionHandler):
     30        (TestWebKitAPI::TEST):
     31        * WebKitTestRunner/TestController.cpp:
     32        (WTR::updateTestOptionsFromTestHeader):
     33        * WebKitTestRunner/TestController.h:
     34        * WebKitTestRunner/TestOptions.h:
     35        (WTR::TestOptions::hasSameInitializationOptions const):
     36        * WebKitTestRunner/cocoa/TestControllerCocoa.mm:
     37        (WTR::TestController::platformCreateWebView):
     38        (WTR::TestController::configureContentMode):
     39        (WTR::TestController::enableModernCompatibilityMode): Deleted.
     40
    1412019-06-01  Antoine Quint  <graouts@apple.com>
    242
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r246056 r246118  
    943943                F4856CA31E649EA8009D7EE7 /* attachment-element.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4856CA21E6498A8009D7EE7 /* attachment-element.html */; };
    944944                F486B1D01F67952300F34BDD /* DataTransfer-setDragImage.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F486B1CF1F6794FF00F34BDD /* DataTransfer-setDragImage.html */; };
    945                 F48D6C10224B377000E3E2FB /* PreferredCompatibilityMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = F48D6C0F224B377000E3E2FB /* PreferredCompatibilityMode.mm */; };
     945                F48D6C10224B377000E3E2FB /* PreferredContentMode.mm in Sources */ = {isa = PBXBuildFile; fileRef = F48D6C0F224B377000E3E2FB /* PreferredContentMode.mm */; };
    946946                F4A32EC41F05F3850047C544 /* dragstart-change-selection-offscreen.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4A32EC31F05F3780047C544 /* dragstart-change-selection-offscreen.html */; };
    947947                F4A32ECB1F0643370047C544 /* contenteditable-in-iframe.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = F4A32ECA1F0642F40047C544 /* contenteditable-in-iframe.html */; };
     
    23592359                F4856CA21E6498A8009D7EE7 /* attachment-element.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "attachment-element.html"; sourceTree = "<group>"; };
    23602360                F486B1CF1F6794FF00F34BDD /* DataTransfer-setDragImage.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "DataTransfer-setDragImage.html"; sourceTree = "<group>"; };
    2361                 F48D6C0F224B377000E3E2FB /* PreferredCompatibilityMode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PreferredCompatibilityMode.mm; sourceTree = "<group>"; };
     2361                F48D6C0F224B377000E3E2FB /* PreferredContentMode.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PreferredContentMode.mm; sourceTree = "<group>"; };
    23622362                F493247C1F44DF8D006F4336 /* UIKitSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIKitSPI.h; sourceTree = "<group>"; };
    23632363                F4A32EC31F05F3780047C544 /* dragstart-change-selection-offscreen.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "dragstart-change-selection-offscreen.html"; sourceTree = "<group>"; };
     
    28032803                                2E7765CC16C4D80A00BA2BB1 /* mainIOS.mm */,
    28042804                                2D61EC3021B0B75C00A7D1CB /* PencilKitTestSPI.h */,
    2805                                 F48D6C0F224B377000E3E2FB /* PreferredCompatibilityMode.mm */,
     2805                                F48D6C0F224B377000E3E2FB /* PreferredContentMode.mm */,
    28062806                                F4517B652054C49500C26721 /* TestWKWebViewController.h */,
    28072807                                F4517B662054C49500C26721 /* TestWKWebViewController.mm */,
     
    43694369                                7CCE7F261A411AF600447C4C /* Preferences.mm in Sources */,
    43704370                                CD227E44211A4D5D00D285AF /* PreferredAudioBufferSize.mm in Sources */,
    4371                                 F48D6C10224B377000E3E2FB /* PreferredCompatibilityMode.mm in Sources */,
     4371                                F48D6C10224B377000E3E2FB /* PreferredContentMode.mm in Sources */,
    43724372                                7C1AF7951E8DCBAB002645B9 /* PrepareForMoveToWindow.mm in Sources */,
    43734373                                7CCE7F0B1A411AE600447C4C /* PreventEmptyUserAgent.cpp in Sources */,
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r246085 r246118  
    13891389        else if (key == "ignoreSynchronousMessagingTimeouts")
    13901390            testOptions.contextOptions.ignoreSynchronousMessagingTimeouts = parseBooleanTestHeaderValue(value);
    1391         else if (key == "shouldUseModernCompatibilityMode")
    1392             testOptions.shouldUseModernCompatibilityMode = parseBooleanTestHeaderValue(value);
     1391        else if (key == "contentMode")
     1392            testOptions.contentMode = { value.c_str() };
    13931393        else if (key == "enableAppNap")
    13941394            testOptions.enableAppNap = parseBooleanTestHeaderValue(value);
  • trunk/Tools/WebKitTestRunner/TestController.h

    r244898 r246118  
    472472#if PLATFORM(COCOA)
    473473    static void finishCreatingPlatformWebView(PlatformWebView*, const TestOptions&);
    474     void enableModernCompatibilityMode(WKWebViewConfiguration *);
     474    void configureContentMode(WKWebViewConfiguration *, const TestOptions&);
    475475#endif
    476476
  • trunk/Tools/WebKitTestRunner/TestOptions.h

    r245299 r246118  
    9292    bool shouldHandleRunOpenPanel { true };
    9393    bool shouldPresentPopovers { true };
    94     bool shouldUseModernCompatibilityMode { false };
    9594    bool enableAppNap { false };
    9695
     
    103102    HashMap<String, bool> experimentalFeatures;
    104103    HashMap<String, bool> internalDebugFeatures;
     104    String contentMode;
    105105
    106106    ContextOptions contextOptions;
     
    146146            || shouldPresentPopovers != options.shouldPresentPopovers
    147147            || contentInsetTop != options.contentInsetTop
    148             || shouldUseModernCompatibilityMode != options.shouldUseModernCompatibilityMode
     148            || contentMode != options.contentMode
    149149            || enableAppNap != options.enableAppNap)
    150150            return false;
  • trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm

    r244370 r246118  
    160160        [copiedConfiguration _setUndoManagerAPIEnabled:YES];
    161161
    162     if (options.shouldUseModernCompatibilityMode)
    163         enableModernCompatibilityMode(copiedConfiguration.get());
     162    configureContentMode(copiedConfiguration.get(), options);
    164163
    165164    if (options.applicationManifest.length()) {
     
    432431}
    433432
    434 #if USE(APPLE_INTERNAL_SDK)
    435 #import <WebKitAdditions/TestControllerCocoaAdditions.mm>
     433#if PLATFORM(IOS_FAMILY)
     434
     435static WKContentMode contentMode(const TestOptions& options)
     436{
     437    if (options.contentMode == "desktop"_s)
     438        return WKContentModeDesktop;
     439
     440    if (options.contentMode == "mobile"_s)
     441        return WKContentModeMobile;
     442
     443    return WKContentModeRecommended;
     444}
     445
     446#endif // PLATFORM(IOS_FAMILY)
     447
     448void TestController::configureContentMode(WKWebViewConfiguration *configuration, const TestOptions& options)
     449{
     450    auto webpagePreferences = adoptNS([[WKWebpagePreferences alloc] init]);
     451#if PLATFORM(IOS_FAMILY)
     452    [webpagePreferences setPreferredContentMode:contentMode(options)];
    436453#else
    437 
    438 void TestController::enableModernCompatibilityMode(WKWebViewConfiguration *)
    439 {
    440 }
    441 
    442 #endif
     454    UNUSED_PARAM(options);
     455#endif
     456    configuration.defaultWebpagePreferences = webpagePreferences.get();
     457}
    443458
    444459} // namespace WTR
Note: See TracChangeset for help on using the changeset viewer.