Chromium Code Reviews| 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 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |