Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index cc597bd1005feb03373f86ae3d7fa3b5266b330f..61af2e1ebcf6cfd9ce902920f5a97a948a630db2 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -1241,6 +1241,8 @@ 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, |
+ OnSetPageScaleFactorForSubframes); |
IPC_MESSAGE_HANDLER(PageMsg_WasHidden, OnPageWasHidden) |
IPC_MESSAGE_HANDLER(PageMsg_WasShown, OnPageWasShown) |
IPC_MESSAGE_HANDLER(PageMsg_SetHistoryOffsetAndLength, |
@@ -2376,6 +2378,24 @@ void RenderViewImpl::OnDeviceScaleFactorChanged() { |
AutoResizeCompositor(); |
} |
+void RenderViewImpl::OnSetPageScaleFactorForSubframes(double page_scale) { |
+ if (webview() && webview()->mainFrame() && |
+ !webview()->mainFrame()->isWebLocalFrame()) { |
kenrb
2017/01/24 17:13:27
It's cleaner to test the inverted conditions, and
wjmaclean
2017/01/24 18:24:26
Done.
|
+ // TODO(wjmaclean): Find a better way to identify the local roots in the |
+ // frame tree. Still, this is likely better than sending a separate IPC for |
+ // every frame in a renderer. |
kenrb
2017/01/24 17:13:27
That is technically true, but an alternative is to
wjmaclean
2017/01/24 18:24:26
Ok, I didn't know about that ... I'll look into th
kenrb
2017/01/24 18:47:30
Yes. Hypothetically it could go on RenderFrameImpl
|
+ for (WebFrame* frame = webview()->mainFrame(); frame; |
+ frame = frame->traverseNext()) { |
+ if (frame->isWebLocalFrame() && !frame->parent()->isWebLocalFrame()) { |
+ RenderFrameImpl* rfi = RenderFrameImpl::FromWebFrame(frame); |
+ RenderWidgetCompositor* widget_compositor = |
+ rfi->GetRenderWidget()->compositor(); |
+ widget_compositor->SetPageScaleFactorForSubframe(page_scale); |
+ } |
+ } |
+ } |
+} |
+ |
void RenderViewImpl::SetScreenMetricsEmulationParameters( |
bool enabled, |
const blink::WebDeviceEmulationParams& params) { |