summaryrefslogtreecommitdiffstats
path: root/chrome/browser/protector/protected_prefs_watcher.cc
diff options
context:
space:
mode:
authorivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 22:45:41 +0000
committerivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 22:45:41 +0000
commit31c37f4bb3be920a6660b7c4b49d3c7165879126 (patch)
tree4afb588b8f5310224d66b7cd112e445ec3f897dd /chrome/browser/protector/protected_prefs_watcher.cc
parent80ec0b7efa735bb00886d8a9baa14030c2591862 (diff)
downloadchromium_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.cc38
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 =