Chromium Code Reviews| 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 e5d845e9d073d7e2c90e9867b6fc09b977ca5a6d..ae87acc09c1566c01ec466f0ee577fcc2a23c66b 100644 |
| --- a/third_party/WebKit/Source/web/WebViewImpl.cpp |
| +++ b/third_party/WebKit/Source/web/WebViewImpl.cpp |
| @@ -3052,6 +3052,31 @@ double WebViewImpl::zoomLevel() |
| return m_zoomLevel; |
| } |
| +void WebViewImpl::propagateZoomToLocalFrameRoots(Frame* frame) |
|
kenrb
2016/04/14 18:19:52
We've tried to avoid doing this kind of frame walk
alexmos
2016/04/27 23:39:50
Pinging this so that we don't forget to discuss it
|
| +{ |
| + 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) |
| @@ -3061,26 +3086,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; |
| } |