Chromium Code Reviews| Index: content/renderer/render_view_impl.cc |
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
| index 59b6a58c79f7da5ff97637928c4e05fcda1286a9..c8394b913c09ca5be591d526f943d240097bada3 100644 |
| --- a/content/renderer/render_view_impl.cc |
| +++ b/content/renderer/render_view_impl.cc |
| @@ -1908,21 +1908,39 @@ void RenderViewImpl::focusPrevious() { |
| Send(new ViewHostMsg_TakeFocus(routing_id_, true)); |
| } |
| -void RenderViewImpl::focusedNodeChanged(const WebNode& node) { |
| +void RenderViewImpl::focusedNodeChanged(const WebNode& previouslyFocusedNode, |
| + const WebNode& focusedNode) { |
| has_scrolled_focused_editable_node_into_rect_ = false; |
| gfx::Rect node_bounds; |
| - if (!node.isNull() && node.isElementNode()) { |
| - WebNode web_node = const_cast<WebNode&>(node); |
| + if (!focusedNode.isNull() && focusedNode.isElementNode()) { |
| + WebNode web_node = const_cast<WebNode&>(focusedNode); |
| node_bounds = gfx::Rect(web_node.to<WebElement>().boundsInViewportSpace()); |
| } |
| - Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node), |
| - node_bounds)); |
| + Send(new ViewHostMsg_FocusedNodeChanged( |
| + routing_id_, IsEditableNode(focusedNode), node_bounds)); |
| - FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node)); |
| + // TODO(estade): remove. |
| + FOR_EACH_OBSERVER(RenderViewObserver, observers_, |
| + FocusedNodeChanged(focusedNode)); |
| + |
| + RenderFrameImpl* previous_frame = nullptr; |
| + if (!previouslyFocusedNode.isNull()) { |
| + previous_frame = |
| + RenderFrameImpl::FromWebFrame(previouslyFocusedNode.document().frame()); |
| + } |
| + RenderFrameImpl* new_frame = nullptr; |
| + if (!focusedNode.isNull()) { |
|
nasko
2015/01/20 05:09:51
nit: no need for {}
Evan Stade
2015/01/20 22:31:01
Done.
|
| + new_frame = RenderFrameImpl::FromWebFrame(focusedNode.document().frame()); |
| + } |
| + |
| + if (previous_frame && previous_frame != new_frame) |
| + previous_frame->FocusedNodeChanged(WebNode()); |
| + if (new_frame) |
| + new_frame->FocusedNodeChanged(focusedNode); |
| - // TODO(dmazzoni): this should be part of RenderFrameObserver. |
| - GetMainRenderFrame()->FocusedNodeChanged(node); |
| + // TODO(dmazzoni): remove once there's a separate a11y tree per frame. |
| + GetMainRenderFrame()->FocusedNodeChangedForAccessibility(focusedNode); |
| } |
| void RenderViewImpl::didUpdateLayout() { |