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;