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" |
11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
12 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system
.h" | 12 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system
.h" |
13 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" | 13 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" |
14 #include "chrome/browser/chromeos/file_system_provider/observer.h" | 14 #include "chrome/browser/chromeos/file_system_provider/observer.h" |
15 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info
.h" | 15 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info
.h" |
16 #include "chrome/browser/chromeos/file_system_provider/service.h" | 16 #include "chrome/browser/chromeos/file_system_provider/service.h" |
17 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" | 17 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" |
| 18 #include "chrome/common/pref_names.h" |
| 19 #include "chrome/test/base/testing_pref_service_syncable.h" |
18 #include "chrome/test/base/testing_profile.h" | 20 #include "chrome/test/base/testing_profile.h" |
| 21 #include "components/user_prefs/user_prefs.h" |
19 #include "content/public/test/test_browser_thread_bundle.h" | 22 #include "content/public/test/test_browser_thread_bundle.h" |
20 #include "extensions/browser/extension_registry.h" | 23 #include "extensions/browser/extension_registry.h" |
21 #include "extensions/common/extension.h" | 24 #include "extensions/common/extension.h" |
22 #include "extensions/common/manifest_constants.h" | 25 #include "extensions/common/manifest_constants.h" |
23 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
24 #include "webkit/browser/fileapi/external_mount_points.h" | 27 #include "webkit/browser/fileapi/external_mount_points.h" |
25 | 28 |
26 namespace chromeos { | 29 namespace chromeos { |
27 namespace file_system_provider { | 30 namespace file_system_provider { |
28 namespace { | 31 namespace { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0"); | 82 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0"); |
80 manifest.SetString(extensions::manifest_keys::kName, "unused"); | 83 manifest.SetString(extensions::manifest_keys::kName, "unused"); |
81 return extensions::Extension::Create(base::FilePath(), | 84 return extensions::Extension::Create(base::FilePath(), |
82 extensions::Manifest::UNPACKED, | 85 extensions::Manifest::UNPACKED, |
83 manifest, | 86 manifest, |
84 extensions::Extension::NO_FLAGS, | 87 extensions::Extension::NO_FLAGS, |
85 extension_id, | 88 extension_id, |
86 &error); | 89 &error); |
87 } | 90 } |
88 | 91 |
| 92 // Stores a provided file system information in preferences. |
| 93 void RememberFakeFileSystem(TestingProfile* profile, |
| 94 const std::string& extension_id, |
| 95 const std::string& file_system_id, |
| 96 const std::string& file_system_name) { |
| 97 TestingPrefServiceSyncable* pref_service = profile->GetTestingPrefService(); |
| 98 ASSERT_TRUE(pref_service); |
| 99 |
| 100 base::DictionaryValue extensions; |
| 101 base::ListValue* file_systems = new base::ListValue(); |
| 102 base::DictionaryValue* file_system = new base::DictionaryValue(); |
| 103 file_system->SetString(kPrefKeyFileSystemId, kFileSystemId); |
| 104 file_system->SetString(kPrefKeyFileSystemName, kFileSystemName); |
| 105 file_systems->Append(file_system); |
| 106 extensions.Set(kExtensionId, file_systems); |
| 107 |
| 108 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); |
| 109 } |
| 110 |
89 } // namespace | 111 } // namespace |
90 | 112 |
91 class FileSystemProviderServiceTest : public testing::Test { | 113 class FileSystemProviderServiceTest : public testing::Test { |
92 protected: | 114 protected: |
93 FileSystemProviderServiceTest() {} | 115 FileSystemProviderServiceTest() {} |
94 virtual ~FileSystemProviderServiceTest() {} | 116 virtual ~FileSystemProviderServiceTest() {} |
95 | 117 |
96 virtual void SetUp() OVERRIDE { | 118 virtual void SetUp() OVERRIDE { |
97 profile_.reset(new TestingProfile); | 119 profile_.reset(new TestingProfile); |
98 user_manager_ = new FakeUserManager(); | 120 user_manager_ = new FakeUserManager(); |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 1u, | 299 1u, |
278 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); | 300 file_system_provider_service_->GetProvidedFileSystemInfoList().size()); |
279 | 301 |
280 std::vector<ProvidedFileSystemInfo> file_system_info_list = | 302 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
281 file_system_provider_service_->GetProvidedFileSystemInfoList(); | 303 file_system_provider_service_->GetProvidedFileSystemInfoList(); |
282 ASSERT_EQ(1u, file_system_info_list.size()); | 304 ASSERT_EQ(1u, file_system_info_list.size()); |
283 | 305 |
284 file_system_provider_service_->RemoveObserver(&observer); | 306 file_system_provider_service_->RemoveObserver(&observer); |
285 } | 307 } |
286 | 308 |
| 309 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { |
| 310 LoggingObserver observer; |
| 311 file_system_provider_service_->AddObserver(&observer); |
| 312 |
| 313 // Create a fake entry in the preferences. |
| 314 RememberFakeFileSystem( |
| 315 profile_.get(), kExtensionId, kFileSystemId, kFileSystemName); |
| 316 |
| 317 EXPECT_EQ(0u, observer.mounts.size()); |
| 318 |
| 319 // Directly call the observer's method. |
| 320 file_system_provider_service_->OnExtensionLoaded(profile_.get(), |
| 321 extension_.get()); |
| 322 |
| 323 ASSERT_EQ(1u, observer.mounts.size()); |
| 324 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); |
| 325 |
| 326 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); |
| 327 EXPECT_EQ(kFileSystemId, |
| 328 observer.mounts[0].file_system_info().file_system_id()); |
| 329 |
| 330 std::vector<ProvidedFileSystemInfo> file_system_info_list = |
| 331 file_system_provider_service_->GetProvidedFileSystemInfoList(); |
| 332 ASSERT_EQ(1u, file_system_info_list.size()); |
| 333 |
| 334 file_system_provider_service_->RemoveObserver(&observer); |
| 335 } |
| 336 |
| 337 TEST_F(FileSystemProviderServiceTest, ForgetFileSystem_OnExtensionUnload) { |
| 338 LoggingObserver observer; |
| 339 file_system_provider_service_->AddObserver(&observer); |
| 340 |
| 341 // Create a fake entry in the preferences. |
| 342 RememberFakeFileSystem( |
| 343 profile_.get(), kExtensionId, kFileSystemId, kFileSystemName); |
| 344 |
| 345 // Directly call the observer's methods. |
| 346 file_system_provider_service_->OnExtensionLoaded(profile_.get(), |
| 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); |
| 361 |
| 362 const base::DictionaryValue* extensions = |
| 363 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); |
| 364 ASSERT_TRUE(extensions); |
| 365 |
| 366 const base::ListValue* file_systems; |
| 367 EXPECT_FALSE(extensions->GetList(kExtensionId, &file_systems)); |
| 368 |
| 369 file_system_provider_service_->RemoveObserver(&observer); |
| 370 } |
| 371 |
| 372 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnShutdown) { |
| 373 { |
| 374 scoped_ptr<Service> service( |
| 375 new Service(profile_.get(), extension_registry_.get())); |
| 376 service->SetFileSystemFactoryForTests( |
| 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; |
| 402 ASSERT_TRUE(file_systems->GetDictionary(0, &file_system)); |
| 403 |
| 404 std::string file_system_id; |
| 405 file_system->GetString(kPrefKeyFileSystemId, &file_system_id); |
| 406 EXPECT_EQ(kFileSystemId, file_system_id); |
| 407 |
| 408 std::string file_system_name; |
| 409 file_system->GetString(kPrefKeyFileSystemName, &file_system_name); |
| 410 EXPECT_EQ(kFileSystemName, file_system_name); |
| 411 } |
| 412 |
287 } // namespace file_system_provider | 413 } // namespace file_system_provider |
288 } // namespace chromeos | 414 } // namespace chromeos |
OLD | NEW |