diff options
author | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-22 22:45:41 +0000 |
---|---|---|
committer | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-22 22:45:41 +0000 |
commit | 31c37f4bb3be920a6660b7c4b49d3c7165879126 (patch) | |
tree | 4afb588b8f5310224d66b7cd112e445ec3f897dd /chrome/browser/protector/protected_prefs_watcher.cc | |
parent | 80ec0b7efa735bb00886d8a9baa14030c2591862 (diff) | |
download | chromium_src-31c37f4bb3be920a6660b7c4b49d3c7165879126.zip chromium_src-31c37f4bb3be920a6660b7c4b49d3c7165879126.tar.gz chromium_src-31c37f4bb3be920a6660b7c4b49d3c7165879126.tar.bz2 |
[protector] Add backup for pinned tabs prefs.
BUG=114288
TEST=ProtectedPrefsWatcherTest.*
Review URL: http://codereview.chromium.org/9808018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128326 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/protector/protected_prefs_watcher.cc')
-rw-r--r-- | chrome/browser/protector/protected_prefs_watcher.cc | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/chrome/browser/protector/protected_prefs_watcher.cc b/chrome/browser/protector/protected_prefs_watcher.cc index 8fedbe0..87b9789 100644 --- a/chrome/browser/protector/protected_prefs_watcher.cc +++ b/chrome/browser/protector/protected_prefs_watcher.cc @@ -33,6 +33,7 @@ const char kBackupShowHomeButton[] = "backup.browser.show_home_button"; const char kBackupRestoreOnStartup[] = "backup.session.restore_on_startup"; const char kBackupURLsToRestoreOnStartup[] = "backup.session.urls_to_restore_on_startup"; +const char kBackupPinnedTabs[] = "backup.pinned_tabs"; const char kBackupExtensionsIDs[] = "backup.extensions.ids"; const char kBackupSignature[] = "backup._signature"; @@ -66,6 +67,8 @@ void ProtectedPrefsWatcher::RegisterUserPrefs(PrefService* prefs) { PrefService::UNSYNCABLE_PREF); prefs->RegisterListPref(kBackupURLsToRestoreOnStartup, PrefService::UNSYNCABLE_PREF); + prefs->RegisterListPref(kBackupPinnedTabs, + PrefService::UNSYNCABLE_PREF); prefs->RegisterListPref(kBackupExtensionsIDs, PrefService::UNSYNCABLE_PREF); prefs->RegisterStringPref(kBackupSignature, "", @@ -143,6 +146,7 @@ void ProtectedPrefsWatcher::InitBackup() { prefs->GetInteger(prefs::kRestoreOnStartup)); prefs->Set(kBackupURLsToRestoreOnStartup, *prefs->GetList(prefs::kURLsToRestoreOnStartup)); + prefs->Set(kBackupPinnedTabs, *prefs->GetList(prefs::kPinnedTabs)); ListPrefUpdate extension_ids_update(prefs, kBackupExtensionsIDs); base::ListValue* extension_ids = extension_ids_update.Get(); extension_ids->Clear(); @@ -154,6 +158,18 @@ void ProtectedPrefsWatcher::InitBackup() { UpdateBackupSignature(); } +void ProtectedPrefsWatcher::MigrateOldBackupIfNeeded() { + PrefService* prefs = profile_->GetPrefs(); + bool changed = false; + if (!prefs->HasPrefPath(kBackupPinnedTabs) && + prefs->HasPrefPath(prefs::kPinnedTabs)) { + prefs->Set(kBackupPinnedTabs, *prefs->GetList(prefs::kPinnedTabs)); + changed = true; + } + if (changed) + UpdateBackupSignature(); +} + bool ProtectedPrefsWatcher::UpdateBackupEntry(const std::string& pref_name) { PrefService* prefs = profile_->GetPrefs(); if (pref_name == ExtensionPrefs::kExtensionsPref) { @@ -183,6 +199,8 @@ bool ProtectedPrefsWatcher::UpdateBackupEntry(const std::string& pref_name) { } else if (pref_name == prefs::kURLsToRestoreOnStartup) { prefs->Set(kBackupURLsToRestoreOnStartup, *prefs->GetList(prefs::kURLsToRestoreOnStartup)); + } else if (pref_name == prefs::kPinnedTabs) { + prefs->Set(kBackupPinnedTabs, *prefs->GetList(prefs::kPinnedTabs)); } else { NOTREACHED(); return false; @@ -226,6 +244,7 @@ void ProtectedPrefsWatcher::ValidateBackup() { kProtectorErrorValueValidZero, kProtectorErrorCount); } else if (IsSignatureValid()) { + MigrateOldBackupIfNeeded(); UMA_HISTOGRAM_ENUMERATION( kProtectorHistogramPrefs, kProtectorErrorValueValid, @@ -243,7 +262,8 @@ void ProtectedPrefsWatcher::ValidateBackup() { } std::string ProtectedPrefsWatcher::GetSignatureData(PrefService* prefs) const { - // std::stringstream data; + // TODO(ivankr): replace this with some existing reliable serializer. + // JSONWriter isn't a good choice because JSON formatting may change suddenly. std::string data = base::StringPrintf( "%s|%d|%d|%d", prefs->GetString(kBackupHomePage).c_str(), @@ -259,6 +279,22 @@ std::string ProtectedPrefsWatcher::GetSignatureData(PrefService* prefs) const { NOTREACHED(); base::StringAppendF(&data, "|%s", url.c_str()); } + const base::ListValue* pinned_tabs = prefs->GetList(kBackupPinnedTabs); + for (base::ListValue::const_iterator it = pinned_tabs->begin(); + it != pinned_tabs->end(); ++it) { + const base::DictionaryValue* tab = NULL; + if (!(*it)->GetAsDictionary(&tab)) { + NOTREACHED(); + continue; + } + for (base::DictionaryValue::Iterator it2(*tab); it2.HasNext(); + it2.Advance()) { + std::string value; + if (!it2.value().GetAsString(&value)) + NOTREACHED(); + base::StringAppendF(&data, "|%s|%s", it2.key().c_str(), value.c_str()); + } + } // These are safe to use becase they are always up-to-date and returned in // a consistent (sorted) order. for (ExtensionPrefs::ExtensionIdSet::const_iterator it = |