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

Unified Diff: components/safe_browsing_db/safe_browsing_prefs.cc

Issue 2869383002: Unify safe_browsing* components [1]: move safe_browsing_prefs* (Closed)
Patch Set: fix win bots 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: 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
« no previous file with comments | « components/safe_browsing_db/safe_browsing_prefs.h ('k') | components/safe_browsing_db/safe_browsing_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698