| Index: components/safe_browsing_db/safe_browsing_prefs.cc
 | 
| diff --git a/components/safe_browsing_db/safe_browsing_prefs.cc b/components/safe_browsing_db/safe_browsing_prefs.cc
 | 
| deleted file mode 100644
 | 
| index 3895131cbbe07afa8ee28698690351b26e128c3b..0000000000000000000000000000000000000000
 | 
| --- a/components/safe_browsing_db/safe_browsing_prefs.cc
 | 
| +++ /dev/null
 | 
| @@ -1,440 +0,0 @@
 | 
| -// Copyright (c) 2016 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 "base/command_line.h"
 | 
| -#include "base/logging.h"
 | 
| -#include "base/metrics/histogram_macros.h"
 | 
| -#include "components/prefs/pref_service.h"
 | 
| -#include "components/safe_browsing_db/safe_browsing_prefs.h"
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -// Switch value which force the ScoutGroupSelected pref to true.
 | 
| -const char kForceScoutGroupValueTrue[] = "true";
 | 
| -// Switch value which force the ScoutGroupSelected pref to false.
 | 
| -const char kForceScoutGroupValueFalse[] = "false";
 | 
| -
 | 
| -// Name of the Scout Transition UMA metric.
 | 
| -const char kScoutTransitionMetricName[] = "SafeBrowsing.Pref.Scout.Transition";
 | 
| -
 | 
| -// Reasons that a state transition for Scout was performed.
 | 
| -// These values are written to logs.  New enum values can be added, but
 | 
| -// existing enums must never be renumbered or deleted and reused.
 | 
| -enum ScoutTransitionReason {
 | 
| -  // Flag forced Scout Group to true
 | 
| -  FORCE_SCOUT_FLAG_TRUE = 0,
 | 
| -  // Flag forced Scout Group to false
 | 
| -  FORCE_SCOUT_FLAG_FALSE = 1,
 | 
| -  // User in OnlyShowScout group, enters Scout Group
 | 
| -  ONLY_SHOW_SCOUT_OPT_IN = 2,
 | 
| -  // User in CanShowScout group, enters Scout Group immediately
 | 
| -  CAN_SHOW_SCOUT_OPT_IN_SCOUT_GROUP_ON = 3,
 | 
| -  // User in CanShowScout group, waiting for interstitial to enter Scout Group
 | 
| -  CAN_SHOW_SCOUT_OPT_IN_WAIT_FOR_INTERSTITIAL = 4,
 | 
| -  // User in CanShowScout group saw the first interstitial and entered the Scout
 | 
| -  // Group
 | 
| -  CAN_SHOW_SCOUT_OPT_IN_SAW_FIRST_INTERSTITIAL = 5,
 | 
| -  // User in Control group
 | 
| -  CONTROL = 6,
 | 
| -  // Rollback: SBER2 on on implies SBER1 can turn on
 | 
| -  ROLLBACK_SBER2_IMPLIES_SBER1 = 7,
 | 
| -  // Rollback: SBER2 off so SBER1 must be turned off
 | 
| -  ROLLBACK_NO_SBER2_SET_SBER1_FALSE = 8,
 | 
| -  // Rollback: SBER2 absent so SBER1 must be cleared
 | 
| -  ROLLBACK_NO_SBER2_CLEAR_SBER1 = 9,
 | 
| -  // New reasons must be added BEFORE MAX_REASONS
 | 
| -  MAX_REASONS
 | 
| -};
 | 
| -
 | 
| -// The Extended Reporting pref that is currently active, used for UMA metrics.
 | 
| -// These values are written to logs.  New enum values can be added, but
 | 
| -// existing enums must never be renumbered or deleted and reused.
 | 
| -enum ActiveExtendedReportingPref {
 | 
| -  SBER1_PREF = 0,
 | 
| -  SBER2_PREF = 1,
 | 
| -  // New prefs must be added before MAX_SBER_PREF
 | 
| -  MAX_SBER_PREF
 | 
| -};
 | 
| -
 | 
| -// A histogram for tracking a nullable boolean, which can be false, true or
 | 
| -// null. These values are written to logs. New enum values can be added, but
 | 
| -// existing enums must never be renumbered or deleted and reused.
 | 
| -enum NullableBoolean {
 | 
| -  NULLABLE_BOOLEAN_FALSE = 0,
 | 
| -  NULLABLE_BOOLEAN_TRUE = 1,
 | 
| -  NULLABLE_BOOLEAN_NULL = 2,
 | 
| -  MAX_NULLABLE_BOOLEAN
 | 
| -};
 | 
| -
 | 
| -NullableBoolean GetPrefValueOrNull(const PrefService& prefs,
 | 
| -                                   const std::string& pref_name) {
 | 
| -  if (!prefs.HasPrefPath(pref_name)) {
 | 
| -    return NULLABLE_BOOLEAN_NULL;
 | 
| -  }
 | 
| -  return prefs.GetBoolean(pref_name) ? NULLABLE_BOOLEAN_TRUE
 | 
| -                                     : NULLABLE_BOOLEAN_FALSE;
 | 
| -}
 | 
| -
 | 
| -// Update the correct UMA metric based on which pref was changed and which UI
 | 
| -// the change was made on.
 | 
| -void RecordExtendedReportingPrefChanged(
 | 
| -    const PrefService& prefs,
 | 
| -    safe_browsing::ExtendedReportingOptInLocation location) {
 | 
| -  bool pref_value = safe_browsing::IsExtendedReportingEnabled(prefs);
 | 
| -
 | 
| -  if (safe_browsing::IsScout(prefs)) {
 | 
| -    switch (location) {
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_CHROME_SETTINGS:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER2Pref.ChromeSettings",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_ANDROID_SETTINGS:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER2Pref.AndroidSettings",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_DOWNLOAD_FEEDBACK_POPUP:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER2Pref.DownloadPopup",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_SECURITY_INTERSTITIAL:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER2Pref.SecurityInterstitial",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      default:
 | 
| -        NOTREACHED();
 | 
| -    }
 | 
| -  } else {
 | 
| -    switch (location) {
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_CHROME_SETTINGS:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER1Pref.ChromeSettings",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_ANDROID_SETTINGS:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER1Pref.AndroidSettings",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_DOWNLOAD_FEEDBACK_POPUP:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER1Pref.DownloadPopup",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      case safe_browsing::SBER_OPTIN_SITE_SECURITY_INTERSTITIAL:
 | 
| -        UMA_HISTOGRAM_BOOLEAN(
 | 
| -            "SafeBrowsing.Pref.Scout.SetPref.SBER1Pref.SecurityInterstitial",
 | 
| -            pref_value);
 | 
| -        break;
 | 
| -      default:
 | 
| -        NOTREACHED();
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -}  // namespace
 | 
| -
 | 
| -namespace prefs {
 | 
| -const char kSafeBrowsingExtendedReportingEnabled[] =
 | 
| -    "safebrowsing.extended_reporting_enabled";
 | 
| -const char kSafeBrowsingScoutReportingEnabled[] =
 | 
| -    "safebrowsing.scout_reporting_enabled";
 | 
| -const char kSafeBrowsingScoutGroupSelected[] =
 | 
| -    "safebrowsing.scout_group_selected";
 | 
| -const char kSafeBrowsingSawInterstitialExtendedReporting[] =
 | 
| -    "safebrowsing.saw_interstitial_sber1";
 | 
| -const char kSafeBrowsingSawInterstitialScoutReporting[] =
 | 
| -    "safebrowsing.saw_interstitial_sber2";
 | 
| -}  // namespace prefs
 | 
| -
 | 
| -namespace safe_browsing {
 | 
| -
 | 
| -const char kSwitchForceScoutGroup[] = "force-scout-group";
 | 
| -
 | 
| -const base::Feature kCanShowScoutOptIn{"CanShowScoutOptIn",
 | 
| -                                       base::FEATURE_DISABLED_BY_DEFAULT};
 | 
| -
 | 
| -const base::Feature kOnlyShowScoutOptIn{"OnlyShowScoutOptIn",
 | 
| -                                        base::FEATURE_DISABLED_BY_DEFAULT};
 | 
| -
 | 
| -std::string ChooseOptInTextPreference(
 | 
| -    const PrefService& prefs,
 | 
| -    const std::string& extended_reporting_pref,
 | 
| -    const std::string& scout_pref) {
 | 
| -  return IsScout(prefs) ? scout_pref : extended_reporting_pref;
 | 
| -}
 | 
| -
 | 
| -int ChooseOptInTextResource(const PrefService& prefs,
 | 
| -                            int extended_reporting_resource,
 | 
| -                            int scout_resource) {
 | 
| -  return IsScout(prefs) ? scout_resource : extended_reporting_resource;
 | 
| -}
 | 
| -
 | 
| -bool ExtendedReportingPrefExists(const PrefService& prefs) {
 | 
| -  return prefs.HasPrefPath(GetExtendedReportingPrefName(prefs));
 | 
| -}
 | 
| -
 | 
| -ExtendedReportingLevel GetExtendedReportingLevel(const PrefService& prefs) {
 | 
| -  if (!IsExtendedReportingEnabled(prefs)) {
 | 
| -    return SBER_LEVEL_OFF;
 | 
| -  } else {
 | 
| -    return IsScout(prefs) ? SBER_LEVEL_SCOUT : SBER_LEVEL_LEGACY;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -const char* GetExtendedReportingPrefName(const PrefService& prefs) {
 | 
| -  // The Scout pref is active if either of the experiment features are on, and
 | 
| -  // ScoutGroupSelected is on as well.
 | 
| -  if ((base::FeatureList::IsEnabled(kCanShowScoutOptIn) ||
 | 
| -       base::FeatureList::IsEnabled(kOnlyShowScoutOptIn)) &&
 | 
| -      prefs.GetBoolean(prefs::kSafeBrowsingScoutGroupSelected)) {
 | 
| -    return prefs::kSafeBrowsingScoutReportingEnabled;
 | 
| -  }
 | 
| -
 | 
| -  // ..otherwise, either no experiment is on (ie: the Control group) or
 | 
| -  // ScoutGroupSelected is off. So we use the SBER pref instead.
 | 
| -  return prefs::kSafeBrowsingExtendedReportingEnabled;
 | 
| -}
 | 
| -
 | 
| -void InitializeSafeBrowsingPrefs(PrefService* prefs) {
 | 
| -  // First handle forcing kSafeBrowsingScoutGroupSelected pref via cmd-line.
 | 
| -  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
 | 
| -          kSwitchForceScoutGroup)) {
 | 
| -    std::string switch_value =
 | 
| -        base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
 | 
| -            kSwitchForceScoutGroup);
 | 
| -    if (switch_value == kForceScoutGroupValueTrue) {
 | 
| -      prefs->SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, true);
 | 
| -      UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                FORCE_SCOUT_FLAG_TRUE, MAX_REASONS);
 | 
| -    } else if (switch_value == kForceScoutGroupValueFalse) {
 | 
| -      prefs->SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, false);
 | 
| -      UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                FORCE_SCOUT_FLAG_FALSE, MAX_REASONS);
 | 
| -    }
 | 
| -
 | 
| -    // If the switch is used, don't process the experiment state.
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  // Handle the three possible experiment states.
 | 
| -  if (base::FeatureList::IsEnabled(kOnlyShowScoutOptIn)) {
 | 
| -    // OnlyShowScoutOptIn immediately turns on ScoutGroupSelected pref.
 | 
| -    prefs->SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, true);
 | 
| -    UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                              ONLY_SHOW_SCOUT_OPT_IN, MAX_REASONS);
 | 
| -  } else if (base::FeatureList::IsEnabled(kCanShowScoutOptIn)) {
 | 
| -    // CanShowScoutOptIn will only turn on ScoutGroupSelected pref if the legacy
 | 
| -    // SBER pref is false. Otherwise the legacy SBER pref will stay on and
 | 
| -    // continue to be used until the next security incident, at which point
 | 
| -    // the Scout pref will become the active one.
 | 
| -    if (!prefs->GetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled)) {
 | 
| -      prefs->SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, true);
 | 
| -      UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                CAN_SHOW_SCOUT_OPT_IN_SCOUT_GROUP_ON,
 | 
| -                                MAX_REASONS);
 | 
| -    } else {
 | 
| -      UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                CAN_SHOW_SCOUT_OPT_IN_WAIT_FOR_INTERSTITIAL,
 | 
| -                                MAX_REASONS);
 | 
| -    }
 | 
| -  } else {
 | 
| -    // Both experiment features are off, so this is the Control group. We must
 | 
| -    // handle the possibility that the user was previously in an experiment
 | 
| -    // group (above) that was reverted. We want to restore the user to a
 | 
| -    // reasonable state based on the ScoutGroup and ScoutReporting preferences.
 | 
| -    UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName, CONTROL, MAX_REASONS);
 | 
| -    bool transitioned = false;
 | 
| -    if (prefs->GetBoolean(prefs::kSafeBrowsingScoutReportingEnabled)) {
 | 
| -      // User opted-in to Scout which is broader than legacy Extended Reporting.
 | 
| -      // Opt them in to Extended Reporting.
 | 
| -      prefs->SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled, true);
 | 
| -      UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                ROLLBACK_SBER2_IMPLIES_SBER1, MAX_REASONS);
 | 
| -      transitioned = true;
 | 
| -    } else if (prefs->GetBoolean(prefs::kSafeBrowsingScoutGroupSelected)) {
 | 
| -      // User was in the Scout Group (ie: seeing the Scout opt-in text) but did
 | 
| -      // NOT opt-in to Scout. Assume this was a conscious choice and remove
 | 
| -      // their legacy Extended Reporting opt-in as well. The user will have a
 | 
| -      // chance to evaluate their choice next time they see the opt-in text.
 | 
| -
 | 
| -      // We make the Extended Reporting pref mimic the state of the Scout
 | 
| -      // Reporting pref. So we either Clear it or set it to False.
 | 
| -      if (prefs->HasPrefPath(prefs::kSafeBrowsingScoutReportingEnabled)) {
 | 
| -        // Scout Reporting pref was explicitly set to false, so set the SBER
 | 
| -        // pref to false.
 | 
| -        prefs->SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled, false);
 | 
| -        UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                  ROLLBACK_NO_SBER2_SET_SBER1_FALSE,
 | 
| -                                  MAX_REASONS);
 | 
| -      } else {
 | 
| -        // Scout Reporting pref is unset, so clear the SBER pref.
 | 
| -        prefs->ClearPref(prefs::kSafeBrowsingExtendedReportingEnabled);
 | 
| -        UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                                  ROLLBACK_NO_SBER2_CLEAR_SBER1, MAX_REASONS);
 | 
| -      }
 | 
| -      transitioned = true;
 | 
| -    }
 | 
| -
 | 
| -    // Also clear both the Scout settings to start over from a clean state and
 | 
| -    // avoid the above logic from triggering on next restart.
 | 
| -    prefs->ClearPref(prefs::kSafeBrowsingScoutGroupSelected);
 | 
| -    prefs->ClearPref(prefs::kSafeBrowsingScoutReportingEnabled);
 | 
| -
 | 
| -    // Also forget that the user has seen any interstitials if they're
 | 
| -    // reverting back to a clean state.
 | 
| -    if (transitioned) {
 | 
| -      prefs->ClearPref(prefs::kSafeBrowsingSawInterstitialExtendedReporting);
 | 
| -      prefs->ClearPref(prefs::kSafeBrowsingSawInterstitialScoutReporting);
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -bool IsExtendedReportingEnabled(const PrefService& prefs) {
 | 
| -  return prefs.GetBoolean(GetExtendedReportingPrefName(prefs));
 | 
| -}
 | 
| -
 | 
| -bool IsScout(const PrefService& prefs) {
 | 
| -  return GetExtendedReportingPrefName(prefs) ==
 | 
| -         prefs::kSafeBrowsingScoutReportingEnabled;
 | 
| -}
 | 
| -
 | 
| -void RecordExtendedReportingMetrics(const PrefService& prefs) {
 | 
| -  // This metric tracks the extended browsing opt-in based on whichever setting
 | 
| -  // the user is currently seeing. It tells us whether extended reporting is
 | 
| -  // happening for this user.
 | 
| -  UMA_HISTOGRAM_BOOLEAN("SafeBrowsing.Pref.Extended",
 | 
| -                        IsExtendedReportingEnabled(prefs));
 | 
| -
 | 
| -  // Track whether this user has ever seen a security interstitial.
 | 
| -  UMA_HISTOGRAM_BOOLEAN(
 | 
| -      "SafeBrowsing.Pref.SawInterstitial.SBER1Pref",
 | 
| -      prefs.GetBoolean(prefs::kSafeBrowsingSawInterstitialExtendedReporting));
 | 
| -  UMA_HISTOGRAM_BOOLEAN(
 | 
| -      "SafeBrowsing.Pref.SawInterstitial.SBER2Pref",
 | 
| -      prefs.GetBoolean(prefs::kSafeBrowsingSawInterstitialScoutReporting));
 | 
| -
 | 
| -  // These metrics track the Scout transition.
 | 
| -  if (prefs.GetBoolean(prefs::kSafeBrowsingScoutGroupSelected)) {
 | 
| -    // Users in the Scout group: currently seeing the Scout opt-in.
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.ScoutGroup.SBER1Pref",
 | 
| -        GetPrefValueOrNull(prefs, prefs::kSafeBrowsingExtendedReportingEnabled),
 | 
| -        MAX_NULLABLE_BOOLEAN);
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.ScoutGroup.SBER2Pref",
 | 
| -        GetPrefValueOrNull(prefs, prefs::kSafeBrowsingScoutReportingEnabled),
 | 
| -        MAX_NULLABLE_BOOLEAN);
 | 
| -  } else {
 | 
| -    // Users not in the Scout group: currently seeing the SBER opt-in.
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.NoScoutGroup.SBER1Pref",
 | 
| -        GetPrefValueOrNull(prefs, prefs::kSafeBrowsingExtendedReportingEnabled),
 | 
| -        MAX_NULLABLE_BOOLEAN);
 | 
| -    // The following metric is a corner case. User was previously in the
 | 
| -    // Scout group and was able to opt-in to the Scout pref, but was since
 | 
| -    // removed from the Scout group (eg: by rolling back a Scout experiment).
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.NoScoutGroup.SBER2Pref",
 | 
| -        GetPrefValueOrNull(prefs, prefs::kSafeBrowsingScoutReportingEnabled),
 | 
| -        MAX_NULLABLE_BOOLEAN);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void SetExtendedReportingPrefAndMetric(
 | 
| -    PrefService* prefs,
 | 
| -    bool value,
 | 
| -    ExtendedReportingOptInLocation location) {
 | 
| -  prefs->SetBoolean(GetExtendedReportingPrefName(*prefs), value);
 | 
| -  RecordExtendedReportingPrefChanged(*prefs, location);
 | 
| -}
 | 
| -
 | 
| -void SetExtendedReportingPref(PrefService* prefs, bool value) {
 | 
| -  prefs->SetBoolean(GetExtendedReportingPrefName(*prefs), value);
 | 
| -}
 | 
| -
 | 
| -void UpdateMetricsAfterSecurityInterstitial(const PrefService& prefs,
 | 
| -                                            bool on_show_pref_existed,
 | 
| -                                            bool on_show_pref_value) {
 | 
| -  const ActiveExtendedReportingPref active_pref =
 | 
| -      IsScout(prefs) ? SBER2_PREF : SBER1_PREF;
 | 
| -  const bool cur_pref_value = IsExtendedReportingEnabled(prefs);
 | 
| -
 | 
| -  if (!on_show_pref_existed) {
 | 
| -    if (!ExtendedReportingPrefExists(prefs)) {
 | 
| -      // User seeing pref for the first time, didn't touch the checkbox (left it
 | 
| -      // unchecked).
 | 
| -      UMA_HISTOGRAM_ENUMERATION(
 | 
| -          "SafeBrowsing.Pref.Scout.Decision.First_LeftUnchecked", active_pref,
 | 
| -          MAX_SBER_PREF);
 | 
| -      return;
 | 
| -    }
 | 
| -
 | 
| -    // Pref currently exists so user did something to the checkbox
 | 
| -    if (cur_pref_value) {
 | 
| -      // User turned the pref on.
 | 
| -      UMA_HISTOGRAM_ENUMERATION(
 | 
| -          "SafeBrowsing.Pref.Scout.Decision.First_Enabled", active_pref,
 | 
| -          MAX_SBER_PREF);
 | 
| -      return;
 | 
| -    }
 | 
| -
 | 
| -    // Otherwise, user turned the pref off, but because it didn't exist when
 | 
| -    // the interstitial was first shown, they must have turned it on and then
 | 
| -    // off before the interstitial was closed.
 | 
| -    UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.Pref.Scout.Decision.First_Disabled",
 | 
| -                              active_pref, MAX_SBER_PREF);
 | 
| -    return;
 | 
| -  }
 | 
| -
 | 
| -  // At this point, the pref existed when the interstitial was shown so this is
 | 
| -  // a repeat appearance of the opt-in. Existence can't be removed during an
 | 
| -  // interstitial so no need to check whether the pref currently exists.
 | 
| -  if (on_show_pref_value && cur_pref_value) {
 | 
| -    // User left the pref on.
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.Decision.Repeat_LeftEnabled", active_pref,
 | 
| -        MAX_SBER_PREF);
 | 
| -    return;
 | 
| -  } else if (on_show_pref_value && !cur_pref_value) {
 | 
| -    // User turned the pref off.
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.Decision.Repeat_Disabled", active_pref,
 | 
| -        MAX_SBER_PREF);
 | 
| -    return;
 | 
| -  } else if (!on_show_pref_value && cur_pref_value) {
 | 
| -    // User turned the pref on.
 | 
| -    UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.Pref.Scout.Decision.Repeat_Enabled",
 | 
| -                              active_pref, MAX_SBER_PREF);
 | 
| -    return;
 | 
| -  } else {
 | 
| -    // Both on_show and cur values are false - user left the pref off.
 | 
| -    UMA_HISTOGRAM_ENUMERATION(
 | 
| -        "SafeBrowsing.Pref.Scout.Decision.Repeat_LeftDisabled", active_pref,
 | 
| -        MAX_SBER_PREF);
 | 
| -    return;
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void UpdatePrefsBeforeSecurityInterstitial(PrefService* prefs) {
 | 
| -  // Move the user into the Scout Group if the CanShowScoutOptIn experiment is
 | 
| -  // enabled and they're not in the group already.
 | 
| -  if (base::FeatureList::IsEnabled(kCanShowScoutOptIn) &&
 | 
| -      !prefs->GetBoolean(prefs::kSafeBrowsingScoutGroupSelected)) {
 | 
| -    prefs->SetBoolean(prefs::kSafeBrowsingScoutGroupSelected, true);
 | 
| -    UMA_HISTOGRAM_ENUMERATION(kScoutTransitionMetricName,
 | 
| -                              CAN_SHOW_SCOUT_OPT_IN_SAW_FIRST_INTERSTITIAL,
 | 
| -                              MAX_REASONS);
 | 
| -  }
 | 
| -
 | 
| -  // Remember that this user saw an interstitial with the current opt-in text.
 | 
| -  prefs->SetBoolean(IsScout(*prefs)
 | 
| -                        ? prefs::kSafeBrowsingSawInterstitialScoutReporting
 | 
| -                        : prefs::kSafeBrowsingSawInterstitialExtendedReporting,
 | 
| -                    true);
 | 
| -}
 | 
| -
 | 
| -}  // namespace safe_browsing
 | 
| 
 |