Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1995)

Unified Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 1804023002: Fix page zoom to be frame-centric for out-of-process frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove 'anonymous'. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 107878abf2a9750ffbc8f1fbdcf4cac5e29e5b78..dbce5b06b65f7e4ff4ef9e4783670e765bcfada8 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -3064,6 +3064,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);
dcheng 2016/04/29 22:49:15 Why do we call the Page methods for each invocatio
+ 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)
@@ -3073,26 +3098,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;
}
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698