[waffle] Add metrics for guest search engine choice

Record whether saving the DSE is available and what was the selection.

Bug: 372870900
Change-Id: I3e9ca1538d244d3fcc9b3b807660f4140cd0e30c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5923518
Auto-Submit: Christian Dullweber <dullweber@chromium.org>
Reviewed-by: Nicolas Dossou-Gbété <dgn@chromium.org>
Commit-Queue: Christian Dullweber <dullweber@chromium.org>
Reviewed-by: Tomasz Wiszkowski <ender@google.com>
Cr-Commit-Position: refs/heads/main@{#1368157}
diff --git a/chrome/browser/search_engine_choice/search_engine_choice_dialog_service.cc b/chrome/browser/search_engine_choice/search_engine_choice_dialog_service.cc
index bafcb65..1e1f839 100644
--- a/chrome/browser/search_engine_choice/search_engine_choice_dialog_service.cc
+++ b/chrome/browser/search_engine_choice/search_engine_choice_dialog_service.cc
@@ -9,6 +9,7 @@
 #include "base/command_line.h"
 #include "base/containers/contains.h"
 #include "base/debug/crash_logging.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/not_fatal_until.h"
 #include "base/notreached.h"
 #include "base/strings/utf_string_conversions.h"
@@ -195,9 +196,18 @@
 
     NOTREACHED(base::NotFatalUntil::M127);
   } else {
-    if (search_engine_choice_service_
-            ->IsProfileEligibleForDseGuestPropagation() &&
-        save_guest_mode_selection) {
+    bool is_guest_mode_propagation_allowed =
+        search_engine_choice_service_
+            ->IsProfileEligibleForDseGuestPropagation();
+    if (profile_->IsGuestSession()) {
+      base::UmaHistogramBoolean("Search.SaveGuestModeEligible",
+                                is_guest_mode_propagation_allowed);
+    }
+    if (is_guest_mode_propagation_allowed) {
+      base::UmaHistogramBoolean("Search.SaveGuestModeSelection",
+                                save_guest_mode_selection);
+    }
+    if (is_guest_mode_propagation_allowed && save_guest_mode_selection) {
       search_engine_choice_service_->SetSavedSearchEngineBetweenGuestSessions(
           prepopulate_id);
     }
diff --git a/chrome/browser/search_engine_choice/search_engine_choice_dialog_service_unittest.cc b/chrome/browser/search_engine_choice/search_engine_choice_dialog_service_unittest.cc
index 03eb1f2..6a1c6eea 100644
--- a/chrome/browser/search_engine_choice/search_engine_choice_dialog_service_unittest.cc
+++ b/chrome/browser/search_engine_choice/search_engine_choice_dialog_service_unittest.cc
@@ -399,6 +399,48 @@
       SearchEngineChoiceDialogService::EntryPoint::kDialog);
   EXPECT_FALSE(g_browser_process->local_state()->HasPrefPath(
       prefs::kDefaultSearchProviderGuestModePrepopulatedId));
+
+  histogram_tester().ExpectUniqueSample("Search.SaveGuestModeEligible", true,
+                                        1);
+  histogram_tester().ExpectUniqueSample("Search.SaveGuestModeSelection", false,
+                                        1);
+}
+
+TEST_F(SearchEngineChoiceDialogServiceTest,
+       NotifyChoiceMade_Guest_SavingNotAvailable) {
+  base::test::ScopedFeatureList feature_list{
+      switches::kSearchEngineChoiceGuestExperience};
+
+  EXPECT_FALSE(g_browser_process->local_state()->HasPrefPath(
+      prefs::kDefaultSearchProviderGuestModePrepopulatedId));
+
+  TestingProfile* parent_guest = profile_manager()->CreateGuestProfile();
+  Profile* child_guest = parent_guest->GetOffTheRecordProfile(
+      Profile::OTRProfileID::PrimaryID(), false);
+
+  TemplateURLServiceFactory::GetInstance()->SetTestingFactory(
+      parent_guest,
+      base::BindRepeating(&TemplateURLServiceFactory::BuildInstanceFor));
+
+  search_engines::SearchEngineChoiceServiceFactory::GetForProfile(child_guest)
+      ->SetIsProfileEligibleForDseGuestPropagationForTesting(false);
+
+  SearchEngineChoiceDialogService* search_engine_choice_dialog_service =
+      SearchEngineChoiceDialogServiceFactory::GetForProfile(child_guest);
+  const int kPrepopulatedId =
+      search_engine_choice_dialog_service->GetSearchEngines()
+          .at(0)
+          ->prepopulate_id();
+
+  search_engine_choice_dialog_service->NotifyChoiceMade(
+      kPrepopulatedId, /*save_guest_mode_selection=*/false,
+      SearchEngineChoiceDialogService::EntryPoint::kDialog);
+  EXPECT_FALSE(g_browser_process->local_state()->HasPrefPath(
+      prefs::kDefaultSearchProviderGuestModePrepopulatedId));
+
+  histogram_tester().ExpectUniqueSample("Search.SaveGuestModeEligible", false,
+                                        1);
+  histogram_tester().ExpectTotalCount("Search.SaveGuestModeSelection", 0);
 }
 
 TEST_F(SearchEngineChoiceDialogServiceTest,
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml
index 3b15558..d11a06c 100644
--- a/tools/metrics/histograms/metadata/search/histograms.xml
+++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -1260,6 +1260,29 @@
   </summary>
 </histogram>
 
+<histogram name="Search.SaveGuestModeEligible" enum="BooleanEligible"
+    expires_after="2025-04-06">
+  <owner>dullweber@chromium.org</owner>
+  <owner>chrome-waffle-eng@google.com</owner>
+  <summary>
+    Records whether the guest profile that showed a search engine choice dialog
+    is eligible to save the chosen search engine for future guest sessions. Only
+    eligible profiles show a checkbox that allows users to save their selection.
+    Recorded when users confirm the search engine choice dialog in guest mode.
+  </summary>
+</histogram>
+
+<histogram name="Search.SaveGuestModeSelection" enum="BooleanYesNo"
+    expires_after="2025-04-06">
+  <owner>dullweber@chromium.org</owner>
+  <owner>chrome-waffle-eng@google.com</owner>
+  <summary>
+    Records whether users chose to save the Guest search engine. Recorded for
+    profiles that are eligible for saving the guest search engine when the
+    search engine choice dialog is confirmed.
+  </summary>
+</histogram>
+
 <histogram name="Search.SearchEngineCountryDelegate.Connection{Result}Time"
     units="ms" expires_after="2025-03-02">
   <owner>triploblastic@chromium.org</owner>