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

Unified 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, 7 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/browser_accessibility_manager_android.cc
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc
index 973257a8642f658236cdc9c598ff7f1e7af58e0d..79be68dc5539d18ce1cad84f18c2027633db4751 100644
--- a/content/browser/accessibility/browser_accessibility_manager_android.cc
+++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -12,6 +12,8 @@
#include "base/android/jni_string.h"
#include "base/feature_list.h"
#include "base/i18n/char_iterator.h"
+#include "base/macros.h"
+#include "base/metrics/histogram_macros.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
@@ -31,6 +33,122 @@ namespace content {
namespace {
+// IMPORTANT!
+// These values are written to logs. Do not renumber or delete
+// existing items; add new entries to the end of the list.
+enum {
+ UMA_CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0,
+ UMA_CAPABILITY_CAN_PERFORM_GESTURES = 1,
+ UMA_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 2,
+ UMA_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 3,
+ UMA_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 4,
+ UMA_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 5,
+ UMA_EVENT_ANNOUNCEMENT = 6,
+ UMA_EVENT_ASSIST_READING_CONTEXT = 7,
+ UMA_EVENT_GESTURE_DETECTION_END = 8,
+ UMA_EVENT_GESTURE_DETECTION_START = 9,
+ UMA_EVENT_NOTIFICATION_STATE_CHANGED = 10,
+ UMA_EVENT_TOUCH_EXPLORATION_GESTURE_END = 11,
+ UMA_EVENT_TOUCH_EXPLORATION_GESTURE_START = 12,
+ UMA_EVENT_TOUCH_INTERACTION_END = 13,
+ UMA_EVENT_TOUCH_INTERACTION_START = 14,
+ UMA_EVENT_VIEW_ACCESSIBILITY_FOCUSED = 15,
+ UMA_EVENT_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 16,
+ UMA_EVENT_VIEW_CLICKED = 17,
+ UMA_EVENT_VIEW_CONTEXT_CLICKED = 18,
+ UMA_EVENT_VIEW_FOCUSED = 19,
+ UMA_EVENT_VIEW_HOVER_ENTER = 20,
+ UMA_EVENT_VIEW_HOVER_EXIT = 21,
+ UMA_EVENT_VIEW_LONG_CLICKED = 22,
+ UMA_EVENT_VIEW_SCROLLED = 23,
+ UMA_EVENT_VIEW_SELECTED = 24,
+ UMA_EVENT_VIEW_TEXT_CHANGED = 25,
+ UMA_EVENT_VIEW_TEXT_SELECTION_CHANGED = 26,
+ UMA_EVENT_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 27,
+ UMA_EVENT_WINDOWS_CHANGED = 28,
+ UMA_EVENT_WINDOW_CONTENT_CHANGED = 29,
+ UMA_EVENT_WINDOW_STATE_CHANGED = 30,
+ UMA_FEEDBACK_AUDIBLE = 31,
+ UMA_FEEDBACK_BRAILLE = 32,
+ UMA_FEEDBACK_GENERIC = 33,
+ UMA_FEEDBACK_HAPTIC = 34,
+ UMA_FEEDBACK_SPOKEN = 35,
+ UMA_FEEDBACK_VISUAL = 36,
+ UMA_FLAG_FORCE_DIRECT_BOOT_AWARE = 37,
+ UMA_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 38,
+ UMA_FLAG_REPORT_VIEW_IDS = 39,
+ UMA_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 40,
+ UMA_FLAG_REQUEST_FILTER_KEY_EVENTS = 41,
+ UMA_FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 42,
+ UMA_FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 43,
+
+ // This must always be the last enum. It's okay for its value to
+ // increase, but none of the other enum values may change.
+ UMA_ACCESSIBILITYSERVICEINFO_MAX
+};
+
+#define ACCESSIBILITY_SERVICE_HISTOGRAM(enum_value) \
+ UMA_HISTOGRAM_ENUMERATION("Accessibility.AndroidServiceInfo", enum_value, \
+ UMA_ACCESSIBILITYSERVICEINFO_MAX)
+
+// These are constants from
+// android.view.accessibility.AccessibilityEvent in Java:
+enum {
+ ACCESSIBILITYEVENT_TYPE_ANNOUNCEMENT = 0x00004000,
+ ACCESSIBILITYEVENT_TYPE_ASSIST_READING_CONTEXT = 0x01000000,
+ ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_END = 0x00080000,
+ ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_START = 0x00040000,
+ ACCESSIBILITYEVENT_TYPE_NOTIFICATION_STATE_CHANGED = 0x00000040,
+ ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_END = 0x00000400,
+ ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_START = 0x00000200,
+ ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_END = 0x00200000,
+ ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_START = 0x00100000,
+ ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUSED = 0x00008000,
+ ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 0x00010000,
+ ACCESSIBILITYEVENT_TYPE_VIEW_CLICKED = 0x00000001,
+ ACCESSIBILITYEVENT_TYPE_VIEW_CONTEXT_CLICKED = 0x00800000,
+ ACCESSIBILITYEVENT_TYPE_VIEW_FOCUSED = 0x00000008,
+ ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_ENTER = 0x00000080,
+ ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_EXIT = 0x00000100,
+ ACCESSIBILITYEVENT_TYPE_VIEW_LONG_CLICKED = 0x00000002,
+ ACCESSIBILITYEVENT_TYPE_VIEW_SCROLLED = 0x00001000,
+ ACCESSIBILITYEVENT_TYPE_VIEW_SELECTED = 0x00000004,
+ ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_CHANGED = 0x00000010,
+ ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_SELECTION_CHANGED = 0x00002000,
+ ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY =
+ 0x00020000,
+ ACCESSIBILITYEVENT_TYPE_WINDOWS_CHANGED = 0x00400000,
+ ACCESSIBILITYEVENT_TYPE_WINDOW_CONTENT_CHANGED = 0x00000800,
+ ACCESSIBILITYEVENT_TYPE_WINDOW_STATE_CHANGED = 0x00000020
+};
+
+// These are constants from
+// android.accessibilityservice.AccessibilityServiceInfo in Java:
+enum {
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 0x00000001,
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION =
+ 0x00000002,
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY =
+ 0x00000004,
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS =
+ 0x00000008,
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_CONTROL_MAGNIFICATION = 0x00000010,
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_PERFORM_GESTURES = 0x00000020,
+ ACCESSIBILITYSERVICEINFO_FEEDBACK_SPOKEN = 0x0000001,
+ ACCESSIBILITYSERVICEINFO_FEEDBACK_HAPTIC = 0x0000002,
+ ACCESSIBILITYSERVICEINFO_FEEDBACK_AUDIBLE = 0x0000004,
+ ACCESSIBILITYSERVICEINFO_FEEDBACK_VISUAL = 0x0000008,
+ ACCESSIBILITYSERVICEINFO_FEEDBACK_GENERIC = 0x0000010,
+ ACCESSIBILITYSERVICEINFO_FEEDBACK_BRAILLE = 0x0000020,
+ ACCESSIBILITYSERVICEINFO_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 0x0000002,
+ ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 0x0000004,
+ ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 0x00000008,
+ ACCESSIBILITYSERVICEINFO_FLAG_REPORT_VIEW_IDS = 0x00000010,
+ ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_FILTER_KEY_EVENTS = 0x00000020,
+ ACCESSIBILITYSERVICEINFO_FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040,
+ ACCESSIBILITYSERVICEINFO_FLAG_FORCE_DIRECT_BOOT_AWARE = 0x00010000,
+};
+
using SearchKeyToPredicateMap =
base::hash_map<base::string16, AccessibilityMatchPredicate>;
base::LazyInstance<SearchKeyToPredicateMap>::DestructorAtExit
@@ -170,6 +288,7 @@ BrowserAccessibilityManagerAndroid::BrowserAccessibilityManagerAndroid(
prune_tree_for_screen_reader_(true) {
Initialize(initial_tree);
SetContentViewCore(content_view_core);
+ CollectStats();
}
BrowserAccessibilityManagerAndroid::~BrowserAccessibilityManagerAndroid() {
@@ -1107,6 +1226,138 @@ BrowserAccessibilityManagerAndroid::GetJavaRefFromRootManager() {
return root_manager->java_ref().get(env);
}
+void BrowserAccessibilityManagerAndroid::CollectStats() {
+ 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
+
+ if (stats_collected)
+ return;
+
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = GetJavaRefFromRootManager();
+ if (obj.is_null())
+ return;
+
+ int event_type_mask =
+ Java_BrowserAccessibilityManager_getAccessibilityServiceEventTypeMask(
+ env, obj);
+ 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.
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_ANNOUNCEMENT);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_ASSIST_READING_CONTEXT)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_ASSIST_READING_CONTEXT);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_END)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_GESTURE_DETECTION_END);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_GESTURE_DETECTION_START)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_GESTURE_DETECTION_START);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_NOTIFICATION_STATE_CHANGED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_NOTIFICATION_STATE_CHANGED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_END)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_EXPLORATION_GESTURE_END);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_EXPLORATION_GESTURE_START)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_EXPLORATION_GESTURE_START);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_END)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_INTERACTION_END);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_TOUCH_INTERACTION_START)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_TOUCH_INTERACTION_START);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUSED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_ACCESSIBILITY_FOCUSED);
+ if (event_type_mask &
+ ACCESSIBILITYEVENT_TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_CLICKED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_CLICKED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_CONTEXT_CLICKED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_CONTEXT_CLICKED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_FOCUSED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_FOCUSED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_ENTER)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_HOVER_ENTER);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_HOVER_EXIT)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_HOVER_EXIT);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_LONG_CLICKED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_LONG_CLICKED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_SCROLLED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_SCROLLED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_SELECTED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_SELECTED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_CHANGED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_TEXT_CHANGED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_SELECTION_CHANGED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_VIEW_TEXT_SELECTION_CHANGED);
+ if (event_type_mask &
+ ACCESSIBILITYEVENT_TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(
+ UMA_EVENT_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_WINDOWS_CHANGED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_WINDOWS_CHANGED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_WINDOW_CONTENT_CHANGED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_WINDOW_CONTENT_CHANGED);
+ if (event_type_mask & ACCESSIBILITYEVENT_TYPE_WINDOW_STATE_CHANGED)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_EVENT_WINDOW_STATE_CHANGED);
+
+ int feedback_type_mask =
+ Java_BrowserAccessibilityManager_getAccessibilityServiceFeedbackTypeMask(
+ env, obj);
+ if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_SPOKEN)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_SPOKEN);
+ if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_HAPTIC)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_HAPTIC);
+ if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_AUDIBLE)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_AUDIBLE);
+ if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_VISUAL)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_VISUAL);
+ if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_GENERIC)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_GENERIC);
+ if (feedback_type_mask & ACCESSIBILITYSERVICEINFO_FEEDBACK_BRAILLE)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FEEDBACK_BRAILLE);
+
+ int flags_mask =
+ Java_BrowserAccessibilityManager_getAccessibilityServiceFlagsMask(env,
+ obj);
+ if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS);
+ if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_TOUCH_EXPLORATION_MODE)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_REQUEST_TOUCH_EXPLORATION_MODE);
+ if (flags_mask &
+ ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(
+ UMA_FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY);
+ if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_REPORT_VIEW_IDS)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_REPORT_VIEW_IDS);
+ if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_REQUEST_FILTER_KEY_EVENTS)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_REQUEST_FILTER_KEY_EVENTS);
+ if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_RETRIEVE_INTERACTIVE_WINDOWS)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_RETRIEVE_INTERACTIVE_WINDOWS);
+ if (flags_mask & ACCESSIBILITYSERVICEINFO_FLAG_FORCE_DIRECT_BOOT_AWARE)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_FLAG_FORCE_DIRECT_BOOT_AWARE);
+
+ int capabilities_mask =
+ Java_BrowserAccessibilityManager_getAccessibilityServiceCapabilitiesMask(
+ env, obj);
+ if (capabilities_mask &
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT);
+ if (capabilities_mask &
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(
+ UMA_CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION);
+ if (capabilities_mask &
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(
+ UMA_CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY);
+ if (capabilities_mask &
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(
+ UMA_CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS);
+ if (capabilities_mask &
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_CONTROL_MAGNIFICATION)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_CAPABILITY_CAN_CONTROL_MAGNIFICATION);
+ if (capabilities_mask &
+ ACCESSIBILITYSERVICEINFO_CAPABILITY_CAN_PERFORM_GESTURES)
+ ACCESSIBILITY_SERVICE_HISTOGRAM(UMA_CAPABILITY_CAN_PERFORM_GESTURES);
+
+ stats_collected = true;
+}
+
bool RegisterBrowserAccessibilityManager(JNIEnv* env) {
return RegisterNativesImpl(env);
}

Powered by Google App Engine
This is Rietveld 408576698