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 have been chosen to | |
Mark P
2017/05/31 23:35:02
nit: "have been chosen to" -> "must"
dmazzoni
2017/06/01 18:47:05
Done.
| |
41 // correspond with the names of constants from AccessibilityEvent and | |
42 // AccessibilityServiceInfo, defined below. For example, | |
43 // UMA_EVENT_ANNOUNCEMENT corresponds to ACCESSIBILITYEVENT_TYPE_ANNOUNCEMENT | |
44 // via the macro 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 and add a line | |
Mark P
2017/05/31 23:35:02
nit: add "above" before "and"
ditto
dmazzoni
2017/06/01 18:47:05
Done.
| |
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 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 |