Index: chrome/browser/chromeos/file_system_provider/registry.cc |
diff --git a/chrome/browser/chromeos/file_system_provider/registry.cc b/chrome/browser/chromeos/file_system_provider/registry.cc |
index 58fc872f1478f4abb97a3c9770f6c80bedb17b81..445f4e3cdd9a563ae44d6989b21317738a6e7771 100644 |
--- a/chrome/browser/chromeos/file_system_provider/registry.cc |
+++ b/chrome/browser/chromeos/file_system_provider/registry.cc |
@@ -31,6 +31,7 @@ const char kPrefKeyObservedEntries[] = "observed-entries"; |
const char kPrefKeyObservedEntryEntryPath[] = "entry-path"; |
const char kPrefKeyObservedEntryRecursive[] = "recursive"; |
const char kPrefKeyObservedEntryLastTag[] = "last-tag"; |
+const char kPrefKeyObservedEntryPersistentOrigins[] = "persistent-origins"; |
void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { |
registry->RegisterDictionaryPref( |
@@ -72,6 +73,15 @@ void Registry::RememberFileSystem( |
kPrefKeyObservedEntryRecursive, it.second.recursive); |
observed_entry->SetStringWithoutPathExpansion(kPrefKeyObservedEntryLastTag, |
it.second.last_tag); |
+ base::ListValue* const persistent_origins_value = new base::ListValue(); |
+ observed_entry->SetWithoutPathExpansion( |
+ kPrefKeyObservedEntryPersistentOrigins, persistent_origins_value); |
+ for (const auto& subscriber_it : it.second.subscribers) { |
+ // Only persistent subscribers should be stored in persistent storage. |
+ // Other ones should not be restired after a restart. |
+ if (subscriber_it.second.persistent) |
+ persistent_origins_value->AppendString(subscriber_it.first.spec()); |
+ } |
} |
PrefService* const pref_service = profile_->GetPrefs(); |
@@ -182,6 +192,7 @@ scoped_ptr<Registry::RestoredFileSystems> Registry::RestoreFileSystems( |
std::string entry_path; |
bool recursive = false; |
std::string last_tag; |
+ const base::ListValue* persistent_origins = NULL; |
if (!observed_entry_value->GetAsDictionary(&observed_entry) || |
!observed_entry->GetStringWithoutPathExpansion( |
@@ -190,8 +201,11 @@ scoped_ptr<Registry::RestoredFileSystems> Registry::RestoreFileSystems( |
kPrefKeyObservedEntryRecursive, &recursive) || |
!observed_entry->GetStringWithoutPathExpansion( |
kPrefKeyObservedEntryLastTag, &last_tag) || |
+ !observed_entry->GetListWithoutPathExpansion( |
+ kPrefKeyObservedEntryPersistentOrigins, &persistent_origins) || |
it.key() != entry_path || entry_path.empty() || |
- (!options.supports_notify_tag && !last_tag.empty())) { |
+ (!options.supports_notify_tag && |
+ (!last_tag.empty() || persistent_origins->GetSize()))) { |
LOG(ERROR) << "Malformed observed entry information in preferences."; |
continue; |
} |
@@ -201,6 +215,17 @@ scoped_ptr<Registry::RestoredFileSystems> Registry::RestoreFileSystems( |
base::FilePath::FromUTF8Unsafe(entry_path); |
restored_observed_entry.recursive = recursive; |
restored_observed_entry.last_tag = last_tag; |
+ for (const auto& persistent_origin : *persistent_origins) { |
+ std::string origin; |
+ if (persistent_origin->GetAsString(&origin)) { |
+ LOG(ERROR) << "Malformed subscriber information in preferences."; |
+ continue; |
+ } |
+ const GURL origin_as_gurl(origin); |
+ restored_observed_entry.subscribers[origin_as_gurl].origin = |
+ origin_as_gurl; |
+ restored_observed_entry.subscribers[origin_as_gurl].persistent = true; |
+ } |
restored_file_system.observed_entries[ObservedEntryKey( |
base::FilePath::FromUTF8Unsafe(entry_path), recursive)] = |
restored_observed_entry; |