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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/service_unittest.cc

Issue 213123008: [fsp] Unmount file systems when the providing extension gets unloaded. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service_factory.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
10 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system .h" 11 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system .h"
11 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" 12 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h"
12 #include "chrome/browser/chromeos/file_system_provider/observer.h" 13 #include "chrome/browser/chromeos/file_system_provider/observer.h"
13 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h" 14 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h"
14 #include "chrome/browser/chromeos/file_system_provider/service.h" 15 #include "chrome/browser/chromeos/file_system_provider/service.h"
15 #include "chrome/browser/chromeos/login/fake_user_manager.h" 16 #include "chrome/browser/chromeos/login/fake_user_manager.h"
16 #include "chrome/test/base/testing_profile.h" 17 #include "chrome/test/base/testing_profile.h"
17 #include "content/public/test/test_browser_thread_bundle.h" 18 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "extensions/browser/extension_registry.h"
20 #include "extensions/common/extension.h"
21 #include "extensions/common/manifest_constants.h"
18 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
19 #include "webkit/browser/fileapi/external_mount_points.h" 23 #include "webkit/browser/fileapi/external_mount_points.h"
20 24
21 namespace chromeos { 25 namespace chromeos {
22 namespace file_system_provider { 26 namespace file_system_provider {
23 namespace { 27 namespace {
24 28
25 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 29 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
26 const char kFileSystemName[] = "Camera Pictures"; 30 const char kFileSystemName[] = "Camera Pictures";
27 31
(...skipping 30 matching lines...) Expand all
58 virtual void OnProvidedFileSystemUnmount( 62 virtual void OnProvidedFileSystemUnmount(
59 const ProvidedFileSystemInfo& file_system_info, 63 const ProvidedFileSystemInfo& file_system_info,
60 base::File::Error error) OVERRIDE { 64 base::File::Error error) OVERRIDE {
61 unmounts.push_back(Event(file_system_info, error)); 65 unmounts.push_back(Event(file_system_info, error));
62 } 66 }
63 67
64 std::vector<Event> mounts; 68 std::vector<Event> mounts;
65 std::vector<Event> unmounts; 69 std::vector<Event> unmounts;
66 }; 70 };
67 71
72 // Creates a fake extension with the specified |extension_id|.
73 scoped_refptr<extensions::Extension> createFakeExtension(
74 const std::string& extension_id) {
75 base::DictionaryValue manifest;
76 std::string error;
77 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0");
78 manifest.SetString(extensions::manifest_keys::kName, "unused");
79 return extensions::Extension::Create(base::FilePath(),
80 extensions::Manifest::UNPACKED,
81 manifest,
82 extensions::Extension::NO_FLAGS,
83 extension_id,
84 &error);
85 }
86
68 } // namespace 87 } // namespace
69 88
70 class FileSystemProviderServiceTest : public testing::Test { 89 class FileSystemProviderServiceTest : public testing::Test {
71 protected: 90 protected:
72 FileSystemProviderServiceTest() {} 91 FileSystemProviderServiceTest() {}
73 virtual ~FileSystemProviderServiceTest() {} 92 virtual ~FileSystemProviderServiceTest() {}
74 93
75 virtual void SetUp() OVERRIDE { 94 virtual void SetUp() OVERRIDE {
95 profile_.reset(new TestingProfile);
76 user_manager_ = new FakeUserManager(); 96 user_manager_ = new FakeUserManager();
97 user_manager_->AddUser(profile_->GetProfileName());
77 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 98 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
78 profile_.reset(new TestingProfile); 99 extension_registry_.reset(
79 user_manager_->AddUser(profile_->GetProfileName()); 100 new extensions::ExtensionRegistry(profile_.get()));
80 file_system_provider_service_.reset(new Service(profile_.get())); 101 file_system_provider_service_.reset(
102 new Service(profile_.get(), extension_registry_.get()));
81 file_system_provider_service_->SetFileSystemFactoryForTests( 103 file_system_provider_service_->SetFileSystemFactoryForTests(
82 base::Bind(&FakeProvidedFileSystem::Create)); 104 base::Bind(&FakeProvidedFileSystem::Create));
105 extension_ = createFakeExtension(kExtensionId);
83 } 106 }
84 107
85 virtual void TearDown() { 108 virtual void TearDown() {
86 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); 109 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems();
87 } 110 }
88 111
89 content::TestBrowserThreadBundle thread_bundle_; 112 content::TestBrowserThreadBundle thread_bundle_;
90 scoped_ptr<TestingProfile> profile_; 113 scoped_ptr<TestingProfile> profile_;
114 FakeUserManager* user_manager_;
91 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 115 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
92 FakeUserManager* user_manager_; 116 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
93 scoped_ptr<Service> file_system_provider_service_; 117 scoped_ptr<Service> file_system_provider_service_;
118 scoped_refptr<extensions::Extension> extension_;
94 }; 119 };
95 120
96 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 121 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
97 LoggingObserver observer; 122 LoggingObserver observer;
98 file_system_provider_service_->AddObserver(&observer); 123 file_system_provider_service_->AddObserver(&observer);
99 124
100 int file_system_id = file_system_provider_service_->MountFileSystem( 125 int file_system_id = file_system_provider_service_->MountFileSystem(
101 kExtensionId, kFileSystemName); 126 kExtensionId, kFileSystemName);
102 127
103 EXPECT_LT(0, file_system_id); 128 EXPECT_LT(0, file_system_id);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 EXPECT_EQ(kFileSystemName, 223 EXPECT_EQ(kFileSystemName,
199 observer.unmounts[0].file_system_info().file_system_name()); 224 observer.unmounts[0].file_system_info().file_system_name());
200 225
201 std::vector<ProvidedFileSystemInfo> file_system_info_list = 226 std::vector<ProvidedFileSystemInfo> file_system_info_list =
202 file_system_provider_service_->GetProvidedFileSystemInfoList(); 227 file_system_provider_service_->GetProvidedFileSystemInfoList();
203 ASSERT_EQ(0u, file_system_info_list.size()); 228 ASSERT_EQ(0u, file_system_info_list.size());
204 229
205 file_system_provider_service_->RemoveObserver(&observer); 230 file_system_provider_service_->RemoveObserver(&observer);
206 } 231 }
207 232
233 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
234 LoggingObserver observer;
235 file_system_provider_service_->AddObserver(&observer);
236
237 int file_system_id = file_system_provider_service_->MountFileSystem(
238 kExtensionId, kFileSystemName);
239 EXPECT_LT(0, file_system_id);
240 ASSERT_EQ(1u, observer.mounts.size());
241
242 // Directly call the observer's method.
243 file_system_provider_service_->OnExtensionUnloaded(
244 profile_.get(),
245 extension_.get(),
246 extensions::UnloadedExtensionInfo::REASON_DISABLE);
247
248 ASSERT_EQ(1u, observer.unmounts.size());
249 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
250
251 EXPECT_EQ(kExtensionId,
252 observer.unmounts[0].file_system_info().extension_id());
253 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id());
254 base::FilePath expected_mount_path =
255 util::GetMountPointPath(profile_.get(), kExtensionId, file_system_id);
256 EXPECT_EQ(
257 expected_mount_path.AsUTF8Unsafe(),
258 observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
259 EXPECT_EQ(kFileSystemName,
260 observer.unmounts[0].file_system_info().file_system_name());
261
262 std::vector<ProvidedFileSystemInfo> file_system_info_list =
263 file_system_provider_service_->GetProvidedFileSystemInfoList();
264 ASSERT_EQ(0u, file_system_info_list.size());
265
266 file_system_provider_service_->RemoveObserver(&observer);
267 }
268
208 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 269 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
209 LoggingObserver observer; 270 LoggingObserver observer;
210 file_system_provider_service_->AddObserver(&observer); 271 file_system_provider_service_->AddObserver(&observer);
211 272
212 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 273 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
213 274
214 int file_system_id = file_system_provider_service_->MountFileSystem( 275 int file_system_id = file_system_provider_service_->MountFileSystem(
215 kExtensionId, kFileSystemName); 276 kExtensionId, kFileSystemName);
216 EXPECT_LT(0, file_system_id); 277 EXPECT_LT(0, file_system_id);
217 ASSERT_EQ(1u, observer.mounts.size()); 278 ASSERT_EQ(1u, observer.mounts.size());
(...skipping 12 matching lines...) Expand all
230 291
231 std::vector<ProvidedFileSystemInfo> file_system_info_list = 292 std::vector<ProvidedFileSystemInfo> file_system_info_list =
232 file_system_provider_service_->GetProvidedFileSystemInfoList(); 293 file_system_provider_service_->GetProvidedFileSystemInfoList();
233 ASSERT_EQ(1u, file_system_info_list.size()); 294 ASSERT_EQ(1u, file_system_info_list.size());
234 295
235 file_system_provider_service_->RemoveObserver(&observer); 296 file_system_provider_service_->RemoveObserver(&observer);
236 } 297 }
237 298
238 } // namespace file_system_provider 299 } // namespace file_system_provider
239 } // namespace chromeos 300 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service_factory.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698