Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Unified Diff: chrome/browser/chromeos/file_system_provider/service_unittest.cc

Issue 661393002: [fsp] Separate logic for saving/restoring state to a separate class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: C++11 features. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service.cc ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service.cc ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698