Chromium Code Reviews| Index: content/browser/frame_host/render_frame_host_impl.cc |
| diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
| index 3b619f154c6fca9d60b09d3a99f30145ba36c663..e86d4ddeb25da07cc83b675092f8d1ae9752f5aa 100644 |
| --- a/content/browser/frame_host/render_frame_host_impl.cc |
| +++ b/content/browser/frame_host/render_frame_host_impl.cc |
| @@ -1630,8 +1630,8 @@ void RenderFrameHostImpl::OnAccessibilityEvents( |
| detail.ax_tree_id = GetAXTreeID(); |
| if (param.update.has_tree_data) { |
| detail.update.has_tree_data = true; |
| - AXContentTreeDataToAXTreeData(param.update.tree_data, |
| - &detail.update.tree_data); |
| + ax_content_tree_data_ = param.update.tree_data; |
| + AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
| } |
| detail.update.node_id_to_clear = param.update.node_id_to_clear; |
| detail.update.nodes.resize(param.update.nodes.size()); |
| @@ -1724,8 +1724,8 @@ void RenderFrameHostImpl::OnAccessibilitySnapshotResponse( |
| &dst_snapshot.nodes[i]); |
| } |
| if (snapshot.has_tree_data) { |
| - AXContentTreeDataToAXTreeData(snapshot.tree_data, |
| - &dst_snapshot.tree_data); |
| + ax_content_tree_data_ = snapshot.tree_data; |
| + AXContentTreeDataToAXTreeData(&dst_snapshot.tree_data); |
| dst_snapshot.has_tree_data = true; |
| } |
| it->second.Run(dst_snapshot); |
| @@ -2343,6 +2343,27 @@ void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( |
| accessibility_testing_callback_ = callback; |
| } |
| +void RenderFrameHostImpl::UpdateAXTreeData() { |
| + AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
| + if (accessibility_mode == AccessibilityModeOff || |
| + !RenderFrameHostImpl::IsRFHStateActive(rfh_state())) { |
| + return; |
| + } |
| + |
| + std::vector<AXEventNotificationDetails> details; |
| + details.reserve(1U); |
| + AXEventNotificationDetails detail; |
| + detail.ax_tree_id = GetAXTreeID(); |
| + detail.update.has_tree_data = true; |
| + AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
| + details.push_back(detail); |
| + |
| + if (browser_accessibility_manager_) |
| + browser_accessibility_manager_->OnAccessibilityEvents(details); |
| + |
| + delegate_->AccessibilityEventReceived(details); |
| +} |
| + |
| void RenderFrameHostImpl::SetTextTrackSettings( |
| const FrameMsg_TextTrackSettings_Params& params) { |
| DCHECK(!GetParent()); |
| @@ -2625,8 +2646,9 @@ void RenderFrameHostImpl::AXContentNodeDataToAXNodeData( |
| } |
| void RenderFrameHostImpl::AXContentTreeDataToAXTreeData( |
| - const AXContentTreeData& src, |
| ui::AXTreeData* dst) { |
| + const AXContentTreeData& src = ax_content_tree_data_; |
| + |
| // Copy the common fields. |
| *dst = src; |
| @@ -2635,6 +2657,20 @@ void RenderFrameHostImpl::AXContentTreeDataToAXTreeData( |
| if (src.parent_routing_id != -1) |
| dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id); |
| + |
| + // If this is not the root frame tree node, we're done. |
| + if (frame_tree_node()->parent()) |
| + return; |
| + |
| + // For the root frame tree node, also store the AXTreeID of the focused frame. |
| + FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame(); |
| + if (!focused_frame_tree_node) |
| + return; |
| + RenderFrameHostImpl* focused_frame = |
| + focused_frame_tree_node->current_frame_host(); |
| + if (!focused_frame) |
|
nasko
2016/03/09 22:44:37
Is this even possible? I think we can't have a fra
dmazzoni
2016/03/09 22:55:28
Good call. I'll change it to DCHECK.
|
| + return; |
| + dst->focused_tree_id = focused_frame->GetAXTreeID(); |
| } |
| } // namespace content |