| Index: content/renderer/render_view_impl.cc
|
| diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
|
| index 79dce611251507439b8ae2eaf2b7ffdca3160da2..6f5017dfb27f58028d73ae7713385361c7d4a576 100644
|
| --- a/content/renderer/render_view_impl.cc
|
| +++ b/content/renderer/render_view_impl.cc
|
| @@ -1916,21 +1916,35 @@ void RenderViewImpl::focusPrevious() {
|
| Send(new ViewHostMsg_TakeFocus(routing_id_, true));
|
| }
|
|
|
| -void RenderViewImpl::focusedNodeChanged(const WebNode& node) {
|
| +void RenderViewImpl::focusedNodeChanged(const WebNode& fromNode,
|
| + const WebNode& toNode) {
|
| 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 (!toNode.isNull() && toNode.isElementNode()) {
|
| + WebNode web_node = const_cast<WebNode&>(toNode);
|
| node_bounds = gfx::Rect(web_node.to<WebElement>().boundsInViewportSpace());
|
| }
|
| - Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node),
|
| + Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(toNode),
|
| node_bounds));
|
|
|
| - FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node));
|
| + // TODO(estade): remove.
|
| + FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(toNode));
|
|
|
| - // TODO(dmazzoni): this should be part of RenderFrameObserver.
|
| - GetMainRenderFrame()->FocusedNodeChanged(node);
|
| + RenderFrameImpl* previous_frame = nullptr;
|
| + if (!fromNode.isNull())
|
| + previous_frame = RenderFrameImpl::FromWebFrame(fromNode.document().frame());
|
| + RenderFrameImpl* new_frame = nullptr;
|
| + if (!toNode.isNull())
|
| + new_frame = RenderFrameImpl::FromWebFrame(toNode.document().frame());
|
| +
|
| + if (previous_frame && previous_frame != new_frame)
|
| + previous_frame->FocusedNodeChanged(WebNode());
|
| + if (new_frame)
|
| + new_frame->FocusedNodeChanged(toNode);
|
| +
|
| + // TODO(dmazzoni): remove once there's a separate a11y tree per frame.
|
| + GetMainRenderFrame()->FocusedNodeChangedForAccessibility(toNode);
|
| }
|
|
|
| void RenderViewImpl::didUpdateLayout() {
|
|
|