Index: chrome/browser/chromeos/file_system_provider/service_unittest.cc |
diff --git a/chrome/browser/chromeos/file_system_provider/service_unittest.cc b/chrome/browser/chromeos/file_system_provider/service_unittest.cc |
index 4160b45880b7855cfad1dc32592c8598beba4829..d90bb5540abaecbec972a83b9be3212edfb75946 100644 |
--- a/chrome/browser/chromeos/file_system_provider/service_unittest.cc |
+++ b/chrome/browser/chromeos/file_system_provider/service_unittest.cc |
@@ -15,6 +15,7 @@ |
#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" |
#include "chrome/browser/chromeos/file_system_provider/observer.h" |
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" |
+#include "chrome/browser/chromeos/file_system_provider/registry_interface.h" |
#include "chrome/browser/chromeos/login/users/fake_user_manager.h" |
#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" |
#include "chrome/common/pref_names.h" |
@@ -82,6 +83,78 @@ class LoggingObserver : public Observer { |
std::vector<Event> unmounts; |
}; |
+// Fake implementation of the registry, since it's already tested separately. |
+// For simplicity it can remember at most only one file system. |
+class FakeRegistry : public RegistryInterface { |
+ public: |
+ FakeRegistry() {} |
+ virtual ~FakeRegistry() {} |
+ |
+ // RegistryInterface overrides. |
+ virtual void RememberFileSystem( |
+ const ProvidedFileSystemInfo& file_system_info, |
+ const ObservedEntries& observed_entries) override { |
+ file_system_info_.reset(new ProvidedFileSystemInfo(file_system_info)); |
+ observed_entries_.reset(new ObservedEntries(observed_entries)); |
+ } |
+ |
+ virtual void ForgetFileSystem(const std::string& extension_id, |
+ const std::string& file_system_id) override { |
+ if (!file_system_info_.get() || !observed_entries_.get()) |
+ return; |
+ if (file_system_info_->extension_id() == extension_id && |
+ file_system_info_->file_system_id() == file_system_id) { |
+ file_system_info_.reset(); |
+ observed_entries_.reset(); |
+ } |
+ } |
+ |
+ virtual scoped_ptr<RestoredFileSystems> RestoreFileSystems( |
+ const std::string& extension_id) override { |
+ scoped_ptr<RestoredFileSystems> result(new RestoredFileSystems); |
+ |
+ if (file_system_info_.get() && observed_entries_.get()) { |
+ RestoredFileSystem restored_file_system; |
+ restored_file_system.extension_id = file_system_info_->extension_id(); |
+ |
+ MountOptions options; |
+ options.file_system_id = file_system_info_->file_system_id(); |
+ options.display_name = file_system_info_->display_name(); |
+ options.writable = file_system_info_->writable(); |
+ options.supports_notify_tag = file_system_info_->supports_notify_tag(); |
+ restored_file_system.options = options; |
+ restored_file_system.observed_entries = *observed_entries_.get(); |
+ |
+ result->push_back(restored_file_system); |
+ } |
+ |
+ return result; |
+ } |
+ |
+ virtual void UpdateObservedEntryTag( |
+ const ProvidedFileSystemInfo& file_system_info, |
+ const ObservedEntry& observed_entry) override { |
+ ASSERT_TRUE(observed_entries_.get()); |
+ const ObservedEntries::iterator it = |
+ observed_entries_->find(observed_entry.entry_path); |
+ ASSERT_NE(observed_entries_->end(), it); |
+ it->second.last_tag = observed_entry.last_tag; |
+ } |
+ |
+ ProvidedFileSystemInfo* const file_system_info() const { |
+ return file_system_info_.get(); |
+ } |
+ ObservedEntries* const observed_entries() const { |
+ return observed_entries_.get(); |
+ } |
+ |
+ private: |
+ scoped_ptr<ProvidedFileSystemInfo> file_system_info_; |
+ scoped_ptr<ObservedEntries> observed_entries_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeRegistry); |
+}; |
+ |
// Creates a fake extension with the specified |extension_id|. |
scoped_refptr<extensions::Extension> CreateFakeExtension( |
const std::string& extension_id) { |
@@ -99,49 +172,6 @@ scoped_refptr<extensions::Extension> CreateFakeExtension( |
&error); |
} |
-// Stores a provided file system information in preferences together with a |
-// fake observed entry. |
-void RememberFakeFileSystem(TestingProfile* profile, |
- const std::string& extension_id, |
- const std::string& file_system_id, |
- const std::string& display_name, |
- bool writable, |
- bool supports_notify_tag, |
- const ObservedEntry& observed_entry) { |
- TestingPrefServiceSyncable* const pref_service = |
- profile->GetTestingPrefService(); |
- ASSERT_TRUE(pref_service); |
- |
- base::DictionaryValue extensions; |
- base::DictionaryValue* file_systems = new base::DictionaryValue(); |
- base::DictionaryValue* file_system = new base::DictionaryValue(); |
- file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, |
- kFileSystemId); |
- file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); |
- file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable); |
- file_system->SetBooleanWithoutPathExpansion(kPrefKeySupportsNotifyTag, |
- supports_notify_tag); |
- file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); |
- extensions.SetWithoutPathExpansion(kExtensionId, file_systems); |
- |
- // Remember observed entries. |
- base::DictionaryValue* const observed_entries = new base::DictionaryValue(); |
- file_system->SetWithoutPathExpansion(kPrefKeyObservedEntries, |
- observed_entries); |
- base::DictionaryValue* const observed_entry_value = |
- new base::DictionaryValue(); |
- observed_entries->SetWithoutPathExpansion(observed_entry.entry_path.value(), |
- observed_entry_value); |
- observed_entry_value->SetStringWithoutPathExpansion( |
- kPrefKeyObservedEntryEntryPath, observed_entry.entry_path.value()); |
- observed_entry_value->SetBooleanWithoutPathExpansion( |
- kPrefKeyObservedEntryRecursive, observed_entry.recursive); |
- observed_entry_value->SetStringWithoutPathExpansion( |
- kPrefKeyObservedEntryLastTag, observed_entry.last_tag); |
- |
- pref_service->Set(prefs::kFileSystemProviderMounted, extensions); |
-} |
- |
} // namespace |
class FileSystemProviderServiceTest : public testing::Test { |
@@ -159,10 +189,16 @@ class FileSystemProviderServiceTest : public testing::Test { |
user_manager_->AddUser(profile_->GetProfileName()); |
user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); |
extension_registry_.reset(new extensions::ExtensionRegistry(profile_)); |
+ |
service_.reset(new Service(profile_, extension_registry_.get())); |
service_->SetFileSystemFactoryForTesting( |
base::Bind(&FakeProvidedFileSystem::Create)); |
extension_ = CreateFakeExtension(kExtensionId); |
+ |
+ registry_ = new FakeRegistry; |
+ // Passes ownership to the service instance. |
+ service_->SetRegistryForTesting(make_scoped_ptr(registry_)); |
+ |
fake_observed_entry_.entry_path = |
base::FilePath(FILE_PATH_LITERAL("/a/b/c")); |
fake_observed_entry_.recursive = true; |
@@ -177,6 +213,7 @@ class FileSystemProviderServiceTest : public testing::Test { |
scoped_ptr<extensions::ExtensionRegistry> extension_registry_; |
scoped_ptr<Service> service_; |
scoped_refptr<extensions::Extension> extension_; |
+ FakeRegistry* registry_; // Owned by Service. |
ObservedEntry fake_observed_entry_; |
}; |
@@ -356,45 +393,41 @@ TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { |
} |
TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { |
- // Create a fake entry in the preferences. |
- RememberFakeFileSystem(profile_, |
- kExtensionId, |
- kFileSystemId, |
- kDisplayName, |
- true /* writable */, |
- true /* supports_notify_tag */, |
- fake_observed_entry_); |
- |
- // Create a new service instance in order to load remembered file systems |
- // from preferences. |
- scoped_ptr<Service> new_service( |
- new Service(profile_, extension_registry_.get())); |
LoggingObserver observer; |
- new_service->AddObserver(&observer); |
+ service_->AddObserver(&observer); |
- new_service->SetFileSystemFactoryForTesting( |
- base::Bind(&FakeProvidedFileSystem::Create)); |
+ // Remember a fake file system first in order to be able to restore it. |
+ MountOptions options(kFileSystemId, kDisplayName); |
+ options.supports_notify_tag = true; |
+ ProvidedFileSystemInfo file_system_info( |
+ kExtensionId, options, base::FilePath(FILE_PATH_LITERAL("/a/b/c"))); |
+ ObservedEntries fake_observed_entries; |
+ fake_observed_entries[fake_observed_entry_.entry_path] = fake_observed_entry_; |
+ registry_->RememberFileSystem(file_system_info, fake_observed_entries); |
EXPECT_EQ(0u, observer.mounts.size()); |
// Directly call the observer's method. |
- new_service->OnExtensionLoaded(profile_, extension_.get()); |
+ service_->OnExtensionLoaded(profile_, extension_.get()); |
ASSERT_EQ(1u, observer.mounts.size()); |
EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
- EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); |
- EXPECT_EQ(kFileSystemId, |
+ EXPECT_EQ(file_system_info.extension_id(), |
+ observer.mounts[0].file_system_info().extension_id()); |
+ EXPECT_EQ(file_system_info.file_system_id(), |
observer.mounts[0].file_system_info().file_system_id()); |
- EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); |
- EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag()); |
+ EXPECT_EQ(file_system_info.writable(), |
+ observer.mounts[0].file_system_info().writable()); |
+ EXPECT_EQ(file_system_info.supports_notify_tag(), |
+ observer.mounts[0].file_system_info().supports_notify_tag()); |
std::vector<ProvidedFileSystemInfo> file_system_info_list = |
- new_service->GetProvidedFileSystemInfoList(); |
+ service_->GetProvidedFileSystemInfoList(); |
ASSERT_EQ(1u, file_system_info_list.size()); |
ProvidedFileSystemInterface* const file_system = |
- new_service->GetProvidedFileSystem(kExtensionId, kFileSystemId); |
+ service_->GetProvidedFileSystem(kExtensionId, kFileSystemId); |
ASSERT_TRUE(file_system); |
const ObservedEntries* const observed_entries = |
@@ -413,105 +446,27 @@ TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { |
EXPECT_EQ(fake_observed_entry_.last_tag, |
restored_observed_entry_it->second.last_tag); |
- new_service->RemoveObserver(&observer); |
-} |
- |
-TEST_F(FileSystemProviderServiceTest, RememberFileSystem) { |
- MountOptions options(kFileSystemId, kDisplayName); |
- options.writable = true; |
- options.supports_notify_tag = true; |
- |
- ProvidedFileSystemInfo file_system_info( |
- kExtensionId, options, base::FilePath(FILE_PATH_LITERAL("/a/b/c"))); |
- |
- ObservedEntries observed_entries; |
- observed_entries[fake_observed_entry_.entry_path] = fake_observed_entry_; |
- |
- service_->RememberFileSystem(file_system_info, observed_entries); |
- |
- TestingPrefServiceSyncable* const pref_service = |
- profile_->GetTestingPrefService(); |
- ASSERT_TRUE(pref_service); |
- |
- const base::DictionaryValue* const extensions = |
- pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
- ASSERT_TRUE(extensions); |
- |
- const base::DictionaryValue* file_systems = NULL; |
- ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
- &file_systems)); |
- EXPECT_EQ(1u, file_systems->size()); |
- |
- const base::Value* file_system_value = NULL; |
- const base::DictionaryValue* file_system = NULL; |
- ASSERT_TRUE( |
- file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value)); |
- ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system)); |
- |
- std::string file_system_id; |
- EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId, |
- &file_system_id)); |
- EXPECT_EQ(kFileSystemId, file_system_id); |
- |
- std::string display_name; |
- EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName, |
- &display_name)); |
- EXPECT_EQ(kDisplayName, display_name); |
- |
- bool writable = false; |
- EXPECT_TRUE( |
- file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); |
- EXPECT_TRUE(writable); |
- |
- bool supports_notify_tag = false; |
- EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion( |
- kPrefKeySupportsNotifyTag, &supports_notify_tag)); |
- EXPECT_TRUE(supports_notify_tag); |
- |
- const base::DictionaryValue* observed_entries_value = NULL; |
- ASSERT_TRUE(file_system->GetDictionaryWithoutPathExpansion( |
- kPrefKeyObservedEntries, &observed_entries_value)); |
- |
- const base::DictionaryValue* observed_entry = NULL; |
- ASSERT_TRUE(observed_entries_value->GetDictionaryWithoutPathExpansion( |
- fake_observed_entry_.entry_path.value(), &observed_entry)); |
- |
- std::string entry_path; |
- EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion( |
- kPrefKeyObservedEntryEntryPath, &entry_path)); |
- EXPECT_EQ(fake_observed_entry_.entry_path.value(), entry_path); |
- |
- bool recursive = false; |
- EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion( |
- kPrefKeyObservedEntryRecursive, &recursive)); |
- EXPECT_EQ(fake_observed_entry_.recursive, recursive); |
- |
- std::string last_tag; |
- EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion( |
- kPrefKeyObservedEntryLastTag, &last_tag)); |
- EXPECT_EQ(fake_observed_entry_.last_tag, last_tag); |
+ service_->RemoveObserver(&observer); |
} |
TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { |
LoggingObserver observer; |
service_->AddObserver(&observer); |
- TestingPrefServiceSyncable* const pref_service = |
- profile_->GetTestingPrefService(); |
- ASSERT_TRUE(pref_service); |
+ EXPECT_FALSE(registry_->file_system_info()); |
+ EXPECT_FALSE(registry_->observed_entries()); |
EXPECT_TRUE(service_->MountFileSystem( |
kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
ASSERT_EQ(1u, observer.mounts.size()); |
- const base::DictionaryValue* extensions = |
- pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
- ASSERT_TRUE(extensions); |
- |
- const base::DictionaryValue* file_systems = NULL; |
- ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
- &file_systems)); |
- EXPECT_EQ(1u, file_systems->size()); |
+ ASSERT_TRUE(registry_->file_system_info()); |
+ EXPECT_EQ(kExtensionId, registry_->file_system_info()->extension_id()); |
+ EXPECT_EQ(kFileSystemId, registry_->file_system_info()->file_system_id()); |
+ EXPECT_EQ(kDisplayName, registry_->file_system_info()->display_name()); |
+ EXPECT_FALSE(registry_->file_system_info()->writable()); |
+ EXPECT_FALSE(registry_->file_system_info()->supports_notify_tag()); |
+ ASSERT_TRUE(registry_->observed_entries()); |
service_->RemoveObserver(&observer); |
} |
@@ -520,37 +475,24 @@ TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { |
LoggingObserver observer; |
service_->AddObserver(&observer); |
- TestingPrefServiceSyncable* const pref_service = |
- profile_->GetTestingPrefService(); |
- ASSERT_TRUE(pref_service); |
- |
{ |
+ EXPECT_FALSE(registry_->file_system_info()); |
+ EXPECT_FALSE(registry_->observed_entries()); |
EXPECT_TRUE(service_->MountFileSystem( |
kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
- ASSERT_EQ(1u, observer.mounts.size()); |
- const base::DictionaryValue* extensions = |
- pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
- ASSERT_TRUE(extensions); |
- |
- const base::DictionaryValue* file_systems = NULL; |
- ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
- &file_systems)); |
- EXPECT_EQ(1u, file_systems->size()); |
+ EXPECT_EQ(1u, observer.mounts.size()); |
+ EXPECT_TRUE(registry_->file_system_info()); |
+ EXPECT_TRUE(registry_->observed_entries()); |
} |
{ |
EXPECT_TRUE(service_->UnmountFileSystem( |
kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_SHUTDOWN)); |
- const base::DictionaryValue* const extensions = |
- pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
- ASSERT_TRUE(extensions); |
- |
- const base::DictionaryValue* file_systems = NULL; |
- ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
- &file_systems)); |
- EXPECT_EQ(1u, file_systems->size()); |
+ EXPECT_EQ(1u, observer.unmounts.size()); |
+ EXPECT_TRUE(registry_->file_system_info()); |
+ EXPECT_TRUE(registry_->observed_entries()); |
} |
service_->RemoveObserver(&observer); |
@@ -560,36 +502,24 @@ TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { |
LoggingObserver observer; |
service_->AddObserver(&observer); |
- TestingPrefServiceSyncable* const pref_service = |
- profile_->GetTestingPrefService(); |
- ASSERT_TRUE(pref_service); |
- |
{ |
+ EXPECT_FALSE(registry_->file_system_info()); |
+ EXPECT_FALSE(registry_->observed_entries()); |
EXPECT_TRUE(service_->MountFileSystem( |
kExtensionId, MountOptions(kFileSystemId, kDisplayName))); |
- ASSERT_EQ(1u, observer.mounts.size()); |
- |
- const base::DictionaryValue* extensions = |
- pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
- ASSERT_TRUE(extensions); |
- const base::DictionaryValue* file_systems = NULL; |
- ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
- &file_systems)); |
- EXPECT_EQ(1u, file_systems->size()); |
+ EXPECT_EQ(1u, observer.mounts.size()); |
+ EXPECT_TRUE(registry_->file_system_info()); |
+ EXPECT_TRUE(registry_->observed_entries()); |
} |
{ |
EXPECT_TRUE(service_->UnmountFileSystem( |
kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); |
- const base::DictionaryValue* const extensions = |
- pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
- ASSERT_TRUE(extensions); |
- |
- const base::DictionaryValue* file_systems = NULL; |
- EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
- &file_systems)); |
+ EXPECT_EQ(1u, observer.unmounts.size()); |
+ EXPECT_FALSE(registry_->file_system_info()); |
+ EXPECT_FALSE(registry_->observed_entries()); |
} |
service_->RemoveObserver(&observer); |