OLD | NEW |
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 // |
| 40 // Note: The string names for these enums must correspond with the names of |
| 41 // constants from AccessibilityEvent and AccessibilityServiceInfo, defined |
| 42 // below. For example, UMA_EVENT_ANNOUNCEMENT corresponds to |
| 43 // ACCESSIBILITYEVENT_TYPE_ANNOUNCEMENT via the macro |
| 44 // EVENT_TYPE_HISTOGRAM(event_type_mask, ANNOUNCEMENT). |
| 45 enum { |
| 46 UMA_CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0, |
| 47 UMA_CAPABILITY_CAN_PERFORM_GESTURES = 1, |
| 48 UMA_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 2, |
| 49 UMA_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 3, |
| 50 UMA_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 4, |
| 51 UMA_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 5, |
| 52 UMA_EVENT_ANNOUNCEMENT = 6, |
| 53 UMA_EVENT_ASSIST_READING_CONTEXT = 7, |
| 54 UMA_EVENT_GESTURE_DETECTION_END = 8, |
| 55 UMA_EVENT_GESTURE_DETECTION_START = 9, |
| 56 UMA_EVENT_NOTIFICATION_STATE_CHANGED = 10, |
| 57 UMA_EVENT_TOUCH_EXPLORATION_GESTURE_END = 11, |
| 58 UMA_EVENT_TOUCH_EXPLORATION_GESTURE_START = 12, |
| 59 UMA_EVENT_TOUCH_INTERACTION_END = 13, |
| 60 UMA_EVENT_TOUCH_INTERACTION_START = 14, |
| 61 UMA_EVENT_VIEW_ACCESSIBILITY_FOCUSED = 15, |
| 62 UMA_EVENT_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 16, |
| 63 UMA_EVENT_VIEW_CLICKED = 17, |
| 64 UMA_EVENT_VIEW_CONTEXT_CLICKED = 18, |
| 65 UMA_EVENT_VIEW_FOCUSED = 19, |
| 66 UMA_EVENT_VIEW_HOVER_ENTER = 20, |
| 67 UMA_EVENT_VIEW_HOVER_EXIT = 21, |
| 68 UMA_EVENT_VIEW_LONG_CLICKED = 22, |
| 69 UMA_EVENT_VIEW_SCROLLED = 23, |
| 70 UMA_EVENT_VIEW_SELECTED = 24, |
| 71 UMA_EVENT_VIEW_TEXT_CHANGED = 25, |
| 72 UMA_EVENT_VIEW_TEXT_SELECTION_CHANGED = 26, |
| 73 UMA_EVENT_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 27, |
| 74 UMA_EVENT_WINDOWS_CHANGED = 28, |
| 75 UMA_EVENT_WINDOW_CONTENT_CHANGED = 29, |
| 76 UMA_EVENT_WINDOW_STATE_CHANGED = 30, |
| 77 UMA_FEEDBACK_AUDIBLE = 31, |
| 78 UMA_FEEDBACK_BRAILLE = 32, |
| 79 UMA_FEEDBACK_GENERIC = 33, |
| 80 UMA_FEEDBACK_HAPTIC = 34, |
| 81 UMA_FEEDBACK_SPOKEN = 35, |
| 82 UMA_FEEDBACK_VISUAL = 36, |
| 83 UMA_FLAG_FORCE_DIRECT_BOOT_AWARE = 37, |
| 84 UMA_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 38, |
| 85 UMA_FLAG_REPORT_VIEW_IDS = 39, |
| 86 UMA_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 40, |
| 87 UMA_FLAG_REQUEST_FILTER_KEY_EVENTS = 41, |
| 88 UMA_FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 42, |
| 89 UMA_FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 43, |
| 90 |
| 91 // This must always be the last enum. It's okay for its value to |
| 92 // increase, but none of the other enum values may change. |
| 93 UMA_ACCESSIBILITYSERVICEINFO_MAX |
| 94 }; |
| 95 |
| 96 // These are constants from |
| 97 // android.view.accessibility.AccessibilityEvent in Java. |
| 98 // |
| 99 // If you add a new constant, add a new UMA enum above and add a line |
| 100 // to CollectStats(), below. |
| 101 enum { |
| 102 ACCESSIBILITYEVENT_TYPE_VIEW_CLICKED = 0x00000001, |
| 103 ACCESSIBILITYEVENT_TYPE_VIEW_LONG_CLICKED = 0x00000002, |
| 104 ACCESSIBILITYEVENT_TYPE_VIEW_SELECTED = 0x00000004, |
| 105 ACCESSIBILITYEVENT_TYPE_VIEW_FOCUSED = 0x00000008, |
| 106 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_CHANGED = 0x00000010, |
| 107 ACCESSIBILITYEVENT_TYPE_WINDOW_STATE_CHANGED = 0x00000020, |
| 108 ACCESSIBILITYEVENT_TYPE_NOTIFICATION_STATE_CHANGED = 0x00000040, |
| 109 ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_ENTER = 0x00000080, |
| 110 ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_EXIT = 0x00000100, |
| 111 ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200, |
| 112 ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400, |
| 113 ACCESSIBILITYEVENT_TYPE_WINDOW_CONTENT_CHANGED = 0x00000800, |
| 114 ACCESSIBILITYEVENT_TYPE_VIEW_SCROLLED = 0x00001000, |
| 115 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000, |
| 116 ACCESSIBILITYEVENT_TYPE_ANNOUNCEMENT = 0x00004000, |
| 117 ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x00008000, |
| 118 ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000, |
| 119 ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = |
| 120 0x00020000, |
| 121 ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_START = 0x00040000, |
| 122 ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_END = 0x00080000, |
| 123 ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_START = 0x00100000, |
| 124 ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_END = 0x00200000, |
| 125 ACCESSIBILITYEVENT_TYPE_WINDOWS_CHANGED = 0x00400000, |
| 126 ACCESSIBILITYEVENT_TYPE_VIEW_CONTEXT_CLICKED = 0x00800000, |
| 127 ACCESSIBILITYEVENT_TYPE_ASSIST_READING_CONTEXT = 0x01000000, |
| 128 }; |
| 129 |
| 130 // These are constants from |
| 131 // android.accessibilityservice.AccessibilityServiceInfo in Java: |
| 132 // |
| 133 // If you add a new constant, add a new UMA enum above and add a line |
| 134 // to CollectStats(), below. |
| 135 enum { |
| 136 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 0x00000001, |
| 137 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = |
| 138 0x00000002, |
| 139 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = |
| 140 0x00000004, |
| 141 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = |
| 142 0x00000008, |
| 143 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0x00000010, |
| 144 ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_PERFORM_GESTURES = 0x00000020, |
| 145 ACCESSIBILITYSERVICEINFO_FEEDBACK_SPOKEN = 0x0000001, |
| 146 ACCESSIBILITYSERVICEINFO_FEEDBACK_HAPTIC = 0x0000002, |
| 147 ACCESSIBILITYSERVICEINFO_FEEDBACK_AUDIBLE = 0x0000004, |
| 148 ACCESSIBILITYSERVICEINFO_FEEDBACK_VISUAL = 0x0000008, |
| 149 ACCESSIBILITYSERVICEINFO_FEEDBACK_GENERIC = 0x0000010, |
| 150 ACCESSIBILITYSERVICEINFO_FEEDBACK_BRAILLE = 0x0000020, |
| 151 ACCESSIBILITYSERVICEINFO_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x0000002, |
| 152 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 0x0000004, |
| 153 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000008, |
| 154 ACCESSIBILITYSERVICEINFO_FLAG_REPORT_VIEW_IDS = 0x00000010, |
| 155 ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_FILTER_KEY_EVENTS = 0x00000020, |
| 156 ACCESSIBILITYSERVICEINFO_FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040, |
| 157 ACCESSIBILITYSERVICEINFO_FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000, |
| 158 }; |
| 159 |
| 160 // These macros simplify recording a histogram based on information we get |
| 161 // from an AccessibilityService. There are four bitmasks of information |
| 162 // we get from each AccessibilityService, and for each possible bit mask |
| 163 // corresponding to one flag, we want to check if that flag is set, and if |
| 164 // so, record the corresponding histogram. |
| 165 // |
| 166 // Doing this with macros reduces the chance for human error by |
| 167 // recording the wrong histogram for the wrong flag. |
| 168 // |
| 169 // These macros are used by CollectStats(), below. |
| 170 #define EVENT_TYPE_HISTOGRAM(event_type_mask, event_type) \ |
| 171 if (event_type_mask & ACCESSIBILITYEVENT_TYPE_##event_type) \ |
| 172 UMA_HISTOGRAM_ENUMERATION("Accessibility.AndroidServiceInfo", \ |
| 173 UMA_EVENT_##event_type, \ |
| 174 UMA_ACCESSIBILITYSERVICEINFO_MAX) |
| 175 #define FLAGS_HISTOGRAM(flags_mask, flag) \ |
| 176 if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_##flag) \ |
| 177 UMA_HISTOGRAM_ENUMERATION("Accessibility.AndroidServiceInfo", \ |
| 178 UMA_FLAG_##flag, UMA_ACCESSIBILITYSERVICEINFO_MAX) |
| 179 #define FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, feedback_type) \ |
| 180 if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_##feedback_type) \ |
| 181 UMA_HISTOGRAM_ENUMERATION("Accessibility.AndroidServiceInfo", \ |
| 182 UMA_FEEDBACK_##feedback_type, \ |
| 183 UMA_ACCESSIBILITYSERVICEINFO_MAX) |
| 184 #define CAPABILITY_TYPE_HISTOGRAM(capability_type_mask, capability_type) \ |
| 185 if (capability_type_mask & \ |
| 186 ACCESSIBILITYSERVICEINFO_CAPABILITY_##capability_type) \ |
| 187 UMA_HISTOGRAM_ENUMERATION("Accessibility.AndroidServiceInfo", \ |
| 188 UMA_CAPABILITY_##capability_type, \ |
| 189 UMA_ACCESSIBILITYSERVICEINFO_MAX) |
| 190 |
34 using SearchKeyToPredicateMap = | 191 using SearchKeyToPredicateMap = |
35 base::hash_map<base::string16, AccessibilityMatchPredicate>; | 192 base::hash_map<base::string16, AccessibilityMatchPredicate>; |
36 base::LazyInstance<SearchKeyToPredicateMap>::DestructorAtExit | 193 base::LazyInstance<SearchKeyToPredicateMap>::DestructorAtExit |
37 g_search_key_to_predicate_map = LAZY_INSTANCE_INITIALIZER; | 194 g_search_key_to_predicate_map = LAZY_INSTANCE_INITIALIZER; |
38 base::LazyInstance<base::string16>::DestructorAtExit g_all_search_keys = | 195 base::LazyInstance<base::string16>::DestructorAtExit g_all_search_keys = |
39 LAZY_INSTANCE_INITIALIZER; | 196 LAZY_INSTANCE_INITIALIZER; |
40 | 197 |
41 bool SectionPredicate( | 198 bool SectionPredicate( |
42 BrowserAccessibility* start, BrowserAccessibility* node) { | 199 BrowserAccessibility* start, BrowserAccessibility* node) { |
43 switch (node->GetRole()) { | 200 switch (node->GetRole()) { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 | 320 |
164 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid( | 321 BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid( |
165 ScopedJavaLocalRef<jobject> content_view_core, | 322 ScopedJavaLocalRef<jobject> content_view_core, |
166 const ui::AXTreeUpdate& initial_tree, | 323 const ui::AXTreeUpdate& initial_tree, |
167 BrowserAccessibilityDelegate* delegate, | 324 BrowserAccessibilityDelegate* delegate, |
168 BrowserAccessibilityFactory* factory) | 325 BrowserAccessibilityFactory* factory) |
169 : BrowserAccessibilityManager(delegate, factory), | 326 : BrowserAccessibilityManager(delegate, factory), |
170 prune_tree_for_screen_reader_(true) { | 327 prune_tree_for_screen_reader_(true) { |
171 Initialize(initial_tree); | 328 Initialize(initial_tree); |
172 SetContentViewCore(content_view_core); | 329 SetContentViewCore(content_view_core); |
| 330 |
| 331 // TODO(dmazzoni): get rid of the use of this class by |
| 332 // AXTreeSnapshotCallback so that content_view_core is always valid. |
| 333 if (!content_view_core.is_null()) |
| 334 CollectStats(); |
173 } | 335 } |
174 | 336 |
175 BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() { | 337 BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() { |
176 JNIEnv* env = AttachCurrentThread(); | 338 JNIEnv* env = AttachCurrentThread(); |
177 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager(); | 339 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager(); |
178 if (obj.is_null()) | 340 if (obj.is_null()) |
179 return; | 341 return; |
180 | 342 |
181 // Clean up autofill popup proxy node in case the popup was not dismissed. | 343 // Clean up autofill popup proxy node in case the popup was not dismissed. |
182 DeleteAutofillPopupProxy(); | 344 DeleteAutofillPopupProxy(); |
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1100 BrowserAccessibilityManagerAndroid* root_manager = | 1262 BrowserAccessibilityManagerAndroid* root_manager = |
1101 static_cast<BrowserAccessibilityManagerAndroid*>( | 1263 static_cast<BrowserAccessibilityManagerAndroid*>( |
1102 GetRootManager()); | 1264 GetRootManager()); |
1103 if (!root_manager) | 1265 if (!root_manager) |
1104 return ScopedJavaLocalRef<jobject>(); | 1266 return ScopedJavaLocalRef<jobject>(); |
1105 | 1267 |
1106 JNIEnv* env = AttachCurrentThread(); | 1268 JNIEnv* env = AttachCurrentThread(); |
1107 return root_manager->java_ref().get(env); | 1269 return root_manager->java_ref().get(env); |
1108 } | 1270 } |
1109 | 1271 |
| 1272 void BrowserAccessibilityManagerAndroid::CollectStats() { |
| 1273 JNIEnv* env = AttachCurrentThread(); |
| 1274 ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager(); |
| 1275 if (obj.is_null()) |
| 1276 return; |
| 1277 |
| 1278 int event_type_mask = |
| 1279 Java_BrowserAccessibilityManager_getAccessibilityServiceEventTypeMask( |
| 1280 env, obj); |
| 1281 EVENT_TYPE_HISTOGRAM(event_type_mask, ANNOUNCEMENT); |
| 1282 EVENT_TYPE_HISTOGRAM(event_type_mask, ASSIST_READING_CONTEXT); |
| 1283 EVENT_TYPE_HISTOGRAM(event_type_mask, GESTURE_DETECTION_END); |
| 1284 EVENT_TYPE_HISTOGRAM(event_type_mask, GESTURE_DETECTION_START); |
| 1285 EVENT_TYPE_HISTOGRAM(event_type_mask, NOTIFICATION_STATE_CHANGED); |
| 1286 EVENT_TYPE_HISTOGRAM(event_type_mask, TOUCH_EXPLORATION_GESTURE_END); |
| 1287 EVENT_TYPE_HISTOGRAM(event_type_mask, TOUCH_EXPLORATION_GESTURE_START); |
| 1288 EVENT_TYPE_HISTOGRAM(event_type_mask, TOUCH_INTERACTION_END); |
| 1289 EVENT_TYPE_HISTOGRAM(event_type_mask, TOUCH_INTERACTION_START); |
| 1290 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_ACCESSIBILITY_FOCUSED); |
| 1291 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_ACCESSIBILITY_FOCUS_CLEARED); |
| 1292 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_CLICKED); |
| 1293 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_CONTEXT_CLICKED); |
| 1294 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_FOCUSED); |
| 1295 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_HOVER_ENTER); |
| 1296 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_HOVER_EXIT); |
| 1297 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_LONG_CLICKED); |
| 1298 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_SCROLLED); |
| 1299 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_SELECTED); |
| 1300 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_TEXT_CHANGED); |
| 1301 EVENT_TYPE_HISTOGRAM(event_type_mask, VIEW_TEXT_SELECTION_CHANGED); |
| 1302 EVENT_TYPE_HISTOGRAM(event_type_mask, |
| 1303 VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY); |
| 1304 EVENT_TYPE_HISTOGRAM(event_type_mask, WINDOWS_CHANGED); |
| 1305 EVENT_TYPE_HISTOGRAM(event_type_mask, WINDOW_CONTENT_CHANGED); |
| 1306 EVENT_TYPE_HISTOGRAM(event_type_mask, WINDOW_STATE_CHANGED); |
| 1307 |
| 1308 int feedback_type_mask = |
| 1309 Java_BrowserAccessibilityManager_getAccessibilityServiceFeedbackTypeMask( |
| 1310 env, obj); |
| 1311 FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, SPOKEN); |
| 1312 FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, HAPTIC); |
| 1313 FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, AUDIBLE); |
| 1314 FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, VISUAL); |
| 1315 FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, GENERIC); |
| 1316 FEEDBACK_TYPE_HISTOGRAM(feedback_type_mask, BRAILLE); |
| 1317 |
| 1318 int flags_mask = |
| 1319 Java_BrowserAccessibilityManager_getAccessibilityServiceFlagsMask(env, |
| 1320 obj); |
| 1321 FLAGS_HISTOGRAM(flags_mask, INCLUDE_NOT_IMPORTANT_VIEWS); |
| 1322 FLAGS_HISTOGRAM(flags_mask, REQUEST_TOUCH_EXPLORATION_MODE); |
| 1323 FLAGS_HISTOGRAM(flags_mask, REQUEST_ENHANCED_WEB_ACCESSIBILITY); |
| 1324 FLAGS_HISTOGRAM(flags_mask, REPORT_VIEW_IDS); |
| 1325 FLAGS_HISTOGRAM(flags_mask, REQUEST_FILTER_KEY_EVENTS); |
| 1326 FLAGS_HISTOGRAM(flags_mask, RETRIEVE_INTERACTIVE_WINDOWS); |
| 1327 FLAGS_HISTOGRAM(flags_mask, FORCE_DIRECT_BOOT_AWARE); |
| 1328 |
| 1329 int capabilities_mask = |
| 1330 Java_BrowserAccessibilityManager_getAccessibilityServiceCapabilitiesMask( |
| 1331 env, obj); |
| 1332 CAPABILITY_TYPE_HISTOGRAM(capabilities_mask, CAN_RETRIEVE_WINDOW_CONTENT); |
| 1333 CAPABILITY_TYPE_HISTOGRAM(capabilities_mask, CAN_REQUEST_TOUCH_EXPLORATION); |
| 1334 CAPABILITY_TYPE_HISTOGRAM(capabilities_mask, |
| 1335 CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY); |
| 1336 CAPABILITY_TYPE_HISTOGRAM(capabilities_mask, CAN_REQUEST_FILTER_KEY_EVENTS); |
| 1337 CAPABILITY_TYPE_HISTOGRAM(capabilities_mask, CAN_CONTROL_MAGNIFICATION); |
| 1338 CAPABILITY_TYPE_HISTOGRAM(capabilities_mask, CAN_PERFORM_GESTURES); |
| 1339 } |
| 1340 |
1110 bool RegisterBrowserAccessibilityManager(JNIEnv* env) { | 1341 bool RegisterBrowserAccessibilityManager(JNIEnv* env) { |
1111 return RegisterNativesImpl(env); | 1342 return RegisterNativesImpl(env); |
1112 } | 1343 } |
1113 | 1344 |
1114 } // namespace content | 1345 } // namespace content |
OLD | NEW |