Index: Source/core/dom/ViewportArguments.cpp |
diff --git a/Source/core/dom/ViewportArguments.cpp b/Source/core/dom/ViewportArguments.cpp |
index e0b346da8d03f9d2076a2e3109555ded960b3e2f..d6a56f98c46bba374558a2660e04ae2d3157e406 100644 |
--- a/Source/core/dom/ViewportArguments.cpp |
+++ b/Source/core/dom/ViewportArguments.cpp |
@@ -114,10 +114,10 @@ PageScaleConstraints ViewportArguments::resolve(const FloatSize& initialViewport |
ASSERT(resultMaxHeight != ViewportArguments::ValueDeviceHeight); |
if (resultMinWidth != ViewportArguments::ValueAuto || resultMaxWidth != ViewportArguments::ValueAuto) |
- resultWidth = compareIgnoringAuto(resultMinWidth, compareIgnoringAuto(resultMaxWidth, deviceSize.width(), min), max); |
+ resultWidth = compareIgnoringAuto(resultMinWidth, compareIgnoringAuto(resultMaxWidth, initialViewportSize.width(), min), max); |
if (resultMinHeight != ViewportArguments::ValueAuto || resultMaxHeight != ViewportArguments::ValueAuto) |
- resultHeight = compareIgnoringAuto(resultMinHeight, compareIgnoringAuto(resultMaxHeight, deviceSize.height(), min), max); |
+ resultHeight = compareIgnoringAuto(resultMinHeight, compareIgnoringAuto(resultMaxHeight, initialViewportSize.height(), min), max); |
if (resultMinZoom != ViewportArguments::ValueAuto && resultMaxZoom != ViewportArguments::ValueAuto) |
resultMaxZoom = max(resultMinZoom, resultMaxZoom); |
@@ -125,25 +125,20 @@ PageScaleConstraints ViewportArguments::resolve(const FloatSize& initialViewport |
if (resultZoom != ViewportArguments::ValueAuto) |
resultZoom = compareIgnoringAuto(resultMinZoom, compareIgnoringAuto(resultMaxZoom, resultZoom, min), max); |
- if (resultWidth == ViewportArguments::ValueAuto && resultZoom == ViewportArguments::ValueAuto) |
- resultWidth = deviceSize.width(); |
+ if (resultWidth == ViewportArguments::ValueAuto && (resultHeight == ViewportArguments::ValueAuto || !initialViewportSize.height())) |
+ resultWidth = initialViewportSize.width(); |
- if (resultWidth == ViewportArguments::ValueAuto && resultHeight == ViewportArguments::ValueAuto) |
- resultWidth = deviceSize.width() / resultZoom; |
- |
- if (resultWidth == ViewportArguments::ValueAuto) |
- resultWidth = resultHeight * deviceSize.width() / deviceSize.height(); |
- |
- if (resultHeight == ViewportArguments::ValueAuto) |
- resultHeight = resultWidth * deviceSize.height() / deviceSize.width(); |
- |
- if (resultZoom != ViewportArguments::ValueAuto || resultMaxZoom != ViewportArguments::ValueAuto) { |
- resultWidth = compareIgnoringAuto(resultWidth, deviceSize.width() / compareIgnoringAuto(resultZoom, resultMaxZoom, min), max); |
- resultHeight = compareIgnoringAuto(resultHeight, deviceSize.height() / compareIgnoringAuto(resultZoom, resultMaxZoom, min), max); |
+ if (resultWidth == ViewportArguments::ValueAuto) { |
+ ASSERT(initialViewportSize.height()); // If height is 0, resultWidth should be resolved above. |
+ resultWidth = resultHeight * initialViewportSize.width() / initialViewportSize.height(); |
} |
- resultWidth = max<float>(1, resultWidth); |
- resultHeight = max<float>(1, resultHeight); |
+ if (resultHeight == ViewportArguments::ValueAuto) { |
+ if (!initialViewportSize.width()) |
+ resultHeight = initialViewportSize.height(); |
+ else |
+ resultHeight = resultWidth * initialViewportSize.height() / initialViewportSize.width(); |
+ } |
} |
if (type != ViewportArguments::CSSDeviceAdaptation && type != ViewportArguments::Implicit) { |
@@ -175,9 +170,9 @@ PageScaleConstraints ViewportArguments::resolve(const FloatSize& initialViewport |
result.initialScale = resultZoom; |
if (resultZoom == ViewportArguments::ValueAuto) { |
result.initialScale = initialViewportSize.width() / defaultWidth; |
- if (resultWidth != ViewportArguments::ValueAuto) |
+ if (resultWidth != ViewportArguments::ValueAuto && resultWidth > 0) |
result.initialScale = initialViewportSize.width() / resultWidth; |
- if (resultHeight != ViewportArguments::ValueAuto) { |
+ if (resultHeight != ViewportArguments::ValueAuto && resultHeight > 0) { |
// if 'auto', the initial-scale will be negative here and thus ignored. |
result.initialScale = max<float>(result.initialScale, initialViewportSize.height() / resultHeight); |
} |