Index: third_party/WebKit/Source/web/WebViewImpl.cpp |
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp |
index 2ff804ebb0cef02fe89bcd33c78e41db630d25b3..17c1bcb6fd2f29748fa24f248b03bdc64562e861 100644 |
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp |
@@ -412,6 +412,8 @@ WebViewImpl::WebViewImpl(WebViewClient* client) |
, m_zoomLevel(0) |
, m_minimumZoomLevel(zoomFactorToZoomLevel(minTextSizeMultiplier)) |
, m_maximumZoomLevel(zoomFactorToZoomLevel(maxTextSizeMultiplier)) |
+ , m_zoomFactorForDeviceScaleFactor(1.f) |
+ , m_useZoomForDeviceScaleFactor(false) |
, m_maximumLegibleScale(1) |
, m_doubleTapZoomPageScaleFactor(0) |
, m_doubleTapZoomPending(false) |
@@ -2958,6 +2960,7 @@ double WebViewImpl::setZoomLevel(double zoomLevel) |
LocalFrame* frame = mainFrameImpl()->frame(); |
if (!WebLocalFrameImpl::pluginContainerFromFrame(frame)) { |
float zoomFactor = m_zoomFactorOverride ? m_zoomFactorOverride : static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel)); |
+ zoomFactor *= m_zoomFactorForDeviceScaleFactor; |
frame->setPageZoomFactor(zoomFactor); |
} |
@@ -3094,13 +3097,26 @@ float WebViewImpl::deviceScaleFactor() const |
void WebViewImpl::setDeviceScaleFactor(float scaleFactor) |
{ |
- if (!page()) |
- return; |
+ if (m_useZoomForDeviceScaleFactor) { |
+ if (!m_layerTreeView || m_zoomFactorForDeviceScaleFactor == scaleFactor) |
+ return; |
+ m_zoomFactorForDeviceScaleFactor = scaleFactor; |
+ setZoomLevel(m_zoomLevel); |
+ } else { |
+ if (!page()) |
+ return; |
- page()->setDeviceScaleFactor(scaleFactor); |
+ page()->setDeviceScaleFactor(scaleFactor); |
- if (m_layerTreeView) |
- updateLayerTreeDeviceScaleFactor(); |
+ if (!m_layerTreeView) |
+ return; |
+ } |
+ updateLayerTreeDeviceScaleFactor(); |
+} |
+ |
+void WebViewImpl::enableUseZoomForDeviceScaleFactor() |
+{ |
+ m_useZoomForDeviceScaleFactor = true; |
} |
void WebViewImpl::setDeviceColorProfile(const WebVector<char>& colorProfile) |