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

Unified Diff: components/password_manager/core/browser/password_manager_url_collection_experiment.cc

Issue 789613004: Decision whenever "Allow to collect URL?" bubble should be shown or not (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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/password_manager/core/browser/password_manager_url_collection_experiment.cc
diff --git a/components/password_manager/core/browser/password_manager_url_collection_experiment.cc b/components/password_manager/core/browser/password_manager_url_collection_experiment.cc
index 61c2b85e69bd3997dd8db9afabcf379b1c221fc7..df756dad6a1e311b2b9b47efd36e9e54c67b4683 100644
--- a/components/password_manager/core/browser/password_manager_url_collection_experiment.cc
+++ b/components/password_manager/core/browser/password_manager_url_collection_experiment.cc
@@ -5,40 +5,108 @@
#include "components/password_manager/core/browser/password_manager_url_collection_experiment.h"
#include "base/prefs/pref_service.h"
+#include "base/rand_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/time/clock.h"
+#include "base/time/default_clock.h"
#include "components/password_manager/core/common/password_manager_pref_names.h"
#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/variations/variations_associated_data.h"
namespace password_manager {
namespace urls_collection_experiment {
namespace {
-bool ShouldShowBubbleExperiment(PrefService* prefs) {
- // TODO(melandory): Make decision based on Finch experiment parameters.
- return false;
+const char kExperimentStartDate[] = "Mon, 15 Dec 00:00:00 2014 GMT";
+
+// A safe default value. Using this will not show the bubble.
+const int kDefaultValueForStartingDayFactor = -1;
+
+bool ExtractExperimentParams(
+ int* experiment_length_in_days,
+ base::TimeDelta* experiment_active_for_user_period) {
+ std::map<std::string, std::string> params;
+ if (!variations::GetVariationParams(kExperimentName, &params))
+ return false;
+ int days = 0;
+ if (!base::StringToInt(params[kParamExperimentLengthInDays],
+ experiment_length_in_days) ||
+ !base::StringToInt(params[kParamActivePeriodInDays], &days)) {
+ return false;
+ }
+ *experiment_active_for_user_period = base::TimeDelta::FromDays(days);
+ return true;
+}
+
+bool ShouldShowBubbleInternal(PrefService* prefs, base::Clock* clock) {
+ if (prefs->GetBoolean(prefs::kAllowToCollectURLBubbleWasShown))
+ return false;
+ int experiment_length_in_days = 0;
+ base::TimeDelta experiment_active_for_user_period;
+ if (!ExtractExperimentParams(&experiment_length_in_days,
+ &experiment_active_for_user_period)) {
+ return false;
+ }
+ base::Time now = clock->Now();
+ base::Time experiment_active_for_user_start =
+ DetermineStartOfActivityPeriod(prefs, experiment_length_in_days);
+ return (now >= experiment_active_for_user_start &&
+ now < experiment_active_for_user_start +
+ experiment_active_for_user_period);
}
} // namespace
+const char kExperimentName[] = "AskToSubmitURLBubble";
+const char kParamExperimentLengthInDays[] = "experiment_length_in_days";
+const char kParamActivePeriodInDays[] = "experiment_active_for_user_period";
+const char kParamBubbleStatus[] = "show_bubble_status";
+
void RegisterPrefs(user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterBooleanPref(
- password_manager::prefs::kWasAllowToCollectURLBubbleShown,
+ password_manager::prefs::kAllowToCollectURLBubbleWasShown,
false, // bubble hasn't been shown yet
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
+ registry->RegisterDoublePref(
+ password_manager::prefs::kAllowToCollectURLBubbleActivePeriodStartFactor,
+ kDefaultValueForStartingDayFactor,
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
}
-const char kExperimentName[] = "AskToSubmitURLBubble";
-
-bool ShouldShowBubble(PrefService* prefs) {
- if (prefs->GetBoolean(prefs::kWasAllowToCollectURLBubbleShown)) {
- return ShouldShowBubbleExperiment(prefs);
+base::Time DetermineStartOfActivityPeriod(PrefService* prefs,
+ int experiment_length_in_days) {
+ double active_period_start_second_factor =
+ prefs->GetDouble(prefs::kAllowToCollectURLBubbleActivePeriodStartFactor);
+ if (active_period_start_second_factor == kDefaultValueForStartingDayFactor) {
+ active_period_start_second_factor = base::RandDouble();
+ prefs->SetDouble(prefs::kAllowToCollectURLBubbleActivePeriodStartFactor,
+ active_period_start_second_factor);
}
+ base::Time beginning;
+ base::Time::FromString(kExperimentStartDate, &beginning);
+ const int kSecondsInDay = 24 * 60 * 60;
+ return beginning + base::TimeDelta::FromSeconds(
+ kSecondsInDay * experiment_length_in_days *
+ active_period_start_second_factor);
+}
+
+bool ShouldShowBubbleWithClock(PrefService* prefs, base::Clock* clock) {
+ std::string show_bubble =
+ variations::GetVariationParamValue(kExperimentName, kParamBubbleStatus);
+ if (show_bubble == "show_bubble")
+ return ShouldShowBubbleInternal(prefs, clock);
// "Do not show" is the default case.
return false;
}
+bool ShouldShowBubble(PrefService* prefs) {
+ base::DefaultClock clock;
+ return ShouldShowBubbleWithClock(prefs, &clock);
+}
+
void RecordBubbleClosed(PrefService* prefs) {
- prefs->SetBoolean(password_manager::prefs::kWasAllowToCollectURLBubbleShown,
+ prefs->SetBoolean(password_manager::prefs::kAllowToCollectURLBubbleWasShown,
true);
}

Powered by Google App Engine
This is Rietveld 408576698