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

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: |window| can be nullptr 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 #include "device/wake_lock/wake_lock_service_context.h" 99 #include "device/wake_lock/wake_lock_service_context.h"
101 #include "media/base/media_switches.h" 100 #include "media/base/media_switches.h"
102 #include "media/media_features.h" 101 #include "media/media_features.h"
103 #include "media/mojo/interfaces/media_service.mojom.h" 102 #include "media/mojo/interfaces/media_service.mojom.h"
104 #include "media/mojo/interfaces/remoting.mojom.h" 103 #include "media/mojo/interfaces/remoting.mojom.h"
105 #include "mojo/public/cpp/bindings/associated_interface_ptr.h" 104 #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
106 #include "mojo/public/cpp/bindings/strong_binding.h" 105 #include "mojo/public/cpp/bindings/strong_binding.h"
107 #include "services/service_manager/public/cpp/connector.h" 106 #include "services/service_manager/public/cpp/connector.h"
108 #include "services/service_manager/public/cpp/interface_provider.h" 107 #include "services/service_manager/public/cpp/interface_provider.h"
109 #include "ui/accessibility/ax_tree.h" 108 #include "ui/accessibility/ax_tree.h"
109 #include "ui/accessibility/ax_tree_id_registry.h"
110 #include "ui/accessibility/ax_tree_update.h" 110 #include "ui/accessibility/ax_tree_update.h"
111 #include "ui/gfx/geometry/quad_f.h" 111 #include "ui/gfx/geometry/quad_f.h"
112 #include "url/gurl.h" 112 #include "url/gurl.h"
113 113
114 #if defined(OS_ANDROID) 114 #if defined(OS_ANDROID)
115 #include "content/browser/android/app_web_message_port_message_filter.h" 115 #include "content/browser/android/app_web_message_port_message_filter.h"
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"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 } 286 }
287 287
288 // static 288 // static
289 RenderFrameHost* RenderFrameHost::FromAXTreeID( 289 RenderFrameHost* RenderFrameHost::FromAXTreeID(
290 int ax_tree_id) { 290 int ax_tree_id) {
291 return RenderFrameHostImpl::FromAXTreeID(ax_tree_id); 291 return RenderFrameHostImpl::FromAXTreeID(ax_tree_id);
292 } 292 }
293 293
294 // static 294 // static
295 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID( 295 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID(
296 AXTreeIDRegistry::AXTreeID ax_tree_id) { 296 ui::AXTreeIDRegistry::AXTreeID ax_tree_id) {
297 DCHECK_CURRENTLY_ON(BrowserThread::UI); 297 DCHECK_CURRENTLY_ON(BrowserThread::UI);
298 AXTreeIDRegistry::FrameID frame_id = 298 ui::AXTreeIDRegistry::FrameID frame_id =
299 AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id); 299 ui::AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id);
300 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second); 300 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second);
301 } 301 }
302 302
303 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, 303 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
304 RenderViewHostImpl* render_view_host, 304 RenderViewHostImpl* render_view_host,
305 RenderFrameHostDelegate* delegate, 305 RenderFrameHostDelegate* delegate,
306 RenderWidgetHostDelegate* rwh_delegate, 306 RenderWidgetHostDelegate* rwh_delegate,
307 FrameTree* frame_tree, 307 FrameTree* frame_tree,
308 FrameTreeNode* frame_tree_node, 308 FrameTreeNode* frame_tree_node,
309 int32_t routing_id, 309 int32_t routing_id,
(...skipping 14 matching lines...) Expand all
324 is_waiting_for_swapout_ack_(false), 324 is_waiting_for_swapout_ack_(false),
325 render_frame_created_(false), 325 render_frame_created_(false),
326 navigations_suspended_(false), 326 navigations_suspended_(false),
327 is_waiting_for_beforeunload_ack_(false), 327 is_waiting_for_beforeunload_ack_(false),
328 unload_ack_is_for_navigation_(false), 328 unload_ack_is_for_navigation_(false),
329 is_loading_(false), 329 is_loading_(false),
330 pending_commit_(false), 330 pending_commit_(false),
331 nav_entry_id_(0), 331 nav_entry_id_(0),
332 accessibility_reset_token_(0), 332 accessibility_reset_token_(0),
333 accessibility_reset_count_(0), 333 accessibility_reset_count_(0),
334 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID), 334 browser_plugin_embedder_ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID),
335 no_create_browser_accessibility_manager_for_testing_(false), 335 no_create_browser_accessibility_manager_for_testing_(false),
336 web_ui_type_(WebUI::kNoWebUI), 336 web_ui_type_(WebUI::kNoWebUI),
337 pending_web_ui_type_(WebUI::kNoWebUI), 337 pending_web_ui_type_(WebUI::kNoWebUI),
338 should_reuse_web_ui_(false), 338 should_reuse_web_ui_(false),
339 has_selection_(false), 339 has_selection_(false),
340 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED), 340 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED),
341 frame_host_binding_(this), 341 frame_host_binding_(this),
342 waiting_for_init_(renderer_initiated_creation), 342 waiting_for_init_(renderer_initiated_creation),
343 has_focused_editable_element_(false), 343 has_focused_editable_element_(false),
344 weak_ptr_factory_(this) { 344 weak_ptr_factory_(this) {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 441
442 // Notify the FrameTree that this RFH is going away, allowing it to shut down 442 // Notify the FrameTree that this RFH is going away, allowing it to shut down
443 // the corresponding RenderViewHost if it is no longer needed. 443 // the corresponding RenderViewHost if it is no longer needed.
444 frame_tree_->ReleaseRenderViewHostRef(render_view_host_); 444 frame_tree_->ReleaseRenderViewHostRef(render_view_host_);
445 } 445 }
446 446
447 int RenderFrameHostImpl::GetRoutingID() { 447 int RenderFrameHostImpl::GetRoutingID() {
448 return routing_id_; 448 return routing_id_;
449 } 449 }
450 450
451 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() { 451 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::GetAXTreeID() {
452 return AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID( 452 return ui::AXTreeIDRegistry::GetInstance()->GetOrCreateAXTreeID(
453 GetProcess()->GetID(), routing_id_); 453 GetProcess()->GetID(), routing_id_);
454 } 454 }
455 455
456 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { 456 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() {
457 return site_instance_.get(); 457 return site_instance_.get();
458 } 458 }
459 459
460 RenderProcessHost* RenderFrameHostImpl::GetProcess() { 460 RenderProcessHost* RenderFrameHostImpl::GetProcess() {
461 return process_; 461 return process_;
462 } 462 }
(...skipping 2712 matching lines...) Expand 10 before | Expand all | Expand 10 after
3175 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || 3175 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) ||
3176 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( 3176 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
3177 GetProcess()->GetID()) || 3177 GetProcess()->GetID()) ||
3178 // It's possible to load about:blank in a Web UI renderer. 3178 // It's possible to load about:blank in a Web UI renderer.
3179 // See http://crbug.com/42547 3179 // See http://crbug.com/42547
3180 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || 3180 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) ||
3181 // InterstitialPageImpl should be the only case matching this. 3181 // InterstitialPageImpl should be the only case matching this.
3182 (delegate_->GetAsWebContents() == nullptr); 3182 (delegate_->GetAsWebContents() == nullptr);
3183 } 3183 }
3184 3184
3185 AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( 3185 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID(
3186 int routing_id) { 3186 int routing_id) {
3187 RenderFrameHostImpl* rfh = nullptr; 3187 RenderFrameHostImpl* rfh = nullptr;
3188 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID( 3188 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID(
3189 GetProcess()->GetID(), routing_id); 3189 GetProcess()->GetID(), routing_id);
3190 if (rfph) { 3190 if (rfph) {
3191 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree(); 3191 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree();
3192 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID( 3192 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID(
3193 GetProcess()->GetID(), routing_id); 3193 GetProcess()->GetID(), routing_id);
3194 rfh = frame_tree_node->render_manager()->current_frame_host(); 3194 rfh = frame_tree_node->render_manager()->current_frame_host();
3195 } else { 3195 } else {
3196 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id); 3196 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id);
3197 3197
3198 // As a sanity check, make sure we're within the same frame tree and 3198 // As a sanity check, make sure we're within the same frame tree and
3199 // crash the renderer if not. 3199 // crash the renderer if not.
3200 if (rfh && 3200 if (rfh &&
3201 rfh->frame_tree_node()->frame_tree() != 3201 rfh->frame_tree_node()->frame_tree() !=
3202 frame_tree_node()->frame_tree()) { 3202 frame_tree_node()->frame_tree()) {
3203 AccessibilityFatalError(); 3203 AccessibilityFatalError();
3204 return AXTreeIDRegistry::kNoAXTreeID; 3204 return ui::AXTreeIDRegistry::kNoAXTreeID;
3205 } 3205 }
3206 } 3206 }
3207 3207
3208 if (!rfh) 3208 if (!rfh)
3209 return AXTreeIDRegistry::kNoAXTreeID; 3209 return ui::AXTreeIDRegistry::kNoAXTreeID;
3210 3210
3211 return rfh->GetAXTreeID(); 3211 return rfh->GetAXTreeID();
3212 } 3212 }
3213 3213
3214 AXTreeIDRegistry::AXTreeID 3214 ui::AXTreeIDRegistry::AXTreeID
3215 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID( 3215 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) {
3216 int instance_id) {
3217 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( 3216 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>(
3218 delegate()->GetGuestByInstanceID(this, instance_id)); 3217 delegate()->GetGuestByInstanceID(this, instance_id));
3219 if (!guest) 3218 if (!guest)
3220 return AXTreeIDRegistry::kNoAXTreeID; 3219 return ui::AXTreeIDRegistry::kNoAXTreeID;
3221 3220
3222 // Create a mapping from the guest to its embedder's AX Tree ID, and 3221 // Create a mapping from the guest to its embedder's AX Tree ID, and
3223 // explicitly update the guest to propagate that mapping immediately. 3222 // explicitly update the guest to propagate that mapping immediately.
3224 guest->set_browser_plugin_embedder_ax_tree_id(GetAXTreeID()); 3223 guest->set_browser_plugin_embedder_ax_tree_id(GetAXTreeID());
3225 guest->UpdateAXTreeData(); 3224 guest->UpdateAXTreeData();
3226 3225
3227 return guest->GetAXTreeID(); 3226 return guest->GetAXTreeID();
3228 } 3227 }
3229 3228
3230 void RenderFrameHostImpl::AXContentNodeDataToAXNodeData( 3229 void RenderFrameHostImpl::AXContentNodeDataToAXNodeData(
(...skipping 30 matching lines...) Expand all
3261 3260
3262 // Copy the common fields. 3261 // Copy the common fields.
3263 *dst = src; 3262 *dst = src;
3264 3263
3265 if (src.routing_id != -1) 3264 if (src.routing_id != -1)
3266 dst->tree_id = RoutingIDToAXTreeID(src.routing_id); 3265 dst->tree_id = RoutingIDToAXTreeID(src.routing_id);
3267 3266
3268 if (src.parent_routing_id != -1) 3267 if (src.parent_routing_id != -1)
3269 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id); 3268 dst->parent_tree_id = RoutingIDToAXTreeID(src.parent_routing_id);
3270 3269
3271 if (browser_plugin_embedder_ax_tree_id_ != AXTreeIDRegistry::kNoAXTreeID) 3270 if (browser_plugin_embedder_ax_tree_id_ != ui::AXTreeIDRegistry::kNoAXTreeID)
3272 dst->parent_tree_id = browser_plugin_embedder_ax_tree_id_; 3271 dst->parent_tree_id = browser_plugin_embedder_ax_tree_id_;
3273 3272
3274 // If this is not the root frame tree node, we're done. 3273 // If this is not the root frame tree node, we're done.
3275 if (frame_tree_node()->parent()) 3274 if (frame_tree_node()->parent())
3276 return; 3275 return;
3277 3276
3278 // For the root frame tree node, also store the AXTreeID of the focused frame. 3277 // For the root frame tree node, also store the AXTreeID of the focused frame.
3279 // TODO(avallee): https://crbug.com/610795: No focus ax events. 3278 // TODO(avallee): https://crbug.com/610795: No focus ax events.
3280 // This is probably where we need to fix the bug to enable the test. 3279 // This is probably where we need to fix the bug to enable the test.
3281 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame(); 3280 FrameTreeNode* focused_frame_tree_node = frame_tree_->GetFocusedFrame();
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
3406 // There is no pending NavigationEntry in these cases, so pass 0 as the 3405 // There is no pending NavigationEntry in these cases, so pass 0 as the
3407 // pending_nav_entry_id. If the previous handle was a prematurely aborted 3406 // pending_nav_entry_id. If the previous handle was a prematurely aborted
3408 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. 3407 // navigation loaded via LoadDataWithBaseURL, propagate the entry id.
3409 return NavigationHandleImpl::Create( 3408 return NavigationHandleImpl::Create(
3410 params.url, frame_tree_node_, is_renderer_initiated, 3409 params.url, frame_tree_node_, is_renderer_initiated,
3411 params.was_within_same_page, base::TimeTicks::Now(), 3410 params.was_within_same_page, base::TimeTicks::Now(),
3412 entry_id_for_data_nav, false); // started_from_context_menu 3411 entry_id_for_data_nav, false); // started_from_context_menu
3413 } 3412 }
3414 3413
3415 } // namespace content 3414 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698