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

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

Issue 2558933002: Add more fine-grained accessibility modes. (Closed)
Patch Set: Rename constants Created 4 years 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 <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "base/debug/dump_without_crashing.h" 12 #include "base/debug/dump_without_crashing.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/metrics/histogram_macros.h" 15 #include "base/metrics/histogram_macros.h"
16 #include "base/process/kill.h" 16 #include "base/process/kill.h"
17 #include "base/time/time.h" 17 #include "base/time/time.h"
18 #include "build/build_config.h" 18 #include "build/build_config.h"
19 #include "content/browser/accessibility/accessibility_mode_helper.h"
20 #include "content/browser/accessibility/ax_tree_id_registry.h" 19 #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"
(...skipping 1898 matching lines...) Expand 10 before | Expand all | Expand 10 after
1928 if (accessibility_reset_token_ != reset_token) { 1927 if (accessibility_reset_token_ != reset_token) {
1929 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); 1928 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token));
1930 return; 1929 return;
1931 } 1930 }
1932 accessibility_reset_token_ = 0; 1931 accessibility_reset_token_ = 0;
1933 1932
1934 RenderWidgetHostViewBase* view = GetViewForAccessibility(); 1933 RenderWidgetHostViewBase* view = GetViewForAccessibility();
1935 1934
1936 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 1935 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
1937 if ((accessibility_mode != AccessibilityModeOff) && view && is_active()) { 1936 if ((accessibility_mode != AccessibilityModeOff) && view && is_active()) {
1938 if (accessibility_mode & AccessibilityModeFlagPlatform) 1937 if (accessibility_mode & AccessibilityModeFlagNativeAPIs)
1939 GetOrCreateBrowserAccessibilityManager(); 1938 GetOrCreateBrowserAccessibilityManager();
1940 1939
1941 std::vector<AXEventNotificationDetails> details; 1940 std::vector<AXEventNotificationDetails> details;
1942 details.reserve(params.size()); 1941 details.reserve(params.size());
1943 for (size_t i = 0; i < params.size(); ++i) { 1942 for (size_t i = 0; i < params.size(); ++i) {
1944 const AccessibilityHostMsg_EventParams& param = params[i]; 1943 const AccessibilityHostMsg_EventParams& param = params[i];
1945 AXEventNotificationDetails detail; 1944 AXEventNotificationDetails detail;
1946 detail.event_type = param.event_type; 1945 detail.event_type = param.event_type;
1947 detail.id = param.id; 1946 detail.id = param.id;
1948 detail.ax_tree_id = GetAXTreeID(); 1947 detail.ax_tree_id = GetAXTreeID();
1949 detail.event_from = param.event_from; 1948 detail.event_from = param.event_from;
1950 if (param.update.has_tree_data) { 1949 if (param.update.has_tree_data) {
1951 detail.update.has_tree_data = true; 1950 detail.update.has_tree_data = true;
1952 ax_content_tree_data_ = param.update.tree_data; 1951 ax_content_tree_data_ = param.update.tree_data;
1953 AXContentTreeDataToAXTreeData(&detail.update.tree_data); 1952 AXContentTreeDataToAXTreeData(&detail.update.tree_data);
1954 } 1953 }
1955 detail.update.root_id = param.update.root_id; 1954 detail.update.root_id = param.update.root_id;
1956 detail.update.node_id_to_clear = param.update.node_id_to_clear; 1955 detail.update.node_id_to_clear = param.update.node_id_to_clear;
1957 detail.update.nodes.resize(param.update.nodes.size()); 1956 detail.update.nodes.resize(param.update.nodes.size());
1958 for (size_t i = 0; i < param.update.nodes.size(); ++i) { 1957 for (size_t i = 0; i < param.update.nodes.size(); ++i) {
1959 AXContentNodeDataToAXNodeData(param.update.nodes[i], 1958 AXContentNodeDataToAXNodeData(param.update.nodes[i],
1960 &detail.update.nodes[i]); 1959 &detail.update.nodes[i]);
1961 } 1960 }
1962 details.push_back(detail); 1961 details.push_back(detail);
1963 } 1962 }
1964 1963
1965 if (accessibility_mode & AccessibilityModeFlagPlatform) { 1964 if (accessibility_mode & AccessibilityModeFlagNativeAPIs) {
1966 if (browser_accessibility_manager_) 1965 if (browser_accessibility_manager_)
1967 browser_accessibility_manager_->OnAccessibilityEvents(details); 1966 browser_accessibility_manager_->OnAccessibilityEvents(details);
1968 } 1967 }
1969 1968
1970 // Send the updates to the automation extension API.
1971 delegate_->AccessibilityEventReceived(details); 1969 delegate_->AccessibilityEventReceived(details);
1972 1970
1973 // For testing only. 1971 // For testing only.
1974 if (!accessibility_testing_callback_.is_null()) { 1972 if (!accessibility_testing_callback_.is_null()) {
1975 for (size_t i = 0; i < details.size(); i++) { 1973 for (size_t i = 0; i < details.size(); i++) {
1976 const AXEventNotificationDetails& detail = details[i]; 1974 const AXEventNotificationDetails& detail = details[i];
1977 if (static_cast<int>(detail.event_type) < 0) 1975 if (static_cast<int>(detail.event_type) < 0)
1978 continue; 1976 continue;
1979 1977
1980 if (!ax_tree_for_testing_) { 1978 if (!ax_tree_for_testing_) {
(...skipping 20 matching lines...) Expand all
2001 1999
2002 void RenderFrameHostImpl::OnAccessibilityLocationChanges( 2000 void RenderFrameHostImpl::OnAccessibilityLocationChanges(
2003 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { 2001 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) {
2004 if (accessibility_reset_token_) 2002 if (accessibility_reset_token_)
2005 return; 2003 return;
2006 2004
2007 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 2005 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
2008 render_view_host_->GetWidget()->GetView()); 2006 render_view_host_->GetWidget()->GetView());
2009 if (view && is_active()) { 2007 if (view && is_active()) {
2010 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 2008 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
2011 if (accessibility_mode & AccessibilityModeFlagPlatform) { 2009 if (accessibility_mode & AccessibilityModeFlagNativeAPIs) {
2012 BrowserAccessibilityManager* manager = 2010 BrowserAccessibilityManager* manager =
2013 GetOrCreateBrowserAccessibilityManager(); 2011 GetOrCreateBrowserAccessibilityManager();
2014 if (manager) 2012 if (manager)
2015 manager->OnLocationChanges(params); 2013 manager->OnLocationChanges(params);
2016 } 2014 }
2017 2015
2018 // Send the updates to the automation extension API. 2016 // Send the updates to the automation extension API.
2019 std::vector<AXLocationChangeNotificationDetails> details; 2017 std::vector<AXLocationChangeNotificationDetails> details;
2020 details.reserve(params.size()); 2018 details.reserve(params.size());
2021 for (size_t i = 0; i < params.size(); ++i) { 2019 for (size_t i = 0; i < params.size(); ++i) {
2022 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; 2020 const AccessibilityHostMsg_LocationChangeParams& param = params[i];
2023 AXLocationChangeNotificationDetails detail; 2021 AXLocationChangeNotificationDetails detail;
2024 detail.id = param.id; 2022 detail.id = param.id;
2025 detail.ax_tree_id = GetAXTreeID(); 2023 detail.ax_tree_id = GetAXTreeID();
2026 detail.new_location = param.new_location; 2024 detail.new_location = param.new_location;
2027 details.push_back(detail); 2025 details.push_back(detail);
2028 } 2026 }
2029 delegate_->AccessibilityLocationChangesReceived(details); 2027 delegate_->AccessibilityLocationChangesReceived(details);
2030 } 2028 }
2031 } 2029 }
2032 2030
2033 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( 2031 void RenderFrameHostImpl::OnAccessibilityFindInPageResult(
2034 const AccessibilityHostMsg_FindInPageResultParams& params) { 2032 const AccessibilityHostMsg_FindInPageResultParams& params) {
2035 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 2033 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
2036 if (accessibility_mode & AccessibilityModeFlagPlatform) { 2034 if (accessibility_mode & AccessibilityModeFlagNativeAPIs) {
2037 BrowserAccessibilityManager* manager = 2035 BrowserAccessibilityManager* manager =
2038 GetOrCreateBrowserAccessibilityManager(); 2036 GetOrCreateBrowserAccessibilityManager();
2039 if (manager) { 2037 if (manager) {
2040 manager->OnFindInPageResult( 2038 manager->OnFindInPageResult(
2041 params.request_id, params.match_index, params.start_id, 2039 params.request_id, params.match_index, params.start_id,
2042 params.start_offset, params.end_id, params.end_offset); 2040 params.start_offset, params.end_id, params.end_offset);
2043 } 2041 }
2044 } 2042 }
2045 } 2043 }
2046 2044
(...skipping 852 matching lines...) Expand 10 before | Expand all | Expand 10 after
2899 bool is_root_frame = !frame_tree_node()->parent(); 2897 bool is_root_frame = !frame_tree_node()->parent();
2900 browser_accessibility_manager_.reset( 2898 browser_accessibility_manager_.reset(
2901 view->CreateBrowserAccessibilityManager(this, is_root_frame)); 2899 view->CreateBrowserAccessibilityManager(this, is_root_frame));
2902 } 2900 }
2903 return browser_accessibility_manager_.get(); 2901 return browser_accessibility_manager_.get();
2904 } 2902 }
2905 2903
2906 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( 2904 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility(
2907 int request_id) { 2905 int request_id) {
2908 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 2906 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
2909 if (accessibility_mode & AccessibilityModeFlagPlatform) { 2907 if (accessibility_mode & AccessibilityModeFlagNativeAPIs) {
2910 BrowserAccessibilityManager* manager = 2908 BrowserAccessibilityManager* manager =
2911 GetOrCreateBrowserAccessibilityManager(); 2909 GetOrCreateBrowserAccessibilityManager();
2912 if (manager) 2910 if (manager)
2913 manager->ActivateFindInPageResult(request_id); 2911 manager->ActivateFindInPageResult(request_id);
2914 } 2912 }
2915 } 2913 }
2916 2914
2917 void RenderFrameHostImpl::InsertVisualStateCallback( 2915 void RenderFrameHostImpl::InsertVisualStateCallback(
2918 const VisualStateCallback& callback) { 2916 const VisualStateCallback& callback) {
2919 static uint64_t next_id = 1; 2917 static uint64_t next_id = 1;
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
3338 // There is no pending NavigationEntry in these cases, so pass 0 as the 3336 // There is no pending NavigationEntry in these cases, so pass 0 as the
3339 // pending_nav_entry_id. If the previous handle was a prematurely aborted 3337 // pending_nav_entry_id. If the previous handle was a prematurely aborted
3340 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. 3338 // navigation loaded via LoadDataWithBaseURL, propagate the entry id.
3341 return NavigationHandleImpl::Create( 3339 return NavigationHandleImpl::Create(
3342 params.url, frame_tree_node_, is_renderer_initiated, 3340 params.url, frame_tree_node_, is_renderer_initiated,
3343 params.was_within_same_page, params.is_srcdoc, base::TimeTicks::Now(), 3341 params.was_within_same_page, params.is_srcdoc, base::TimeTicks::Now(),
3344 entry_id_for_data_nav, false); // started_from_context_menu 3342 entry_id_for_data_nav, false); // started_from_context_menu
3345 } 3343 }
3346 3344
3347 } // namespace content 3345 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698