Metrics for unique users of key assistive technologies

Accessibility metrics are fired once, 45 seconds after startup.
However, UMA counts unique users on a daily basis.

This means that the metrics system is only counting 1/2 of users who don't
relaunch their browser in a 2 day period. Or 1/3 of users who don't
relaunch for 3 days, etc.

Adding the following *.EveryReport alternate histogram names for
histograms that fire more often. These can be used with the unique
users aggregation option when viewing metrics:
Accessibility.CrosSpokenFeedback.EveryReport
Accessibility.Android.ScreenReader.EveryReport,
Accessibility.Mac.ScreenReader.EveryReport,
Accessibility.WinScreenReader2.EveryReport,
Accessibility.WinJAWS.EveryReport
Accessibility.WinNVDA.EveryReport
Accessibility.WinZoomText.EveryReport

(cherry picked from commit 81ce2bd7582c2ea1e75969905d02dcaa636e36b1)

Bug: 988502
Change-Id: I0b29dc35615668aafb7e873e574c1ba7ae280ead
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1724698
Commit-Queue: Aaron Leventhal <[email protected]>
Reviewed-by: Jesse Doherty <[email protected]>
Reviewed-by: Nektarios Paisios <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#682971}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1746847
Reviewed-by: Aaron Leventhal <[email protected]>
Cr-Commit-Position: refs/branch-heads/3865@{#309}
Cr-Branched-From: 0cdcc6158160790658d1f033d3db873603250124-refs/heads/master@{#681094}
diff --git a/chrome/browser/metrics/DEPS b/chrome/browser/metrics/DEPS
index b19aa9b..e945fac 100644
--- a/chrome/browser/metrics/DEPS
+++ b/chrome/browser/metrics/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+chrome/services/util_win/util_win_impl.h",
+  "+content/browser/accessibility/accessibility_metrics_provider.h",
 ]
 
 specific_include_rules = {
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc
index 19f0c4f7..61490caf 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -95,6 +95,7 @@
 #include "components/sync_device_info/device_count_metrics_provider.h"
 #include "components/ukm/ukm_service.h"
 #include "components/version_info/version_info.h"
+#include "content/browser/accessibility/accessibility_metrics_provider.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/histogram_fetcher.h"
@@ -759,6 +760,9 @@
   metrics_service_->RegisterMetricsProvider(
       SigninStatusMetricsProvider::CreateInstance(
           std::make_unique<ChromeSigninStatusMetricsProviderDelegate>()));
+  // ChromeOS uses ChromeOSMetricsProvider for accessibility metrics provider.
+  metrics_service_->RegisterMetricsProvider(
+      std::make_unique<AccessibilityMetricsProvider>());
 #endif  // !defined(OS_CHROMEOS)
 
   metrics_service_->RegisterMetricsProvider(
diff --git a/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc b/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
index 14d206f1..a700c30 100644
--- a/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
+++ b/chrome/browser/metrics/chrome_metrics_service_client_unittest.cc
@@ -189,7 +189,8 @@
 
 #if !defined(OS_CHROMEOS)
   // ChromeSigninStatusMetricsProvider (for non ChromeOS).
-  expected_providers++;
+  // AccessibilityMetricsProvider
+  expected_providers += 2;
 #endif  // !defined(OS_CHROMEOS)
 
 #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
diff --git a/chrome/browser/metrics/chromeos_metrics_provider.cc b/chrome/browser/metrics/chromeos_metrics_provider.cc
index 31db84b..b520f5f 100644
--- a/chrome/browser/metrics/chromeos_metrics_provider.cc
+++ b/chrome/browser/metrics/chromeos_metrics_provider.cc
@@ -8,6 +8,7 @@
 #include <string>
 #include <vector>
 
+#include "ash/public/cpp/ash_pref_names.h"
 #include "base/barrier_closure.h"
 #include "base/bind.h"
 #include "base/callback_helpers.h"
@@ -251,6 +252,14 @@
   }
 }
 
+void ChromeOSMetricsProvider::ProvideAccessibilityMetrics() {
+  PrefService* pref = g_browser_process->local_state();
+  bool is_spoken_feedback_enabled =
+      pref->GetBoolean(ash::prefs::kAccessibilitySpokenFeedbackEnabled);
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.CrosSpokenFeedback.EveryReport",
+                        is_spoken_feedback_enabled);
+}
+
 void ChromeOSMetricsProvider::ProvideStabilityMetrics(
     metrics::SystemProfileProto* system_profile_proto) {
   metrics::SystemProfileProto::Stability* stability_proto =
@@ -286,6 +295,7 @@
 
 void ChromeOSMetricsProvider::ProvideCurrentSessionData(
     metrics::ChromeUserMetricsExtension* uma_proto) {
+  ProvideAccessibilityMetrics();
   ProvideStabilityMetrics(uma_proto->mutable_system_profile());
   std::vector<SampledProfile> sampled_profiles;
   if (profile_provider_->GetSampledProfiles(&sampled_profiles)) {
diff --git a/chrome/browser/metrics/chromeos_metrics_provider.h b/chrome/browser/metrics/chromeos_metrics_provider.h
index 5f7a7824..0a7c8b4c 100644
--- a/chrome/browser/metrics/chromeos_metrics_provider.h
+++ b/chrome/browser/metrics/chromeos_metrics_provider.h
@@ -82,6 +82,8 @@
       metrics::ChromeUserMetricsExtension* uma_proto) override;
 
  private:
+  void ProvideAccessibilityMetrics();
+
   // Update the number of users logged into a multi-profile session.
   // If the number of users change while the log is open, the call invalidates
   // the user count value.
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index f46547c..aff5de7 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -2615,6 +2615,12 @@
       "//chromeos/network",
       "//components/session_manager/core",
     ]
+  } else {
+    sources += [
+      # ChromeOS accessibility metrics provider is in chromeos_metrics_provider.
+      "accessibility/accessibility_metrics_provider.cc",
+      "accessibility/accessibility_metrics_provider.h",
+    ]
   }
 
   if (enable_cros_libassistant) {
diff --git a/content/browser/accessibility/accessibility_metrics_provider.cc b/content/browser/accessibility/accessibility_metrics_provider.cc
new file mode 100644
index 0000000..22a0945
--- /dev/null
+++ b/content/browser/accessibility/accessibility_metrics_provider.cc
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/accessibility/accessibility_metrics_provider.h"
+
+#include "content/browser/accessibility/browser_accessibility_state_impl.h"
+
+AccessibilityMetricsProvider::AccessibilityMetricsProvider() {}
+
+AccessibilityMetricsProvider::~AccessibilityMetricsProvider() {}
+
+void AccessibilityMetricsProvider::ProvideCurrentSessionData(
+    metrics::ChromeUserMetricsExtension* uma_proto) {
+  content::BrowserAccessibilityStateImpl::GetInstance()
+      ->UpdateUniqueUserHistograms();
+}
diff --git a/content/browser/accessibility/accessibility_metrics_provider.h b/content/browser/accessibility/accessibility_metrics_provider.h
new file mode 100644
index 0000000..944a557
--- /dev/null
+++ b/content/browser/accessibility/accessibility_metrics_provider.h
@@ -0,0 +1,33 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_METRICS_PROVIDER_H_
+#define CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_METRICS_PROVIDER_H_
+
+#include "components/metrics/metrics_provider.h"
+#include "content/common/content_export.h"
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// AccessibilityMetricsProvider
+//
+// A class used to provide frequent signals for AT or accessibility usage
+// histograms on Win, Mac and Android, enable accurate counting of unique users.
+//
+////////////////////////////////////////////////////////////////////////////////
+class CONTENT_EXPORT AccessibilityMetricsProvider
+    : public metrics::MetricsProvider {
+ public:
+  AccessibilityMetricsProvider();
+  ~AccessibilityMetricsProvider() override;
+
+  // MetricsProvider:
+  void ProvideCurrentSessionData(
+      metrics::ChromeUserMetricsExtension* uma_proto) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(AccessibilityMetricsProvider);
+};
+
+#endif  // CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_METRICS_PROVIDER_H_
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.cc b/content/browser/accessibility/browser_accessibility_state_impl.cc
index 6a8924b..73a7642 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task/post_task.h"
 #include "build/build_config.h"
@@ -195,6 +196,7 @@
     UpdatePlatformSpecificHistogramsOnUIThread() {}
 void BrowserAccessibilityStateImpl::
     UpdatePlatformSpecificHistogramsOnOtherThread() {}
+void BrowserAccessibilityStateImpl::UpdateUniqueUserHistograms() {}
 #endif
 
 void BrowserAccessibilityStateImpl::AddAccessibilityModeFlags(ui::AXMode mode) {
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.h b/content/browser/accessibility/browser_accessibility_state_impl.h
index 6c60116e..fae609a 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.h
+++ b/content/browser/accessibility/browser_accessibility_state_impl.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/singleton.h"
 #include "build/build_config.h"
+#include "components/metrics/metrics_provider.h"
 #include "content/public/browser/browser_accessibility_state.h"
 #include "ui/accessibility/ax_mode.h"
 #include "ui/accessibility/ax_mode_observer.h"
@@ -65,6 +66,11 @@
   // AXModeObserver
   void OnAXModeAdded(ui::AXMode mode) override;
 
+  // Fire frequent metrics signals to ensure users keeping browser open multiple
+  // days are counted each day, not only at launch. This is necessary, because
+  // UMA only aggregates uniques on a daily basis,
+  void UpdateUniqueUserHistograms();
+
   // Accessibility objects can have the "hot tracked" state set when
   // the mouse is hovering over them, but this makes tests flaky because
   // the test behaves differently when the mouse happens to be over an
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_android.cc b/content/browser/accessibility/browser_accessibility_state_impl_android.cc
index 1a7c52bb..b8c53a6 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl_android.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl_android.cc
@@ -42,6 +42,12 @@
                         mode.has_mode(ui::AXMode::kScreenReader));
 }
 
+void BrowserAccessibilityStateImpl::UpdateUniqueUserHistograms() {
+  ui::AXMode mode = GetAccessibilityMode();
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.Android.ScreenReader.EveryReport",
+                        mode.has_mode(ui::AXMode::kScreenReader));
+}
+
 // static
 void JNI_BrowserAccessibilityState_OnAnimatorDurationScaleChanged(JNIEnv* env) {
   // We need to call into gfx::Animation and WebContentsImpl on the UI thread,
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_mac.mm b/content/browser/accessibility/browser_accessibility_state_impl_mac.mm
index 92601ed..fc61262 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl_mac.mm
+++ b/content/browser/accessibility/browser_accessibility_state_impl_mac.mm
@@ -93,4 +93,10 @@
                         mode.has_mode(ui::AXMode::kScreenReader));
 }
 
+void BrowserAccessibilityStateImpl::UpdateUniqueUserHistograms() {
+  ui::AXMode mode = GetAccessibilityMode();
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.Mac.ScreenReader.EveryReport",
+                        mode.has_mode(ui::AXMode::kScreenReader));
+}
+
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_state_impl_win.cc b/content/browser/accessibility/browser_accessibility_state_impl_win.cc
index 0fd8916..7a1fc8f 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl_win.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl_win.cc
@@ -23,6 +23,10 @@
 
 namespace {
 
+static bool g_jaws = false;
+static bool g_nvda = false;
+static bool g_zoomtext = false;
+
 // Enables accessibility based on three possible clues that indicate
 // accessibility API usage.
 //
@@ -146,31 +150,37 @@
     return;
 
   // Look for DLLs of assistive technology known to work with Chrome.
-  bool jaws = false;
-  bool nvda = false;
-  bool satogo = false;
-  bool zoomtext = false;
   size_t module_count = bytes_required / sizeof(HMODULE);
+  bool satogo = false;  // Very few users -- do not need uniques
   for (size_t i = 0; i < module_count; i++) {
     TCHAR filename[MAX_PATH];
     GetModuleFileName(modules[i], filename, base::size(filename));
     base::string16 module_name(base::FilePath(filename).BaseName().value());
     if (base::LowerCaseEqualsASCII(module_name, "fsdomsrv.dll"))
-      jaws = true;
+      g_jaws = true;
     if (base::LowerCaseEqualsASCII(module_name, "vbufbackend_gecko_ia2.dll") ||
         base::LowerCaseEqualsASCII(module_name, "nvdahelperremote.dll"))
-      nvda = true;
+      g_nvda = true;
     if (base::LowerCaseEqualsASCII(module_name, "stsaw32.dll"))
       satogo = true;
     if (base::LowerCaseEqualsASCII(module_name, "zslhook.dll") ||
         base::LowerCaseEqualsASCII(module_name, "zslhook64.dll"))
-      zoomtext = true;
+      g_zoomtext = true;
   }
 
-  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinJAWS", jaws);
-  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinNVDA", nvda);
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinJAWS", g_jaws);
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinNVDA", g_nvda);
   UMA_HISTOGRAM_BOOLEAN("Accessibility.WinSAToGo", satogo);
-  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinZoomText", zoomtext);
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinZoomText", g_zoomtext);
+}
+
+void BrowserAccessibilityStateImpl::UpdateUniqueUserHistograms() {
+  ui::AXMode mode = GetAccessibilityMode();
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinScreenReader2.EveryReport",
+                        mode.has_mode(ui::AXMode::kScreenReader));
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinJAWS.EveryReport", g_jaws);
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinNVDA.EveryReport", g_nvda);
+  UMA_HISTOGRAM_BOOLEAN("Accessibility.WinZoomText.EveryReport", g_zoomtext);
 }
 
 }  // namespace content
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 0879208..d5626fc1 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -37,7 +37,7 @@
     Tracks whether animations are enabled on Android (e.g. if the animator
     duration scale is non-zero.) The purpose is to inform the design of the
     prefers-reduced-motion media feature; see http://crbug.com/722548. This is
-    checked once, 45 seconds after startup.
+    logged once, 45 seconds after startup.
   </summary>
 </histogram>
 
@@ -49,7 +49,7 @@
     Tracks whether animations are enabled on Android (e.g. if the animator
     duration scale is non-zero.) The purpose is to inform the design of the
     prefers-reduced-motion media feature; see http://crbug.com/722548. This is
-    checked once, 45 seconds after startup.
+    logged once, 45 seconds after startup.
 
     This replaced Accessibility.Android.AnimationsEnabled because the older
     histogram did not capture the default (e.g. no flag) case.
@@ -63,7 +63,9 @@
   <owner>[email protected]</owner>
   <summary>
     Tracks whether a screen reader is enabled on Android (e.g. Talkback). This
-    is checked once, 45 seconds after startup.
+    is checked once, 45 seconds after startup. Note: prefer
+    Accessibility.Android.ScreenReader.EveryReport when querying for unique
+    users, as it is logged more frequently.
   </summary>
 </histogram>
 
@@ -98,7 +100,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether the Chrome OS Accessibility Menu is set to be shown regardless of
-    the state of a11y features.(checked once 45 secs after startup).
+    the state of a11y features.(logged once 45 secs after startup).
   </summary>
 </histogram>
 
@@ -107,7 +109,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Autoclick feature is on (checked once 45 secs after
+    Whether the Chrome OS Autoclick feature is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -137,7 +139,7 @@
 <histogram name="Accessibility.CrosCaretHighlight" enum="BooleanEnabled">
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS caret highlighting is on (checked once 45 secs after
+    Whether the Chrome OS caret highlighting is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -164,7 +166,7 @@
 <histogram name="Accessibility.CrosCursorHighlight" enum="BooleanEnabled">
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS cursor highlighting is on (checked once 45 secs after
+    Whether the Chrome OS cursor highlighting is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -173,8 +175,8 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the ChromeOS dictation feature is enabled (checked once 45 secs
-    after startup).
+    Whether the ChromeOS dictation feature is enabled (logged once 45 secs after
+    startup).
   </summary>
 </histogram>
 
@@ -190,7 +192,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Docked Magnifier feature is on (checked once 45 secs
+    Whether the Chrome OS Docked Magnifier feature is on (logged once 45 secs
     after startup).
   </summary>
 </histogram>
@@ -198,7 +200,7 @@
 <histogram name="Accessibility.CrosFocusHighlight" enum="BooleanEnabled">
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS focus highlighting is on (checked once 45 secs after
+    Whether the Chrome OS focus highlighting is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -207,7 +209,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS High Contrast mode feature is on (checked once 45 secs
+    Whether the Chrome OS High Contrast mode feature is on (logged once 45 secs
     after startup).
   </summary>
 </histogram>
@@ -216,7 +218,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Large Cursor feature is on (checked once 45 secs after
+    Whether the Chrome OS Large Cursor feature is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -225,7 +227,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Cursor size of the Chrome OS Large Cursor (checked once 45 secs after
+    Cursor size of the Chrome OS Large Cursor (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -234,7 +236,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Screen Magnifier feature is on (checked once 45 secs
+    Whether the Chrome OS Screen Magnifier feature is on (logged once 45 secs
     after startup).
   </summary>
 </histogram>
@@ -242,7 +244,7 @@
 <histogram name="Accessibility.CrosSelectToSpeak" enum="BooleanEnabled">
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS select-to-speak is on (checked once 45 secs after
+    Whether the Chrome OS select-to-speak is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -308,9 +310,11 @@
 <histogram name="Accessibility.CrosSpokenFeedback" enum="BooleanEnabled">
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Spoken Feedback feature is on (checked once 45 secs
-    after startup).
+    Whether the Chrome OS Spoken Feedback feature is on (logged once 45 secs
+    after startup). Note: prefer Accessibility.CrosSpokenFeedback.EveryReport
+    when querying for unique users, as it is logged more frequently.
   </summary>
 </histogram>
 
@@ -319,7 +323,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Sticky Keys feature is on (checked once 45 secs after
+    Whether the Chrome OS Sticky Keys feature is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -328,7 +332,7 @@
     expires_after="M81">
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS switch access is on (checked once 45 secs after
+    Whether the Chrome OS switch access is on (logged once 45 secs after
     startup).
   </summary>
 </histogram>
@@ -346,7 +350,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome OS Virtual Keyboard feature is on (checked once 45 secs
+    Whether the Chrome OS Virtual Keyboard feature is on (logged once 45 secs
     after startup).
   </summary>
 </histogram>
@@ -356,7 +360,7 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the Chrome accessibility image label setting is on (checked once 45
+    Whether the Chrome accessibility image label setting is on (logged once 45
     secs after startup).
   </summary>
 </histogram>
@@ -404,7 +408,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether Windows system settings show that high-contrast mode is enabled and
-    the user has selected a light-on-dark color scheme (checked once 45 secs
+    the user has selected a light-on-dark color scheme (logged once 45 secs
     after startup). This causes Chrome to prompt the user with a bubble to
     optionally install a High Contrast extension and theme.
   </summary>
@@ -429,7 +433,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether the &quot;differentiate without color&quot; Mac system setting is
-    enabled. This is checked once, 45 seconds after startup.
+    enabled. This is logged once, 45 seconds after startup.
   </summary>
 </histogram>
 
@@ -438,7 +442,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether the &quot;full keyboard access&quot; Mac system setting is enabled.
-    This is checked once, 45 seconds after startup.
+    This is logged once, 45 seconds after startup.
   </summary>
 </histogram>
 
@@ -447,7 +451,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether the &quot;increase contrast&quot; Mac system setting is enabled.
-    This is checked once, 45 seconds after startup.
+    This is logged once, 45 seconds after startup.
   </summary>
 </histogram>
 
@@ -458,7 +462,7 @@
   <summary>
     Tracks whether the accessibilityDisplayShouldReduceMotion system property is
     enabled. The purpose is to inform the design of the prefers-reduced-motion
-    media feature; see http://crbug.com/722548. This is checked once, 45 seconds
+    media feature; see http://crbug.com/722548. This is logged once, 45 seconds
     after startup.
   </summary>
 </histogram>
@@ -468,7 +472,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether the &quot;reduce transparency&quot; Mac system setting is enabled.
-    This is checked once, 45 seconds after startup.
+    This is logged once, 45 seconds after startup.
   </summary>
 </histogram>
 
@@ -479,7 +483,9 @@
   <owner>[email protected]</owner>
   <summary>
     Tracks whether a screen reader is enabled on Mac (e.g. VoiceOver). This is
-    checked once, 45 seconds after startup.
+    logged once, 45 seconds after startup. Note: prefer
+    Accessibility.Mac.ScreenReader.EveryReport when querying for unique users,
+    as it is logged more frequently.
   </summary>
 </histogram>
 
@@ -489,8 +495,8 @@
   <owner>[email protected]</owner>
   <summary>
     Whether Chrome has enabled accessibility support because the user passed the
-    --force-renderer-accessibility flag on the command-line (checked once 45
-    secs after startup).
+    --force-renderer-accessibility flag on the command-line (logged once 45 secs
+    after startup).
   </summary>
 </histogram>
 
@@ -559,7 +565,7 @@
   <summary>
     Whether Chrome has enabled accessibility support because it detects
     supported assistive technology running, or due to being manually enabled via
-    a command-line flag (checked once 45 secs after startup).
+    a command-line flag (logged once 45 secs after startup).
   </summary>
 </histogram>
 
@@ -570,7 +576,7 @@
   <summary>
     Tracks whether the SPI_GETCLIENTAREAANIMATION system property is enabled.
     The purpose is to inform the design of the prefers-reduced-motion media
-    feature; see http://crbug.com/722548. This is checked once, 45 seconds after
+    feature; see http://crbug.com/722548. This is logged once, 45 seconds after
     startup.
   </summary>
 </histogram>
@@ -597,7 +603,7 @@
   <owner>[email protected]</owner>
   <summary>
     Whether Windows system settings show that audio descriptions are enabled
-    (checked once 45 secs after startup).
+    (logged once 45 secs after startup).
   </summary>
 </histogram>
 
@@ -609,8 +615,9 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the third-party JAWS screen reader is running (checked once 45 secs
-    after startup).
+    Whether the third-party JAWS screen reader is running (logged once 45 secs
+    after startup). Note: prefer Accessibility.WinJAWS.EveryReport when querying
+    for unique users, as it is logged more frequently.
   </summary>
 </histogram>
 
@@ -622,8 +629,9 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the third-party NVDA screen reader is running (checked once 45 secs
-    after startup).
+    Whether the third-party NVDA screen reader is running (logged once 45 secs
+    after startup). Note: prefer Accessibility.WinNVDA.EveryReport when querying
+    for unique users, as it is logged more frequently.
   </summary>
 </histogram>
 
@@ -632,8 +640,8 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the third-party System Access To Go screen reader is running
-    (checked once 45 secs after startup).
+    Whether the third-party System Access To Go screen reader is running (logged
+    once 45 secs after startup).
   </summary>
 </histogram>
 
@@ -642,9 +650,9 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether Windows system settings show that a screen reader is running
-    (checked once 45 secs after startup). Note that this does not necessarily
-    mean that Chrome has detected a supported screen reader and has enabled its
+    Whether Windows system settings show that a screen reader is running (logged
+    once 45 secs after startup). Note that this does not necessarily mean that
+    Chrome has detected a supported screen reader and has enabled its
     accessibility mode.
   </summary>
 </histogram>
@@ -655,9 +663,11 @@
   <owner>[email protected]</owner>
   <summary>
     Whether the accessibility mode flag shows that a screen reader is running
-    (checked once 45 secs after startup). In this case, Chrome has detected
+    (logged once 45 secs after startup). In this case, Chrome has detected
     accessibility calls that would normally only occur from a screen reader. See
-    also the more specific metrics such as Accessibility.WinJAWS/WinNVDA.
+    also the more specific metrics such as Accessibility.WinJAWS/WinNVDA. Note:
+    prefer Accessibility.WinScreenReader2.EveryReport when querying for unique
+    users, as it is logged more frequently.
   </summary>
 </histogram>
 
@@ -681,7 +691,9 @@
   <owner>[email protected]</owner>
   <owner>[email protected]</owner>
   <summary>
-    Whether the third-party ZoomText screen magnifier is running.
+    Whether the third-party ZoomText screen magnifier is running. Note: prefer
+    Accessibility.WinZoomText.EveryReport when querying for unique users, as it
+    is logged more frequently.
   </summary>
 </histogram>
 
@@ -154744,6 +154756,19 @@
 
 <histogram_suffixes_list>
 
+<histogram_suffixes name="AccessibilityEveryReport" separator=".">
+  <suffix name="EveryReport"
+      label="sent with every metrics report, and preferred for computing
+             uniques"/>
+  <affected-histogram name="Accessibility.Android.ScreenReader"/>
+  <affected-histogram name="Accessibility.CrosSpokenFeedback"/>
+  <affected-histogram name="Accessibility.Mac.ScreenReader"/>
+  <affected-histogram name="Accessibility.WinJAWS"/>
+  <affected-histogram name="Accessibility.WinNVDA"/>
+  <affected-histogram name="Accessibility.WinScreenReader2"/>
+  <affected-histogram name="Accessibility.WinZoomText"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="AccessibilityScreenReaderImage" separator=".">
   <suffix name="ExplicitlyUnlabeled" label="explicitly unlabeled image"/>
   <suffix name="Labeled" label="labeled image"/>