| 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;
|
|
|