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 1e934d3b35189dd9d76e59e395aa91550e70f2e3..70fb3a16ce2f1f5d4158f2dcb18836fc26a4caa3 100644 |
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp |
@@ -3050,6 +3050,31 @@ double WebViewImpl::zoomLevel() |
return m_zoomLevel; |
} |
+void WebViewImpl::propagateZoomToLocalFrameRoots(Frame* frame) |
+{ |
+ if (frame->isLocalRoot()) { |
+ LocalFrame* localFrame = toLocalFrame(frame); |
+ |
+ if (!WebLocalFrameImpl::pluginContainerFromFrame(localFrame)) { |
+ float zoomFactor = m_zoomFactorOverride ? m_zoomFactorOverride : static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel)); |
+ if (m_zoomFactorForDeviceScaleFactor) { |
+ if (m_compositorDeviceScaleFactorOverride) { |
+ // Adjust the page's DSF so that DevicePixelRatio becomes m_zoomFactorForDeviceScaleFactor. |
+ page()->setDeviceScaleFactor(m_zoomFactorForDeviceScaleFactor / m_compositorDeviceScaleFactorOverride); |
+ zoomFactor *= m_compositorDeviceScaleFactorOverride; |
+ } else { |
+ page()->setDeviceScaleFactor(1.f); |
+ zoomFactor *= m_zoomFactorForDeviceScaleFactor; |
+ } |
+ } |
+ localFrame->setPageZoomFactor(zoomFactor); |
+ } |
+ } |
+ |
+ for (Frame* child = frame->tree().firstChild(); child; child = child->tree().nextSibling()) |
+ propagateZoomToLocalFrameRoots(child); |
+} |
+ |
double WebViewImpl::setZoomLevel(double zoomLevel) |
{ |
if (zoomLevel < m_minimumZoomLevel) |
@@ -3059,26 +3084,7 @@ double WebViewImpl::setZoomLevel(double zoomLevel) |
else |
m_zoomLevel = zoomLevel; |
- // TODO(nasko): Setting zoom level needs to be refactored to support |
- // out-of-process iframes. See https://crbug.com/528407. |
- if (mainFrame()->isWebRemoteFrame()) |
- return m_zoomLevel; |
- |
- LocalFrame* frame = mainFrameImpl()->frame(); |
- if (!WebLocalFrameImpl::pluginContainerFromFrame(frame)) { |
- float zoomFactor = m_zoomFactorOverride ? m_zoomFactorOverride : static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel)); |
- if (m_zoomFactorForDeviceScaleFactor) { |
- if (m_compositorDeviceScaleFactorOverride) { |
- // Adjust the page's DSF so that DevicePixelRatio becomes m_zoomFactorForDeviceScaleFactor. |
- page()->setDeviceScaleFactor(m_zoomFactorForDeviceScaleFactor / m_compositorDeviceScaleFactorOverride); |
- zoomFactor *= m_compositorDeviceScaleFactorOverride; |
- } else { |
- page()->setDeviceScaleFactor(1.f); |
- zoomFactor *= m_zoomFactorForDeviceScaleFactor; |
- } |
- } |
- frame->setPageZoomFactor(zoomFactor); |
- } |
+ propagateZoomToLocalFrameRoots(m_page->mainFrame()); |
return m_zoomLevel; |
} |