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

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

Issue 629413002: Revert of Reset accessibility if it gets out of sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 "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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 #if defined(OS_MACOSX) 61 #if defined(OS_MACOSX)
62 #include "content/browser/frame_host/popup_menu_helper_mac.h" 62 #include "content/browser/frame_host/popup_menu_helper_mac.h"
63 #endif 63 #endif
64 64
65 using base::TimeDelta; 65 using base::TimeDelta;
66 66
67 namespace content { 67 namespace content {
68 68
69 namespace { 69 namespace {
70 70
71 // The next value to use for the accessibility reset token.
72 int g_next_accessibility_reset_token = 1;
73
74 // The (process id, routing id) pair that identifies one RenderFrame. 71 // The (process id, routing id) pair that identifies one RenderFrame.
75 typedef std::pair<int32, int32> RenderFrameHostID; 72 typedef std::pair<int32, int32> RenderFrameHostID;
76 typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*> 73 typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*>
77 RoutingIDFrameMap; 74 RoutingIDFrameMap;
78 base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map = 75 base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map =
79 LAZY_INSTANCE_INITIALIZER; 76 LAZY_INSTANCE_INITIALIZER;
80 77
81 class DesktopNotificationDelegateImpl : public DesktopNotificationDelegate { 78 class DesktopNotificationDelegateImpl : public DesktopNotificationDelegate {
82 public: 79 public:
83 DesktopNotificationDelegateImpl(RenderFrameHost* render_frame_host, 80 DesktopNotificationDelegateImpl(RenderFrameHost* render_frame_host,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 delegate_(delegate), 180 delegate_(delegate),
184 cross_process_frame_connector_(NULL), 181 cross_process_frame_connector_(NULL),
185 render_frame_proxy_host_(NULL), 182 render_frame_proxy_host_(NULL),
186 frame_tree_(frame_tree), 183 frame_tree_(frame_tree),
187 frame_tree_node_(frame_tree_node), 184 frame_tree_node_(frame_tree_node),
188 routing_id_(routing_id), 185 routing_id_(routing_id),
189 render_frame_created_(false), 186 render_frame_created_(false),
190 navigations_suspended_(false), 187 navigations_suspended_(false),
191 is_waiting_for_beforeunload_ack_(false), 188 is_waiting_for_beforeunload_ack_(false),
192 unload_ack_is_for_cross_site_transition_(false), 189 unload_ack_is_for_cross_site_transition_(false),
193 accessibility_reset_token_(0),
194 accessibility_reset_count_(0),
195 disallow_browser_accessibility_manager_for_testing_(false),
196 weak_ptr_factory_(this) { 190 weak_ptr_factory_(this) {
197 frame_tree_->RegisterRenderFrameHost(this); 191 frame_tree_->RegisterRenderFrameHost(this);
198 GetProcess()->AddRoute(routing_id_, this); 192 GetProcess()->AddRoute(routing_id_, this);
199 g_routing_id_frame_map.Get().insert(std::make_pair( 193 g_routing_id_frame_map.Get().insert(std::make_pair(
200 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 194 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
201 this)); 195 this));
202 196
203 if (is_swapped_out) { 197 if (is_swapped_out) {
204 rfh_state_ = STATE_SWAPPED_OUT; 198 rfh_state_ = STATE_SWAPPED_OUT;
205 } else { 199 } else {
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 if (view) 466 if (view)
473 return view->AccessibilityOriginInScreen(bounds); 467 return view->AccessibilityOriginInScreen(bounds);
474 return gfx::Point(); 468 return gfx::Point();
475 } 469 }
476 470
477 void RenderFrameHostImpl::AccessibilityHitTest(const gfx::Point& point) { 471 void RenderFrameHostImpl::AccessibilityHitTest(const gfx::Point& point) {
478 Send(new AccessibilityMsg_HitTest(routing_id_, point)); 472 Send(new AccessibilityMsg_HitTest(routing_id_, point));
479 } 473 }
480 474
481 void RenderFrameHostImpl::AccessibilityFatalError() { 475 void RenderFrameHostImpl::AccessibilityFatalError() {
476 Send(new AccessibilityMsg_FatalError(routing_id_));
482 browser_accessibility_manager_.reset(NULL); 477 browser_accessibility_manager_.reset(NULL);
483 if (accessibility_reset_token_)
484 return;
485
486 accessibility_reset_count_++;
487 if (accessibility_reset_count_ >= kMaxAccessibilityResets) {
488 Send(new AccessibilityMsg_FatalError(routing_id_));
489 } else {
490 accessibility_reset_token_ = g_next_accessibility_reset_token++;
491 UMA_HISTOGRAM_COUNTS("Accessibility.FrameResetCount", 1);
492 Send(new AccessibilityMsg_Reset(routing_id_, accessibility_reset_token_));
493 }
494 } 478 }
495 479
496 gfx::AcceleratedWidget 480 gfx::AcceleratedWidget
497 RenderFrameHostImpl::AccessibilityGetAcceleratedWidget() { 481 RenderFrameHostImpl::AccessibilityGetAcceleratedWidget() {
498 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 482 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
499 render_view_host_->GetView()); 483 render_view_host_->GetView());
500 if (view) 484 if (view)
501 return view->AccessibilityGetAcceleratedWidget(); 485 return view->AccessibilityGetAcceleratedWidget();
502 return gfx::kNullAcceleratedWidget; 486 return gfx::kNullAcceleratedWidget;
503 } 487 }
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 process->FilterURL(true, &validated_params.searchable_form_url); 734 process->FilterURL(true, &validated_params.searchable_form_url);
751 735
752 // Without this check, the renderer can trick the browser into using 736 // Without this check, the renderer can trick the browser into using
753 // filenames it can't access in a future session restore. 737 // filenames it can't access in a future session restore.
754 if (!render_view_host_->CanAccessFilesOfPageState( 738 if (!render_view_host_->CanAccessFilesOfPageState(
755 validated_params.page_state)) { 739 validated_params.page_state)) {
756 GetProcess()->ReceivedBadMessage(); 740 GetProcess()->ReceivedBadMessage();
757 return; 741 return;
758 } 742 }
759 743
760 accessibility_reset_count_ = 0;
761 frame_tree_node()->navigator()->DidNavigate(this, validated_params); 744 frame_tree_node()->navigator()->DidNavigate(this, validated_params);
762 } 745 }
763 746
764 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { 747 RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() {
765 return static_cast<RenderWidgetHostImpl*>(render_view_host_); 748 return static_cast<RenderWidgetHostImpl*>(render_view_host_);
766 } 749 }
767 750
768 int RenderFrameHostImpl::GetEnabledBindings() { 751 int RenderFrameHostImpl::GetEnabledBindings() {
769 return render_view_host_->GetEnabledBindings(); 752 return render_view_host_->GetEnabledBindings();
770 } 753 }
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 void RenderFrameHostImpl::OnBeginNavigation( 1057 void RenderFrameHostImpl::OnBeginNavigation(
1075 const FrameHostMsg_BeginNavigation_Params& params, 1058 const FrameHostMsg_BeginNavigation_Params& params,
1076 const CommonNavigationParams& common_params) { 1059 const CommonNavigationParams& common_params) {
1077 CHECK(CommandLine::ForCurrentProcess()->HasSwitch( 1060 CHECK(CommandLine::ForCurrentProcess()->HasSwitch(
1078 switches::kEnableBrowserSideNavigation)); 1061 switches::kEnableBrowserSideNavigation));
1079 frame_tree_node()->navigator()->OnBeginNavigation( 1062 frame_tree_node()->navigator()->OnBeginNavigation(
1080 frame_tree_node(), params, common_params); 1063 frame_tree_node(), params, common_params);
1081 } 1064 }
1082 1065
1083 void RenderFrameHostImpl::OnAccessibilityEvents( 1066 void RenderFrameHostImpl::OnAccessibilityEvents(
1084 const std::vector<AccessibilityHostMsg_EventParams>& params, 1067 const std::vector<AccessibilityHostMsg_EventParams>& params) {
1085 int reset_token) {
1086 // Don't process this IPC if either we're waiting on a reset and this
1087 // IPC doesn't have the matching token ID, or if we're not waiting on a
1088 // reset but this message includes a reset token.
1089 if (accessibility_reset_token_ != reset_token) {
1090 Send(new AccessibilityMsg_Events_ACK(routing_id_));
1091 return;
1092 }
1093 accessibility_reset_token_ = 0;
1094
1095 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 1068 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
1096 render_view_host_->GetView()); 1069 render_view_host_->GetView());
1097 1070
1098 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 1071 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
1099 if ((accessibility_mode != AccessibilityModeOff) && view && 1072 if ((accessibility_mode != AccessibilityModeOff) && view &&
1100 RenderFrameHostImpl::IsRFHStateActive(rfh_state())) { 1073 RenderFrameHostImpl::IsRFHStateActive(rfh_state())) {
1101 if (accessibility_mode & AccessibilityModeFlagPlatform) { 1074 if (accessibility_mode & AccessibilityModeFlagPlatform) {
1102 GetOrCreateBrowserAccessibilityManager(); 1075 GetOrCreateBrowserAccessibilityManager();
1103 if (browser_accessibility_manager_) 1076 if (browser_accessibility_manager_)
1104 browser_accessibility_manager_->OnAccessibilityEvents(params); 1077 browser_accessibility_manager_->OnAccessibilityEvents(params);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 } else { 1132 } else {
1160 CHECK(ax_tree_for_testing_->Unserialize(param.update)) 1133 CHECK(ax_tree_for_testing_->Unserialize(param.update))
1161 << ax_tree_for_testing_->error(); 1134 << ax_tree_for_testing_->error();
1162 } 1135 }
1163 accessibility_testing_callback_.Run(param.event_type, param.id); 1136 accessibility_testing_callback_.Run(param.event_type, param.id);
1164 } 1137 }
1165 } 1138 }
1166 1139
1167 void RenderFrameHostImpl::OnAccessibilityLocationChanges( 1140 void RenderFrameHostImpl::OnAccessibilityLocationChanges(
1168 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { 1141 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
1169 if (accessibility_reset_token_)
1170 return;
1171
1172 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 1142 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
1173 render_view_host_->GetView()); 1143 render_view_host_->GetView());
1174 if (view && RenderFrameHostImpl::IsRFHStateActive(rfh_state())) { 1144 if (view && RenderFrameHostImpl::IsRFHStateActive(rfh_state())) {
1175 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 1145 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
1176 if (accessibility_mode & AccessibilityModeFlagPlatform) { 1146 if (accessibility_mode & AccessibilityModeFlagPlatform) {
1177 if (!browser_accessibility_manager_) { 1147 if (!browser_accessibility_manager_) {
1178 browser_accessibility_manager_.reset( 1148 browser_accessibility_manager_.reset(
1179 view->CreateBrowserAccessibilityManager(this)); 1149 view->CreateBrowserAccessibilityManager(this));
1180 } 1150 }
1181 if (browser_accessibility_manager_) 1151 if (browser_accessibility_manager_)
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 const base::Callback<void(ui::AXEvent, int)>& callback) { 1441 const base::Callback<void(ui::AXEvent, int)>& callback) {
1472 accessibility_testing_callback_ = callback; 1442 accessibility_testing_callback_ = callback;
1473 } 1443 }
1474 1444
1475 const ui::AXTree* RenderFrameHostImpl::GetAXTreeForTesting() { 1445 const ui::AXTree* RenderFrameHostImpl::GetAXTreeForTesting() {
1476 return ax_tree_for_testing_.get(); 1446 return ax_tree_for_testing_.get();
1477 } 1447 }
1478 1448
1479 BrowserAccessibilityManager* 1449 BrowserAccessibilityManager*
1480 RenderFrameHostImpl::GetOrCreateBrowserAccessibilityManager() { 1450 RenderFrameHostImpl::GetOrCreateBrowserAccessibilityManager() {
1481 if (disallow_browser_accessibility_manager_for_testing_)
1482 return NULL;
1483
1484 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 1451 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
1485 render_view_host_->GetView()); 1452 render_view_host_->GetView());
1486 if (view && !browser_accessibility_manager_) { 1453 if (view &&
1454 !browser_accessibility_manager_) {
1487 browser_accessibility_manager_.reset( 1455 browser_accessibility_manager_.reset(
1488 view->CreateBrowserAccessibilityManager(this)); 1456 view->CreateBrowserAccessibilityManager(this));
1489 if (browser_accessibility_manager_)
1490 UMA_HISTOGRAM_COUNTS("Accessibility.FrameEnabledCount", 1);
1491 else
1492 UMA_HISTOGRAM_COUNTS("Accessibility.FrameDidNotEnableCount", 1);
1493 } 1457 }
1494 return browser_accessibility_manager_.get(); 1458 return browser_accessibility_manager_.get();
1495 } 1459 }
1496 1460
1497 #if defined(OS_WIN) 1461 #if defined(OS_WIN)
1498 1462
1499 void RenderFrameHostImpl::SetParentNativeViewAccessible( 1463 void RenderFrameHostImpl::SetParentNativeViewAccessible(
1500 gfx::NativeViewAccessible accessible_parent) { 1464 gfx::NativeViewAccessible accessible_parent) {
1501 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 1465 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
1502 render_view_host_->GetView()); 1466 render_view_host_->GetView());
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 // Clear any state if a pending navigation is canceled or preempted. 1541 // Clear any state if a pending navigation is canceled or preempted.
1578 if (suspended_nav_params_) 1542 if (suspended_nav_params_)
1579 suspended_nav_params_.reset(); 1543 suspended_nav_params_.reset();
1580 1544
1581 TRACE_EVENT_ASYNC_END0("navigation", 1545 TRACE_EVENT_ASYNC_END0("navigation",
1582 "RenderFrameHostImpl navigation suspended", this); 1546 "RenderFrameHostImpl navigation suspended", this);
1583 navigations_suspended_ = false; 1547 navigations_suspended_ = false;
1584 } 1548 }
1585 1549
1586 } // namespace content 1550 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/common/accessibility_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698