OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/file_system_provider/service.h" | 5 #include "chrome/browser/chromeos/file_system_provider/service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
14 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system
.h" | 14 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system
.h" |
15 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" | 15 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" |
16 #include "chrome/browser/chromeos/file_system_provider/observer.h" | 16 #include "chrome/browser/chromeos/file_system_provider/observer.h" |
17 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info
.h" | 17 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info
.h" |
| 18 #include "chrome/browser/chromeos/file_system_provider/registry_interface.h" |
18 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" | 19 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" |
19 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" | 20 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
20 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
21 #include "chrome/test/base/testing_browser_process.h" | 22 #include "chrome/test/base/testing_browser_process.h" |
22 #include "chrome/test/base/testing_pref_service_syncable.h" | 23 #include "chrome/test/base/testing_pref_service_syncable.h" |
23 #include "chrome/test/base/testing_profile.h" | 24 #include "chrome/test/base/testing_profile.h" |
24 #include "chrome/test/base/testing_profile_manager.h" | 25 #include "chrome/test/base/testing_profile_manager.h" |
25 #include "components/user_prefs/user_prefs.h" | 26 #include "components/user_prefs/user_prefs.h" |
26 #include "content/public/test/test_browser_thread_bundle.h" | 27 #include "content/public/test/test_browser_thread_bundle.h" |
27 #include "extensions/browser/extension_registry.h" | 28 #include "extensions/browser/extension_registry.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 virtual void OnProvidedFileSystemUnmount( | 76 virtual void OnProvidedFileSystemUnmount( |
76 const ProvidedFileSystemInfo& file_system_info, | 77 const ProvidedFileSystemInfo& file_system_info, |
77 base::File::Error error) override { | 78 base::File::Error error) override { |
78 unmounts.push_back(Event(file_system_info, error)); | 79 unmounts.push_back(Event(file_system_info, error)); |
79 } | 80 } |
80 | 81 |
81 std::vector<Event> mounts; | 82 std::vector<Event> mounts; |
82 std::vector<Event> unmounts; | 83 std::vector<Event> unmounts; |
83 }; | 84 }; |
84 | 85 |
| 86 // Fake implementation of the registry, since it's already tested separately. |
| 87 // For simplicity it can remember at most only one file system. |
| 88 class FakeRegistry : public RegistryInterface { |
| 89 public: |
| 90 FakeRegistry() {} |
| 91 virtual ~FakeRegistry() {} |
| 92 |
| 93 // RegistryInterface overrides. |
| 94 virtual void RememberFileSystem( |
| 95 const ProvidedFileSystemInfo& file_system_info, |
| 96 const ObservedEntries& observed_entries) override { |
| 97 file_system_info_.reset(new ProvidedFileSystemInfo(file_system_info)); |
| 98 observed_entries_.reset(new ObservedEntries(observed_entries)); |
| 99 } |
| 100 |
| 101 virtual void ForgetFileSystem(const std::string& extension_id, |
| 102 const std::string& file_system_id) override { |
| 103 if (!file_system_info_.get() || !observed_entries_.get()) |
| 104 return; |
| 105 if (file_system_info_->extension_id() == extension_id && |
| 106 file_system_info_->file_system_id() == file_system_id) { |
| 107 file_system_info_.reset(); |
| 108 observed_entries_.reset(); |
| 109 } |
| 110 } |
| 111 |
| 112 virtual scoped_ptr<RestoredFileSystems> RestoreFileSystems( |
| 113 const std::string& extension_id) override { |
| 114 scoped_ptr<RestoredFileSystems> result(new RestoredFileSystems); |
| 115 |
| 116 if (file_system_info_.get() && observed_entries_.get()) { |
| 117 RestoredFileSystem restored_file_system; |
| 118 restored_file_system.extension_id = file_system_info_->extension_id(); |
| 119 |
| 120 MountOptions options; |
| 121 options.file_system_id = file_system_info_->file_system_id(); |
| 122 options.display_name = file_system_info_->display_name(); |
| 123 options.writable = file_system_info_->writable(); |
| 124 options.supports_notify_tag = file_system_info_->supports_notify_tag(); |
| 125 restored_file_system.options = options; |
| 126 restored_file_system.observed_entries = *observed_entries_.get(); |
| 127 |
| 128 result->push_back(restored_file_system); |
| 129 } |
| 130 |
| 131 return result; |
| 132 } |
| 133 |
| 134 virtual void UpdateObservedEntryTag( |
| 135 const ProvidedFileSystemInfo& file_system_info, |
| 136 const ObservedEntry& observed_entry) override { |
| 137 ASSERT_TRUE(observed_entries_.get()); |
| 138 const ObservedEntries::iterator it = |
| 139 observed_entries_->find(observed_entry.entry_path); |
| 140 ASSERT_NE(observed_entries_->end(), it); |
| 141 it->second.last_tag = observed_entry.last_tag; |
| 142 } |
| 143 |
| 144 ProvidedFileSystemInfo* const file_system_info() const { |
| 145 return file_system_info_.get(); |
| 146 } |
| 147 ObservedEntries* const observed_entries() const { |
| 148 return observed_entries_.get(); |
| 149 } |
| 150 |
| 151 private: |
| 152 scoped_ptr<ProvidedFileSystemInfo> file_system_info_; |
| 153 scoped_ptr<ObservedEntries> observed_entries_; |
| 154 |
| 155 DISALLOW_COPY_AND_ASSIGN(FakeRegistry); |
| 156 }; |
| 157 |
85 // Creates a fake extension with the specified |extension_id|. | 158 // Creates a fake extension with the specified |extension_id|. |
86 scoped_refptr<extensions::Extension> CreateFakeExtension( | 159 scoped_refptr<extensions::Extension> CreateFakeExtension( |
87 const std::string& extension_id) { | 160 const std::string& extension_id) { |
88 base::DictionaryValue manifest; | 161 base::DictionaryValue manifest; |
89 std::string error; | 162 std::string error; |
90 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kVersion, | 163 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kVersion, |
91 "1.0.0.0"); | 164 "1.0.0.0"); |
92 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kName, | 165 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kName, |
93 "unused"); | 166 "unused"); |
94 return extensions::Extension::Create(base::FilePath(), | 167 return extensions::Extension::Create(base::FilePath(), |
95 extensions::Manifest::UNPACKED, | 168 extensions::Manifest::UNPACKED, |
96 manifest, | 169 manifest, |
97 extensions::Extension::NO_FLAGS, | 170 extensions::Extension::NO_FLAGS, |
98 extension_id, | 171 extension_id, |
99 &error); | 172 &error); |
100 } | 173 } |
101 | 174 |
102 // Stores a provided file system information in preferences together with a | |
103 // fake observed entry. | |
104 void RememberFakeFileSystem(TestingProfile* profile, | |
105 const std::string& extension_id, | |
106 const std::string& file_system_id, | |
107 const std::string& display_name, | |
108 bool writable, | |
109 bool supports_notify_tag, | |
110 const ObservedEntry& observed_entry) { | |
111 TestingPrefServiceSyncable* const pref_service = | |
112 profile->GetTestingPrefService(); | |
113 ASSERT_TRUE(pref_service); | |
114 | |
115 base::DictionaryValue extensions; | |
116 base::DictionaryValue* file_systems = new base::DictionaryValue(); | |
117 base::DictionaryValue* file_system = new base::DictionaryValue(); | |
118 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, | |
119 kFileSystemId); | |
120 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); | |
121 file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable); | |
122 file_system->SetBooleanWithoutPathExpansion(kPrefKeySupportsNotifyTag, | |
123 supports_notify_tag); | |
124 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); | |
125 extensions.SetWithoutPathExpansion(kExtensionId, file_systems); | |
126 | |
127 // Remember observed entries. | |
128 base::DictionaryValue* const observed_entries = new base::DictionaryValue(); | |
129 file_system->SetWithoutPathExpansion(kPrefKeyObservedEntries, | |
130 observed_entries); | |
131 base::DictionaryValue* const observed_entry_value = | |
132 new base::DictionaryValue(); | |
133 observed_entries->SetWithoutPathExpansion(observed_entry.entry_path.value(), | |
134 observed_entry_value); | |
135 observed_entry_value->SetStringWithoutPathExpansion( | |
136 kPrefKeyObservedEntryEntryPath, observed_entry.entry_path.value()); | |
137 observed_entry_value->SetBooleanWithoutPathExpansion( | |
138 kPrefKeyObservedEntryRecursive, observed_entry.recursive); | |
139 observed_entry_value->SetStringWithoutPathExpansion( | |
140 kPrefKeyObservedEntryLastTag, observed_entry.last_tag); | |
141 | |
142 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); | |
143 } | |
144 | |
145 } // namespace | 175 } // namespace |
146 | 176 |
147 class FileSystemProviderServiceTest : public testing::Test { | 177 class FileSystemProviderServiceTest : public testing::Test { |
148 protected: | 178 protected: |
149 FileSystemProviderServiceTest() : profile_(NULL) {} | 179 FileSystemProviderServiceTest() : profile_(NULL) {} |
150 | 180 |
151 virtual ~FileSystemProviderServiceTest() {} | 181 virtual ~FileSystemProviderServiceTest() {} |
152 | 182 |
153 virtual void SetUp() override { | 183 virtual void SetUp() override { |
154 profile_manager_.reset( | 184 profile_manager_.reset( |
155 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | 185 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
156 ASSERT_TRUE(profile_manager_->SetUp()); | 186 ASSERT_TRUE(profile_manager_->SetUp()); |
157 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com"); | 187 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com"); |
158 user_manager_ = new FakeUserManager(); | 188 user_manager_ = new FakeUserManager(); |
159 user_manager_->AddUser(profile_->GetProfileName()); | 189 user_manager_->AddUser(profile_->GetProfileName()); |
160 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); | 190 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); |
161 extension_registry_.reset(new extensions::ExtensionRegistry(profile_)); | 191 extension_registry_.reset(new extensions::ExtensionRegistry(profile_)); |
| 192 |
162 service_.reset(new Service(profile_, extension_registry_.get())); | 193 service_.reset(new Service(profile_, extension_registry_.get())); |
163 service_->SetFileSystemFactoryForTesting( | 194 service_->SetFileSystemFactoryForTesting( |
164 base::Bind(&FakeProvidedFileSystem::Create)); | 195 base::Bind(&FakeProvidedFileSystem::Create)); |
165 extension_ = CreateFakeExtension(kExtensionId); | 196 extension_ = CreateFakeExtension(kExtensionId); |
| 197 |
| 198 registry_ = new FakeRegistry; |
| 199 // Passes ownership to the service instance. |
| 200 service_->SetRegistryForTesting(make_scoped_ptr(registry_)); |
| 201 |
166 fake_observed_entry_.entry_path = | 202 fake_observed_entry_.entry_path = |
167 base::FilePath(FILE_PATH_LITERAL("/a/b/c")); | 203 base::FilePath(FILE_PATH_LITERAL("/a/b/c")); |
168 fake_observed_entry_.recursive = true; | 204 fake_observed_entry_.recursive = true; |
169 fake_observed_entry_.last_tag = "hello-world"; | 205 fake_observed_entry_.last_tag = "hello-world"; |
170 } | 206 } |
171 | 207 |
172 content::TestBrowserThreadBundle thread_bundle_; | 208 content::TestBrowserThreadBundle thread_bundle_; |
173 scoped_ptr<TestingProfileManager> profile_manager_; | 209 scoped_ptr<TestingProfileManager> profile_manager_; |
174 TestingProfile* profile_; | 210 TestingProfile* profile_; |
175 FakeUserManager* user_manager_; | 211 FakeUserManager* user_manager_; |
176 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; | 212 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; |
177 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; | 213 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; |
178 scoped_ptr<Service> service_; | 214 scoped_ptr<Service> service_; |
179 scoped_refptr<extensions::Extension> extension_; | 215 scoped_refptr<extensions::Extension> extension_; |
| 216 FakeRegistry* registry_; // Owned by Service. |
180 ObservedEntry fake_observed_entry_; | 217 ObservedEntry fake_observed_entry_; |
181 }; | 218 }; |
182 | 219 |
183 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { | 220 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { |
184 LoggingObserver observer; | 221 LoggingObserver observer; |
185 service_->AddObserver(&observer); | 222 service_->AddObserver(&observer); |
186 | 223 |
187 EXPECT_TRUE(service_->MountFileSystem( | 224 EXPECT_TRUE(service_->MountFileSystem( |
188 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); | 225 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
189 | 226 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); | 386 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); |
350 | 387 |
351 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 388 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
352 service_->GetProvidedFileSystemInfoList(); | 389 service_->GetProvidedFileSystemInfoList(); |
353 ASSERT_EQ(1u, file_system_info_list.size()); | 390 ASSERT_EQ(1u, file_system_info_list.size()); |
354 | 391 |
355 service_->RemoveObserver(&observer); | 392 service_->RemoveObserver(&observer); |
356 } | 393 } |
357 | 394 |
358 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { | 395 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { |
359 // Create a fake entry in the preferences. | 396 LoggingObserver observer; |
360 RememberFakeFileSystem(profile_, | 397 service_->AddObserver(&observer); |
361 kExtensionId, | |
362 kFileSystemId, | |
363 kDisplayName, | |
364 true /* writable */, | |
365 true /* supports_notify_tag */, | |
366 fake_observed_entry_); | |
367 | 398 |
368 // Create a new service instance in order to load remembered file systems | 399 // Remember a fake file system first in order to be able to restore it. |
369 // from preferences. | 400 MountOptions options(kFileSystemId, kDisplayName); |
370 scoped_ptr<Service> new_service( | 401 options.supports_notify_tag = true; |
371 new Service(profile_, extension_registry_.get())); | 402 ProvidedFileSystemInfo file_system_info( |
372 LoggingObserver observer; | 403 kExtensionId, options, base::FilePath(FILE_PATH_LITERAL("/a/b/c"))); |
373 new_service->AddObserver(&observer); | 404 ObservedEntries fake_observed_entries; |
374 | 405 fake_observed_entries[fake_observed_entry_.entry_path] = fake_observed_entry_; |
375 new_service->SetFileSystemFactoryForTesting( | 406 registry_->RememberFileSystem(file_system_info, fake_observed_entries); |
376 base::Bind(&FakeProvidedFileSystem::Create)); | |
377 | 407 |
378 EXPECT_EQ(0u, observer.mounts.size()); | 408 EXPECT_EQ(0u, observer.mounts.size()); |
379 | 409 |
380 // Directly call the observer's method. | 410 // Directly call the observer's method. |
381 new_service->OnExtensionLoaded(profile_, extension_.get()); | 411 service_->OnExtensionLoaded(profile_, extension_.get()); |
382 | 412 |
383 ASSERT_EQ(1u, observer.mounts.size()); | 413 ASSERT_EQ(1u, observer.mounts.size()); |
384 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 414 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
385 | 415 |
386 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); | 416 EXPECT_EQ(file_system_info.extension_id(), |
387 EXPECT_EQ(kFileSystemId, | 417 observer.mounts[0].file_system_info().extension_id()); |
| 418 EXPECT_EQ(file_system_info.file_system_id(), |
388 observer.mounts[0].file_system_info().file_system_id()); | 419 observer.mounts[0].file_system_info().file_system_id()); |
389 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); | 420 EXPECT_EQ(file_system_info.writable(), |
390 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag()); | 421 observer.mounts[0].file_system_info().writable()); |
| 422 EXPECT_EQ(file_system_info.supports_notify_tag(), |
| 423 observer.mounts[0].file_system_info().supports_notify_tag()); |
391 | 424 |
392 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 425 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
393 new_service->GetProvidedFileSystemInfoList(); | 426 service_->GetProvidedFileSystemInfoList(); |
394 ASSERT_EQ(1u, file_system_info_list.size()); | 427 ASSERT_EQ(1u, file_system_info_list.size()); |
395 | 428 |
396 ProvidedFileSystemInterface* const file_system = | 429 ProvidedFileSystemInterface* const file_system = |
397 new_service->GetProvidedFileSystem(kExtensionId, kFileSystemId); | 430 service_->GetProvidedFileSystem(kExtensionId, kFileSystemId); |
398 ASSERT_TRUE(file_system); | 431 ASSERT_TRUE(file_system); |
399 | 432 |
400 const ObservedEntries* const observed_entries = | 433 const ObservedEntries* const observed_entries = |
401 file_system->GetObservedEntries(); | 434 file_system->GetObservedEntries(); |
402 ASSERT_TRUE(observed_entries); | 435 ASSERT_TRUE(observed_entries); |
403 ASSERT_EQ(1u, observed_entries->size()); | 436 ASSERT_EQ(1u, observed_entries->size()); |
404 | 437 |
405 const ObservedEntries::const_iterator restored_observed_entry_it = | 438 const ObservedEntries::const_iterator restored_observed_entry_it = |
406 observed_entries->find(fake_observed_entry_.entry_path); | 439 observed_entries->find(fake_observed_entry_.entry_path); |
407 ASSERT_NE(observed_entries->end(), restored_observed_entry_it); | 440 ASSERT_NE(observed_entries->end(), restored_observed_entry_it); |
408 | 441 |
409 EXPECT_EQ(fake_observed_entry_.entry_path, | 442 EXPECT_EQ(fake_observed_entry_.entry_path, |
410 restored_observed_entry_it->second.entry_path); | 443 restored_observed_entry_it->second.entry_path); |
411 EXPECT_EQ(fake_observed_entry_.recursive, | 444 EXPECT_EQ(fake_observed_entry_.recursive, |
412 restored_observed_entry_it->second.recursive); | 445 restored_observed_entry_it->second.recursive); |
413 EXPECT_EQ(fake_observed_entry_.last_tag, | 446 EXPECT_EQ(fake_observed_entry_.last_tag, |
414 restored_observed_entry_it->second.last_tag); | 447 restored_observed_entry_it->second.last_tag); |
415 | 448 |
416 new_service->RemoveObserver(&observer); | 449 service_->RemoveObserver(&observer); |
417 } | |
418 | |
419 TEST_F(FileSystemProviderServiceTest, RememberFileSystem) { | |
420 MountOptions options(kFileSystemId, kDisplayName); | |
421 options.writable = true; | |
422 options.supports_notify_tag = true; | |
423 | |
424 ProvidedFileSystemInfo file_system_info( | |
425 kExtensionId, options, base::FilePath(FILE_PATH_LITERAL("/a/b/c"))); | |
426 | |
427 ObservedEntries observed_entries; | |
428 observed_entries[fake_observed_entry_.entry_path] = fake_observed_entry_; | |
429 | |
430 service_->RememberFileSystem(file_system_info, observed_entries); | |
431 | |
432 TestingPrefServiceSyncable* const pref_service = | |
433 profile_->GetTestingPrefService(); | |
434 ASSERT_TRUE(pref_service); | |
435 | |
436 const base::DictionaryValue* const extensions = | |
437 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | |
438 ASSERT_TRUE(extensions); | |
439 | |
440 const base::DictionaryValue* file_systems = NULL; | |
441 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | |
442 &file_systems)); | |
443 EXPECT_EQ(1u, file_systems->size()); | |
444 | |
445 const base::Value* file_system_value = NULL; | |
446 const base::DictionaryValue* file_system = NULL; | |
447 ASSERT_TRUE( | |
448 file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value)); | |
449 ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system)); | |
450 | |
451 std::string file_system_id; | |
452 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId, | |
453 &file_system_id)); | |
454 EXPECT_EQ(kFileSystemId, file_system_id); | |
455 | |
456 std::string display_name; | |
457 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName, | |
458 &display_name)); | |
459 EXPECT_EQ(kDisplayName, display_name); | |
460 | |
461 bool writable = false; | |
462 EXPECT_TRUE( | |
463 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); | |
464 EXPECT_TRUE(writable); | |
465 | |
466 bool supports_notify_tag = false; | |
467 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion( | |
468 kPrefKeySupportsNotifyTag, &supports_notify_tag)); | |
469 EXPECT_TRUE(supports_notify_tag); | |
470 | |
471 const base::DictionaryValue* observed_entries_value = NULL; | |
472 ASSERT_TRUE(file_system->GetDictionaryWithoutPathExpansion( | |
473 kPrefKeyObservedEntries, &observed_entries_value)); | |
474 | |
475 const base::DictionaryValue* observed_entry = NULL; | |
476 ASSERT_TRUE(observed_entries_value->GetDictionaryWithoutPathExpansion( | |
477 fake_observed_entry_.entry_path.value(), &observed_entry)); | |
478 | |
479 std::string entry_path; | |
480 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion( | |
481 kPrefKeyObservedEntryEntryPath, &entry_path)); | |
482 EXPECT_EQ(fake_observed_entry_.entry_path.value(), entry_path); | |
483 | |
484 bool recursive = false; | |
485 EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion( | |
486 kPrefKeyObservedEntryRecursive, &recursive)); | |
487 EXPECT_EQ(fake_observed_entry_.recursive, recursive); | |
488 | |
489 std::string last_tag; | |
490 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion( | |
491 kPrefKeyObservedEntryLastTag, &last_tag)); | |
492 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag); | |
493 } | 450 } |
494 | 451 |
495 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { | 452 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { |
496 LoggingObserver observer; | 453 LoggingObserver observer; |
497 service_->AddObserver(&observer); | 454 service_->AddObserver(&observer); |
498 | 455 |
499 TestingPrefServiceSyncable* const pref_service = | 456 EXPECT_FALSE(registry_->file_system_info()); |
500 profile_->GetTestingPrefService(); | 457 EXPECT_FALSE(registry_->observed_entries()); |
501 ASSERT_TRUE(pref_service); | |
502 | 458 |
503 EXPECT_TRUE(service_->MountFileSystem( | 459 EXPECT_TRUE(service_->MountFileSystem( |
504 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); | 460 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
505 ASSERT_EQ(1u, observer.mounts.size()); | 461 ASSERT_EQ(1u, observer.mounts.size()); |
506 | 462 |
507 const base::DictionaryValue* extensions = | 463 ASSERT_TRUE(registry_->file_system_info()); |
508 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 464 EXPECT_EQ(kExtensionId, registry_->file_system_info()->extension_id()); |
509 ASSERT_TRUE(extensions); | 465 EXPECT_EQ(kFileSystemId, registry_->file_system_info()->file_system_id()); |
510 | 466 EXPECT_EQ(kDisplayName, registry_->file_system_info()->display_name()); |
511 const base::DictionaryValue* file_systems = NULL; | 467 EXPECT_FALSE(registry_->file_system_info()->writable()); |
512 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | 468 EXPECT_FALSE(registry_->file_system_info()->supports_notify_tag()); |
513 &file_systems)); | 469 ASSERT_TRUE(registry_->observed_entries()); |
514 EXPECT_EQ(1u, file_systems->size()); | |
515 | 470 |
516 service_->RemoveObserver(&observer); | 471 service_->RemoveObserver(&observer); |
517 } | 472 } |
518 | 473 |
519 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { | 474 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { |
520 LoggingObserver observer; | 475 LoggingObserver observer; |
521 service_->AddObserver(&observer); | 476 service_->AddObserver(&observer); |
522 | 477 |
523 TestingPrefServiceSyncable* const pref_service = | |
524 profile_->GetTestingPrefService(); | |
525 ASSERT_TRUE(pref_service); | |
526 | |
527 { | 478 { |
| 479 EXPECT_FALSE(registry_->file_system_info()); |
| 480 EXPECT_FALSE(registry_->observed_entries()); |
528 EXPECT_TRUE(service_->MountFileSystem( | 481 EXPECT_TRUE(service_->MountFileSystem( |
529 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); | 482 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
530 ASSERT_EQ(1u, observer.mounts.size()); | |
531 | 483 |
532 const base::DictionaryValue* extensions = | 484 EXPECT_EQ(1u, observer.mounts.size()); |
533 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 485 EXPECT_TRUE(registry_->file_system_info()); |
534 ASSERT_TRUE(extensions); | 486 EXPECT_TRUE(registry_->observed_entries()); |
535 | |
536 const base::DictionaryValue* file_systems = NULL; | |
537 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | |
538 &file_systems)); | |
539 EXPECT_EQ(1u, file_systems->size()); | |
540 } | 487 } |
541 | 488 |
542 { | 489 { |
543 EXPECT_TRUE(service_->UnmountFileSystem( | 490 EXPECT_TRUE(service_->UnmountFileSystem( |
544 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_SHUTDOWN)); | 491 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_SHUTDOWN)); |
545 | 492 |
546 const base::DictionaryValue* const extensions = | 493 EXPECT_EQ(1u, observer.unmounts.size()); |
547 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 494 EXPECT_TRUE(registry_->file_system_info()); |
548 ASSERT_TRUE(extensions); | 495 EXPECT_TRUE(registry_->observed_entries()); |
549 | |
550 const base::DictionaryValue* file_systems = NULL; | |
551 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | |
552 &file_systems)); | |
553 EXPECT_EQ(1u, file_systems->size()); | |
554 } | 496 } |
555 | 497 |
556 service_->RemoveObserver(&observer); | 498 service_->RemoveObserver(&observer); |
557 } | 499 } |
558 | 500 |
559 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { | 501 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { |
560 LoggingObserver observer; | 502 LoggingObserver observer; |
561 service_->AddObserver(&observer); | 503 service_->AddObserver(&observer); |
562 | 504 |
563 TestingPrefServiceSyncable* const pref_service = | |
564 profile_->GetTestingPrefService(); | |
565 ASSERT_TRUE(pref_service); | |
566 | |
567 { | 505 { |
| 506 EXPECT_FALSE(registry_->file_system_info()); |
| 507 EXPECT_FALSE(registry_->observed_entries()); |
568 EXPECT_TRUE(service_->MountFileSystem( | 508 EXPECT_TRUE(service_->MountFileSystem( |
569 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); | 509 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
570 ASSERT_EQ(1u, observer.mounts.size()); | |
571 | 510 |
572 const base::DictionaryValue* extensions = | 511 EXPECT_EQ(1u, observer.mounts.size()); |
573 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 512 EXPECT_TRUE(registry_->file_system_info()); |
574 ASSERT_TRUE(extensions); | 513 EXPECT_TRUE(registry_->observed_entries()); |
575 | |
576 const base::DictionaryValue* file_systems = NULL; | |
577 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | |
578 &file_systems)); | |
579 EXPECT_EQ(1u, file_systems->size()); | |
580 } | 514 } |
581 | 515 |
582 { | 516 { |
583 EXPECT_TRUE(service_->UnmountFileSystem( | 517 EXPECT_TRUE(service_->UnmountFileSystem( |
584 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); | 518 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); |
585 | 519 |
586 const base::DictionaryValue* const extensions = | 520 EXPECT_EQ(1u, observer.unmounts.size()); |
587 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 521 EXPECT_FALSE(registry_->file_system_info()); |
588 ASSERT_TRUE(extensions); | 522 EXPECT_FALSE(registry_->observed_entries()); |
589 | |
590 const base::DictionaryValue* file_systems = NULL; | |
591 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | |
592 &file_systems)); | |
593 } | 523 } |
594 | 524 |
595 service_->RemoveObserver(&observer); | 525 service_->RemoveObserver(&observer); |
596 } | 526 } |
597 | 527 |
598 } // namespace file_system_provider | 528 } // namespace file_system_provider |
599 } // namespace chromeos | 529 } // namespace chromeos |
OLD | NEW |