WebKit Bugzilla
Attachment 349638 Details for
Bug 188772
: Allow override of viewport configuration
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-188772-20180913002732.patch (text/plain), 16.19 KB, created by
James Savage
on 2018-09-13 00:27:32 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
James Savage
Created:
2018-09-13 00:27:32 PDT
Size:
16.19 KB
patch
obsolete
>Subversion Revision: 235961 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index f024f6b73f371ab33db786c71111c6a47a774f40..8b611c908f3f0e340972450e31457b66b9b664f0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,17 @@ >+2018-08-20 James Savage <james.savage@apple.com> >+ >+ Allow override of viewport configuration. >+ https://bugs.webkit.org/show_bug.cgi?id=188772. >+ <rdar://problem/43538892>. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * 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-11 Ryosuke Niwa <rniwa@webkit.org> > > imported/w3c/web-platform-tests/shadow-dom/form-control-form-attribute.html hits assertion >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 224beac641c76a4f37abe0e3e1cbbf8117c511eb..7e9c4cdc0fdef5338785f00193c056977e3c0af4 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,25 @@ >+2018-08-20 James Savage <james.savage@apple.com> >+ >+ Allow override of viewport configuration. >+ https://bugs.webkit.org/show_bug.cgi?id=188772. >+ <rdar://problem/43538892>. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * 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-12 Dan Bernstein <mitz@apple.com> > > Update availability annotations to match the macOS and iOS SDKs in the Xcode 10 GM seed >diff --git a/Source/WebCore/page/Settings.yaml b/Source/WebCore/page/Settings.yaml >index 4743e647e0818949e67aefe5ddb7af34b7832240..e4282b3ce987d606994c3198275cfbf69de8462c 100644 >--- a/Source/WebCore/page/Settings.yaml >+++ b/Source/WebCore/page/Settings.yaml >@@ -763,3 +763,6 @@ incompleteImageBorderEnabled: > > shouldDeferAsynchronousScriptsUntilAfterDocumentLoad: > initial: false >+ >+shouldIgnoreMetaViewport: >+ initial: false >diff --git a/Source/WebCore/page/ViewportConfiguration.cpp b/Source/WebCore/page/ViewportConfiguration.cpp >index 1c4502adbe79820f4b6278392938ae3c4c04cd90..c033571c62997d3ee55b46eca2ebe8bdadf6faca 100644 >--- a/Source/WebCore/page/ViewportConfiguration.cpp >+++ b/Source/WebCore/page/ViewportConfiguration.cpp >@@ -289,6 +289,20 @@ bool ViewportConfiguration::allowsUserScalingIgnoringAlwaysScalable() const > 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; >diff --git a/Source/WebCore/page/ViewportConfiguration.h b/Source/WebCore/page/ViewportConfiguration.h >index 266dbd7537509127a5932b0d27dd5cc79202450e..3fa6cdb780f6670b9918d6981314720d9de29ceb 100644 >--- a/Source/WebCore/page/ViewportConfiguration.h >+++ b/Source/WebCore/page/ViewportConfiguration.h >@@ -101,6 +101,8 @@ public: > 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(); >diff --git a/Source/WebKit/Shared/WebPreferences.yaml b/Source/WebKit/Shared/WebPreferences.yaml >index 9db338e02090e9e169cf33e8643986628775af2a..89238c7b31ebe73cedb9dc28c2a0d1bb43cfde2a 100644 >--- a/Source/WebKit/Shared/WebPreferences.yaml >+++ b/Source/WebKit/Shared/WebPreferences.yaml >@@ -955,6 +955,10 @@ PassiveTouchListenersAsDefaultOnDocument: > defaultValue: defaultPassiveTouchListenersAsDefaultOnDocument() > webcoreName: passiveTouchListenersAsDefaultOnDocument > >+ShouldIgnoreMetaViewport: >+ type: bool >+ defaultValue: false >+ > # Debug Preferences > > AcceleratedDrawingEnabled: >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm b/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm >index c258ce28223a437b97687912cd157cd76d36be7f..2d2fcfa243b5bd8e8bde696f04f4c581e103f88c 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm >@@ -809,6 +809,16 @@ - (BOOL)_lowPowerVideoAudioBufferSizeEnabled > return _preferences->lowPowerVideoAudioBufferSizeEnabled(); > } > >+- (void)_setShouldIgnoreMetaViewport:(BOOL)ignoreMetaViewport >+{ >+ return _preferences->setShouldIgnoreMetaViewport(ignoreMetaViewport); >+} >+ >+- (BOOL)_shouldIgnoreMetaViewport >+{ >+ return _preferences->shouldIgnoreMetaViewport(); >+} >+ > #if PLATFORM(MAC) > - (void)_setJavaEnabledForLocalFiles:(BOOL)enabled > { >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h >index e2f0d09e10e86e5bdaebbc929dbb0602c84ee5a4..03e7529569ee0bd2aa29d13b26489b14c27348d7 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h >@@ -147,6 +147,7 @@ typedef NS_ENUM(NSInteger, _WKEditableLinkBehavior) { > @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)); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >index 0559674b6080206fc61c2c64777874be1afe8a21..fd49997c2ddf58a550b05707f46cb9f21a75b643 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >@@ -1806,7 +1806,7 @@ void WebPage::disabledAdaptationsDidChange(const OptionSet<DisabledAdaptations>& > 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 > >@@ -5313,7 +5313,7 @@ void WebPage::didCommitLoad(WebFrame* frame) > 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) >diff --git a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >index d0d3b20d241f57c62911c3d2daf3444e3247a51c..b5761b0ced9fdf6270e785f378b29a258b9a7882 100644 >--- a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >+++ b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >@@ -2749,8 +2749,15 @@ void WebPage::resetViewportDefaultConfiguration(WebFrame* frame, bool hasMobileD > 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 @@ void WebPage::resetViewportDefaultConfiguration(WebFrame* frame, bool hasMobileD > else if (document->isTextDocument()) > m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::textDocumentParameters()); > else >- m_viewportConfiguration.setDefaultConfiguration(ViewportConfiguration::webpageParameters()); >+ m_viewportConfiguration.setDefaultConfiguration(parametersForStandardFrame()); > } > > void WebPage::viewportConfigurationChanged() >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index f8e96e8fea2852c4a3683b45bbda3831d1643e41..6242ddde30040cb5b1c315eae4d69258bed6adb2 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,18 @@ >+2018-08-20 James Savage <james.savage@apple.com> >+ >+ Allow override of viewport configuration. >+ https://bugs.webkit.org/show_bug.cgi?id=188772. >+ <rdar://problem/43538892>. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * 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-12 Dan Bernstein <mitz@apple.com> > > [Cocoa] Complete support for Paste as Quotation >diff --git a/Tools/WebKitTestRunner/TestController.cpp b/Tools/WebKitTestRunner/TestController.cpp >index 3f3ba2a5123f3fea0e55741de1c4039aaf1b61e0..bfefea7dbce901cd4a4977f89520370a1919e8ec 100644 >--- a/Tools/WebKitTestRunner/TestController.cpp >+++ b/Tools/WebKitTestRunner/TestController.cpp >@@ -1247,6 +1247,8 @@ static void updateTestOptionsFromTestHeader(TestOptions& testOptions, const std: > testOptions.jscOptions = value; > else if (key == "runSingly") > testOptions.runSingly = parseBooleanTestHeaderValue(value); >+ else if (key == "shouldIgnoreMetaViewport") >+ testOptions.shouldIgnoreMetaViewport = parseBooleanTestHeaderValue(value); > pairStart = pairEnd + 1; > } > } >diff --git a/Tools/WebKitTestRunner/TestOptions.h b/Tools/WebKitTestRunner/TestOptions.h >index 91fe4e6d22406dd820e8a326d7f4992338bec27b..5d7ee8b1ee978731fd3bd9c74601529cf1437e61 100644 >--- a/Tools/WebKitTestRunner/TestOptions.h >+++ b/Tools/WebKitTestRunner/TestOptions.h >@@ -62,6 +62,7 @@ struct TestOptions { > bool punchOutWhiteBackgroundsInDarkMode { false }; > bool runSingly { false }; > bool checkForWorldLeaks { false }; >+ bool shouldIgnoreMetaViewport { false }; > > float deviceScaleFactor { 1 }; > Vector<String> overrideLanguages; >diff --git a/Tools/WebKitTestRunner/ios/TestControllerIOS.mm b/Tools/WebKitTestRunner/ios/TestControllerIOS.mm >index f28a94290f3ab92d380fdfc2e405c6867f6b6704..b9dcfd82bd169cdb7320156cd906e8884878d764 100644 >--- a/Tools/WebKitTestRunner/ios/TestControllerIOS.mm >+++ b/Tools/WebKitTestRunner/ios/TestControllerIOS.mm >@@ -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 @@ void TestController::platformConfigureViewForTest(const TestInvocation& test) > 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; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index a07ba0f863d63f1c48411461369f83afd618f46c..593e3f48343b785cb29fdf41d22814a5cede6e78 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,21 @@ >+2018-08-20 James Savage <james.savage@apple.com> >+ >+ Allow override of viewport configuration. >+ https://bugs.webkit.org/show_bug.cgi?id=188772. >+ <rdar://problem/43538892>. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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/baseline-expected.txt: Added. >+ * fast/viewport/ios/ipad/baseline.html: Added. >+ * fast/viewport/ios/ipad/meta-viewport-disabled-expected.txt: Added. >+ * fast/viewport/ios/ipad/meta-viewport-disabled.html: Added. >+ > 2018-09-12 Dean Jackson <dino@apple.com> > > Header parsing for experimental and internal debug features >diff --git a/LayoutTests/fast/viewport/ios/ipad/baseline-expected.txt b/LayoutTests/fast/viewport/ios/ipad/baseline-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..993204c023dff80cf3562db2a1d1799df2c501fa >--- /dev/null >+++ b/LayoutTests/fast/viewport/ios/ipad/baseline-expected.txt >@@ -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"} >diff --git a/LayoutTests/fast/viewport/ios/ipad/baseline.html b/LayoutTests/fast/viewport/ios/ipad/baseline.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fc55278e600c0747504dde6ec0b6edabab372afe >--- /dev/null >+++ b/LayoutTests/fast/viewport/ios/ipad/baseline.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> >+ >+<html> >+<head> >+ <meta name="viewport" content=""> >+ <script src="../resources/viewport-test-utils.js"></script> >+</head> >+<body onload="runTest()"> >+ >+<p>Viewport: <span id="viewport"></span></p> >+<div id="result"></div> >+ >+</body> >+</html> >diff --git a/LayoutTests/fast/viewport/ios/ipad/meta-viewport-disabled-expected.txt b/LayoutTests/fast/viewport/ios/ipad/meta-viewport-disabled-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2c68fd56995c48b9d2014253b32ceb2a40cd28d2 >--- /dev/null >+++ b/LayoutTests/fast/viewport/ios/ipad/meta-viewport-disabled-expected.txt >@@ -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"} >diff --git a/LayoutTests/fast/viewport/ios/ipad/meta-viewport-disabled.html b/LayoutTests/fast/viewport/ios/ipad/meta-viewport-disabled.html >new file mode 100644 >index 0000000000000000000000000000000000000000..4e4e4bcbb44cfafc5aeff8c8f9bd9630f39d6f1a >--- /dev/null >+++ b/LayoutTests/fast/viewport/ios/ipad/meta-viewport-disabled.html >@@ -0,0 +1,14 @@ >+<!DOCTYPE html> <!-- webkit-test-runner [ shouldIgnoreMetaViewport=true ] --> >+ >+<html> >+<head> >+ <meta name="viewport" content=""> >+ <script src="../resources/viewport-test-utils.js"></script> >+</head> >+<body onload="runTest()"> >+ >+<p>Viewport: <span id="viewport"></span></p> >+<div id="result"></div> >+ >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188772
:
347590
|
347645
|
348329
|
349638
|
350799