| 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)
|
| +{
|
| + 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;
|
| }
|
|
|