Index: Source/WebKit/chromium/src/ChromeClientImpl.cpp |
diff --git a/Source/WebKit/chromium/src/ChromeClientImpl.cpp b/Source/WebKit/chromium/src/ChromeClientImpl.cpp |
index b4bff9bf2c337d083655f46795f99fa03864ca92..c28b7520f6cfc4dd599d53eb5124314d6e470a9d 100644 |
--- a/Source/WebKit/chromium/src/ChromeClientImpl.cpp |
+++ b/Source/WebKit/chromium/src/ChromeClientImpl.cpp |
@@ -643,6 +643,11 @@ static float calculateTargetDensityDPIFactor(const ViewportArguments& arguments, |
return targetDPI > 0 ? (deviceScaleFactor * 120.0f) / targetDPI : 1.0f; |
} |
+static float getLayoutWidthForNonWideViewport(const ViewportArguments& arguments, const FloatSize& deviceSize, float initialScale) |
+{ |
+ return arguments.zoom == ViewportArguments::ValueAuto ? deviceSize.width() : deviceSize.width() / initialScale; |
+} |
+ |
void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArguments& arguments) const |
{ |
#if ENABLE(VIEWPORT) |
@@ -663,15 +668,27 @@ void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArgumen |
computed.maximumScale = max(computed.maximumScale, m_webView->maxPageScaleFactor); |
computed.userScalable = true; |
} |
- if (arguments.zoom == ViewportArguments::ValueAuto && !m_webView->settingsImpl()->initializeAtMinimumPageScale()) |
- computed.initialScale = 1.0f; |
- |
+ float initialScale = computed.initialScale; |
+ if (arguments.zoom == ViewportArguments::ValueAuto && !m_webView->settingsImpl()->initializeAtMinimumPageScale()) { |
+ if (arguments.width == ViewportArguments::ValueAuto |
+ || (m_webView->settingsImpl()->useWideViewport() |
+ && arguments.width != ViewportArguments::ValueAuto && arguments.width != ViewportArguments::ValueDeviceWidth)) |
+ computed.initialScale = 1.0f; |
+ } |
if (m_webView->settingsImpl()->supportDeprecatedTargetDensityDPI()) { |
float targetDensityDPIFactor = calculateTargetDensityDPIFactor(arguments, deviceScaleFactor); |
computed.initialScale *= targetDensityDPIFactor; |
computed.minimumScale *= targetDensityDPIFactor; |
computed.maximumScale *= targetDensityDPIFactor; |
- computed.layoutSize.scale(1.0f / targetDensityDPIFactor); |
+ |
+ if (m_webView->settingsImpl()->useWideViewport() && arguments.width == ViewportArguments::ValueAuto && arguments.zoom != 1.0f) |
+ computed.layoutSize.setWidth(m_webView->page()->settings()->layoutFallbackWidth()); |
+ else { |
+ if (!m_webView->settingsImpl()->useWideViewport()) |
+ computed.layoutSize.setWidth(getLayoutWidthForNonWideViewport(arguments, viewportSize, initialScale)); |
+ if (!m_webView->settingsImpl()->useWideViewport() || arguments.width == ViewportArguments::ValueAuto || arguments.width == ViewportArguments::ValueDeviceWidth) |
+ computed.layoutSize.scale(1.0f / targetDensityDPIFactor); |
+ } |
} |
m_webView->setInitialPageScaleFactor(computed.initialScale); |