[RDSD] Add UKM Android.NonDefaultRdsPageLoad

Records on each page load when the User Agent is overridden with site
exception.
Reuse the enum from Android.UserRequestedUserAgentChange.

The UKM collection review:
https://docs.google.com/document/d/1drM_8INGF0IIbP1Eeq2PcxweRn34Xk5vPoQWZCGzIQU

Bug: 1365772
Change-Id: I626f5d7a3ccd5349412575a05264cd8c6385b503
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3984838
Reviewed-by: Aishwarya Rajesh <aishwaryarj@google.com>
Reviewed-by: Jesse Doherty <jwd@chromium.org>
Reviewed-by: Theresa Sullivan <twellington@chromium.org>
Commit-Queue: Shu Yang <shuyng@google.com>
Cr-Commit-Position: refs/heads/main@{#1065713}
diff --git a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc
index 234c8ef..c38eb34 100644
--- a/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc
+++ b/chrome/browser/content_settings/request_desktop_site_web_contents_observer_android.cc
@@ -12,6 +12,15 @@
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/common/content_features.h"
+#include "services/metrics/public/cpp/ukm_builders.h"
+
+namespace rds_web_contents_observer {
+// Keep in sync with UserAgentRequestType in tools/metrics/histograms/enums.xml.
+enum class UserAgentRequestType {
+  RequestDesktop = 0,
+  RequestMobile = 1,
+};
+}  // namespace rds_web_contents_observer
 
 RequestDesktopSiteWebContentsObserverAndroid::
     RequestDesktopSiteWebContentsObserverAndroid(content::WebContents* contents)
@@ -39,12 +48,9 @@
   if (!navigation_handle->IsInMainFrame()) {
     return;
   }
-  // Override UA for renderer initiated navigation only. UA override for browser
-  // initiated navigation is handled on Java side. This is to workaround known
-  // issues crbug.com/1265751 and crbug.com/1261939.
-  if (!navigation_handle->IsRendererInitiated()) {
-    return;
-  }
+
+  // TODO(shuyng): Remove this if Domain Settings is launched before Additional
+  // Settings.
   if (!base::FeatureList::IsEnabled(features::kRequestDesktopSiteExceptions)) {
     // Stop UA override if there is a tab level setting.
     TabModel::TabUserAgent tabSetting =
@@ -66,18 +72,43 @@
       url, url, ContentSettingsType::REQUEST_DESKTOP_SITE, &setting_info);
   bool use_rds =
       content_settings::ValueToContentSetting(setting) == CONTENT_SETTING_ALLOW;
+  bool is_global_setting = setting_info.primary_pattern.MatchesAllHosts();
 
   // Take secondary settings into account if ContentSetting is global setting.
   if (!use_rds &&
       base::FeatureList::IsEnabled(features::kRequestDesktopSiteAdditions) &&
-      setting_info.primary_pattern.MatchesAllHosts()) {
+      is_global_setting) {
     bool use_rds_peripheral =
         pref_service_->GetBoolean(prefs::kDesktopSitePeripheralSettingEnabled);
     if (use_rds_peripheral) {
       use_rds = TabAndroid::isHardwareKeyboardAvailable(tab_android_);
     }
   }
-  navigation_handle->SetIsOverridingUserAgent(use_rds);
+
+  // Override UA for renderer initiated navigation only. UA override for browser
+  // initiated navigation is handled on Java side. This is to workaround known
+  // issues crbug.com/1265751 and crbug.com/1261939.
+  if (navigation_handle->IsRendererInitiated()) {
+    navigation_handle->SetIsOverridingUserAgent(use_rds);
+  }
+
+  // Only record UKM for site settings and primary main frame.
+  if (is_global_setting || !navigation_handle->IsInPrimaryMainFrame()) {
+    return;
+  }
+  rds_web_contents_observer::UserAgentRequestType user_agent_request_type;
+  if (use_rds) {
+    user_agent_request_type =
+        rds_web_contents_observer::UserAgentRequestType::RequestDesktop;
+  } else {
+    user_agent_request_type =
+        rds_web_contents_observer::UserAgentRequestType::RequestMobile;
+  }
+  ukm::SourceId source_id = ukm::ConvertToSourceId(
+      navigation_handle->GetNavigationId(), ukm::SourceIdType::NAVIGATION_ID);
+  ukm::builders::Android_NonDefaultRdsPageLoad(source_id)
+      .SetUserAgentType(static_cast<int>(user_agent_request_type))
+      .Record(ukm::UkmRecorder::Get());
 }
 
 WEB_CONTENTS_USER_DATA_KEY_IMPL(RequestDesktopSiteWebContentsObserverAndroid);
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index d28b762..7a87825 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -1075,6 +1075,27 @@
   </metric>
 </event>
 
+<event name="Android.NonDefaultRdsPageLoad">
+  <owner>shuyng@google.com</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Records on each page load when the User Agent is overridden with site
+    exception.
+  </summary>
+  <metric name="UserAgentType" enum="UserAgentRequestType">
+    <summary>
+      An enum that records the type of user agent.
+    </summary>
+    <aggregation>
+      <history>
+        <statistics>
+          <enumeration/>
+        </statistics>
+      </history>
+    </aggregation>
+  </metric>
+</event>
+
 <event name="Android.ScreenRotation">
   <owner>gangwu@chromium.org</owner>
   <owner>fgorski@chromium.org</owner>