Title: [236530] trunk
Revision
236530
Author
commit-qu...@webkit.org
Date
2018-09-26 15:31:18 -0700 (Wed, 26 Sep 2018)

Log Message

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

Patch by James Savage <james.sav...@apple.com> 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.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (236529 => 236530)


--- trunk/LayoutTests/ChangeLog	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/LayoutTests/ChangeLog	2018-09-26 22:31:18 UTC (rev 236530)
@@ -1,3 +1,21 @@
+2018-09-26  James Savage  <james.sav...@apple.com>
+
+        Allow override of viewport configuration.
+        https://bugs.webkit.org/show_bug.cgi?id=188772.
+        <rdar://problem/43538892>.
+
+        Reviewed by Simon Fraser.
+
+        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.
+
 2018-09-26  Alex Christensen  <achristen...@webkit.org>
 
         uidna_nameToASCII only needs a buffer capacity of 64

Added: trunk/LayoutTests/fast/viewport/ios/ipad/empty-meta-expected.txt (0 => 236530)


--- trunk/LayoutTests/fast/viewport/ios/ipad/empty-meta-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/viewport/ios/ipad/empty-meta-expected.txt	2018-09-26 22:31:18 UTC (rev 236530)
@@ -0,0 +1,6 @@
+Viewport:
+
+scale	0.78376
+maxScale	5.00000
+minScale	0.78376
+visibleRect	{"left":"0.00000","top":"0.00000","width":"979.88843","height":"1281.00000"}

Added: trunk/LayoutTests/fast/viewport/ios/ipad/empty-meta.html (0 => 236530)


--- trunk/LayoutTests/fast/viewport/ios/ipad/empty-meta.html	                        (rev 0)
+++ trunk/LayoutTests/fast/viewport/ios/ipad/empty-meta.html	2018-09-26 22:31:18 UTC (rev 236530)
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <script src=""
+</head>
+<body _onload_="runTest()">
+
+<p>Viewport: <span id="viewport"></span></p>
+<div id="result"></div>
+
+</body>
+</html>

Added: trunk/LayoutTests/fast/viewport/ios/ipad/meta-viewport-ignored-expected.txt (0 => 236530)


--- trunk/LayoutTests/fast/viewport/ios/ipad/meta-viewport-ignored-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/viewport/ios/ipad/meta-viewport-ignored-expected.txt	2018-09-26 22:31:18 UTC (rev 236530)
@@ -0,0 +1,6 @@
+Viewport:
+
+scale	1.00000
+maxScale	5.00000
+minScale	1.00000
+visibleRect	{"left":"0.00000","top":"0.00000","width":"768.00000","height":"1004.00000"}

Added: trunk/LayoutTests/fast/viewport/ios/ipad/meta-viewport-ignored.html (0 => 236530)


--- trunk/LayoutTests/fast/viewport/ios/ipad/meta-viewport-ignored.html	                        (rev 0)
+++ trunk/LayoutTests/fast/viewport/ios/ipad/meta-viewport-ignored.html	2018-09-26 22:31:18 UTC (rev 236530)
@@ -0,0 +1,13 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ shouldIgnoreMetaViewport=true ] -->
+
+<html>
+<head>
+    <script src=""
+</head>
+<body _onload_="runTest()">
+
+<p>Viewport: <span id="viewport"></span></p>
+<div id="result"></div>
+
+</body>
+</html>

Modified: trunk/LayoutTests/fast/viewport/ios/resources/viewport-test-utils.js (236529 => 236530)


--- trunk/LayoutTests/fast/viewport/ios/resources/viewport-test-utils.js	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/LayoutTests/fast/viewport/ios/resources/viewport-test-utils.js	2018-09-26 22:31:18 UTC (rev 236530)
@@ -50,7 +50,11 @@
 
 function getViewport()
 {
-    var metaTag = document.head.querySelectorAll('meta')[0];
+    var metaTags = document.head.querySelectorAll('meta');
+    if (!metaTags.length)
+        return;
+
+    var metaTag = metaTags[0];
     document.getElementById('viewport').textContent = metaTag.getAttribute('content');
 }
 

Modified: trunk/Source/WebCore/ChangeLog (236529 => 236530)


--- trunk/Source/WebCore/ChangeLog	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebCore/ChangeLog	2018-09-26 22:31:18 UTC (rev 236530)
@@ -1,3 +1,17 @@
+2018-09-26  James Savage  <james.sav...@apple.com>
+
+        Allow override of viewport configuration.
+        https://bugs.webkit.org/show_bug.cgi?id=188772.
+        <rdar://problem/43538892>.
+
+        Reviewed by Simon Fraser.
+
+        * 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:
+
 2018-09-26  Alex Christensen  <achristen...@webkit.org>
 
         URLs with mismatched surrogate pairs in the host should fail to parse

Modified: trunk/Source/WebCore/page/Settings.yaml (236529 => 236530)


--- trunk/Source/WebCore/page/Settings.yaml	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebCore/page/Settings.yaml	2018-09-26 22:31:18 UTC (rev 236530)
@@ -763,3 +763,6 @@
 
 shouldDeferAsynchronousScriptsUntilAfterDocumentLoad:
   initial: false
+
+shouldIgnoreMetaViewport:
+  initial: false

Modified: trunk/Source/WebCore/page/ViewportConfiguration.cpp (236529 => 236530)


--- trunk/Source/WebCore/page/ViewportConfiguration.cpp	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebCore/page/ViewportConfiguration.cpp	2018-09-26 22:31:18 UTC (rev 236530)
@@ -289,6 +289,20 @@
     return shouldIgnoreScalingConstraints() || m_configuration.allowsUserScaling;
 }
 
+ViewportConfiguration::Parameters ViewportConfiguration::nativeWebpageParameters()
+{
+    Parameters parameters;
+    parameters.width = ViewportArguments::ValueDeviceWidth;
+    parameters.widthIsSet = true;
+    parameters.allowsUserScaling = true;
+    parameters.allowsShrinkToFit = false;
+    parameters.minimumScale = 1;
+    parameters.maximumScale = 5;
+    parameters.initialScale = 1;
+    parameters.initialScaleIsSet = true;
+    return parameters;
+}
+
 ViewportConfiguration::Parameters ViewportConfiguration::webpageParameters()
 {
     Parameters parameters;

Modified: trunk/Source/WebCore/page/ViewportConfiguration.h (236529 => 236530)


--- trunk/Source/WebCore/page/ViewportConfiguration.h	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebCore/page/ViewportConfiguration.h	2018-09-26 22:31:18 UTC (rev 236530)
@@ -101,6 +101,8 @@
     bool allowsShrinkToFit() const;
     bool avoidsUnsafeArea() const { return m_configuration.avoidsUnsafeArea; }
 
+    // Matches a width=device-width, initial-scale=1 viewport.
+    WEBCORE_EXPORT static Parameters nativeWebpageParameters();
     WEBCORE_EXPORT static Parameters webpageParameters();
     WEBCORE_EXPORT static Parameters textDocumentParameters();
     WEBCORE_EXPORT static Parameters imageDocumentParameters();

Modified: trunk/Source/WebKit/ChangeLog (236529 => 236530)


--- trunk/Source/WebKit/ChangeLog	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebKit/ChangeLog	2018-09-26 22:31:18 UTC (rev 236530)
@@ -1,3 +1,25 @@
+2018-09-26  James Savage  <james.sav...@apple.com>
+
+        Allow override of viewport configuration.
+        https://bugs.webkit.org/show_bug.cgi?id=188772.
+        <rdar://problem/43538892>.
+
+        Reviewed by Simon Fraser.
+
+        * 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.
+
 2018-09-26  Chris Dumez  <cdu...@apple.com>
 
         Regression(r236512): WKWebViewCandidateTests.SoftSpaceReplacementAfterCandidateInsertionWithoutReplacement API test is failing

Modified: trunk/Source/WebKit/Shared/WebPreferences.yaml (236529 => 236530)


--- trunk/Source/WebKit/Shared/WebPreferences.yaml	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebKit/Shared/WebPreferences.yaml	2018-09-26 22:31:18 UTC (rev 236530)
@@ -954,6 +954,10 @@
   defaultValue: defaultPassiveTouchListenersAsDefaultOnDocument()
   webcoreName: passiveTouchListenersAsDefaultOnDocument
 
+ShouldIgnoreMetaViewport:
+  type: bool
+  defaultValue: false
+
 # Debug Preferences
 
 AcceleratedDrawingEnabled:

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm (236529 => 236530)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm	2018-09-26 22:31:18 UTC (rev 236530)
@@ -809,6 +809,16 @@
     return _preferences->lowPowerVideoAudioBufferSizeEnabled();
 }
 
+- (void)_setShouldIgnoreMetaViewport:(BOOL)ignoreMetaViewport
+{
+    return _preferences->setShouldIgnoreMetaViewport(ignoreMetaViewport);
+}
+
+- (BOOL)_shouldIgnoreMetaViewport
+{
+    return _preferences->shouldIgnoreMetaViewport();
+}
+
 #if PLATFORM(MAC)
 - (void)_setJavaEnabledForLocalFiles:(BOOL)enabled
 {

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h (236529 => 236530)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h	2018-09-26 22:31:18 UTC (rev 236530)
@@ -147,6 +147,7 @@
 @property (nonatomic, setter=_setColorFilterEnabled:) BOOL _colorFilterEnabled WK_API_AVAILABLE(macosx(10.14), ios(12.0));
 @property (nonatomic, setter=_setPunchOutWhiteBackgroundsInDarkMode:) BOOL _punchOutWhiteBackgroundsInDarkMode WK_API_AVAILABLE(macosx(10.14), ios(12.0));
 @property (nonatomic, setter=_setLowPowerVideoAudioBufferSizeEnabled:) BOOL _lowPowerVideoAudioBufferSizeEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+@property (nonatomic, setter=_setShouldIgnoreMetaViewport:) BOOL _shouldIgnoreMetaViewport WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
 #if !TARGET_OS_IPHONE
 @property (nonatomic, setter=_setWebGLEnabled:) BOOL _webGLEnabled WK_API_AVAILABLE(macosx(10.13.4));

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (236529 => 236530)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2018-09-26 22:31:18 UTC (rev 236530)
@@ -1805,7 +1805,7 @@
 void WebPage::viewportPropertiesDidChange(const ViewportArguments& viewportArguments)
 {
 #if PLATFORM(IOS)
-    if (m_viewportConfiguration.setViewportArguments(viewportArguments))
+    if (!m_page->settings().shouldIgnoreMetaViewport() && m_viewportConfiguration.setViewportArguments(viewportArguments))
         viewportConfigurationChanged();
 #endif
 
@@ -5320,7 +5320,7 @@
     if (m_viewportConfiguration.setContentsSize(coreFrame->view()->contentsSize()))
         viewportChanged = true;
 
-    if (m_viewportConfiguration.setViewportArguments(coreFrame->document()->viewportArguments()))
+    if (!m_page->settings().shouldIgnoreMetaViewport() && m_viewportConfiguration.setViewportArguments(coreFrame->document()->viewportArguments()))
         viewportChanged = true;
 
     if (viewportChanged)

Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (236529 => 236530)


--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2018-09-26 22:31:18 UTC (rev 236530)
@@ -2749,8 +2749,15 @@
         return;
     }
 
+    auto parametersForStandardFrame = [&] {
+        if (m_page->settings().shouldIgnoreMetaViewport())
+            return ViewportConfiguration::nativeWebpageParameters();
+
+        return ViewportConfiguration::webpageParameters();
+    };
+
     if (!frame) {
-        m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::webpageParameters());
+        m_viewportConfiguration.setDefaultConfiguration(parametersForStandardFrame());
         return;
     }
 
@@ -2765,7 +2772,7 @@
     else if (document->isTextDocument())
         m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::textDocumentParameters());
     else
-        m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::webpageParameters());
+        m_viewportConfiguration.setDefaultConfiguration(parametersForStandardFrame());
 }
 
 void WebPage::viewportConfigurationChanged()

Modified: trunk/Tools/ChangeLog (236529 => 236530)


--- trunk/Tools/ChangeLog	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Tools/ChangeLog	2018-09-26 22:31:18 UTC (rev 236530)
@@ -1,3 +1,18 @@
+2018-09-26  James Savage  <james.sav...@apple.com>
+
+        Allow override of viewport configuration.
+        https://bugs.webkit.org/show_bug.cgi?id=188772.
+        <rdar://problem/43538892>.
+
+        Reviewed by Simon Fraser.
+
+        * 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.
+
 2018-09-26  Alex Christensen  <achristen...@webkit.org>
 
         URLs with mismatched surrogate pairs in the host should fail to parse

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (236529 => 236530)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2018-09-26 22:31:18 UTC (rev 236530)
@@ -1247,6 +1247,8 @@
             testOptions.jscOptions = value;
         else if (key == "runSingly")
             testOptions.runSingly = parseBooleanTestHeaderValue(value);
+        else if (key == "shouldIgnoreMetaViewport")
+            testOptions.shouldIgnoreMetaViewport = parseBooleanTestHeaderValue(value);
         pairStart = pairEnd + 1;
     }
 }

Modified: trunk/Tools/WebKitTestRunner/TestOptions.h (236529 => 236530)


--- trunk/Tools/WebKitTestRunner/TestOptions.h	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Tools/WebKitTestRunner/TestOptions.h	2018-09-26 22:31:18 UTC (rev 236530)
@@ -62,6 +62,7 @@
     bool punchOutWhiteBackgroundsInDarkMode { false };
     bool runSingly { false };
     bool checkForWorldLeaks { false };
+    bool shouldIgnoreMetaViewport { false };
 
     float deviceScaleFactor { 1 };
     Vector<String> overrideLanguages;

Modified: trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm (236529 => 236530)


--- trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm	2018-09-26 22:18:25 UTC (rev 236529)
+++ trunk/Tools/WebKitTestRunner/ios/TestControllerIOS.mm	2018-09-26 22:31:18 UTC (rev 236530)
@@ -35,6 +35,7 @@
 #import "UIKitTestSPI.h"
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>
+#import <WebKit/WKPreferencesPrivate.h>
 #import <WebKit/WKPreferencesRefPrivate.h>
 #import <WebKit/WKProcessPoolPrivate.h>
 #import <WebKit/WKStringCF.h>
@@ -132,8 +133,11 @@
         return;
         
     TestRunnerWKWebView *webView = mainWebView()->platformView();
+
+    if (test.options().shouldIgnoreMetaViewport)
+        webView.configuration.preferences._shouldIgnoreMetaViewport = YES;
+
     CGRect screenBounds = [UIScreen mainScreen].bounds;
-    
     CGSize oldSize = webView.bounds.size;
     mainWebView()->resizeTo(screenBounds.size.width, screenBounds.size.height, PlatformWebView::WebViewSizingMode::HeightRespectsStatusBar);
     CGSize newSize = webView.bounds.size;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to