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

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2640123004: Initial support for native accessibility in ARC (Closed)
Patch Set: override Created 3 years, 10 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 unified diff | Download patch
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/containers/hash_tables.h" 12 #include "base/containers/hash_tables.h"
13 #include "base/debug/dump_without_crashing.h" 13 #include "base/debug/dump_without_crashing.h"
14 #include "base/lazy_instance.h" 14 #include "base/lazy_instance.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
16 #include "base/metrics/histogram_macros.h" 16 #include "base/metrics/histogram_macros.h"
17 #include "base/process/kill.h" 17 #include "base/process/kill.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "build/build_config.h" 19 #include "build/build_config.h"
20 #include "content/browser/accessibility/ax_tree_id_registry.h"
21 #include "content/browser/accessibility/browser_accessibility_manager.h" 20 #include "content/browser/accessibility/browser_accessibility_manager.h"
22 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 21 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
23 #include "content/browser/bluetooth/web_bluetooth_service_impl.h" 22 #include "content/browser/bluetooth/web_bluetooth_service_impl.h"
24 #include "content/browser/browser_main_loop.h" 23 #include "content/browser/browser_main_loop.h"
25 #include "content/browser/child_process_security_policy_impl.h" 24 #include "content/browser/child_process_security_policy_impl.h"
26 #include "content/browser/devtools/render_frame_devtools_agent_host.h" 25 #include "content/browser/devtools/render_frame_devtools_agent_host.h"
27 #include "content/browser/download/mhtml_generation_manager.h" 26 #include "content/browser/download/mhtml_generation_manager.h"
28 #include "content/browser/frame_host/cross_process_frame_connector.h" 27 #include "content/browser/frame_host/cross_process_frame_connector.h"
29 #include "content/browser/frame_host/debug_urls.h" 28 #include "content/browser/frame_host/debug_urls.h"
30 #include "content/browser/frame_host/frame_tree.h" 29 #include "content/browser/frame_host/frame_tree.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 #include "device/wake_lock/wake_lock_service_context.h" 100 #include "device/wake_lock/wake_lock_service_context.h"
102 #include "media/base/media_switches.h" 101 #include "media/base/media_switches.h"
103 #include "media/media_features.h" 102 #include "media/media_features.h"
104 #include "media/mojo/interfaces/media_service.mojom.h" 103 #include "media/mojo/interfaces/media_service.mojom.h"
105 #include "media/mojo/interfaces/remoting.mojom.h" 104 #include "media/mojo/interfaces/remoting.mojom.h"
106 #include "mojo/public/cpp/bindings/associated_interface_ptr.h" 105 #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
107 #include "mojo/public/cpp/bindings/strong_binding.h" 106 #include "mojo/public/cpp/bindings/strong_binding.h"
108 #include "services/service_manager/public/cpp/connector.h" 107 #include "services/service_manager/public/cpp/connector.h"
109 #include "services/service_manager/public/cpp/interface_provider.h" 108 #include "services/service_manager/public/cpp/interface_provider.h"
110 #include "ui/accessibility/ax_tree.h" 109 #include "ui/accessibility/ax_tree.h"
110 #include "ui/accessibility/ax_tree_id_registry.h"
111 #include "ui/accessibility/ax_tree_update.h" 111 #include "ui/accessibility/ax_tree_update.h"
112 #include "ui/gfx/geometry/quad_f.h" 112 #include "ui/gfx/geometry/quad_f.h"
113 #include "url/gurl.h" 113 #include "url/gurl.h"
114 114
115 #if defined(OS_ANDROID) 115 #if defined(OS_ANDROID)
116 #include "content/browser/android/app_web_message_port_message_filter.h" 116 #include "content/browser/android/app_web_message_port_message_filter.h"
117 #include "content/public/browser/android/java_interfaces.h" 117 #include "content/public/browser/android/java_interfaces.h"
118 #include "content/browser/media/android/media_player_renderer.h" 118 #include "content/browser/media/android/media_player_renderer.h"
119 #include "media/base/audio_renderer_sink.h" 119 #include "media/base/audio_renderer_sink.h"
120 #include "media/base/video_renderer_sink.h" 120 #include "media/base/video_renderer_sink.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 } 291 }
292 292
293 // static 293 // static
294 RenderFrameHost* RenderFrameHost::FromAXTreeID( 294 RenderFrameHost* RenderFrameHost::FromAXTreeID(
295 int ax_tree_id) { 295 int ax_tree_id) {
296 return RenderFrameHostImpl::FromAXTreeID(ax_tree_id); 296 return RenderFrameHostImpl::FromAXTreeID(ax_tree_id);
297 } 297 }
298 298
299 // static 299 // static
300 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID( 300 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID(
301 AXTreeIDRegistry::AXTreeID ax_tree_id) { 301 ui::AXTreeIDRegistry::AXTreeID ax_tree_id) {
302 DCHECK_CURRENTLY_ON(BrowserThread::UI); 302 DCHECK_CURRENTLY_ON(BrowserThread::UI);
303 AXTreeIDRegistry::FrameID frame_id = 303 ui::AXTreeIDRegistry::FrameID frame_id =
304 AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id); 304 ui::AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id);
305 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second); 305 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second);
306 } 306 }
307 307
308 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, 308 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
309 RenderViewHostImpl* render_view_host, 309 RenderViewHostImpl* render_view_host,
310 RenderFrameHostDelegate* delegate, 310 RenderFrameHostDelegate* delegate,
311 RenderWidgetHostDelegate* rwh_delegate, 311 RenderWidgetHostDelegate* rwh_delegate,
312 FrameTree* frame_tree, 312 FrameTree* frame_tree,
313 FrameTreeNode* frame_tree_node, 313 FrameTreeNode* frame_tree_node,
314 int32_t routing_id, 314 int32_t routing_id,
(...skipping 14 matching lines...) Expand all
329 is_waiting_for_swapout_ack_(false), 329 is_waiting_for_swapout_ack_(false),
330 render_frame_created_(false), 330 render_frame_created_(false),
331 navigations_suspended_(false), 331 navigations_suspended_(false),
332 is_waiting_for_beforeunload_ack_(false), 332 is_waiting_for_beforeunload_ack_(false),
333 unload_ack_is_for_navigation_(false), 333 unload_ack_is_for_navigation_(false),
334 is_loading_(false), 334 is_loading_(false),
335 pending_commit_(false), 335 pending_commit_(false),
336 nav_entry_id_(0), 336 nav_entry_id_(0),
337 accessibility_reset_token_(0), 337 accessibility_reset_token_(0),
338 accessibility_reset_count_(0), 338 accessibility_reset_count_(0),
339 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID), 339 browser_plugin_embedder_ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID),
340 no_create_browser_accessibility_manager_for_testing_(false), 340 no_create_browser_accessibility_manager_for_testing_(false),
341 web_ui_type_(WebUI::kNoWebUI), 341 web_ui_type_(WebUI::kNoWebUI),
342 pending_web_ui_type_(WebUI::kNoWebUI), 342 pending_web_ui_type_(WebUI::kNoWebUI),
343 should_reuse_web_ui_(false), 343 should_reuse_web_ui_(false),
344 has_selection_(false), 344 has_selection_(false),
345 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED), 345 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED),
346 frame_host_binding_(this), 346 frame_host_binding_(this),
347 waiting_for_init_(renderer_initiated_creation), 347 waiting_for_init_(renderer_initiated_creation),
348 has_focused_editable_element_(false), 348 has_focused_editable_element_(false),
349 weak_ptr_factory_(this) { 349 weak_ptr_factory_(this) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 450
451 // Notify the FrameTree that this RFH is going away, allowing it to shut down 451 // Notify the FrameTree that this RFH is going away, allowing it to shut down
452 // the corresponding RenderViewHost if it is no longer needed. 452 // the corresponding RenderViewHost if it is no longer needed.
453 frame_tree_->ReleaseRenderViewHostRef(render_view_host_); 453 frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
454 } 454 }
455 455
456 int RenderFrameHostImpl::GetRoutingID() { 456 int RenderFrameHostImpl::GetRoutingID() {
457 return routing_id_; 457 return routing_id_;
458 } 458 }
459 459
460 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() { 460 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
461 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( 461 return ui::AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
462 GetProcess()->GetID(), routing_id_); 462 GetProcess()->GetID(), routing_id_);
463 } 463 }
464 464
465 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { 465 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
466 return site_instance_.get(); 466 return site_instance_.get();
467 } 467 }
468 468
469 RenderProcessHost* RenderFrameHostImpl::GetProcess() { 469 RenderProcessHost* RenderFrameHostImpl::GetProcess() {
470 return process_; 470 return process_;
471 } 471 }
(...skipping 2783 matching lines...) Expand 10 before | Expand all | Expand 10 after
3255 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || 3255 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) ||
3256 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( 3256 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
3257 GetProcess()->GetID()) || 3257 GetProcess()->GetID()) ||
3258 // It's possible to load about:blank in a Web UI renderer. 3258 // It's possible to load about:blank in a Web UI renderer.
3259 // See http://crbug.com/42547 3259 // See http://crbug.com/42547
3260 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || 3260 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) ||
3261 // InterstitialPageImpl should be the only case matching this. 3261 // InterstitialPageImpl should be the only case matching this.
3262 (delegate_->GetAsWebContents() == nullptr); 3262 (delegate_->GetAsWebContents() == nullptr);
3263 } 3263 }
3264 3264
3265 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( 3265 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID(
3266 int routing_id) { 3266 int routing_id) {
3267 RenderFrameHostImpl* rfh = nullptr; 3267 RenderFrameHostImpl* rfh = nullptr;
3268 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID( 3268 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID(
3269 GetProcess()->GetID(), routing_id); 3269 GetProcess()->GetID(), routing_id);
3270 if (rfph) { 3270 if (rfph) {
3271 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree(); 3271 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree();
3272 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID( 3272 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID(
3273 GetProcess()->GetID(), routing_id); 3273 GetProcess()->GetID(), routing_id);
3274 rfh = frame_tree_node->render_manager()->current_frame_host(); 3274 rfh = frame_tree_node->render_manager()->current_frame_host();
3275 } else { 3275 } else {
3276 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id); 3276 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id);
3277 3277
3278 // As a sanity check, make sure we're within the same frame tree and 3278 // As a sanity check, make sure we're within the same frame tree and
3279 // crash the renderer if not. 3279 // crash the renderer if not.
3280 if (rfh && 3280 if (rfh &&
3281 rfh->frame_tree_node()->frame_tree() != 3281 rfh->frame_tree_node()->frame_tree() !=
3282 frame_tree_node()->frame_tree()) { 3282 frame_tree_node()->frame_tree()) {
3283 AccessibilityFatalError(); 3283 AccessibilityFatalError();
3284 return AXTreeIDRegistry::kNoAXTreeID; 3284 return ui::AXTreeIDRegistry::kNoAXTreeID;
3285 } 3285 }
3286 } 3286 }
3287 3287
3288 if (!rfh) 3288 if (!rfh)
3289 return AXTreeIDRegistry::kNoAXTreeID; 3289 return ui::AXTreeIDRegistry::kNoAXTreeID;
3290 3290
3291 return rfh->GetAXTreeID(); 3291 return rfh->GetAXTreeID();
3292 } 3292 }
3293 3293
3294 AXTreeIDRegistry::AXTreeID 3294 ui::AXTreeIDRegistry::AXTreeID
3295 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID( 3295 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) {
3296 int instance_id) {
3297 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( 3296 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>(
3298 delegate()->GetGuestByInstanceID(this, instance_id)); 3297 delegate()->GetGuestByInstanceID(this, instance_id));
3299 if (!guest) 3298 if (!guest)
3300 return AXTreeIDRegistry::kNoAXTreeID; 3299 return ui::AXTreeIDRegistry::kNoAXTreeID;
3301 3300
3302 // Create a mapping from the guest to its embedder's AX Tree ID, and 3301 // Create a mapping from the guest to its embedder's AX Tree ID, and
3303 // explicitly update the guest to propagate that mapping immediately. 3302 // explicitly update the guest to propagate that mapping immediately.
3304 guest->set_browser_plugin_embedder_ax_tree_id(GetAXTreeID()); 3303 guest->set_browser_plugin_embedder_ax_tree_id(GetAXTreeID());
3305 guest->UpdateAXTreeData(); 3304 guest->UpdateAXTreeData();
3306 3305
3307 return guest->GetAXTreeID(); 3306 return guest->GetAXTreeID();
3308 } 3307 }
3309 3308
3310 void RenderFrameHostImpl::AXContentNodeDataToAXNodeData( 3309 void RenderFrameHostImpl::AXContentNodeDataToAXNodeData(
(...skipping 30 matching lines...) Expand all
3341 3340
3342 // Copy the common fields. 3341 // Copy the common fields.
3343 *dst = src; 3342 *dst = src;
3344 3343
3345 if (src.routing_id != -1) 3344 if (src.routing_id != -1)
3346 dst->tree_id = RoutingIDToAXTreeID(src.routing_id); 3345 dst->tree_id = RoutingIDToAXTreeID(src.routing_id);
3347 3346
3348 if (src.parent_routing_id != -1) 3347 if (src.parent_routing_id != -1)
3349 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id); 3348 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id);
3350 3349
3351 if (browser_plugin_embedder_ax_tree_id_ != AXTreeIDRegistry::kNoAXTreeID) 3350 if (browser_plugin_embedder_ax_tree_id_ != ui::AXTreeIDRegistry::kNoAXTreeID)
3352 dst->parent_tree_id = browser_plugin_embedder_ax_tree_id_; 3351 dst->parent_tree_id = browser_plugin_embedder_ax_tree_id_;
3353 3352
3354 // If this is not the root frame tree node, we're done. 3353 // If this is not the root frame tree node, we're done.
3355 if (frame_tree_node()->parent()) 3354 if (frame_tree_node()->parent())
3356 return; 3355 return;
3357 3356
3358 // For the root frame tree node, also store the AXTreeID of the focused frame. 3357 // For the root frame tree node, also store the AXTreeID of the focused frame.
3359 // TODO(avallee): https://crbug.com/610795: No focus ax events. 3358 // TODO(avallee): https://crbug.com/610795: No focus ax events.
3360 // This is probably where we need to fix the bug to enable the test. 3359 // This is probably where we need to fix the bug to enable the test.
3361 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame(); 3360 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame();
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
3506 // There is no pending NavigationEntry in these cases, so pass 0 as the 3505 // There is no pending NavigationEntry in these cases, so pass 0 as the
3507 // pending_nav_entry_id. If the previous handle was a prematurely aborted 3506 // pending_nav_entry_id. If the previous handle was a prematurely aborted
3508 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. 3507 // navigation loaded via LoadDataWithBaseURL, propagate the entry id.
3509 return NavigationHandleImpl::Create( 3508 return NavigationHandleImpl::Create(
3510 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, 3509 params.url, params.redirects, frame_tree_node_, is_renderer_initiated,
3511 params.was_within_same_page, base::TimeTicks::Now(), 3510 params.was_within_same_page, base::TimeTicks::Now(),
3512 entry_id_for_data_nav, false); // started_from_context_menu 3511 entry_id_for_data_nav, false); // started_from_context_menu
3513 } 3512 }
3514 3513
3515 } // namespace content 3514 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698