Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Unified Diff: content/renderer/render_view_impl.cc

Issue 812033016: Add RenderFrameObserver::FocusedNodeChanged (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix bad merge Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698