| 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" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 extensions::Extension::NO_FLAGS, | 97 extensions::Extension::NO_FLAGS, |
| 98 extension_id, | 98 extension_id, |
| 99 &error); | 99 &error); |
| 100 } | 100 } |
| 101 | 101 |
| 102 // Stores a provided file system information in preferences. | 102 // Stores a provided file system information in preferences. |
| 103 void RememberFakeFileSystem(TestingProfile* profile, | 103 void RememberFakeFileSystem(TestingProfile* profile, |
| 104 const std::string& extension_id, | 104 const std::string& extension_id, |
| 105 const std::string& file_system_id, | 105 const std::string& file_system_id, |
| 106 const std::string& display_name, | 106 const std::string& display_name, |
| 107 bool writable) { | 107 bool writable, |
| 108 bool supports_notify_tag) { |
| 108 TestingPrefServiceSyncable* const pref_service = | 109 TestingPrefServiceSyncable* const pref_service = |
| 109 profile->GetTestingPrefService(); | 110 profile->GetTestingPrefService(); |
| 110 ASSERT_TRUE(pref_service); | 111 ASSERT_TRUE(pref_service); |
| 111 | 112 |
| 112 base::DictionaryValue extensions; | 113 base::DictionaryValue extensions; |
| 113 base::DictionaryValue* file_systems = new base::DictionaryValue(); | 114 base::DictionaryValue* file_systems = new base::DictionaryValue(); |
| 114 base::DictionaryValue* file_system = new base::DictionaryValue(); | 115 base::DictionaryValue* file_system = new base::DictionaryValue(); |
| 115 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, | 116 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, |
| 116 kFileSystemId); | 117 kFileSystemId); |
| 117 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); | 118 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); |
| 118 file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable); | 119 file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable); |
| 120 file_system->SetBooleanWithoutPathExpansion(kPrefKeySupportsNotifyTag, |
| 121 supports_notify_tag); |
| 119 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); | 122 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); |
| 120 extensions.SetWithoutPathExpansion(kExtensionId, file_systems); | 123 extensions.SetWithoutPathExpansion(kExtensionId, file_systems); |
| 121 | 124 |
| 122 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); | 125 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); |
| 123 } | 126 } |
| 124 | 127 |
| 125 } // namespace | 128 } // namespace |
| 126 | 129 |
| 127 class FileSystemProviderServiceTest : public testing::Test { | 130 class FileSystemProviderServiceTest : public testing::Test { |
| 128 protected: | 131 protected: |
| (...skipping 23 matching lines...) Expand all Loading... |
| 152 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; | 155 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; |
| 153 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; | 156 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; |
| 154 scoped_ptr<Service> service_; | 157 scoped_ptr<Service> service_; |
| 155 scoped_refptr<extensions::Extension> extension_; | 158 scoped_refptr<extensions::Extension> extension_; |
| 156 }; | 159 }; |
| 157 | 160 |
| 158 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { | 161 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { |
| 159 LoggingObserver observer; | 162 LoggingObserver observer; |
| 160 service_->AddObserver(&observer); | 163 service_->AddObserver(&observer); |
| 161 | 164 |
| 162 EXPECT_TRUE(service_->MountFileSystem( | 165 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 163 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 166 kFileSystemId, |
| 167 kDisplayName, |
| 168 false /* writable */, |
| 169 false /* supports_notify_tag */)); |
| 164 | 170 |
| 165 ASSERT_EQ(1u, observer.mounts.size()); | 171 ASSERT_EQ(1u, observer.mounts.size()); |
| 166 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); | 172 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); |
| 167 EXPECT_EQ(kFileSystemId, | 173 EXPECT_EQ(kFileSystemId, |
| 168 observer.mounts[0].file_system_info().file_system_id()); | 174 observer.mounts[0].file_system_info().file_system_id()); |
| 169 base::FilePath expected_mount_path = | 175 base::FilePath expected_mount_path = |
| 170 util::GetMountPath(profile_, kExtensionId, kFileSystemId); | 176 util::GetMountPath(profile_, kExtensionId, kFileSystemId); |
| 171 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), | 177 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), |
| 172 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); | 178 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); |
| 173 EXPECT_EQ(kDisplayName, observer.mounts[0].file_system_info().display_name()); | 179 EXPECT_EQ(kDisplayName, observer.mounts[0].file_system_info().display_name()); |
| 174 EXPECT_FALSE(observer.mounts[0].file_system_info().writable()); | 180 EXPECT_FALSE(observer.mounts[0].file_system_info().writable()); |
| 181 EXPECT_FALSE(observer.mounts[0].file_system_info().supports_notify_tag()); |
| 175 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 182 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 176 ASSERT_EQ(0u, observer.unmounts.size()); | 183 ASSERT_EQ(0u, observer.unmounts.size()); |
| 177 | 184 |
| 178 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 185 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 179 service_->GetProvidedFileSystemInfoList(); | 186 service_->GetProvidedFileSystemInfoList(); |
| 180 ASSERT_EQ(1u, file_system_info_list.size()); | 187 ASSERT_EQ(1u, file_system_info_list.size()); |
| 181 | 188 |
| 182 service_->RemoveObserver(&observer); | 189 service_->RemoveObserver(&observer); |
| 183 } | 190 } |
| 184 | 191 |
| 185 TEST_F(FileSystemProviderServiceTest, MountFileSystem_Writable) { | 192 TEST_F(FileSystemProviderServiceTest, |
| 193 MountFileSystem_WritableAndSupportsNotifyTag) { |
| 186 LoggingObserver observer; | 194 LoggingObserver observer; |
| 187 service_->AddObserver(&observer); | 195 service_->AddObserver(&observer); |
| 188 | 196 |
| 189 EXPECT_TRUE(service_->MountFileSystem( | 197 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 190 kExtensionId, kFileSystemId, kDisplayName, true /* writable */)); | 198 kFileSystemId, |
| 199 kDisplayName, |
| 200 true /* writable */, |
| 201 true /* supports_notify_tag */)); |
| 191 | 202 |
| 192 ASSERT_EQ(1u, observer.mounts.size()); | 203 ASSERT_EQ(1u, observer.mounts.size()); |
| 193 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); | 204 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); |
| 205 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag()); |
| 194 ASSERT_EQ(0u, observer.unmounts.size()); | 206 ASSERT_EQ(0u, observer.unmounts.size()); |
| 195 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 207 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 196 service_->GetProvidedFileSystemInfoList(); | 208 service_->GetProvidedFileSystemInfoList(); |
| 197 ASSERT_EQ(1u, file_system_info_list.size()); | 209 ASSERT_EQ(1u, file_system_info_list.size()); |
| 198 | 210 |
| 199 service_->RemoveObserver(&observer); | 211 service_->RemoveObserver(&observer); |
| 200 } | 212 } |
| 201 | 213 |
| 202 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { | 214 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { |
| 203 LoggingObserver observer; | 215 LoggingObserver observer; |
| 204 service_->AddObserver(&observer); | 216 service_->AddObserver(&observer); |
| 205 | 217 |
| 206 EXPECT_TRUE(service_->MountFileSystem( | 218 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 207 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 219 kFileSystemId, |
| 208 EXPECT_FALSE(service_->MountFileSystem( | 220 kDisplayName, |
| 209 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 221 false /* writable */, |
| 222 false /* supports_notify_tag */)); |
| 223 EXPECT_FALSE(service_->MountFileSystem(kExtensionId, |
| 224 kFileSystemId, |
| 225 kDisplayName, |
| 226 false /* writable */, |
| 227 false /* supports_notify_tag */)); |
| 210 | 228 |
| 211 ASSERT_EQ(2u, observer.mounts.size()); | 229 ASSERT_EQ(2u, observer.mounts.size()); |
| 212 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 230 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 213 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error()); | 231 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error()); |
| 214 | 232 |
| 215 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 233 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 216 service_->GetProvidedFileSystemInfoList(); | 234 service_->GetProvidedFileSystemInfoList(); |
| 217 ASSERT_EQ(1u, file_system_info_list.size()); | 235 ASSERT_EQ(1u, file_system_info_list.size()); |
| 218 | 236 |
| 219 service_->RemoveObserver(&observer); | 237 service_->RemoveObserver(&observer); |
| 220 } | 238 } |
| 221 | 239 |
| 222 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { | 240 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { |
| 223 LoggingObserver observer; | 241 LoggingObserver observer; |
| 224 service_->AddObserver(&observer); | 242 service_->AddObserver(&observer); |
| 225 | 243 |
| 226 const size_t kMaxFileSystems = 16; | 244 const size_t kMaxFileSystems = 16; |
| 227 for (size_t i = 0; i < kMaxFileSystems; ++i) { | 245 for (size_t i = 0; i < kMaxFileSystems; ++i) { |
| 228 const std::string file_system_id = | 246 const std::string file_system_id = |
| 229 std::string("test-") + base::IntToString(i); | 247 std::string("test-") + base::IntToString(i); |
| 230 EXPECT_TRUE(service_->MountFileSystem( | 248 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 231 kExtensionId, file_system_id, kDisplayName, false /* writable */)); | 249 file_system_id, |
| 250 kDisplayName, |
| 251 false /* writable */, |
| 252 false /* supports_notify_tag */)); |
| 232 } | 253 } |
| 233 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); | 254 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); |
| 234 | 255 |
| 235 // The next file system is out of limit, and registering it should fail. | 256 // The next file system is out of limit, and registering it should fail. |
| 236 EXPECT_FALSE(service_->MountFileSystem( | 257 EXPECT_FALSE(service_->MountFileSystem(kExtensionId, |
| 237 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 258 kFileSystemId, |
| 259 kDisplayName, |
| 260 false /* writable */, |
| 261 false /* supports_notify_tag */)); |
| 238 | 262 |
| 239 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); | 263 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); |
| 240 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, | 264 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, |
| 241 observer.mounts[kMaxFileSystems].error()); | 265 observer.mounts[kMaxFileSystems].error()); |
| 242 | 266 |
| 243 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 267 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 244 service_->GetProvidedFileSystemInfoList(); | 268 service_->GetProvidedFileSystemInfoList(); |
| 245 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); | 269 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); |
| 246 | 270 |
| 247 service_->RemoveObserver(&observer); | 271 service_->RemoveObserver(&observer); |
| 248 } | 272 } |
| 249 | 273 |
| 250 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { | 274 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { |
| 251 LoggingObserver observer; | 275 LoggingObserver observer; |
| 252 service_->AddObserver(&observer); | 276 service_->AddObserver(&observer); |
| 253 | 277 |
| 254 EXPECT_TRUE(service_->MountFileSystem( | 278 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 255 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 279 kFileSystemId, |
| 280 kDisplayName, |
| 281 false /* writable */, |
| 282 false /* supports_notify_tag */)); |
| 256 ASSERT_EQ(1u, observer.mounts.size()); | 283 ASSERT_EQ(1u, observer.mounts.size()); |
| 257 | 284 |
| 258 EXPECT_TRUE(service_->UnmountFileSystem( | 285 EXPECT_TRUE(service_->UnmountFileSystem( |
| 259 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); | 286 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); |
| 260 ASSERT_EQ(1u, observer.unmounts.size()); | 287 ASSERT_EQ(1u, observer.unmounts.size()); |
| 261 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); | 288 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); |
| 262 | 289 |
| 263 EXPECT_EQ(kExtensionId, | 290 EXPECT_EQ(kExtensionId, |
| 264 observer.unmounts[0].file_system_info().extension_id()); | 291 observer.unmounts[0].file_system_info().extension_id()); |
| 265 EXPECT_EQ(kFileSystemId, | 292 EXPECT_EQ(kFileSystemId, |
| 266 observer.unmounts[0].file_system_info().file_system_id()); | 293 observer.unmounts[0].file_system_info().file_system_id()); |
| 267 | 294 |
| 268 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 295 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 269 service_->GetProvidedFileSystemInfoList(); | 296 service_->GetProvidedFileSystemInfoList(); |
| 270 ASSERT_EQ(0u, file_system_info_list.size()); | 297 ASSERT_EQ(0u, file_system_info_list.size()); |
| 271 | 298 |
| 272 service_->RemoveObserver(&observer); | 299 service_->RemoveObserver(&observer); |
| 273 } | 300 } |
| 274 | 301 |
| 275 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { | 302 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { |
| 276 LoggingObserver observer; | 303 LoggingObserver observer; |
| 277 service_->AddObserver(&observer); | 304 service_->AddObserver(&observer); |
| 278 | 305 |
| 279 EXPECT_TRUE(service_->MountFileSystem( | 306 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 280 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 307 kFileSystemId, |
| 308 kDisplayName, |
| 309 false /* writable */, |
| 310 false /* supports_notify_tag */)); |
| 281 ASSERT_EQ(1u, observer.mounts.size()); | 311 ASSERT_EQ(1u, observer.mounts.size()); |
| 282 | 312 |
| 283 // Directly call the observer's method. | 313 // Directly call the observer's method. |
| 284 service_->OnExtensionUnloaded( | 314 service_->OnExtensionUnloaded( |
| 285 profile_, | 315 profile_, |
| 286 extension_.get(), | 316 extension_.get(), |
| 287 extensions::UnloadedExtensionInfo::REASON_DISABLE); | 317 extensions::UnloadedExtensionInfo::REASON_DISABLE); |
| 288 | 318 |
| 289 ASSERT_EQ(1u, observer.unmounts.size()); | 319 ASSERT_EQ(1u, observer.unmounts.size()); |
| 290 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); | 320 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); |
| 291 | 321 |
| 292 EXPECT_EQ(kExtensionId, | 322 EXPECT_EQ(kExtensionId, |
| 293 observer.unmounts[0].file_system_info().extension_id()); | 323 observer.unmounts[0].file_system_info().extension_id()); |
| 294 EXPECT_EQ(kFileSystemId, | 324 EXPECT_EQ(kFileSystemId, |
| 295 observer.unmounts[0].file_system_info().file_system_id()); | 325 observer.unmounts[0].file_system_info().file_system_id()); |
| 296 | 326 |
| 297 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 327 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 298 service_->GetProvidedFileSystemInfoList(); | 328 service_->GetProvidedFileSystemInfoList(); |
| 299 ASSERT_EQ(0u, file_system_info_list.size()); | 329 ASSERT_EQ(0u, file_system_info_list.size()); |
| 300 | 330 |
| 301 service_->RemoveObserver(&observer); | 331 service_->RemoveObserver(&observer); |
| 302 } | 332 } |
| 303 | 333 |
| 304 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { | 334 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { |
| 305 LoggingObserver observer; | 335 LoggingObserver observer; |
| 306 service_->AddObserver(&observer); | 336 service_->AddObserver(&observer); |
| 307 | 337 |
| 308 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; | 338 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; |
| 309 | 339 |
| 310 EXPECT_TRUE(service_->MountFileSystem( | 340 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 311 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 341 kFileSystemId, |
| 342 kDisplayName, |
| 343 false /* writable */, |
| 344 false /* supports_notify_tag */)); |
| 312 ASSERT_EQ(1u, observer.mounts.size()); | 345 ASSERT_EQ(1u, observer.mounts.size()); |
| 313 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); | 346 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); |
| 314 | 347 |
| 315 EXPECT_FALSE(service_->UnmountFileSystem( | 348 EXPECT_FALSE(service_->UnmountFileSystem( |
| 316 kWrongExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); | 349 kWrongExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); |
| 317 ASSERT_EQ(1u, observer.unmounts.size()); | 350 ASSERT_EQ(1u, observer.unmounts.size()); |
| 318 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); | 351 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); |
| 319 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); | 352 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); |
| 320 | 353 |
| 321 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 354 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 322 service_->GetProvidedFileSystemInfoList(); | 355 service_->GetProvidedFileSystemInfoList(); |
| 323 ASSERT_EQ(1u, file_system_info_list.size()); | 356 ASSERT_EQ(1u, file_system_info_list.size()); |
| 324 | 357 |
| 325 service_->RemoveObserver(&observer); | 358 service_->RemoveObserver(&observer); |
| 326 } | 359 } |
| 327 | 360 |
| 328 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { | 361 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { |
| 329 // Create a fake entry in the preferences. | 362 // Create a fake entry in the preferences. |
| 330 RememberFakeFileSystem( | 363 RememberFakeFileSystem(profile_, |
| 331 profile_, kExtensionId, kFileSystemId, kDisplayName, true /* writable */); | 364 kExtensionId, |
| 365 kFileSystemId, |
| 366 kDisplayName, |
| 367 true /* writable */, |
| 368 true /* supports_notify_tag */); |
| 332 | 369 |
| 333 // Create a new service instance in order to load remembered file systems | 370 // Create a new service instance in order to load remembered file systems |
| 334 // from preferences. | 371 // from preferences. |
| 335 scoped_ptr<Service> new_service( | 372 scoped_ptr<Service> new_service( |
| 336 new Service(profile_, extension_registry_.get())); | 373 new Service(profile_, extension_registry_.get())); |
| 337 LoggingObserver observer; | 374 LoggingObserver observer; |
| 338 new_service->AddObserver(&observer); | 375 new_service->AddObserver(&observer); |
| 339 | 376 |
| 340 new_service->SetFileSystemFactoryForTesting( | 377 new_service->SetFileSystemFactoryForTesting( |
| 341 base::Bind(&FakeProvidedFileSystem::Create)); | 378 base::Bind(&FakeProvidedFileSystem::Create)); |
| 342 | 379 |
| 343 EXPECT_EQ(0u, observer.mounts.size()); | 380 EXPECT_EQ(0u, observer.mounts.size()); |
| 344 | 381 |
| 345 // Directly call the observer's method. | 382 // Directly call the observer's method. |
| 346 new_service->OnExtensionLoaded(profile_, extension_.get()); | 383 new_service->OnExtensionLoaded(profile_, extension_.get()); |
| 347 | 384 |
| 348 ASSERT_EQ(1u, observer.mounts.size()); | 385 ASSERT_EQ(1u, observer.mounts.size()); |
| 349 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); | 386 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 350 | 387 |
| 351 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); | 388 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); |
| 352 EXPECT_EQ(kFileSystemId, | 389 EXPECT_EQ(kFileSystemId, |
| 353 observer.mounts[0].file_system_info().file_system_id()); | 390 observer.mounts[0].file_system_info().file_system_id()); |
| 354 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); | 391 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); |
| 392 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag()); |
| 355 | 393 |
| 356 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 394 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 357 new_service->GetProvidedFileSystemInfoList(); | 395 new_service->GetProvidedFileSystemInfoList(); |
| 358 ASSERT_EQ(1u, file_system_info_list.size()); | 396 ASSERT_EQ(1u, file_system_info_list.size()); |
| 359 | 397 |
| 360 new_service->RemoveObserver(&observer); | 398 new_service->RemoveObserver(&observer); |
| 361 } | 399 } |
| 362 | 400 |
| 363 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { | 401 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { |
| 364 LoggingObserver observer; | 402 LoggingObserver observer; |
| 365 service_->AddObserver(&observer); | 403 service_->AddObserver(&observer); |
| 366 | 404 |
| 367 EXPECT_TRUE(service_->MountFileSystem( | 405 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 368 kExtensionId, kFileSystemId, kDisplayName, true /* writable */)); | 406 kFileSystemId, |
| 407 kDisplayName, |
| 408 true /* writable */, |
| 409 true /* supports_notify_tag */)); |
| 369 ASSERT_EQ(1u, observer.mounts.size()); | 410 ASSERT_EQ(1u, observer.mounts.size()); |
| 370 | 411 |
| 371 TestingPrefServiceSyncable* const pref_service = | 412 TestingPrefServiceSyncable* const pref_service = |
| 372 profile_->GetTestingPrefService(); | 413 profile_->GetTestingPrefService(); |
| 373 ASSERT_TRUE(pref_service); | 414 ASSERT_TRUE(pref_service); |
| 374 | 415 |
| 375 const base::DictionaryValue* const extensions = | 416 const base::DictionaryValue* const extensions = |
| 376 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 417 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
| 377 ASSERT_TRUE(extensions); | 418 ASSERT_TRUE(extensions); |
| 378 | 419 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 395 std::string display_name; | 436 std::string display_name; |
| 396 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName, | 437 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName, |
| 397 &display_name)); | 438 &display_name)); |
| 398 EXPECT_EQ(kDisplayName, display_name); | 439 EXPECT_EQ(kDisplayName, display_name); |
| 399 | 440 |
| 400 bool writable = false; | 441 bool writable = false; |
| 401 EXPECT_TRUE( | 442 EXPECT_TRUE( |
| 402 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); | 443 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); |
| 403 EXPECT_TRUE(writable); | 444 EXPECT_TRUE(writable); |
| 404 | 445 |
| 446 bool supports_notify_tag = false; |
| 447 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion( |
| 448 kPrefKeySupportsNotifyTag, &supports_notify_tag)); |
| 449 EXPECT_TRUE(supports_notify_tag); |
| 450 |
| 405 service_->RemoveObserver(&observer); | 451 service_->RemoveObserver(&observer); |
| 406 } | 452 } |
| 407 | 453 |
| 408 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { | 454 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { |
| 409 LoggingObserver observer; | 455 LoggingObserver observer; |
| 410 service_->AddObserver(&observer); | 456 service_->AddObserver(&observer); |
| 411 | 457 |
| 412 TestingPrefServiceSyncable* const pref_service = | 458 TestingPrefServiceSyncable* const pref_service = |
| 413 profile_->GetTestingPrefService(); | 459 profile_->GetTestingPrefService(); |
| 414 ASSERT_TRUE(pref_service); | 460 ASSERT_TRUE(pref_service); |
| 415 | 461 |
| 416 { | 462 { |
| 417 EXPECT_TRUE(service_->MountFileSystem( | 463 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 418 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 464 kFileSystemId, |
| 465 kDisplayName, |
| 466 false /* writable */, |
| 467 false /* supports_notify_tag */)); |
| 419 ASSERT_EQ(1u, observer.mounts.size()); | 468 ASSERT_EQ(1u, observer.mounts.size()); |
| 420 | 469 |
| 421 const base::DictionaryValue* extensions = | 470 const base::DictionaryValue* extensions = |
| 422 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 471 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
| 423 ASSERT_TRUE(extensions); | 472 ASSERT_TRUE(extensions); |
| 424 | 473 |
| 425 const base::DictionaryValue* file_systems = NULL; | 474 const base::DictionaryValue* file_systems = NULL; |
| 426 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | 475 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
| 427 &file_systems)); | 476 &file_systems)); |
| 428 EXPECT_EQ(1u, file_systems->size()); | 477 EXPECT_EQ(1u, file_systems->size()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 447 | 496 |
| 448 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { | 497 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { |
| 449 LoggingObserver observer; | 498 LoggingObserver observer; |
| 450 service_->AddObserver(&observer); | 499 service_->AddObserver(&observer); |
| 451 | 500 |
| 452 TestingPrefServiceSyncable* const pref_service = | 501 TestingPrefServiceSyncable* const pref_service = |
| 453 profile_->GetTestingPrefService(); | 502 profile_->GetTestingPrefService(); |
| 454 ASSERT_TRUE(pref_service); | 503 ASSERT_TRUE(pref_service); |
| 455 | 504 |
| 456 { | 505 { |
| 457 EXPECT_TRUE(service_->MountFileSystem( | 506 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, |
| 458 kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); | 507 kFileSystemId, |
| 508 kDisplayName, |
| 509 false /* writable */, |
| 510 false /* supports_notify_tag */)); |
| 459 ASSERT_EQ(1u, observer.mounts.size()); | 511 ASSERT_EQ(1u, observer.mounts.size()); |
| 460 | 512 |
| 461 const base::DictionaryValue* extensions = | 513 const base::DictionaryValue* extensions = |
| 462 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); | 514 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
| 463 ASSERT_TRUE(extensions); | 515 ASSERT_TRUE(extensions); |
| 464 | 516 |
| 465 const base::DictionaryValue* file_systems = NULL; | 517 const base::DictionaryValue* file_systems = NULL; |
| 466 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | 518 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
| 467 &file_systems)); | 519 &file_systems)); |
| 468 EXPECT_EQ(1u, file_systems->size()); | 520 EXPECT_EQ(1u, file_systems->size()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 479 const base::DictionaryValue* file_systems = NULL; | 531 const base::DictionaryValue* file_systems = NULL; |
| 480 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, | 532 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, |
| 481 &file_systems)); | 533 &file_systems)); |
| 482 } | 534 } |
| 483 | 535 |
| 484 service_->RemoveObserver(&observer); | 536 service_->RemoveObserver(&observer); |
| 485 } | 537 } |
| 486 | 538 |
| 487 } // namespace file_system_provider | 539 } // namespace file_system_provider |
| 488 } // namespace chromeos | 540 } // namespace chromeos |
| OLD | NEW |