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..139ba8e28736f3c397188ac24cccdce3679acc45 100644 |
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp |
@@ -3050,22 +3050,18 @@ double WebViewImpl::zoomLevel() |
return m_zoomLevel; |
} |
-double WebViewImpl::setZoomLevel(double zoomLevel) |
+void WebViewImpl::propagateZoomToLocalFrameRoots(Frame* frame) |
{ |
- if (zoomLevel < m_minimumZoomLevel) |
- m_zoomLevel = m_minimumZoomLevel; |
- else if (zoomLevel > m_maximumZoomLevel) |
- m_zoomLevel = m_maximumZoomLevel; |
- else |
- m_zoomLevel = zoomLevel; |
+ if (frame->isRemoteFrame()) { |
+ for (Frame* child = frame->tree().firstChild(); child; child = child->tree().nextSibling()) |
+ propagateZoomToLocalFrameRoots(child); |
alexmos
2016/04/07 23:48:08
Hmm, what if you have a A-B-A scenario, and you se
wjmaclean
2016/04/08 20:13:29
The Zoom update will be sent to both A's and B's p
|
+ return; |
+ } |
- // 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; |
+ ASSERT(frame->isLocalRoot()); |
bokan
2016/04/07 22:57:12
Blink recently switched ASSERTs to DCHECKs.
wjmaclean
2016/04/08 20:13:29
Done.
|
+ LocalFrame* localFrame = toLocalFrame(frame); |
- LocalFrame* frame = mainFrameImpl()->frame(); |
- if (!WebLocalFrameImpl::pluginContainerFromFrame(frame)) { |
+ if (!WebLocalFrameImpl::pluginContainerFromFrame(localFrame)) { |
float zoomFactor = m_zoomFactorOverride ? m_zoomFactorOverride : static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel)); |
if (m_zoomFactorForDeviceScaleFactor) { |
if (m_compositorDeviceScaleFactorOverride) { |
@@ -3077,8 +3073,20 @@ double WebViewImpl::setZoomLevel(double zoomLevel) |
zoomFactor *= m_zoomFactorForDeviceScaleFactor; |
} |
} |
- frame->setPageZoomFactor(zoomFactor); |
+ localFrame->setPageZoomFactor(zoomFactor); |
} |
+} |
+ |
+double WebViewImpl::setZoomLevel(double zoomLevel) |
+{ |
+ if (zoomLevel < m_minimumZoomLevel) |
+ m_zoomLevel = m_minimumZoomLevel; |
+ else if (zoomLevel > m_maximumZoomLevel) |
+ m_zoomLevel = m_maximumZoomLevel; |
+ else |
+ m_zoomLevel = zoomLevel; |
+ |
+ propagateZoomToLocalFrameRoots(m_page->mainFrame()); |
return m_zoomLevel; |
} |