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, | |
hashimoto
2014/05/26 08:35:38
nit: "RememberFakeFileSystem"
mtomasz
2014/05/27 02:10:27
Done.
| |
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("file_system_id", kFileSystemId); | |
104 file_system->SetString("file_system_name", kFileSystemName); | |
105 file_systems->Append(file_system); | |
106 extensions.Set(kExtensionId, file_systems); | |
107 | |
108 pref_service->Set(prefs::kFSPMountedFileSystems, 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::kFSPMountedFileSystems); | |
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 | |
377 LoggingObserver observer; | |
378 service->AddObserver(&observer); | |
379 | |
380 const bool result = | |
381 service->MountFileSystem(kExtensionId, kFileSystemId, kFileSystemName); | |
382 EXPECT_TRUE(result); | |
383 ASSERT_EQ(1u, observer.mounts.size()); | |
384 | |
385 service->RemoveObserver(&observer); | |
386 } | |
387 | |
388 TestingPrefServiceSyncable* pref_service = profile_->GetTestingPrefService(); | |
389 ASSERT_TRUE(pref_service); | |
390 | |
391 const base::DictionaryValue* extensions = | |
392 pref_service->GetDictionary(prefs::kFSPMountedFileSystems); | |
393 ASSERT_TRUE(extensions); | |
394 | |
395 const base::ListValue* file_systems; | |
396 ASSERT_TRUE(extensions->GetList(kExtensionId, &file_systems)); | |
397 ASSERT_EQ(1u, file_systems->GetSize()); | |
398 | |
399 const base::DictionaryValue* file_system = NULL; | |
400 ASSERT_TRUE(file_systems->GetDictionary(0, &file_system)); | |
401 | |
402 std::string file_system_id; | |
403 file_system->GetString("file_system_id", &file_system_id); | |
404 EXPECT_EQ(kFileSystemId, file_system_id); | |
405 | |
406 std::string file_system_name; | |
407 file_system->GetString("file_system_name", &file_system_name); | |
408 EXPECT_EQ(kFileSystemName, file_system_name); | |
409 } | |
410 | |
287 } // namespace file_system_provider | 411 } // namespace file_system_provider |
288 } // namespace chromeos | 412 } // namespace chromeos |
OLD | NEW |