Title: [184681] trunk/Source
Revision
184681
Author
[email protected]
Date
2015-05-20 17:52:33 -0700 (Wed, 20 May 2015)

Log Message

[iOS] Using CSS viewport units causes incorrect layout.
https://bugs.webkit.org/show_bug.cgi?id=145225
rdar://problem/20924495

Reviewed by Benjamin Poulain.

Source/WebCore:

* page/ViewportConfiguration.cpp:
(WebCore::ViewportConfiguration::initialScaleFromSize):
(WebCore::ViewportConfiguration::initialScale):
(WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):
* page/ViewportConfiguration.h:
(WebCore::ViewportConfiguration::initialScaleFromSize):
(WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):

Source/WebKit2:

* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::updateViewportSizeForCSSViewportUnits):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (184680 => 184681)


--- trunk/Source/WebCore/ChangeLog	2015-05-21 00:51:34 UTC (rev 184680)
+++ trunk/Source/WebCore/ChangeLog	2015-05-21 00:52:33 UTC (rev 184681)
@@ -1,3 +1,19 @@
+2015-05-20  Enrica Casucci  <[email protected]>
+
+        [iOS] Using CSS viewport units causes incorrect layout.
+        https://bugs.webkit.org/show_bug.cgi?id=145225
+        rdar://problem/20924495
+
+        Reviewed by Benjamin Poulain.
+
+        * page/ViewportConfiguration.cpp:
+        (WebCore::ViewportConfiguration::initialScaleFromSize):
+        (WebCore::ViewportConfiguration::initialScale):
+        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):
+        * page/ViewportConfiguration.h:
+        (WebCore::ViewportConfiguration::initialScaleFromSize):
+        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):
+
 2015-05-20  Chris Fleizach  <[email protected]>
 
         AX: improve list heuristics (presentational use versus actual lists)

Modified: trunk/Source/WebCore/page/ViewportConfiguration.cpp (184680 => 184681)


--- trunk/Source/WebCore/page/ViewportConfiguration.cpp	2015-05-21 00:51:34 UTC (rev 184680)
+++ trunk/Source/WebCore/page/ViewportConfiguration.cpp	2015-05-21 00:52:33 UTC (rev 184681)
@@ -136,30 +136,38 @@
     return shouldIgnoreHorizontalScalingConstraints() || shouldIgnoreVerticalScalingConstraints();
 }
 
-double ViewportConfiguration::initialScale() const
+double ViewportConfiguration::initialScaleFromSize(double width, double height, bool shouldIgnoreScalingConstraints) const
 {
     ASSERT(!constraintsAreAllRelative(m_configuration));
 
     // If the document has specified its own initial scale, use it regardless.
     // This is guaranteed to be sanity checked already, so no need for MIN/MAX.
-    if (m_configuration.initialScaleIsSet && !shouldIgnoreScalingConstraints())
+    if (m_configuration.initialScaleIsSet && !shouldIgnoreScalingConstraints)
         return m_configuration.initialScale;
 
     // If not, it is up to us to determine the initial scale.
     // We want a scale small enough to fit the document width-wise.
     const FloatSize& minimumLayoutSize = m_minimumLayoutSize;
-    double width = m_contentSize.width() > 0 ? m_contentSize.width() : layoutWidth();
     double initialScale = 0;
     if (width > 0 && !shouldIgnoreVerticalScalingConstraints())
         initialScale = minimumLayoutSize.width() / width;
 
     // Prevent the initial scale from shrinking to a height smaller than our view's minimum height.
-    double height = m_contentSize.height() > 0 ? m_contentSize.height() : layoutHeight();
     if (height > 0 && height * initialScale < minimumLayoutSize.height() && !shouldIgnoreHorizontalScalingConstraints())
         initialScale = minimumLayoutSize.height() / height;
-    return std::min(std::max(initialScale, shouldIgnoreScalingConstraints() ? m_defaultConfiguration.minimumScale : m_configuration.minimumScale), m_configuration.maximumScale);
+    return std::min(std::max(initialScale, shouldIgnoreScalingConstraints ? m_defaultConfiguration.minimumScale : m_configuration.minimumScale), m_configuration.maximumScale);
 }
 
+double ViewportConfiguration::initialScale() const
+{
+    return initialScaleFromSize(m_contentSize.width() > 0 ? m_contentSize.width() : layoutWidth(), m_contentSize.height() > 0 ? m_contentSize.height() : layoutHeight(), shouldIgnoreScalingConstraints());
+}
+
+double ViewportConfiguration::initialScaleIgnoringContentSize() const
+{
+    return initialScaleFromSize(layoutWidth(), layoutHeight(), false);
+}
+
 double ViewportConfiguration::minimumScale() const
 {
     // If we scale to fit, then this is our minimum scale as well.

Modified: trunk/Source/WebCore/page/ViewportConfiguration.h (184680 => 184681)


--- trunk/Source/WebCore/page/ViewportConfiguration.h	2015-05-21 00:51:34 UTC (rev 184680)
+++ trunk/Source/WebCore/page/ViewportConfiguration.h	2015-05-21 00:52:33 UTC (rev 184681)
@@ -84,6 +84,7 @@
 
     WEBCORE_EXPORT IntSize layoutSize() const;
     WEBCORE_EXPORT double initialScale() const;
+    WEBCORE_EXPORT double initialScaleIgnoringContentSize() const;
     WEBCORE_EXPORT double minimumScale() const;
     double maximumScale() const { return m_configuration.maximumScale; }
     WEBCORE_EXPORT bool allowsUserScaling() const;
@@ -103,6 +104,7 @@
 private:
     void updateConfiguration();
     double viewportArgumentsLength(double length) const;
+    double initialScaleFromSize(double width, double height, bool shouldIgnoreScalingConstraints) const;
     int layoutWidth() const;
     int layoutHeight() const;
 

Modified: trunk/Source/WebKit2/ChangeLog (184680 => 184681)


--- trunk/Source/WebKit2/ChangeLog	2015-05-21 00:51:34 UTC (rev 184680)
+++ trunk/Source/WebKit2/ChangeLog	2015-05-21 00:52:33 UTC (rev 184681)
@@ -1,3 +1,14 @@
+2015-05-20  Enrica Casucci  <[email protected]>
+
+        [iOS] Using CSS viewport units causes incorrect layout.
+        https://bugs.webkit.org/show_bug.cgi?id=145225
+        rdar://problem/20924495
+
+        Reviewed by Benjamin Poulain.
+
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):
+
 2015-05-20  Tim Horton  <[email protected]>
 
         Allow overriding the waitForDidUpdateViewState timeout

Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (184680 => 184681)


--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2015-05-21 00:51:34 UTC (rev 184680)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2015-05-21 00:52:33 UTC (rev 184681)
@@ -2710,7 +2710,7 @@
         largestUnobscuredRect = m_viewportConfiguration.minimumLayoutSize();
 
     FrameView& frameView = *mainFrameView();
-    largestUnobscuredRect.scale(1 / m_viewportConfiguration.initialScale());
+    largestUnobscuredRect.scale(1 / m_viewportConfiguration.initialScaleIgnoringContentSize());
     frameView.setViewportSizeForCSSViewportUnits(roundedIntSize(largestUnobscuredRect));
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to