Chromium Code Reviews| 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..d40fa2489b82a477e6dbc5c81b1457d9282cfb01 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_STARTED, |
| + STARTUP_URLS_MIGRATION_METRICS_DELETED, |
| + 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->RegisterDoublePref( |
| + prefs::kRestoreStartupURLsMigrated, |
| + false, |
| + user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
| } |
| // static |
| @@ -136,8 +151,51 @@ 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)) { |
| + // Seems like we never migrated, do it if necessary. |
| + if (!prefs->GetUserPrefValue(prefs::kURLsToRestoreOnStartup)) { |
| + if (old_startup_urls && old_startup_urls->GetSize() > 0) { |
| + prefs->Set(prefs::kURLsToRestoreOnStartup, *old_startup_urls); |
| + prefs->Set(prefs::kURLsToRestoreOnStartupOld, base::ListValue()); |
| + } |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "Settings.StartupURLsMigration", |
| + STARTUP_URLS_MIGRATION_METRICS_STARTED, |
| + STARTUP_URLS_MIGRATION_METRICS_MAX); |
| + } else { |
| + // We migrated but the migration data got deleted somehow. |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "Settings.StartupURLsMigration", |
| + STARTUP_URLS_MIGRATION_METRICS_DELETED, |
| + STARTUP_URLS_MIGRATION_METRICS_MAX); |
| + } |
| + prefs->SetDouble(prefs::kRestoreStartupURLsMigrated, |
| + base::Time::Now().ToDoubleT()); |
| + } else if (old_startup_urls && old_startup_urls->GetSize() > 0) { |
| + // Migration needs to be reset. |
| + prefs->Set(prefs::kURLsToRestoreOnStartupOld, base::ListValue()); |
| + base::Time last_migration_time = base::Time::FromDoubleT(prefs->GetDouble( |
| + prefs::kRestoreStartupURLsMigrated)); |
| + base::Time now = base::Time::Now(); |
| + prefs->SetDouble(prefs::kRestoreStartupURLsMigrated, now.ToDoubleT()); |
| + DCHECK(now > last_migration_time); |
| + HISTOGRAM_CUSTOM_TIMES("Settings.StartupURLsResetTime", |
| + now - last_migration_time, |
|
robertshield
2013/10/04 15:16:15
in theory, this could be negative. What's the effe
MAD
2013/10/04 19:31:22
I just tried it and it would go in the 0 bucket (i
|
| + 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; |