Index: Source/core/page/PageScaleConstraintsSet.cpp |
diff --git a/Source/core/page/PageScaleConstraintsSet.cpp b/Source/core/page/PageScaleConstraintsSet.cpp |
index e0d185b6542fa03e2a6d47f5e0a90ac81d340dab..c4f89cb82dc874023f7c34bd13ed02f559290205 100644 |
--- a/Source/core/page/PageScaleConstraintsSet.cpp |
+++ b/Source/core/page/PageScaleConstraintsSet.cpp |
@@ -49,9 +49,9 @@ PageScaleConstraints PageScaleConstraintsSet::defaultConstraints() const |
return PageScaleConstraints(-1, defaultMinimumScale, defaultMaximumScale); |
} |
-void PageScaleConstraintsSet::updatePageDefinedConstraints(const ViewportArguments& arguments, IntSize viewSize, int layoutFallbackWidth) |
+void PageScaleConstraintsSet::updatePageDefinedConstraints(const ViewportArguments& arguments, IntSize viewSize) |
{ |
- m_pageDefinedConstraints = arguments.resolve(viewSize, layoutFallbackWidth); |
+ m_pageDefinedConstraints = arguments.resolve(viewSize); |
m_constraintsDirty = true; |
} |
@@ -121,9 +121,9 @@ static float getLayoutWidthForNonWideViewport(const FloatSize& deviceSize, float |
void PageScaleConstraintsSet::adjustPageDefinedConstraintsForAndroidWebView(const ViewportArguments& arguments, IntSize viewSize, int layoutFallbackWidth, float deviceScaleFactor, bool useWideViewport, bool loadWithOverviewMode) |
{ |
- float initialScale = m_pageDefinedConstraints.initialScale; |
- if (arguments.zoom == -1 && !loadWithOverviewMode) { |
- if (arguments.width == -1 || (useWideViewport && arguments.width != ViewportArguments::ValueDeviceWidth)) |
+ float zoom = m_pageDefinedConstraints.initialScale; |
+ if (zoom < 0 && !loadWithOverviewMode) { |
+ if (arguments.minWidth < 0 || useWideViewport) |
m_pageDefinedConstraints.initialScale = 1.0f; |
} |
@@ -134,17 +134,24 @@ void PageScaleConstraintsSet::adjustPageDefinedConstraintsForAndroidWebView(cons |
m_pageDefinedConstraints.maximumScale *= targetDensityDPIFactor; |
float adjustedLayoutSizeWidth = m_pageDefinedConstraints.layoutSize.width(); |
- if (useWideViewport && arguments.width == -1 && arguments.zoom != 1.0f) |
+ |
+ if (!useWideViewport) |
+ adjustedLayoutSizeWidth = getLayoutWidthForNonWideViewport(viewSize, zoom); |
+ |
+ adjustedLayoutSizeWidth /= targetDensityDPIFactor; |
+ |
+ // FIXME: Why this particular Android behavior? |
+ // |
+ // <meta name="viewport" content="initial-scale=2.0"> translates into: |
+ // @viewport { zoom: 2.0; width: extend-to-zoom; } according to the spec. |
aelias_OOO_until_Jul13
2013/08/27 16:58:09
We've observed that classic Android WebView does n
|
+ // |
+ // But Android seems to convert the width into 'auto'; |
+ if (useWideViewport && arguments.maxWidth < 0 && arguments.zoom != 1.0f) |
adjustedLayoutSizeWidth = layoutFallbackWidth; |
- else { |
- if (!useWideViewport) |
- adjustedLayoutSizeWidth = getLayoutWidthForNonWideViewport(viewSize, initialScale); |
- if (!useWideViewport || arguments.width == -1 || arguments.width == ViewportArguments::ValueDeviceWidth) |
- adjustedLayoutSizeWidth /= targetDensityDPIFactor; |
- } |
ASSERT(m_pageDefinedConstraints.layoutSize.width() > 0); |
float adjustedLayoutSizeHeight = (adjustedLayoutSizeWidth * m_pageDefinedConstraints.layoutSize.height()) / m_pageDefinedConstraints.layoutSize.width(); |
+ |
m_pageDefinedConstraints.layoutSize.setWidth(adjustedLayoutSizeWidth); |
m_pageDefinedConstraints.layoutSize.setHeight(adjustedLayoutSizeHeight); |
} |