Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 85968f7103ef00b00c35e06f912f47d222338b4a..f116d53077ee2e402ca6439455c2f120ba432927 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1358,6 +1358,7 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) { |
OnUpdateWindowScreenRect) |
IPC_MESSAGE_HANDLER(PageMsg_SetZoomLevel, OnSetZoomLevel) |
IPC_MESSAGE_HANDLER(PageMsg_SetDeviceScaleFactor, OnSetDeviceScaleFactor); |
+ IPC_MESSAGE_HANDLER(PageMsg_SetPageScaleFactor, OnSetPageScaleFactor); |
IPC_MESSAGE_HANDLER(PageMsg_WasHidden, OnPageWasHidden) |
IPC_MESSAGE_HANDLER(PageMsg_WasShown, OnPageWasShown) |
IPC_MESSAGE_HANDLER(PageMsg_SetHistoryOffsetAndLength, |
@@ -2676,6 +2677,27 @@ void RenderViewImpl::OnDeviceScaleFactorChanged() { |
AutoResizeCompositor(); |
} |
+void RenderViewImpl::OnSetPageScaleFactor(double page_scale_delta) { |
+ static float scale = 1.f; |
+ if (webview() && webview()->mainFrame() && |
+ !webview()->mainFrame()->isWebLocalFrame()) { |
+ scale = webview()->clampPageScaleFactorToLimits(page_scale_delta * scale); |
+ // TODO(wjmaclean): find something better than walking the frame tree to |
+ // find the local roots? |
+ for (WebFrame* frame = webview()->mainFrame(); frame; |
+ frame = frame->traverseNext(false)) { |
+ if (frame->isWebLocalFrame() && !frame->parent()->isWebLocalFrame()) { |
+ RenderFrameImpl* rfi = RenderFrameImpl::FromWebFrame(frame); |
+ RenderWidgetCompositor* widget_compositor = |
+ rfi->GetRenderWidget()->compositor(); |
+ // TODO(wjmaclean): It would likely be better if we could send deltas, |
+ // but for now this works. |
+ widget_compositor->setPageScaleFactorAndLimits(scale, 1.f, 4.f); |
+ } |
+ } |
+ } |
+} |
+ |
void RenderViewImpl::SetScreenMetricsEmulationParameters( |
bool enabled, |
const blink::WebDeviceEmulationParams& params) { |