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

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 kExtensionId,
hashimoto 2014/04/18 05:35:15 This should be extension_id?
mtomasz 2014/04/18 06:01:34 Good catch! Done.
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(
81 file_system_provider_service_->SetFileSystemFactoryForTests( 102 new Service(profile_.get(), extension_registry_.get()));
82 base::Bind(&FakeProvidedFileSystem::Create)); 103 extension_ = createFakeExtension(kExtensionId);
83 } 104 }
84 105
85 virtual void TearDown() { 106 virtual void TearDown() {
86 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); 107 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems();
87 } 108 }
88 109
89 content::TestBrowserThreadBundle thread_bundle_; 110 content::TestBrowserThreadBundle thread_bundle_;
90 scoped_ptr<TestingProfile> profile_; 111 scoped_ptr<TestingProfile> profile_;
112 FakeUserManager* user_manager_;
91 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 113 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
92 FakeUserManager* user_manager_; 114 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
93 scoped_ptr<Service> file_system_provider_service_; 115 scoped_ptr<Service> file_system_provider_service_;
116 scoped_refptr<extensions::Extension> extension_;
94 }; 117 };
95 118
96 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 119 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
97 LoggingObserver observer; 120 LoggingObserver observer;
98 file_system_provider_service_->AddObserver(&observer); 121 file_system_provider_service_->AddObserver(&observer);
99 122
100 int file_system_id = file_system_provider_service_->MountFileSystem( 123 int file_system_id = file_system_provider_service_->MountFileSystem(
101 kExtensionId, kFileSystemName); 124 kExtensionId, kFileSystemName);
102 125
103 EXPECT_LT(0, file_system_id); 126 EXPECT_LT(0, file_system_id);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 EXPECT_EQ(kFileSystemName, 221 EXPECT_EQ(kFileSystemName,
199 observer.unmounts[0].file_system_info().file_system_name()); 222 observer.unmounts[0].file_system_info().file_system_name());
200 223
201 std::vector<ProvidedFileSystemInfo> file_system_info_list = 224 std::vector<ProvidedFileSystemInfo> file_system_info_list =
202 file_system_provider_service_->GetProvidedFileSystemInfoList(); 225 file_system_provider_service_->GetProvidedFileSystemInfoList();
203 ASSERT_EQ(0u, file_system_info_list.size()); 226 ASSERT_EQ(0u, file_system_info_list.size());
204 227
205 file_system_provider_service_->RemoveObserver(&observer); 228 file_system_provider_service_->RemoveObserver(&observer);
206 } 229 }
207 230
231 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
232 LoggingObserver observer;
233 file_system_provider_service_->AddObserver(&observer);
234
235 int file_system_id = file_system_provider_service_->MountFileSystem(
236 kExtensionId, kFileSystemName);
237 EXPECT_LT(0, file_system_id);
238 ASSERT_EQ(1u, observer.mounts.size());
239
240 // Directly call the observer's method.
241 file_system_provider_service_->OnExtensionUnloaded(extension_.get());
242
243 ASSERT_EQ(1u, observer.unmounts.size());
244 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
245
246 EXPECT_EQ(kExtensionId,
247 observer.unmounts[0].file_system_info().extension_id());
248 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id());
249 base::FilePath expected_mount_path =
250 util::GetMountPointPath(profile_.get(), kExtensionId, file_system_id);
251 EXPECT_EQ(
252 expected_mount_path.AsUTF8Unsafe(),
253 observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
254 EXPECT_EQ(kFileSystemName,
255 observer.unmounts[0].file_system_info().file_system_name());
256
257 std::vector<ProvidedFileSystemInfo> file_system_info_list =
258 file_system_provider_service_->GetProvidedFileSystemInfoList();
259 ASSERT_EQ(0u, file_system_info_list.size());
260
261 file_system_provider_service_->RemoveObserver(&observer);
262 }
263
208 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 264 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
209 LoggingObserver observer; 265 LoggingObserver observer;
210 file_system_provider_service_->AddObserver(&observer); 266 file_system_provider_service_->AddObserver(&observer);
211 267
212 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 268 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
213 269
214 int file_system_id = file_system_provider_service_->MountFileSystem( 270 int file_system_id = file_system_provider_service_->MountFileSystem(
215 kExtensionId, kFileSystemName); 271 kExtensionId, kFileSystemName);
216 EXPECT_LT(0, file_system_id); 272 EXPECT_LT(0, file_system_id);
217 ASSERT_EQ(1u, observer.mounts.size()); 273 ASSERT_EQ(1u, observer.mounts.size());
(...skipping 12 matching lines...) Expand all
230 286
231 std::vector<ProvidedFileSystemInfo> file_system_info_list = 287 std::vector<ProvidedFileSystemInfo> file_system_info_list =
232 file_system_provider_service_->GetProvidedFileSystemInfoList(); 288 file_system_provider_service_->GetProvidedFileSystemInfoList();
233 ASSERT_EQ(1u, file_system_info_list.size()); 289 ASSERT_EQ(1u, file_system_info_list.size());
234 290
235 file_system_provider_service_->RemoveObserver(&observer); 291 file_system_provider_service_->RemoveObserver(&observer);
236 } 292 }
237 293
238 } // namespace file_system_provider 294 } // namespace file_system_provider
239 } // namespace chromeos 295 } // 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