Chromium Code Reviews| Index: content/browser/frame_host/cross_process_frame_connector.cc |
| diff --git a/content/browser/frame_host/cross_process_frame_connector.cc b/content/browser/frame_host/cross_process_frame_connector.cc |
| index 649f4a2b8c61856c9dd165fa843fcd04e8e8c2c0..c5ac363d62764c4d79ad17db75e51cf4bebfdfe0 100644 |
| --- a/content/browser/frame_host/cross_process_frame_connector.cc |
| +++ b/content/browser/frame_host/cross_process_frame_connector.cc |
| @@ -247,9 +247,26 @@ void CrossProcessFrameConnector::SetDeviceScaleFactor(float scale_factor) { |
| } |
| void CrossProcessFrameConnector::SetRect(const gfx::Rect& frame_rect) { |
| + gfx::Rect old_rect = child_frame_rect_; |
| child_frame_rect_ = frame_rect; |
| - if (view_) |
| + if (view_) { |
| view_->SetBounds(frame_rect); |
| + |
| + // Out-of-process iframes nested underneath this one implicitly have their |
| + // view rects changed when their ancestor is repositioned, and therefore |
| + // need to have their screen rects updated. |
| + FrameTreeNode* proxy_node = |
| + frame_proxy_in_parent_renderer_->frame_tree_node(); |
| + if (old_rect.x() != child_frame_rect_.x() || |
| + old_rect.y() != child_frame_rect_.y()) { |
| + for (FrameTreeNode* node : |
| + proxy_node->frame_tree()->SubtreeNodes(proxy_node)) { |
| + if (node != proxy_node && |
|
nasko
2016/03/22 13:56:54
nit: Why not add a SubtreeNodes() call that takes
kenrb
2016/03/22 15:40:20
The NodesExcept code in frame_tree.cc excludes an
|
| + node->current_frame_host()->GetRenderWidgetHost()) |
| + node->current_frame_host()->GetRenderWidgetHost()->SendScreenRects(); |
| + } |
| + } |
| + } |
| } |
| RenderWidgetHostViewBase* |