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

Side by Side Diff: content/browser/accessibility/browser_accessibility_manager_android.cc

Issue 2903583006: Collect metrics on running Accessibility services on Android (Closed)
Patch Set: Rebase Created 3 years, 6 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/accessibility/browser_accessibility_manager_android.h" 5 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <cmath> 9 #include <cmath>
10 10
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_string.h" 12 #include "base/android/jni_string.h"
13 #include "base/feature_list.h" 13 #include "base/feature_list.h"
14 #include "base/i18n/char_iterator.h" 14 #include "base/i18n/char_iterator.h"
15 #include "base/macros.h"
16 #include "base/metrics/histogram_macros.h"
15 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
17 #include "base/values.h" 19 #include "base/values.h"
18 #include "content/app/strings/grit/content_strings.h" 20 #include "content/app/strings/grit/content_strings.h"
19 #include "content/browser/accessibility/browser_accessibility_android.h" 21 #include "content/browser/accessibility/browser_accessibility_android.h"
20 #include "content/browser/accessibility/one_shot_accessibility_tree_search.h" 22 #include "content/browser/accessibility/one_shot_accessibility_tree_search.h"
21 #include "content/common/accessibility_messages.h" 23 #include "content/common/accessibility_messages.h"
22 #include "content/public/common/content_features.h" 24 #include "content/public/common/content_features.h"
23 #include "jni/BrowserAccessibilityManager_jni.h" 25 #include "jni/BrowserAccessibilityManager_jni.h"
24 #include "ui/accessibility/ax_text_utils.h" 26 #include "ui/accessibility/ax_text_utils.h"
25 27
26 using base::android::AttachCurrentThread; 28 using base::android::AttachCurrentThread;
27 using base::android::JavaParamRef; 29 using base::android::JavaParamRef;
28 using base::android::ScopedJavaLocalRef; 30 using base::android::ScopedJavaLocalRef;
29 31
30 namespace content { 32 namespace content {
31 33
32 namespace { 34 namespace {
33 35
36 // IMPORTANT!
37 // These values are written to logs. Do not renumber or delete
38 // existing items; add new entries to the end of the list.
39 enum {
40 UMA_CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0,
41 UMA_CAPABILITY_CAN_PERFORM_GESTURES = 1,
42 UMA_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 2,
43 UMA_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 3,
44 UMA_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 4,
45 UMA_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 5,
46 UMA_EVENT_ANNOUNCEMENT = 6,
47 UMA_EVENT_ASSIST_READING_CONTEXT = 7,
48 UMA_EVENT_GESTURE_DETECTION_END = 8,
49 UMA_EVENT_GESTURE_DETECTION_START = 9,
50 UMA_EVENT_NOTIFICATION_STATE_CHANGED = 10,
51 UMA_EVENT_TOUCH_EXPLORATION_GESTURE_END = 11,
52 UMA_EVENT_TOUCH_EXPLORATION_GESTURE_START = 12,
53 UMA_EVENT_TOUCH_INTERACTION_END = 13,
54 UMA_EVENT_TOUCH_INTERACTION_START = 14,
55 UMA_EVENT_VIEW_ACCESSIBILITY_FOCUSED = 15,
56 UMA_EVENT_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 16,
57 UMA_EVENT_VIEW_CLICKED = 17,
58 UMA_EVENT_VIEW_CONTEXT_CLICKED = 18,
59 UMA_EVENT_VIEW_FOCUSED = 19,
60 UMA_EVENT_VIEW_HOVER_ENTER = 20,
61 UMA_EVENT_VIEW_HOVER_EXIT = 21,
62 UMA_EVENT_VIEW_LONG_CLICKED = 22,
63 UMA_EVENT_VIEW_SCROLLED = 23,
64 UMA_EVENT_VIEW_SELECTED = 24,
65 UMA_EVENT_VIEW_TEXT_CHANGED = 25,
66 UMA_EVENT_VIEW_TEXT_SELECTION_CHANGED = 26,
67 UMA_EVENT_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 27,
68 UMA_EVENT_WINDOWS_CHANGED = 28,
69 UMA_EVENT_WINDOW_CONTENT_CHANGED = 29,
70 UMA_EVENT_WINDOW_STATE_CHANGED = 30,
71 UMA_FEEDBACK_AUDIBLE = 31,
72 UMA_FEEDBACK_BRAILLE = 32,
73 UMA_FEEDBACK_GENERIC = 33,
74 UMA_FEEDBACK_HAPTIC = 34,
75 UMA_FEEDBACK_SPOKEN = 35,
76 UMA_FEEDBACK_VISUAL = 36,
77 UMA_FLAG_FORCE_DIRECT_BOOT_AWARE = 37,
78 UMA_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 38,
79 UMA_FLAG_REPORT_VIEW_IDS = 39,
80 UMA_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 40,
81 UMA_FLAG_REQUEST_FILTER_KEY_EVENTS = 41,
82 UMA_FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 42,
83 UMA_FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 43,
84
85 // This must always be the last enum. It's okay for its value to
86 // increase, but none of the other enum values may change.
87 UMA_ACCESSIBILITYSERVICEINFO_MAX
88 };
89
90 #define ACCESSIBILITY_SERVICE_HISTOGRAM(enum_value) \
91 UMA_HISTOGRAM_ENUMERATION("Accessibility.AndroidServiceInfo", enum_value, \
92 UMA_ACCESSIBILITYSERVICEINFO_MAX)
93
94 // These are constants from
95 // android.view.accessibility.AccessibilityEvent in Java:
96 enum {
97 ACCESSIBILITYEVENT_TYPE_ANNOUNCEMENT = 0x00004000,
98 ACCESSIBILITYEVENT_TYPE_ASSIST_READING_CONTEXT = 0x01000000,
99 ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_END = 0x00080000,
100 ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_START = 0x00040000,
101 ACCESSIBILITYEVENT_TYPE_NOTIFICATION_STATE_CHANGED = 0x00000040,
102 ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400,
103 ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200,
104 ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_END = 0x00200000,
105 ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_START = 0x00100000,
106 ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x00008000,
107 ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000,
108 ACCESSIBILITYEVENT_TYPE_VIEW_CLICKED = 0x00000001,
109 ACCESSIBILITYEVENT_TYPE_VIEW_CONTEXT_CLICKED = 0x00800000,
110 ACCESSIBILITYEVENT_TYPE_VIEW_FOCUSED = 0x00000008,
111 ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_ENTER = 0x00000080,
112 ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_EXIT = 0x00000100,
113 ACCESSIBILITYEVENT_TYPE_VIEW_LONG_CLICKED = 0x00000002,
114 ACCESSIBILITYEVENT_TYPE_VIEW_SCROLLED = 0x00001000,
115 ACCESSIBILITYEVENT_TYPE_VIEW_SELECTED = 0x00000004,
116 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_CHANGED = 0x00000010,
117 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000,
118 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY =
119 0x00020000,
120 ACCESSIBILITYEVENT_TYPE_WINDOWS_CHANGED = 0x00400000,
121 ACCESSIBILITYEVENT_TYPE_WINDOW_CONTENT_CHANGED = 0x00000800,
122 ACCESSIBILITYEVENT_TYPE_WINDOW_STATE_CHANGED = 0x00000020
123 };
124
125 // These are constants from
126 // android.accessibilityservice.AccessibilityServiceInfo in Java:
127 enum {
128 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 0x00000001,
129 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION =
130 0x00000002,
131 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY =
132 0x00000004,
133 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS =
134 0x00000008,
135 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0x00000010,
136 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_PERFORM_GESTURES = 0x00000020,
137 ACCESSIBILITYSERVICEINFO_FEEDBACK_SPOKEN = 0x0000001,
138 ACCESSIBILITYSERVICEINFO_FEEDBACK_HAPTIC = 0x0000002,
139 ACCESSIBILITYSERVICEINFO_FEEDBACK_AUDIBLE = 0x0000004,
140 ACCESSIBILITYSERVICEINFO_FEEDBACK_VISUAL = 0x0000008,
141 ACCESSIBILITYSERVICEINFO_FEEDBACK_GENERIC = 0x0000010,
142 ACCESSIBILITYSERVICEINFO_FEEDBACK_BRAILLE = 0x0000020,
143 ACCESSIBILITYSERVICEINFO_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x0000002,
144 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 0x0000004,
145 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000008,
146 ACCESSIBILITYSERVICEINFO_FLAG_REPORT_VIEW_IDS = 0x00000010,
147 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_FILTER_KEY_EVENTS = 0x00000020,
148 ACCESSIBILITYSERVICEINFO_FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040,
149 ACCESSIBILITYSERVICEINFO_FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000,
150 };
151
34 using SearchKeyToPredicateMap = 152 using SearchKeyToPredicateMap =
35 base::hash_map<base::string16, AccessibilityMatchPredicate>; 153 base::hash_map<base::string16, AccessibilityMatchPredicate>;
36 base::LazyInstance<SearchKeyToPredicateMap>::DestructorAtExit 154 base::LazyInstance<SearchKeyToPredicateMap>::DestructorAtExit
37 g_search_key_to_predicate_map = LAZY_INSTANCE_INITIALIZER; 155 g_search_key_to_predicate_map = LAZY_INSTANCE_INITIALIZER;
38 base::LazyInstance<base::string16>::DestructorAtExit g_all_search_keys = 156 base::LazyInstance<base::string16>::DestructorAtExit g_all_search_keys =
39 LAZY_INSTANCE_INITIALIZER; 157 LAZY_INSTANCE_INITIALIZER;
40 158
41 bool SectionPredicate( 159 bool SectionPredicate(
42 BrowserAccessibility* start, BrowserAccessibility* node) { 160 BrowserAccessibility* start, BrowserAccessibility* node) {
43 switch (node->GetRole()) { 161 switch (node->GetRole()) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 281
164 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid( 282 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid(
165 ScopedJavaLocalRef<jobject> content_view_core, 283 ScopedJavaLocalRef<jobject> content_view_core,
166 const ui::AXTreeUpdate& initial_tree, 284 const ui::AXTreeUpdate& initial_tree,
167 BrowserAccessibilityDelegate* delegate, 285 BrowserAccessibilityDelegate* delegate,
168 BrowserAccessibilityFactory* factory) 286 BrowserAccessibilityFactory* factory)
169 : BrowserAccessibilityManager(delegate, factory), 287 : BrowserAccessibilityManager(delegate, factory),
170 prune_tree_for_screen_reader_(true) { 288 prune_tree_for_screen_reader_(true) {
171 Initialize(initial_tree); 289 Initialize(initial_tree);
172 SetContentViewCore(content_view_core); 290 SetContentViewCore(content_view_core);
291 CollectStats();
173 } 292 }
174 293
175 BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() { 294 BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() {
176 JNIEnv* env = AttachCurrentThread(); 295 JNIEnv* env = AttachCurrentThread();
177 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager(); 296 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager();
178 if (obj.is_null()) 297 if (obj.is_null())
179 return; 298 return;
180 299
181 // Clean up autofill popup proxy node in case the popup was not dismissed. 300 // Clean up autofill popup proxy node in case the popup was not dismissed.
182 DeleteAutofillPopupProxy(); 301 DeleteAutofillPopupProxy();
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 BrowserAccessibilityManagerAndroid* root_manager = 1219 BrowserAccessibilityManagerAndroid* root_manager =
1101 static_cast<BrowserAccessibilityManagerAndroid*>( 1220 static_cast<BrowserAccessibilityManagerAndroid*>(
1102 GetRootManager()); 1221 GetRootManager());
1103 if (!root_manager) 1222 if (!root_manager)
1104 return ScopedJavaLocalRef<jobject>(); 1223 return ScopedJavaLocalRef<jobject>();
1105 1224
1106 JNIEnv* env = AttachCurrentThread(); 1225 JNIEnv* env = AttachCurrentThread();
1107 return root_manager->java_ref().get(env); 1226 return root_manager->java_ref().get(env);
1108 } 1227 }
1109 1228
1229 void BrowserAccessibilityManagerAndroid::CollectStats() {
1230 static bool stats_collected = false;
aelias_OOO_until_Jul13 2017/05/24 20:19:54 "static" has a bad code smell and I've found even
dmazzoni 2017/05/24 21:34:27 There's one BrowserAccessibilityManager per Render
aelias_OOO_until_Jul13 2017/05/24 21:44:50 Sounds good to remove it. AXTreeSnapshotCallback
1231
1232 if (stats_collected)
1233 return;
1234
1235 JNIEnv* env = AttachCurrentThread();
1236 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager();
1237 if (obj.is_null())
1238 return;
1239
1240 int event_type_mask =
1241 Java_BrowserAccessibilityManager_getAccessibilityServiceEventTypeMask(
1242 env, obj);
1243 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_ANNOUNCEMENT)
aelias_OOO_until_Jul13 2017/05/24 20:19:54 This type of mapping is prone to clerical errors n
dmazzoni 2017/05/24 21:34:27 Done.
1244 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_ANNOUNCEMENT);
1245 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_ASSIST_READING_CONTEXT)
1246 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_ASSIST_READING_CONTEXT);
1247 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_END)
1248 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_GESTURE_DETECTION_END);
1249 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_START)
1250 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_GESTURE_DETECTION_START);
1251 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_NOTIFICATION_STATE_CHANGED)
1252 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_NOTIFICATION_STATE_CHANGED);
1253 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_END)
1254 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_EXPLORATION_GESTURE_END);
1255 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_START)
1256 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_EXPLORATION_GESTURE_START);
1257 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_END)
1258 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_INTERACTION_END);
1259 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_START)
1260 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_INTERACTION_START);
1261 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUSED)
1262 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_ACCESSIBILITY_FOCUSED);
1263 if (event_type_mask &
1264 ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED)
1265 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
1266 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_CLICKED)
1267 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_CLICKED);
1268 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_CONTEXT_CLICKED)
1269 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_CONTEXT_CLICKED);
1270 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_FOCUSED)
1271 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_FOCUSED);
1272 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_ENTER)
1273 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_HOVER_ENTER);
1274 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_EXIT)
1275 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_HOVER_EXIT);
1276 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_LONG_CLICKED)
1277 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_LONG_CLICKED);
1278 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_SCROLLED)
1279 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_SCROLLED);
1280 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_SELECTED)
1281 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_SELECTED);
1282 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_CHANGED)
1283 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_TEXT_CHANGED);
1284 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_SELECTION_CHANGED)
1285 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_TEXT_SELECTION_CHANGED);
1286 if (event_type_mask &
1287 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY)
1288 ACCESSIBILITY_SERVICE_HISTOGRAM(
1289 UMA_EVENT_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
1290 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_WINDOWS_CHANGED)
1291 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_WINDOWS_CHANGED);
1292 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_WINDOW_CONTENT_CHANGED)
1293 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_WINDOW_CONTENT_CHANGED);
1294 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_WINDOW_STATE_CHANGED)
1295 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_WINDOW_STATE_CHANGED);
1296
1297 int feedback_type_mask =
1298 Java_BrowserAccessibilityManager_getAccessibilityServiceFeedbackTypeMask(
1299 env, obj);
1300 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_SPOKEN)
1301 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_SPOKEN);
1302 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_HAPTIC)
1303 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_HAPTIC);
1304 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_AUDIBLE)
1305 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_AUDIBLE);
1306 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_VISUAL)
1307 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_VISUAL);
1308 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_GENERIC)
1309 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_GENERIC);
1310 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_BRAILLE)
1311 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_BRAILLE);
1312
1313 int flags_mask =
1314 Java_BrowserAccessibilityManager_getAccessibilityServiceFlagsMask(env,
1315 obj);
1316 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS)
1317 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS);
1318 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_TOUCH_EXPLORATION_MODE)
1319 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_REQUEST_TOUCH_EXPLORATION_MODE);
1320 if (flags_mask &
1321 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY)
1322 ACCESSIBILITY_SERVICE_HISTOGRAM(
1323 UMA_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY);
1324 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_REPORT_VIEW_IDS)
1325 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_REPORT_VIEW_IDS);
1326 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_FILTER_KEY_EVENTS)
1327 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_REQUEST_FILTER_KEY_EVENTS);
1328 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_RETRIEVE_INTERACTIVE_WINDOWS)
1329 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_RETRIEVE_INTERACTIVE_WINDOWS);
1330 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_FORCE_DIRECT_BOOT_AWARE)
1331 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_FORCE_DIRECT_BOOT_AWARE);
1332
1333 int capabilities_mask =
1334 Java_BrowserAccessibilityManager_getAccessibilityServiceCapabilitiesMask(
1335 env, obj);
1336 if (capabilities_mask &
1337 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT)
1338 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT);
1339 if (capabilities_mask &
1340 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION)
1341 ACCESSIBILITY_SERVICE_HISTOGRAM(
1342 UMA_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION);
1343 if (capabilities_mask &
1344 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY )
1345 ACCESSIBILITY_SERVICE_HISTOGRAM(
1346 UMA_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY);
1347 if (capabilities_mask &
1348 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS)
1349 ACCESSIBILITY_SERVICE_HISTOGRAM(
1350 UMA_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS);
1351 if (capabilities_mask &
1352 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_CONTROL_MAGNIFICATION)
1353 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_CAPABILITY_CAN_CONTROL_MAGNIFICATION);
1354 if (capabilities_mask &
1355 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_PERFORM_GESTURES)
1356 ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_CAPABILITY_CAN_PERFORM_GESTURES);
1357
1358 stats_collected = true;
1359 }
1360
1110 bool RegisterBrowserAccessibilityManager(JNIEnv* env) { 1361 bool RegisterBrowserAccessibilityManager(JNIEnv* env) {
1111 return RegisterNativesImpl(env); 1362 return RegisterNativesImpl(env);
1112 } 1363 }
1113 1364
1114 } // namespace content 1365 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698