Chromium Code Reviews| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/files/file.h" | 8 #include "base/files/file.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 24 #include "extensions/common/extension.h" | 24 #include "extensions/common/extension.h" |
| 25 #include "extensions/common/manifest_constants.h" | 25 #include "extensions/common/manifest_constants.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "webkit/browser/fileapi/external_mount_points.h" | 27 #include "webkit/browser/fileapi/external_mount_points.h" |
| 28 | 28 |
| 29 namespace chromeos { | 29 namespace chromeos { |
| 30 namespace file_system_provider { | 30 namespace file_system_provider { |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; | 33 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; |
| 34 const char kFileSystemId[] = "camera/pictures/id !@#$%^&*()_+"; | |
| 35 const char kFileSystemName[] = "Camera Pictures"; | 34 const char kFileSystemName[] = "Camera Pictures"; |
| 36 | 35 |
| 36 // The dot in the file system ID is there in order to check that saving to | |
| 37 // preferences works correctly. File System ID is used as a key in | |
| 38 // a base::DictionaryValue, so it has to be stored without path expansion. | |
| 39 const char kFileSystemId[] = "camera/pictures/id .!@#$%^&*()_+"; | |
| 40 | |
| 37 // Utility observer, logging events from file_system_provider::Service. | 41 // Utility observer, logging events from file_system_provider::Service. |
| 38 class LoggingObserver : public Observer { | 42 class LoggingObserver : public Observer { |
| 39 public: | 43 public: |
| 40 class Event { | 44 class Event { |
| 41 public: | 45 public: |
| 42 Event(const ProvidedFileSystemInfo& file_system_info, | 46 Event(const ProvidedFileSystemInfo& file_system_info, |
| 43 base::File::Error error) | 47 base::File::Error error) |
| 44 : file_system_info_(file_system_info), error_(error) {} | 48 : file_system_info_(file_system_info), error_(error) {} |
| 45 ~Event() {} | 49 ~Event() {} |
| 46 | 50 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 91 | 95 |
| 92 // Stores a provided file system information in preferences. | 96 // Stores a provided file system information in preferences. |
| 93 void RememberFakeFileSystem(TestingProfile* profile, | 97 void RememberFakeFileSystem(TestingProfile* profile, |
| 94 const std::string& extension_id, | 98 const std::string& extension_id, |
| 95 const std::string& file_system_id, | 99 const std::string& file_system_id, |
| 96 const std::string& file_system_name) { | 100 const std::string& file_system_name) { |
| 97 TestingPrefServiceSyncable* pref_service = profile->GetTestingPrefService(); | 101 TestingPrefServiceSyncable* pref_service = profile->GetTestingPrefService(); |
| 98 ASSERT_TRUE(pref_service); | 102 ASSERT_TRUE(pref_service); |
| 99 | 103 |
| 100 base::DictionaryValue extensions; | 104 base::DictionaryValue extensions; |
| 101 base::ListValue* file_systems = new base::ListValue(); | 105 base::DictionaryValue* file_systems = new base::DictionaryValue(); |
| 102 base::DictionaryValue* file_system = new base::DictionaryValue(); | 106 base::DictionaryValue* file_system = new base::DictionaryValue(); |
| 103 file_system->SetString(kPrefKeyFileSystemId, kFileSystemId); | 107 file_system->SetString(kPrefKeyFileSystemId, kFileSystemId); |
| 104 file_system->SetString(kPrefKeyFileSystemName, kFileSystemName); | 108 file_system->SetString(kPrefKeyFileSystemName, kFileSystemName); |
| 105 file_systems->Append(file_system); | 109 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); |
| 106 extensions.Set(kExtensionId, file_systems); | 110 extensions.Set(kExtensionId, file_systems); |
| 107 | 111 |
| 108 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); | 112 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); |
| 109 } | 113 } |
| 110 | 114 |
| 111 } // namespace | 115 } // namespace |
| 112 | 116 |
| 113 class FileSystemProviderServiceTest : public testing::Test { | 117 class FileSystemProviderServiceTest : public testing::Test { |
| 114 protected: | 118 protected: |
| 115 FileSystemProviderServiceTest() {} | 119 FileSystemProviderServiceTest() {} |
| 116 virtual ~FileSystemProviderServiceTest() {} | 120 virtual ~FileSystemProviderServiceTest() {} |
| 117 | 121 |
| 118 virtual void SetUp() OVERRIDE { | 122 virtual void SetUp() OVERRIDE { |
| 119 profile_.reset(new TestingProfile); | 123 profile_.reset(new TestingProfile); |
| 120 user_manager_ = new FakeUserManager(); | 124 user_manager_ = new FakeUserManager(); |
| 121 user_manager_->AddUser(profile_->GetProfileName()); | 125 user_manager_->AddUser(profile_->GetProfileName()); |
| 122 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); | 126 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); |
| 123 extension_registry_.reset( | 127 extension_registry_.reset( |
| 124 new extensions::ExtensionRegistry(profile_.get())); | 128 new extensions::ExtensionRegistry(profile_.get())); |
| 125 file_system_provider_service_.reset( | 129 service_.reset(new Service(profile_.get(), extension_registry_.get())); |
| 126 new Service(profile_.get(), extension_registry_.get())); | 130 service_->SetFileSystemFactoryForTesting( |
| 127 file_system_provider_service_->SetFileSystemFactoryForTesting( | |
| 128 base::Bind(&FakeProvidedFileSystem::Create)); | 131 base::Bind(&FakeProvidedFileSystem::Create)); |
| 129 extension_ = createFakeExtension(kExtensionId); | 132 extension_ = createFakeExtension(kExtensionId); |
| 130 } | 133 } |
| 131 | 134 |
| 132 content::TestBrowserThreadBundle thread_bundle_; | 135 content::TestBrowserThreadBundle thread_bundle_; |
| 133 scoped_ptr<TestingProfile> profile_; | 136 scoped_ptr<TestingProfile> profile_; |
| 134 FakeUserManager* user_manager_; | 137 FakeUserManager* user_manager_; |
| 135 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; | 138 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; |
| 136 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; | 139 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; |
| 137 scoped_ptr<Service> file_system_provider_service_; | 140 scoped_ptr<Service> service_; |
| 138 scoped_refptr<extensions::Extension> extension_; | 141 scoped_refptr<extensions::Extension> extension_; |
| 139 }; | 142 }; |
| 140 | 143 |
| 141 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { | 144 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { |
| 142 LoggingObserver observer; | 145 LoggingObserver observer; |
| 143 file_system_provider_service_->AddObserver(&observer); | 146 service_->AddObserver(&observer); |
| 144 | 147 |
| 145 const bool result = file_system_provider_service_->MountFileSystem( | 148 const bool result = |
| 146 kExtensionId, kFileSystemId, kFileSystemName); | 149 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 147 EXPECT_TRUE(result); | 150 EXPECT_TRUE(result); |
| 148 | 151 |
| 149 ASSERT_EQ(1u, observer.mounts.size()); | 152 ASSERT_EQ(1u, observer.mounts.size()); |
| 150 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); | 153 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); |
| 151 EXPECT_EQ(kFileSystemId, | 154 EXPECT_EQ(kFileSystemId, |
| 152 observer.mounts[0].file_system_info().file_system_id()); | 155 observer.mounts[0].file_system_info().file_system_id()); |
| 153 base::FilePath expected_mount_path = | 156 base::FilePath expected_mount_path = |
| 154 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId); | 157 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId); |
| 155 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), | 158 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), |
| 156 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); | 159 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); |
| 157 EXPECT_EQ(kFileSystemName, | 160 EXPECT_EQ(kFileSystemName, |
| 158 observer.mounts[0].file_system_info().file_system_name()); | 161 observer.mounts[0].file_system_info().file_system_name()); |
| 159 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 162 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 160 ASSERT_EQ(0u, observer.unmounts.size()); | 163 ASSERT_EQ(0u, observer.unmounts.size()); |
| 161 | 164 |
| 162 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 165 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 163 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 166 service_->GetProvidedFileSystemInfoList(); |
| 164 ASSERT_EQ(1u, file_system_info_list.size()); | 167 ASSERT_EQ(1u, file_system_info_list.size()); |
| 165 | 168 |
| 166 file_system_provider_service_->RemoveObserver(&observer); | 169 service_->RemoveObserver(&observer); |
| 167 } | 170 } |
| 168 | 171 |
| 169 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { | 172 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { |
| 170 LoggingObserver observer; | 173 LoggingObserver observer; |
| 171 file_system_provider_service_->AddObserver(&observer); | 174 service_->AddObserver(&observer); |
| 172 | 175 |
| 173 const bool result = file_system_provider_service_->MountFileSystem( | 176 const bool result = |
| 174 kExtensionId, kFileSystemId, kFileSystemName); | 177 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 175 EXPECT_TRUE(result); | 178 EXPECT_TRUE(result); |
| 176 | 179 |
| 177 const bool second_result = file_system_provider_service_->MountFileSystem( | 180 const bool second_result = |
| 178 kExtensionId, kFileSystemId, kFileSystemName); | 181 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 179 EXPECT_FALSE(second_result); | 182 EXPECT_FALSE(second_result); |
| 180 | 183 |
| 181 ASSERT_EQ(2u, observer.mounts.size()); | 184 ASSERT_EQ(2u, observer.mounts.size()); |
| 182 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 185 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 183 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error()); | 186 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error()); |
| 184 | 187 |
| 185 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 188 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 186 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 189 service_->GetProvidedFileSystemInfoList(); |
| 187 ASSERT_EQ(1u, file_system_info_list.size()); | 190 ASSERT_EQ(1u, file_system_info_list.size()); |
| 188 | 191 |
| 189 file_system_provider_service_->RemoveObserver(&observer); | 192 service_->RemoveObserver(&observer); |
| 190 } | 193 } |
| 191 | 194 |
| 192 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { | 195 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { |
| 193 LoggingObserver observer; | 196 LoggingObserver observer; |
| 194 file_system_provider_service_->AddObserver(&observer); | 197 service_->AddObserver(&observer); |
| 195 | 198 |
| 196 const size_t kMaxFileSystems = 16; | 199 const size_t kMaxFileSystems = 16; |
| 197 for (size_t i = 0; i < kMaxFileSystems; ++i) { | 200 for (size_t i = 0; i < kMaxFileSystems; ++i) { |
| 198 const std::string file_system_id = | 201 const std::string file_system_id = |
| 199 std::string("test-") + base::IntToString(i); | 202 std::string("test-") + base::IntToString(i); |
| 200 const bool result = file_system_provider_service_->MountFileSystem( | 203 const bool result = service_->MountFileSystem( |
| 201 kExtensionId, file_system_id, kFileSystemName); | 204 kExtensionId, file_system_id, kFileSystemName); |
| 202 EXPECT_TRUE(result); | 205 EXPECT_TRUE(result); |
| 203 } | 206 } |
| 204 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); | 207 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); |
| 205 | 208 |
| 206 // The next file system is out of limit, and registering it should fail. | 209 // The next file system is out of limit, and registering it should fail. |
| 207 const bool result = file_system_provider_service_->MountFileSystem( | 210 const bool result = |
| 208 kExtensionId, kFileSystemId, kFileSystemName); | 211 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 209 EXPECT_FALSE(result); | 212 EXPECT_FALSE(result); |
| 210 | 213 |
| 211 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); | 214 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); |
| 212 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, | 215 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, |
| 213 observer.mounts[kMaxFileSystems].error()); | 216 observer.mounts[kMaxFileSystems].error()); |
| 214 | 217 |
| 215 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 218 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 216 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 219 service_->GetProvidedFileSystemInfoList(); |
| 217 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); | 220 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); |
| 218 | 221 |
| 219 file_system_provider_service_->RemoveObserver(&observer); | 222 service_->RemoveObserver(&observer); |
| 220 } | 223 } |
| 221 | 224 |
| 222 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { | 225 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { |
| 223 LoggingObserver observer; | 226 LoggingObserver observer; |
| 224 file_system_provider_service_->AddObserver(&observer); | 227 service_->AddObserver(&observer); |
| 225 | 228 |
| 226 const bool result = file_system_provider_service_->MountFileSystem( | 229 const bool result = |
| 227 kExtensionId, kFileSystemId, kFileSystemName); | 230 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 228 EXPECT_TRUE(result); | 231 EXPECT_TRUE(result); |
| 229 ASSERT_EQ(1u, observer.mounts.size()); | 232 ASSERT_EQ(1u, observer.mounts.size()); |
| 230 | 233 |
| 231 const bool unmount_result = file_system_provider_service_->UnmountFileSystem( | 234 const bool unmount_result = service_->UnmountFileSystem( |
| 232 kExtensionId, kFileSystemId); | 235 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER); |
| 233 EXPECT_TRUE(unmount_result); | 236 EXPECT_TRUE(unmount_result); |
| 234 ASSERT_EQ(1u, observer.unmounts.size()); | 237 ASSERT_EQ(1u, observer.unmounts.size()); |
| 235 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); | 238 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); |
| 236 | 239 |
| 237 EXPECT_EQ(kExtensionId, | 240 EXPECT_EQ(kExtensionId, |
| 238 observer.unmounts[0].file_system_info().extension_id()); | 241 observer.unmounts[0].file_system_info().extension_id()); |
| 239 EXPECT_EQ(kFileSystemId, | 242 EXPECT_EQ(kFileSystemId, |
| 240 observer.unmounts[0].file_system_info().file_system_id()); | 243 observer.unmounts[0].file_system_info().file_system_id()); |
| 241 | 244 |
| 242 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 245 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 243 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 246 service_->GetProvidedFileSystemInfoList(); |
| 244 ASSERT_EQ(0u, file_system_info_list.size()); | 247 ASSERT_EQ(0u, file_system_info_list.size()); |
| 245 | 248 |
| 246 file_system_provider_service_->RemoveObserver(&observer); | 249 service_->RemoveObserver(&observer); |
| 247 } | 250 } |
| 248 | 251 |
| 249 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { | 252 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { |
| 250 LoggingObserver observer; | 253 LoggingObserver observer; |
| 251 file_system_provider_service_->AddObserver(&observer); | 254 service_->AddObserver(&observer); |
| 252 | 255 |
| 253 const bool result = file_system_provider_service_->MountFileSystem( | 256 const bool result = |
| 254 kExtensionId, kFileSystemId, kFileSystemName); | 257 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 255 EXPECT_TRUE(result); | 258 EXPECT_TRUE(result); |
| 256 ASSERT_EQ(1u, observer.mounts.size()); | 259 ASSERT_EQ(1u, observer.mounts.size()); |
| 257 | 260 |
| 258 // Directly call the observer's method. | 261 // Directly call the observer's method. |
| 259 file_system_provider_service_->OnExtensionUnloaded( | 262 service_->OnExtensionUnloaded( |
| 260 profile_.get(), | 263 profile_.get(), |
| 261 extension_.get(), | 264 extension_.get(), |
| 262 extensions::UnloadedExtensionInfo::REASON_DISABLE); | 265 extensions::UnloadedExtensionInfo::REASON_DISABLE); |
| 263 | 266 |
| 264 ASSERT_EQ(1u, observer.unmounts.size()); | 267 ASSERT_EQ(1u, observer.unmounts.size()); |
| 265 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); | 268 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); |
| 266 | 269 |
| 267 EXPECT_EQ(kExtensionId, | 270 EXPECT_EQ(kExtensionId, |
| 268 observer.unmounts[0].file_system_info().extension_id()); | 271 observer.unmounts[0].file_system_info().extension_id()); |
| 269 EXPECT_EQ(kFileSystemId, | 272 EXPECT_EQ(kFileSystemId, |
| 270 observer.unmounts[0].file_system_info().file_system_id()); | 273 observer.unmounts[0].file_system_info().file_system_id()); |
| 271 | 274 |
| 272 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 275 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 273 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 276 service_->GetProvidedFileSystemInfoList(); |
| 274 ASSERT_EQ(0u, file_system_info_list.size()); | 277 ASSERT_EQ(0u, file_system_info_list.size()); |
| 275 | 278 |
| 276 file_system_provider_service_->RemoveObserver(&observer); | 279 service_->RemoveObserver(&observer); |
| 277 } | 280 } |
| 278 | 281 |
| 279 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { | 282 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { |
| 280 LoggingObserver observer; | 283 LoggingObserver observer; |
| 281 file_system_provider_service_->AddObserver(&observer); | 284 service_->AddObserver(&observer); |
| 282 | 285 |
| 283 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; | 286 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; |
| 284 | 287 |
| 285 const bool result = file_system_provider_service_->MountFileSystem( | 288 const bool result = |
| 286 kExtensionId, kFileSystemId, kFileSystemName); | 289 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 287 EXPECT_TRUE(result); | 290 EXPECT_TRUE(result); |
| 288 ASSERT_EQ(1u, observer.mounts.size()); | 291 ASSERT_EQ(1u, observer.mounts.size()); |
| 289 ASSERT_EQ( | 292 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); |
| 290 1u, | |
| 291 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); | |
| 292 | 293 |
| 293 const bool unmount_result = file_system_provider_service_->UnmountFileSystem( | 294 const bool unmount_result = service_->UnmountFileSystem( |
| 294 kWrongExtensionId, kFileSystemId); | 295 kWrongExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER); |
| 295 EXPECT_FALSE(unmount_result); | 296 EXPECT_FALSE(unmount_result); |
| 296 ASSERT_EQ(1u, observer.unmounts.size()); | 297 ASSERT_EQ(1u, observer.unmounts.size()); |
| 297 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); | 298 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); |
| 298 ASSERT_EQ( | 299 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); |
| 299 1u, | |
| 300 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); | |
| 301 | 300 |
| 302 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 301 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 303 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 302 service_->GetProvidedFileSystemInfoList(); |
| 304 ASSERT_EQ(1u, file_system_info_list.size()); | 303 ASSERT_EQ(1u, file_system_info_list.size()); |
| 305 | 304 |
| 306 file_system_provider_service_->RemoveObserver(&observer); | 305 service_->RemoveObserver(&observer); |
| 307 } | 306 } |
| 308 | 307 |
| 309 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { | 308 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { |
| 310 LoggingObserver observer; | |
| 311 file_system_provider_service_->AddObserver(&observer); | |
| 312 | |
| 313 // Create a fake entry in the preferences. | 309 // Create a fake entry in the preferences. |
| 314 RememberFakeFileSystem( | 310 RememberFakeFileSystem( |
| 315 profile_.get(), kExtensionId, kFileSystemId, kFileSystemName); | 311 profile_.get(), kExtensionId, kFileSystemId, kFileSystemName); |
| 316 | 312 |
| 313 // Create a new service instance in order to load remembered file systems | |
| 314 // from preferences. | |
| 315 scoped_ptr<Service> file_system_provider_service( | |
| 316 new Service(profile_.get(), extension_registry_.get())); | |
| 317 LoggingObserver observer; | |
| 318 file_system_provider_service->AddObserver(&observer); | |
| 319 | |
| 320 file_system_provider_service->SetFileSystemFactoryForTesting( | |
| 321 base::Bind(&FakeProvidedFileSystem::Create)); | |
| 322 | |
| 317 EXPECT_EQ(0u, observer.mounts.size()); | 323 EXPECT_EQ(0u, observer.mounts.size()); |
| 318 | 324 |
| 319 // Directly call the observer's method. | 325 // Directly call the observer's method. |
| 320 file_system_provider_service_->OnExtensionLoaded(profile_.get(), | 326 file_system_provider_service->OnExtensionLoaded(profile_.get(), |
| 321 extension_.get()); | 327 extension_.get()); |
| 322 | 328 |
| 323 ASSERT_EQ(1u, observer.mounts.size()); | 329 ASSERT_EQ(1u, observer.mounts.size()); |
| 324 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 330 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 325 | 331 |
| 326 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); | 332 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); |
| 327 EXPECT_EQ(kFileSystemId, | 333 EXPECT_EQ(kFileSystemId, |
| 328 observer.mounts[0].file_system_info().file_system_id()); | 334 observer.mounts[0].file_system_info().file_system_id()); |
| 329 | 335 |
| 330 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 336 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 331 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 337 file_system_provider_service->GetProvidedFileSystemInfoList(); |
| 332 ASSERT_EQ(1u, file_system_info_list.size()); | 338 ASSERT_EQ(1u, file_system_info_list.size()); |
| 333 | 339 |
| 334 file_system_provider_service_->RemoveObserver(&observer); | 340 file_system_provider_service->RemoveObserver(&observer); |
| 335 } | 341 } |
| 336 | 342 |
| 337 TEST_F(FileSystemProviderServiceTest, ForgetFileSystem_OnExtensionUnload) { | 343 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { |
| 338 LoggingObserver observer; | 344 LoggingObserver observer; |
| 339 file_system_provider_service_->AddObserver(&observer); | 345 service_->AddObserver(&observer); |
| 340 | 346 |
| 341 // Create a fake entry in the preferences. | 347 const bool result = |
| 342 RememberFakeFileSystem( | 348 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); |
| 343 profile_.get(), kExtensionId, kFileSystemId, kFileSystemName); | 349 EXPECT_TRUE(result); |
|
hashimoto
2014/07/07 11:07:46
nit: EXPECT_TRUE(service_->MountFileSystem())?
mtomasz
2014/07/08 01:52:09
Done.
| |
| 350 ASSERT_EQ(1u, observer.mounts.size()); | |
| 344 | 351 |
| 345 // Directly call the observer's methods. | 352 TestingPrefServiceSyncable* const pref_service = |
|
hashimoto
2014/07/07 11:07:46
nit: No need to have const here. We don't usually
mtomasz
2014/07/08 01:52:09
I try to keep File System Provider API code const
| |
| 346 file_system_provider_service_->OnExtensionLoaded(profile_.get(), | 353 profile_->GetTestingPrefService(); |
| 347 extension_.get()); | |
| 348 | |
| 349 file_system_provider_service_->OnExtensionUnloaded( | |
| 350 profile_.get(), | |
| 351 extension_.get(), | |
| 352 extensions::UnloadedExtensionInfo::REASON_DISABLE); | |
| 353 | |
| 354 ASSERT_EQ(1u, observer.mounts.size()); | |
| 355 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | |
| 356 ASSERT_EQ(1u, observer.unmounts.size()); | |
| 357 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); | |
| 358 | |
| 359 TestingPrefServiceSyncable* pref_service = profile_->GetTestingPrefService(); | |
| 360 ASSERT_TRUE(pref_service); | 354 ASSERT_TRUE(pref_service); |
| 361 | 355 |
| 362 const base::DictionaryValue* extensions = | 356 const base::DictionaryValue* const extensions = |
| 363 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 357 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
| 364 ASSERT_TRUE(extensions); | 358 ASSERT_TRUE(extensions); |
| 365 | 359 |
| 366 const base::ListValue* file_systems; | 360 const base::DictionaryValue* file_systems; |
|
hashimoto
2014/07/07 11:07:46
nit: Initialize with NULL.
mtomasz
2014/07/08 01:52:09
Done.
| |
| 367 EXPECT_FALSE(extensions->GetList(kExtensionId, &file_systems)); | 361 ASSERT_TRUE(extensions->GetDictionary(kExtensionId, &file_systems)); |
| 362 ASSERT_EQ(1u, file_systems->size()); | |
|
hashimoto
2014/07/07 11:07:46
nit: Can be EXPECT.
mtomasz
2014/07/08 01:52:09
Done.
| |
| 368 | 363 |
| 369 file_system_provider_service_->RemoveObserver(&observer); | 364 const base::Value* file_system_value = NULL; |
| 370 } | |
| 371 | |
| 372 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnShutdown) { | |
| 373 { | |
| 374 scoped_ptr<Service> service( | |
| 375 new Service(profile_.get(), extension_registry_.get())); | |
| 376 service->SetFileSystemFactoryForTesting( | |
| 377 base::Bind(&FakeProvidedFileSystem::Create)); | |
| 378 | |
| 379 LoggingObserver observer; | |
| 380 service->AddObserver(&observer); | |
| 381 | |
| 382 const bool result = | |
| 383 service->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); | |
| 384 EXPECT_TRUE(result); | |
| 385 ASSERT_EQ(1u, observer.mounts.size()); | |
| 386 | |
| 387 service->RemoveObserver(&observer); | |
| 388 } | |
| 389 | |
| 390 TestingPrefServiceSyncable* pref_service = profile_->GetTestingPrefService(); | |
| 391 ASSERT_TRUE(pref_service); | |
| 392 | |
| 393 const base::DictionaryValue* extensions = | |
| 394 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | |
| 395 ASSERT_TRUE(extensions); | |
| 396 | |
| 397 const base::ListValue* file_systems; | |
| 398 ASSERT_TRUE(extensions->GetList(kExtensionId, &file_systems)); | |
| 399 ASSERT_EQ(1u, file_systems->GetSize()); | |
| 400 | |
| 401 const base::DictionaryValue* file_system = NULL; | 365 const base::DictionaryValue* file_system = NULL; |
| 402 ASSERT_TRUE(file_systems->GetDictionary(0, &file_system)); | 366 ASSERT_TRUE( |
| 367 file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value)); | |
| 368 ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system)); | |
| 403 | 369 |
| 404 std::string file_system_id; | 370 std::string file_system_id; |
| 405 file_system->GetString(kPrefKeyFileSystemId, &file_system_id); | 371 file_system->GetString(kPrefKeyFileSystemId, &file_system_id); |
| 406 EXPECT_EQ(kFileSystemId, file_system_id); | 372 EXPECT_EQ(kFileSystemId, file_system_id); |
| 407 | 373 |
| 408 std::string file_system_name; | 374 std::string file_system_name; |
| 409 file_system->GetString(kPrefKeyFileSystemName, &file_system_name); | 375 file_system->GetString(kPrefKeyFileSystemName, &file_system_name); |
| 410 EXPECT_EQ(kFileSystemName, file_system_name); | 376 EXPECT_EQ(kFileSystemName, file_system_name); |
| 377 | |
| 378 service_->RemoveObserver(&observer); | |
| 379 } | |
| 380 | |
| 381 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { | |
| 382 LoggingObserver observer; | |
| 383 service_->AddObserver(&observer); | |
| 384 | |
| 385 TestingPrefServiceSyncable* const pref_service = | |
| 386 profile_->GetTestingPrefService(); | |
| 387 ASSERT_TRUE(pref_service); | |
| 388 | |
| 389 { | |
|
hashimoto
2014/07/07 11:07:46
No need to have this scope.
mtomasz
2014/07/08 01:52:09
Having a scope here allows to have the same variab
| |
| 390 const bool mount_result = | |
| 391 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); | |
| 392 EXPECT_TRUE(mount_result); | |
| 393 ASSERT_EQ(1u, observer.mounts.size()); | |
| 394 | |
| 395 const base::DictionaryValue* extensions = | |
| 396 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | |
| 397 ASSERT_TRUE(extensions); | |
| 398 | |
| 399 const base::DictionaryValue* file_systems; | |
|
hashimoto
2014/07/07 11:07:46
nit: Initialize with NULL.
mtomasz
2014/07/08 01:52:09
Done.
| |
| 400 ASSERT_TRUE(extensions->GetDictionary(kExtensionId, &file_systems)); | |
| 401 EXPECT_EQ(1u, file_systems->size()); | |
| 402 } | |
| 403 | |
| 404 { | |
| 405 const bool unmount_result = service_->UnmountFileSystem( | |
| 406 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_SHUTDOWN); | |
| 407 EXPECT_TRUE(unmount_result); | |
| 408 | |
| 409 const base::DictionaryValue* const extensions = | |
| 410 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | |
| 411 ASSERT_TRUE(extensions); | |
| 412 | |
| 413 const base::DictionaryValue* file_systems; | |
| 414 ASSERT_TRUE(extensions->GetDictionary(kExtensionId, &file_systems)); | |
| 415 EXPECT_EQ(1u, file_systems->size()); | |
| 416 } | |
| 417 | |
| 418 service_->RemoveObserver(&observer); | |
| 419 } | |
| 420 | |
| 421 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { | |
| 422 LoggingObserver observer; | |
| 423 service_->AddObserver(&observer); | |
| 424 | |
| 425 TestingPrefServiceSyncable* const pref_service = | |
| 426 profile_->GetTestingPrefService(); | |
| 427 ASSERT_TRUE(pref_service); | |
| 428 | |
| 429 { | |
| 430 const bool mount_result = | |
| 431 service_->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); | |
| 432 EXPECT_TRUE(mount_result); | |
| 433 ASSERT_EQ(1u, observer.mounts.size()); | |
| 434 | |
| 435 const base::DictionaryValue* extensions = | |
| 436 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | |
| 437 ASSERT_TRUE(extensions); | |
| 438 | |
| 439 const base::DictionaryValue* file_systems; | |
| 440 ASSERT_TRUE(extensions->GetDictionary(kExtensionId, &file_systems)); | |
| 441 EXPECT_EQ(1u, file_systems->size()); | |
| 442 } | |
| 443 | |
| 444 { | |
| 445 const bool unmount_result = service_->UnmountFileSystem( | |
| 446 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER); | |
| 447 EXPECT_TRUE(unmount_result); | |
| 448 | |
| 449 const base::DictionaryValue* const extensions = | |
| 450 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | |
| 451 ASSERT_TRUE(extensions); | |
| 452 | |
| 453 const base::DictionaryValue* file_systems; | |
| 454 EXPECT_FALSE(extensions->GetDictionary(kExtensionId, &file_systems)); | |
| 455 } | |
| 456 | |
| 457 service_->RemoveObserver(&observer); | |
| 411 } | 458 } |
| 412 | 459 |
| 413 } // namespace file_system_provider | 460 } // namespace file_system_provider |
| 414 } // namespace chromeos | 461 } // namespace chromeos |
| OLD | NEW |