| Index: chrome/browser/prefs/session_startup_pref.cc
|
| diff --git a/chrome/browser/prefs/session_startup_pref.cc b/chrome/browser/prefs/session_startup_pref.cc
|
| index 478790a157d1c44ab61dc8fc84c2fae754dba090..53c0c868f0364b10b107856e77c689694e0c660c 100644
|
| --- a/chrome/browser/prefs/session_startup_pref.cc
|
| +++ b/chrome/browser/prefs/session_startup_pref.cc
|
| @@ -6,7 +6,9 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/metrics/histogram.h"
|
| #include "base/prefs/pref_service.h"
|
| +#include "base/time/time.h"
|
| #include "base/values.h"
|
| #include "base/version.h"
|
| #include "chrome/browser/prefs/scoped_user_pref_update.h"
|
| @@ -21,6 +23,13 @@
|
|
|
| namespace {
|
|
|
| +enum StartupURLsMigrationMetrics {
|
| + STARTUP_URLS_MIGRATION_METRICS_PERFORMED,
|
| + STARTUP_URLS_MIGRATION_METRICS_NOT_PRESENT,
|
| + STARTUP_URLS_MIGRATION_METRICS_RESET,
|
| + STARTUP_URLS_MIGRATION_METRICS_MAX,
|
| +};
|
| +
|
| // Converts a SessionStartupPref::Type to an integer written to prefs.
|
| int TypeToPrefValue(SessionStartupPref::Type type) {
|
| switch (type) {
|
| @@ -62,10 +71,16 @@ void SessionStartupPref::RegisterProfilePrefs(
|
| user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| registry->RegisterListPref(prefs::kURLsToRestoreOnStartup,
|
| user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
| + registry->RegisterListPref(prefs::kURLsToRestoreOnStartupOld,
|
| + user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| registry->RegisterBooleanPref(
|
| prefs::kRestoreOnStartupMigrated,
|
| false,
|
| user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| + registry->RegisterInt64Pref(
|
| + prefs::kRestoreStartupURLsMigrated,
|
| + false,
|
| + user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
|
| }
|
|
|
| // static
|
| @@ -136,8 +151,55 @@ SessionStartupPref SessionStartupPref::GetStartupPref(PrefService* prefs) {
|
| void SessionStartupPref::MigrateIfNecessary(PrefService* prefs) {
|
| DCHECK(prefs);
|
|
|
| + // Check if we need to migrate the old version of the startup URLs preference
|
| + // to the new name, and also send metrics about the migration.
|
| + const base::ListValue* old_startup_urls =
|
| + prefs->GetList(prefs::kURLsToRestoreOnStartupOld);
|
| + if (!prefs->GetUserPrefValue(prefs::kRestoreStartupURLsMigrated)) {
|
| + // Record the absence of the migration timestamp, this will get overwritten
|
| + // below if migration occurs now.
|
| + StartupURLsMigrationMetrics metrics_result =
|
| + STARTUP_URLS_MIGRATION_METRICS_NOT_PRESENT;
|
| +
|
| + // Seems like we never migrated, do it if necessary.
|
| + if (!prefs->GetUserPrefValue(prefs::kURLsToRestoreOnStartup)) {
|
| + if (old_startup_urls && !old_startup_urls->empty()) {
|
| + prefs->Set(prefs::kURLsToRestoreOnStartup, *old_startup_urls);
|
| + prefs->Set(prefs::kURLsToRestoreOnStartupOld, base::ListValue());
|
| + }
|
| + metrics_result = STARTUP_URLS_MIGRATION_METRICS_PERFORMED;
|
| + }
|
| +
|
| + UMA_HISTOGRAM_ENUMERATION(
|
| + "Settings.StartupURLsMigration",
|
| + metrics_result,
|
| + STARTUP_URLS_MIGRATION_METRICS_MAX);
|
| +
|
| + prefs->SetInt64(prefs::kRestoreStartupURLsMigrated,
|
| + base::Time::Now().ToInternalValue());
|
| + } else if (old_startup_urls && !old_startup_urls->empty()) {
|
| + // Migration needs to be reset.
|
| + prefs->Set(prefs::kURLsToRestoreOnStartupOld, base::ListValue());
|
| + base::Time last_migration_time = base::Time::FromInternalValue(
|
| + prefs->GetInt64(prefs::kRestoreStartupURLsMigrated));
|
| + base::Time now = base::Time::Now();
|
| + prefs->SetInt64(prefs::kRestoreStartupURLsMigrated, now.ToInternalValue());
|
| + DCHECK(now > last_migration_time);
|
| + if (now < last_migration_time)
|
| + last_migration_time = now;
|
| + HISTOGRAM_CUSTOM_TIMES("Settings.StartupURLsResetTime",
|
| + now - last_migration_time,
|
| + base::TimeDelta::FromDays(0),
|
| + base::TimeDelta::FromDays(7),
|
| + 50);
|
| + UMA_HISTOGRAM_ENUMERATION(
|
| + "Settings.StartupURLsMigration",
|
| + STARTUP_URLS_MIGRATION_METRICS_RESET,
|
| + STARTUP_URLS_MIGRATION_METRICS_MAX);
|
| + }
|
| +
|
| if (!prefs->GetBoolean(prefs::kRestoreOnStartupMigrated)) {
|
| - // Read existing values
|
| + // Read existing values.
|
| const base::Value* homepage_is_new_tab_page_value =
|
| prefs->GetUserPrefValue(prefs::kHomePageIsNewTabPage);
|
| bool homepage_is_new_tab_page = true;
|
|
|