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

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: Rebase. 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
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | ui/accessibility/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/public/browser/android/java_interfaces.h" 116 #include "content/public/browser/android/java_interfaces.h"
117 #include "content/browser/media/android/media_player_renderer.h" 117 #include "content/browser/media/android/media_player_renderer.h"
118 #include "media/base/audio_renderer_sink.h" 118 #include "media/base/audio_renderer_sink.h"
119 #include "media/base/video_renderer_sink.h" 119 #include "media/base/video_renderer_sink.h"
120 #include "media/mojo/services/mojo_renderer_service.h" // nogncheck 120 #include "media/mojo/services/mojo_renderer_service.h" // nogncheck
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 } 290 }
291 291
292 // static 292 // static
293 RenderFrameHost* RenderFrameHost::FromAXTreeID( 293 RenderFrameHost* RenderFrameHost::FromAXTreeID(
294 int ax_tree_id) { 294 int ax_tree_id) {
295 return RenderFrameHostImpl::FromAXTreeID(ax_tree_id); 295 return RenderFrameHostImpl::FromAXTreeID(ax_tree_id);
296 } 296 }
297 297
298 // static 298 // static
299 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID( 299 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID(
300 AXTreeIDRegistry::AXTreeID ax_tree_id) { 300 ui::AXTreeIDRegistry::AXTreeID ax_tree_id) {
301 DCHECK_CURRENTLY_ON(BrowserThread::UI); 301 DCHECK_CURRENTLY_ON(BrowserThread::UI);
302 AXTreeIDRegistry::FrameID frame_id = 302 ui::AXTreeIDRegistry::FrameID frame_id =
303 AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id); 303 ui::AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id);
304 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second); 304 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second);
305 } 305 }
306 306
307 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, 307 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
308 RenderViewHostImpl* render_view_host, 308 RenderViewHostImpl* render_view_host,
309 RenderFrameHostDelegate* delegate, 309 RenderFrameHostDelegate* delegate,
310 RenderWidgetHostDelegate* rwh_delegate, 310 RenderWidgetHostDelegate* rwh_delegate,
311 FrameTree* frame_tree, 311 FrameTree* frame_tree,
312 FrameTreeNode* frame_tree_node, 312 FrameTreeNode* frame_tree_node,
313 int32_t routing_id, 313 int32_t routing_id,
(...skipping 14 matching lines...) Expand all
328 is_waiting_for_swapout_ack_(false), 328 is_waiting_for_swapout_ack_(false),
329 render_frame_created_(false), 329 render_frame_created_(false),
330 navigations_suspended_(false), 330 navigations_suspended_(false),
331 is_waiting_for_beforeunload_ack_(false), 331 is_waiting_for_beforeunload_ack_(false),
332 unload_ack_is_for_navigation_(false), 332 unload_ack_is_for_navigation_(false),
333 is_loading_(false), 333 is_loading_(false),
334 pending_commit_(false), 334 pending_commit_(false),
335 nav_entry_id_(0), 335 nav_entry_id_(0),
336 accessibility_reset_token_(0), 336 accessibility_reset_token_(0),
337 accessibility_reset_count_(0), 337 accessibility_reset_count_(0),
338 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID), 338 browser_plugin_embedder_ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID),
339 no_create_browser_accessibility_manager_for_testing_(false), 339 no_create_browser_accessibility_manager_for_testing_(false),
340 web_ui_type_(WebUI::kNoWebUI), 340 web_ui_type_(WebUI::kNoWebUI),
341 pending_web_ui_type_(WebUI::kNoWebUI), 341 pending_web_ui_type_(WebUI::kNoWebUI),
342 should_reuse_web_ui_(false), 342 should_reuse_web_ui_(false),
343 has_selection_(false), 343 has_selection_(false),
344 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED), 344 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED),
345 frame_host_binding_(this), 345 frame_host_binding_(this),
346 waiting_for_init_(renderer_initiated_creation), 346 waiting_for_init_(renderer_initiated_creation),
347 has_focused_editable_element_(false), 347 has_focused_editable_element_(false),
348 weak_ptr_factory_(this) { 348 weak_ptr_factory_(this) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 449
450 // Notify the FrameTree that this RFH is going away, allowing it to shut down 450 // Notify the FrameTree that this RFH is going away, allowing it to shut down
451 // the corresponding RenderViewHost if it is no longer needed. 451 // the corresponding RenderViewHost if it is no longer needed.
452 frame_tree_->ReleaseRenderViewHostRef(render_view_host_); 452 frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
453 } 453 }
454 454
455 int RenderFrameHostImpl::GetRoutingID() { 455 int RenderFrameHostImpl::GetRoutingID() {
456 return routing_id_; 456 return routing_id_;
457 } 457 }
458 458
459 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() { 459 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
460 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( 460 return ui::AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
461 GetProcess()->GetID(), routing_id_); 461 GetProcess()->GetID(), routing_id_);
462 } 462 }
463 463
464 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { 464 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
465 return site_instance_.get(); 465 return site_instance_.get();
466 } 466 }
467 467
468 RenderProcessHost* RenderFrameHostImpl::GetProcess() { 468 RenderProcessHost* RenderFrameHostImpl::GetProcess() {
469 return process_; 469 return process_;
470 } 470 }
(...skipping 2755 matching lines...) Expand 10 before | Expand all | Expand 10 after
3226 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || 3226 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) ||
3227 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( 3227 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
3228 GetProcess()->GetID()) || 3228 GetProcess()->GetID()) ||
3229 // It's possible to load about:blank in a Web UI renderer. 3229 // It's possible to load about:blank in a Web UI renderer.
3230 // See http://crbug.com/42547 3230 // See http://crbug.com/42547
3231 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || 3231 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) ||
3232 // InterstitialPageImpl should be the only case matching this. 3232 // InterstitialPageImpl should be the only case matching this.
3233 (delegate_->GetAsWebContents() == nullptr); 3233 (delegate_->GetAsWebContents() == nullptr);
3234 } 3234 }
3235 3235
3236 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( 3236 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID(
3237 int routing_id) { 3237 int routing_id) {
3238 RenderFrameHostImpl* rfh = nullptr; 3238 RenderFrameHostImpl* rfh = nullptr;
3239 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID( 3239 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID(
3240 GetProcess()->GetID(), routing_id); 3240 GetProcess()->GetID(), routing_id);
3241 if (rfph) { 3241 if (rfph) {
3242 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree(); 3242 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree();
3243 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID( 3243 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID(
3244 GetProcess()->GetID(), routing_id); 3244 GetProcess()->GetID(), routing_id);
3245 rfh = frame_tree_node->render_manager()->current_frame_host(); 3245 rfh = frame_tree_node->render_manager()->current_frame_host();
3246 } else { 3246 } else {
3247 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id); 3247 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id);
3248 3248
3249 // As a sanity check, make sure we're within the same frame tree and 3249 // As a sanity check, make sure we're within the same frame tree and
3250 // crash the renderer if not. 3250 // crash the renderer if not.
3251 if (rfh && 3251 if (rfh &&
3252 rfh->frame_tree_node()->frame_tree() != 3252 rfh->frame_tree_node()->frame_tree() !=
3253 frame_tree_node()->frame_tree()) { 3253 frame_tree_node()->frame_tree()) {
3254 AccessibilityFatalError(); 3254 AccessibilityFatalError();
3255 return AXTreeIDRegistry::kNoAXTreeID; 3255 return ui::AXTreeIDRegistry::kNoAXTreeID;
3256 } 3256 }
3257 } 3257 }
3258 3258
3259 if (!rfh) 3259 if (!rfh)
3260 return AXTreeIDRegistry::kNoAXTreeID; 3260 return ui::AXTreeIDRegistry::kNoAXTreeID;
3261 3261
3262 return rfh->GetAXTreeID(); 3262 return rfh->GetAXTreeID();
3263 } 3263 }
3264 3264
3265 AXTreeIDRegistry::AXTreeID 3265 ui::AXTreeIDRegistry::AXTreeID
3266 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID( 3266 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) {
3267 int instance_id) {
3268 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( 3267 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>(
3269 delegate()->GetGuestByInstanceID(this, instance_id)); 3268 delegate()->GetGuestByInstanceID(this, instance_id));
3270 if (!guest) 3269 if (!guest)
3271 return AXTreeIDRegistry::kNoAXTreeID; 3270 return ui::AXTreeIDRegistry::kNoAXTreeID;
3272 3271
3273 // Create a mapping from the guest to its embedder's AX Tree ID, and 3272 // Create a mapping from the guest to its embedder's AX Tree ID, and
3274 // explicitly update the guest to propagate that mapping immediately. 3273 // explicitly update the guest to propagate that mapping immediately.
3275 guest->set_browser_plugin_embedder_ax_tree_id(GetAXTreeID()); 3274 guest->set_browser_plugin_embedder_ax_tree_id(GetAXTreeID());
3276 guest->UpdateAXTreeData(); 3275 guest->UpdateAXTreeData();
3277 3276
3278 return guest->GetAXTreeID(); 3277 return guest->GetAXTreeID();
3279 } 3278 }
3280 3279
3281 void RenderFrameHostImpl::AXContentNodeDataToAXNodeData( 3280 void RenderFrameHostImpl::AXContentNodeDataToAXNodeData(
(...skipping 30 matching lines...) Expand all
3312 3311
3313 // Copy the common fields. 3312 // Copy the common fields.
3314 *dst = src; 3313 *dst = src;
3315 3314
3316 if (src.routing_id != -1) 3315 if (src.routing_id != -1)
3317 dst->tree_id = RoutingIDToAXTreeID(src.routing_id); 3316 dst->tree_id = RoutingIDToAXTreeID(src.routing_id);
3318 3317
3319 if (src.parent_routing_id != -1) 3318 if (src.parent_routing_id != -1)
3320 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id); 3319 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id);
3321 3320
3322 if (browser_plugin_embedder_ax_tree_id_ != AXTreeIDRegistry::kNoAXTreeID) 3321 if (browser_plugin_embedder_ax_tree_id_ != ui::AXTreeIDRegistry::kNoAXTreeID)
3323 dst->parent_tree_id = browser_plugin_embedder_ax_tree_id_; 3322 dst->parent_tree_id = browser_plugin_embedder_ax_tree_id_;
3324 3323
3325 // If this is not the root frame tree node, we're done. 3324 // If this is not the root frame tree node, we're done.
3326 if (frame_tree_node()->parent()) 3325 if (frame_tree_node()->parent())
3327 return; 3326 return;
3328 3327
3329 // For the root frame tree node, also store the AXTreeID of the focused frame. 3328 // For the root frame tree node, also store the AXTreeID of the focused frame.
3330 // TODO(avallee): https://crbug.com/610795: No focus ax events. 3329 // TODO(avallee): https://crbug.com/610795: No focus ax events.
3331 // This is probably where we need to fix the bug to enable the test. 3330 // This is probably where we need to fix the bug to enable the test.
3332 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame(); 3331 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame();
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
3477 // There is no pending NavigationEntry in these cases, so pass 0 as the 3476 // There is no pending NavigationEntry in these cases, so pass 0 as the
3478 // pending_nav_entry_id. If the previous handle was a prematurely aborted 3477 // pending_nav_entry_id. If the previous handle was a prematurely aborted
3479 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. 3478 // navigation loaded via LoadDataWithBaseURL, propagate the entry id.
3480 return NavigationHandleImpl::Create( 3479 return NavigationHandleImpl::Create(
3481 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, 3480 params.url, params.redirects, frame_tree_node_, is_renderer_initiated,
3482 params.was_within_same_page, base::TimeTicks::Now(), 3481 params.was_within_same_page, base::TimeTicks::Now(),
3483 entry_id_for_data_nav, false); // started_from_context_menu 3482 entry_id_for_data_nav, false); // started_from_context_menu
3484 } 3483 }
3485 3484
3486 } // namespace content 3485 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | ui/accessibility/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698