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

Changeset 236530 in webkit


Ignore:
Timestamp:
Sep 26, 2018, 3:31:18 PM (8 years ago)
Author:
commit-queue@webkit.org
Message:

Allow override of viewport configuration.
https://bugs.webkit.org/show_bug.cgi?id=188772.
<rdar://problem/43538892>.

Patch by James Savage <James Savage> on 2018-09-26
Reviewed by Simon Fraser.

Source/WebCore:

  • page/Settings.yaml:
  • page/ViewportConfiguration.cpp:

(WebCore::ViewportConfiguration::nativeWebpageParameters): Provide a viewport configuration
similar to width=device-width, with initial scale set to 1.

  • page/ViewportConfiguration.h:

Source/WebKit:

  • Shared/WebPreferences.yaml:
  • UIProcess/API/Cocoa/WKPreferences.mm:

(-[WKPreferences _setShouldIgnoreMetaViewport:]):
(-[WKPreferences _shouldIgnoreMetaViewport]):

  • UIProcess/API/Cocoa/WKPreferencesPrivate.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::viewportPropertiesDidChange): If we are ignoring the
<meta> viewport, short circuit calling setViewportArguments() and do not
do any updates.
(WebKit::WebPage::didCommitLoad): Ditto.

  • WebProcess/WebPage/ios/WebPageIOS.mm:

(WebKit::WebPage::resetViewportDefaultConfiguration): Select the default
configuration based on UIProcess setting.

Tools:

  • WebKitTestRunner/TestController.cpp:

(WTR::updateTestOptionsFromTestHeader): Parse new test option key from comments.

  • WebKitTestRunner/TestOptions.h:
  • WebKitTestRunner/ios/TestControllerIOS.mm:

(WTR::TestController::platformConfigureViewForTest): Handle new test option by
modifying the web view's preferences accordingly.

LayoutTests:

Add test proving that a document without a meta viewport specifying
width=device-width still gets a layout when this setting is enabled. I also
added a baseline case to prove that without this setting we do not layout
at device width.

  • fast/viewport/ios/ipad/empty-viewport-expected.txt: Added.
  • fast/viewport/ios/ipad/empty-viewport.html: Added.
  • fast/viewport/ios/ipad/meta-viewport-disabled-expected.txt: Added.
  • fast/viewport/ios/ipad/meta-viewport-disabled.html: Added.
Location:
trunk
Files:
4 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r236527 r236530  
     12018-09-26  James Savage  <james.savage@apple.com>
     2
     3        Allow override of viewport configuration.
     4        https://bugs.webkit.org/show_bug.cgi?id=188772.
     5        <rdar://problem/43538892>.
     6
     7        Reviewed by Simon Fraser.
     8
     9        Add test proving that a document without a meta viewport specifying
     10        width=device-width still gets a layout when this setting is enabled. I also
     11        added a baseline case to prove that without this setting we do not layout
     12        at device width.
     13
     14        * fast/viewport/ios/ipad/empty-viewport-expected.txt: Added.
     15        * fast/viewport/ios/ipad/empty-viewport.html: Added.
     16        * fast/viewport/ios/ipad/meta-viewport-disabled-expected.txt: Added.
     17        * fast/viewport/ios/ipad/meta-viewport-disabled.html: Added.
     18
    1192018-09-26  Alex Christensen  <achristensen@webkit.org>
    220
  • trunk/LayoutTests/fast/viewport/ios/resources/viewport-test-utils.js

    r190260 r236530  
    5151function getViewport()
    5252{
    53     var metaTag = document.head.querySelectorAll('meta')[0];
     53    var metaTags = document.head.querySelectorAll('meta');
     54    if (!metaTags.length)
     55        return;
     56
     57    var metaTag = metaTags[0];
    5458    document.getElementById('viewport').textContent = metaTag.getAttribute('content');
    5559}
  • trunk/Source/WebCore/ChangeLog

    r236528 r236530  
     12018-09-26  James Savage  <james.savage@apple.com>
     2
     3        Allow override of viewport configuration.
     4        https://bugs.webkit.org/show_bug.cgi?id=188772.
     5        <rdar://problem/43538892>.
     6
     7        Reviewed by Simon Fraser.
     8
     9        * page/Settings.yaml:
     10        * page/ViewportConfiguration.cpp:
     11        (WebCore::ViewportConfiguration::nativeWebpageParameters): Provide a viewport configuration
     12        similar to width=device-width, with initial scale set to 1.
     13        * page/ViewportConfiguration.h:
     14
    1152018-09-26  Alex Christensen  <achristensen@webkit.org>
    216
  • trunk/Source/WebCore/page/Settings.yaml

    r236519 r236530  
    764764shouldDeferAsynchronousScriptsUntilAfterDocumentLoad:
    765765  initial: false
     766
     767shouldIgnoreMetaViewport:
     768  initial: false
  • trunk/Source/WebCore/page/ViewportConfiguration.cpp

    r232916 r236530  
    290290}
    291291
     292ViewportConfiguration::Parameters ViewportConfiguration::nativeWebpageParameters()
     293{
     294    Parameters parameters;
     295    parameters.width = ViewportArguments::ValueDeviceWidth;
     296    parameters.widthIsSet = true;
     297    parameters.allowsUserScaling = true;
     298    parameters.allowsShrinkToFit = false;
     299    parameters.minimumScale = 1;
     300    parameters.maximumScale = 5;
     301    parameters.initialScale = 1;
     302    parameters.initialScaleIsSet = true;
     303    return parameters;
     304}
     305
    292306ViewportConfiguration::Parameters ViewportConfiguration::webpageParameters()
    293307{
  • trunk/Source/WebCore/page/ViewportConfiguration.h

    r231779 r236530  
    102102    bool avoidsUnsafeArea() const { return m_configuration.avoidsUnsafeArea; }
    103103
     104    // Matches a width=device-width, initial-scale=1 viewport.
     105    WEBCORE_EXPORT static Parameters nativeWebpageParameters();
    104106    WEBCORE_EXPORT static Parameters webpageParameters();
    105107    WEBCORE_EXPORT static Parameters textDocumentParameters();
  • trunk/Source/WebKit/ChangeLog

    r236529 r236530  
     12018-09-26  James Savage  <james.savage@apple.com>
     2
     3        Allow override of viewport configuration.
     4        https://bugs.webkit.org/show_bug.cgi?id=188772.
     5        <rdar://problem/43538892>.
     6
     7        Reviewed by Simon Fraser.
     8
     9        * Shared/WebPreferences.yaml:
     10        * UIProcess/API/Cocoa/WKPreferences.mm:
     11        (-[WKPreferences _setShouldIgnoreMetaViewport:]):
     12        (-[WKPreferences _shouldIgnoreMetaViewport]):
     13        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
     14        * WebProcess/WebPage/WebPage.cpp:
     15        (WebKit::WebPage::viewportPropertiesDidChange): If we are ignoring the
     16        <meta> viewport, short circuit calling setViewportArguments() and do not
     17        do any updates.
     18        (WebKit::WebPage::didCommitLoad): Ditto.
     19        * WebProcess/WebPage/ios/WebPageIOS.mm:
     20        (WebKit::WebPage::resetViewportDefaultConfiguration): Select the default
     21        configuration based on UIProcess setting.
     22
    1232018-09-26  Chris Dumez  <cdumez@apple.com>
    224
  • trunk/Source/WebKit/Shared/WebPreferences.yaml

    r236519 r236530  
    954954  defaultValue: defaultPassiveTouchListenersAsDefaultOnDocument()
    955955  webcoreName: passiveTouchListenersAsDefaultOnDocument
     956
     957ShouldIgnoreMetaViewport:
     958  type: bool
     959  defaultValue: false
    956960
    957961# Debug Preferences
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm

    r235921 r236530  
    810810}
    811811
     812- (void)_setShouldIgnoreMetaViewport:(BOOL)ignoreMetaViewport
     813{
     814    return _preferences->setShouldIgnoreMetaViewport(ignoreMetaViewport);
     815}
     816
     817- (BOOL)_shouldIgnoreMetaViewport
     818{
     819    return _preferences->shouldIgnoreMetaViewport();
     820}
     821
    812822#if PLATFORM(MAC)
    813823- (void)_setJavaEnabledForLocalFiles:(BOOL)enabled
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h

    r235961 r236530  
    148148@property (nonatomic, setter=_setPunchOutWhiteBackgroundsInDarkMode:) BOOL _punchOutWhiteBackgroundsInDarkMode WK_API_AVAILABLE(macosx(10.14), ios(12.0));
    149149@property (nonatomic, setter=_setLowPowerVideoAudioBufferSizeEnabled:) BOOL _lowPowerVideoAudioBufferSizeEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
     150@property (nonatomic, setter=_setShouldIgnoreMetaViewport:) BOOL _shouldIgnoreMetaViewport WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    150151
    151152#if !TARGET_OS_IPHONE
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r236529 r236530  
    18061806{
    18071807#if PLATFORM(IOS)
    1808     if (m_viewportConfiguration.setViewportArguments(viewportArguments))
     1808    if (!m_page->settings().shouldIgnoreMetaViewport() && m_viewportConfiguration.setViewportArguments(viewportArguments))
    18091809        viewportConfigurationChanged();
    18101810#endif
     
    53215321        viewportChanged = true;
    53225322
    5323     if (m_viewportConfiguration.setViewportArguments(coreFrame->document()->viewportArguments()))
     5323    if (!m_page->settings().shouldIgnoreMetaViewport() && m_viewportConfiguration.setViewportArguments(coreFrame->document()->viewportArguments()))
    53245324        viewportChanged = true;
    53255325
  • trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm

    r235834 r236530  
    27502750    }
    27512751
     2752    auto parametersForStandardFrame = [&] {
     2753        if (m_page->settings().shouldIgnoreMetaViewport())
     2754            return ViewportConfiguration::nativeWebpageParameters();
     2755
     2756        return ViewportConfiguration::webpageParameters();
     2757    };
     2758
    27522759    if (!frame) {
    2753         m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::webpageParameters());
     2760        m_viewportConfiguration.setDefaultConfiguration(parametersForStandardFrame());
    27542761        return;
    27552762    }
     
    27662773        m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::textDocumentParameters());
    27672774    else
    2768         m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::webpageParameters());
     2775        m_viewportConfiguration.setDefaultConfiguration(parametersForStandardFrame());
    27692776}
    27702777
  • trunk/Tools/ChangeLog

    r236528 r236530  
     12018-09-26  James Savage  <james.savage@apple.com>
     2
     3        Allow override of viewport configuration.
     4        https://bugs.webkit.org/show_bug.cgi?id=188772.
     5        <rdar://problem/43538892>.
     6
     7        Reviewed by Simon Fraser.
     8
     9        * WebKitTestRunner/TestController.cpp:
     10        (WTR::updateTestOptionsFromTestHeader): Parse new test option key from comments.
     11        * WebKitTestRunner/TestOptions.h:
     12        * WebKitTestRunner/ios/TestControllerIOS.mm:
     13        (WTR::TestController::platformConfigureViewForTest): Handle new test option by
     14        modifying the web view's preferences accordingly.
     15
    1162018-09-26  Alex Christensen  <achristensen@webkit.org>
    217
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r236481 r236530  
    12481248        else if (key == "runSingly")
    12491249            testOptions.runSingly = parseBooleanTestHeaderValue(value);
     1250        else if (key == "shouldIgnoreMetaViewport")
     1251            testOptions.shouldIgnoreMetaViewport = parseBooleanTestHeaderValue(value);
    12501252        pairStart = pairEnd + 1;
    12511253    }
  • trunk/Tools/WebKitTestRunner/TestOptions.h

    r235948 r236530  
    6363    bool runSingly { false };
    6464    bool checkForWorldLeaks { false };
     65    bool shouldIgnoreMetaViewport { false };
    6566
    6667    float deviceScaleFactor { 1 };
  • trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm

    r235837 r236530  
    3636#import <Foundation/Foundation.h>
    3737#import <UIKit/UIKit.h>
     38#import <WebKit/WKPreferencesPrivate.h>
    3839#import <WebKit/WKPreferencesRefPrivate.h>
    3940#import <WebKit/WKProcessPoolPrivate.h>
     
    133134       
    134135    TestRunnerWKWebView *webView = mainWebView()->platformView();
     136
     137    if (test.options().shouldIgnoreMetaViewport)
     138        webView.configuration.preferences._shouldIgnoreMetaViewport = YES;
     139
    135140    CGRect screenBounds = [UIScreen mainScreen].bounds;
    136    
    137141    CGSize oldSize = webView.bounds.size;
    138142    mainWebView()->resizeTo(screenBounds.size.width, screenBounds.size.height, PlatformWebView::WebViewSizingMode::HeightRespectsStatusBar);
Note: See TracChangeset for help on using the changeset viewer.