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

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: 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
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() {
« content/renderer/render_frame_impl.cc ('K') | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698