OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/frame_host/render_frame_host_impl.h" | 5 #include "content/browser/frame_host/render_frame_host_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 1153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1164 frame_tree_node_->ResetForNewProcess(); | 1164 frame_tree_node_->ResetForNewProcess(); |
1165 | 1165 |
1166 // Reset state for the current RenderFrameHost once the FrameTreeNode has been | 1166 // Reset state for the current RenderFrameHost once the FrameTreeNode has been |
1167 // reset. | 1167 // reset. |
1168 SetRenderFrameCreated(false); | 1168 SetRenderFrameCreated(false); |
1169 InvalidateMojoConnection(); | 1169 InvalidateMojoConnection(); |
1170 | 1170 |
1171 // Execute any pending AX tree snapshot callbacks with an empty response, | 1171 // Execute any pending AX tree snapshot callbacks with an empty response, |
1172 // since we're never going to get a response from this renderer. | 1172 // since we're never going to get a response from this renderer. |
1173 for (const auto& iter : ax_tree_snapshot_callbacks_) | 1173 for (const auto& iter : ax_tree_snapshot_callbacks_) |
1174 iter.second.Run(ui::AXTreeUpdate<ui::AXNodeData>()); | 1174 iter.second.Run(ui::AXTreeUpdate()); |
1175 ax_tree_snapshot_callbacks_.clear(); | 1175 ax_tree_snapshot_callbacks_.clear(); |
1176 | 1176 |
1177 // Note: don't add any more code at this point in the function because | 1177 // Note: don't add any more code at this point in the function because |
1178 // |this| may be deleted. Any additional cleanup should happen before | 1178 // |this| may be deleted. Any additional cleanup should happen before |
1179 // the last block of code here. | 1179 // the last block of code here. |
1180 } | 1180 } |
1181 | 1181 |
1182 void RenderFrameHostImpl::OnSwappedOut() { | 1182 void RenderFrameHostImpl::OnSwappedOut() { |
1183 // Ignore spurious swap out ack. | 1183 // Ignore spurious swap out ack. |
1184 if (rfh_state_ != STATE_PENDING_SWAP_OUT) | 1184 if (rfh_state_ != STATE_PENDING_SWAP_OUT) |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 GetOrCreateBrowserAccessibilityManager(); | 1419 GetOrCreateBrowserAccessibilityManager(); |
1420 | 1420 |
1421 std::vector<AXEventNotificationDetails> details; | 1421 std::vector<AXEventNotificationDetails> details; |
1422 details.reserve(params.size()); | 1422 details.reserve(params.size()); |
1423 for (size_t i = 0; i < params.size(); ++i) { | 1423 for (size_t i = 0; i < params.size(); ++i) { |
1424 const AccessibilityHostMsg_EventParams& param = params[i]; | 1424 const AccessibilityHostMsg_EventParams& param = params[i]; |
1425 AXEventNotificationDetails detail; | 1425 AXEventNotificationDetails detail; |
1426 detail.event_type = param.event_type; | 1426 detail.event_type = param.event_type; |
1427 detail.id = param.id; | 1427 detail.id = param.id; |
1428 detail.ax_tree_id = GetAXTreeID(); | 1428 detail.ax_tree_id = GetAXTreeID(); |
| 1429 if (param.update.has_tree_data) { |
| 1430 detail.update.has_tree_data = true; |
| 1431 AXContentTreeDataToAXTreeData(param.update.tree_data, |
| 1432 &detail.update.tree_data); |
| 1433 } |
1429 detail.update.node_id_to_clear = param.update.node_id_to_clear; | 1434 detail.update.node_id_to_clear = param.update.node_id_to_clear; |
1430 detail.update.nodes.resize(param.update.nodes.size()); | 1435 detail.update.nodes.resize(param.update.nodes.size()); |
1431 for (size_t i = 0; i < param.update.nodes.size(); ++i) { | 1436 for (size_t i = 0; i < param.update.nodes.size(); ++i) { |
1432 AXContentNodeDataToAXNodeData(param.update.nodes[i], | 1437 AXContentNodeDataToAXNodeData(param.update.nodes[i], |
1433 &detail.update.nodes[i]); | 1438 &detail.update.nodes[i]); |
1434 } | 1439 } |
1435 details.push_back(detail); | 1440 details.push_back(detail); |
1436 } | 1441 } |
1437 | 1442 |
1438 if (accessibility_mode & AccessibilityModeFlagPlatform) { | 1443 if (accessibility_mode & AccessibilityModeFlagPlatform) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1500 if (manager) { | 1505 if (manager) { |
1501 manager->OnFindInPageResult( | 1506 manager->OnFindInPageResult( |
1502 params.request_id, params.match_index, params.start_id, | 1507 params.request_id, params.match_index, params.start_id, |
1503 params.start_offset, params.end_id, params.end_offset); | 1508 params.start_offset, params.end_id, params.end_offset); |
1504 } | 1509 } |
1505 } | 1510 } |
1506 } | 1511 } |
1507 | 1512 |
1508 void RenderFrameHostImpl::OnAccessibilitySnapshotResponse( | 1513 void RenderFrameHostImpl::OnAccessibilitySnapshotResponse( |
1509 int callback_id, | 1514 int callback_id, |
1510 const ui::AXTreeUpdate<AXContentNodeData>& snapshot) { | 1515 const AXContentTreeUpdate& snapshot) { |
1511 const auto& it = ax_tree_snapshot_callbacks_.find(callback_id); | 1516 const auto& it = ax_tree_snapshot_callbacks_.find(callback_id); |
1512 if (it != ax_tree_snapshot_callbacks_.end()) { | 1517 if (it != ax_tree_snapshot_callbacks_.end()) { |
1513 ui::AXTreeUpdate<ui::AXNodeData> dst_snapshot; | 1518 ui::AXTreeUpdate dst_snapshot; |
1514 dst_snapshot.nodes.resize(snapshot.nodes.size()); | 1519 dst_snapshot.nodes.resize(snapshot.nodes.size()); |
1515 for (size_t i = 0; i < snapshot.nodes.size(); ++i) { | 1520 for (size_t i = 0; i < snapshot.nodes.size(); ++i) { |
1516 AXContentNodeDataToAXNodeData(snapshot.nodes[i], | 1521 AXContentNodeDataToAXNodeData(snapshot.nodes[i], |
1517 &dst_snapshot.nodes[i]); | 1522 &dst_snapshot.nodes[i]); |
1518 } | 1523 } |
| 1524 if (snapshot.has_tree_data) { |
| 1525 AXContentTreeDataToAXTreeData(snapshot.tree_data, |
| 1526 &dst_snapshot.tree_data); |
| 1527 } |
1519 it->second.Run(dst_snapshot); | 1528 it->second.Run(dst_snapshot); |
1520 ax_tree_snapshot_callbacks_.erase(it); | 1529 ax_tree_snapshot_callbacks_.erase(it); |
1521 } else { | 1530 } else { |
1522 NOTREACHED() << "Received AX tree snapshot response for unknown id"; | 1531 NOTREACHED() << "Received AX tree snapshot response for unknown id"; |
1523 } | 1532 } |
1524 } | 1533 } |
1525 | 1534 |
1526 void RenderFrameHostImpl::OnToggleFullscreen(bool enter_fullscreen) { | 1535 void RenderFrameHostImpl::OnToggleFullscreen(bool enter_fullscreen) { |
1527 if (enter_fullscreen) | 1536 if (enter_fullscreen) |
1528 delegate_->EnterFullscreenMode(GetLastCommittedURL().GetOrigin()); | 1537 delegate_->EnterFullscreenMode(GetLastCommittedURL().GetOrigin()); |
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2245 ui::AXNodeData* dst) { | 2254 ui::AXNodeData* dst) { |
2246 // Copy the common fields. | 2255 // Copy the common fields. |
2247 *dst = src; | 2256 *dst = src; |
2248 | 2257 |
2249 // Map content-specific attributes based on routing IDs or browser plugin | 2258 // Map content-specific attributes based on routing IDs or browser plugin |
2250 // instance IDs to generic attributes with global AXTreeIDs. | 2259 // instance IDs to generic attributes with global AXTreeIDs. |
2251 for (auto iter : src.content_int_attributes) { | 2260 for (auto iter : src.content_int_attributes) { |
2252 AXContentIntAttribute attr = iter.first; | 2261 AXContentIntAttribute attr = iter.first; |
2253 int32 value = iter.second; | 2262 int32 value = iter.second; |
2254 switch (attr) { | 2263 switch (attr) { |
2255 case AX_CONTENT_ATTR_ROUTING_ID: | |
2256 dst->int_attributes.push_back(std::make_pair( | |
2257 ui::AX_ATTR_TREE_ID, RoutingIDToAXTreeID(value))); | |
2258 break; | |
2259 case AX_CONTENT_ATTR_PARENT_ROUTING_ID: | |
2260 dst->int_attributes.push_back(std::make_pair( | |
2261 ui::AX_ATTR_PARENT_TREE_ID, RoutingIDToAXTreeID(value))); | |
2262 break; | |
2263 case AX_CONTENT_ATTR_CHILD_ROUTING_ID: | 2264 case AX_CONTENT_ATTR_CHILD_ROUTING_ID: |
2264 dst->int_attributes.push_back(std::make_pair( | 2265 dst->int_attributes.push_back(std::make_pair( |
2265 ui::AX_ATTR_CHILD_TREE_ID, RoutingIDToAXTreeID(value))); | 2266 ui::AX_ATTR_CHILD_TREE_ID, RoutingIDToAXTreeID(value))); |
2266 break; | 2267 break; |
2267 case AX_CONTENT_ATTR_CHILD_BROWSER_PLUGIN_INSTANCE_ID: | 2268 case AX_CONTENT_ATTR_CHILD_BROWSER_PLUGIN_INSTANCE_ID: |
2268 dst->int_attributes.push_back(std::make_pair( | 2269 dst->int_attributes.push_back(std::make_pair( |
2269 ui::AX_ATTR_CHILD_TREE_ID, | 2270 ui::AX_ATTR_CHILD_TREE_ID, |
2270 BrowserPluginInstanceIDToAXTreeID(value))); | 2271 BrowserPluginInstanceIDToAXTreeID(value))); |
2271 break; | 2272 break; |
2272 case AX_CONTENT_INT_ATTRIBUTE_LAST: | 2273 case AX_CONTENT_INT_ATTRIBUTE_LAST: |
2273 NOTREACHED(); | 2274 NOTREACHED(); |
2274 break; | 2275 break; |
2275 } | 2276 } |
2276 } | 2277 } |
2277 } | 2278 } |
2278 | 2279 |
| 2280 void RenderFrameHostImpl::AXContentTreeDataToAXTreeData( |
| 2281 const AXContentTreeData& src, |
| 2282 ui::AXTreeData* dst) { |
| 2283 // Copy the common fields. |
| 2284 *dst = src; |
| 2285 |
| 2286 if (src.routing_id != -1) |
| 2287 dst->tree_id = RoutingIDToAXTreeID(src.routing_id); |
| 2288 |
| 2289 if (src.parent_routing_id != -1) |
| 2290 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id); |
| 2291 } |
| 2292 |
2279 } // namespace content | 2293 } // namespace content |
OLD | NEW |