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

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: 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
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/observer.h" 11 #include "chrome/browser/chromeos/file_system_provider/observer.h"
11 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h" 12 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h"
12 #include "chrome/browser/chromeos/file_system_provider/service.h" 13 #include "chrome/browser/chromeos/file_system_provider/service.h"
13 #include "chrome/browser/chromeos/login/fake_user_manager.h" 14 #include "chrome/browser/chromeos/login/fake_user_manager.h"
14 #include "chrome/test/base/testing_profile.h" 15 #include "chrome/test/base/testing_profile.h"
15 #include "content/public/test/test_browser_thread_bundle.h" 16 #include "content/public/test/test_browser_thread_bundle.h"
17 #include "extensions/browser/extension_registry.h"
18 #include "extensions/common/extension.h"
19 #include "extensions/common/manifest_constants.h"
16 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webkit/browser/fileapi/external_mount_points.h" 21 #include "webkit/browser/fileapi/external_mount_points.h"
18 22
19 namespace chromeos { 23 namespace chromeos {
20 namespace file_system_provider { 24 namespace file_system_provider {
21 namespace { 25 namespace {
22 26
23 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 27 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
24 const char kFileSystemName[] = "Camera Pictures"; 28 const char kFileSystemName[] = "Camera Pictures";
25 29
(...skipping 30 matching lines...) Expand all
56 virtual void OnProvidedFileSystemUnmount( 60 virtual void OnProvidedFileSystemUnmount(
57 const ProvidedFileSystemInfo& file_system_info, 61 const ProvidedFileSystemInfo& file_system_info,
58 base::File::Error error) OVERRIDE { 62 base::File::Error error) OVERRIDE {
59 unmounts.push_back(Event(file_system_info, error)); 63 unmounts.push_back(Event(file_system_info, error));
60 } 64 }
61 65
62 std::vector<Event> mounts; 66 std::vector<Event> mounts;
63 std::vector<Event> unmounts; 67 std::vector<Event> unmounts;
64 }; 68 };
65 69
70 // Creates a fake extension with the specified |extension_id|.
71 scoped_refptr<extensions::Extension> createFakeExtension(
hashimoto 2014/03/27 09:18:49 Hmm, it's generally better to return raw-pointer t
mtomasz 2014/03/28 06:01:10 I think in this case, there is no other choice. If
72 const std::string& extension_id) {
73 base::DictionaryValue manifest;
74 std::string error;
75 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0");
76 manifest.SetString(extensions::manifest_keys::kName, "unused");
77 return extensions::Extension::Create(base::FilePath(),
78 extensions::Manifest::UNPACKED,
79 manifest,
80 extensions::Extension::NO_FLAGS,
81 kExtensionId,
82 &error);
83 }
84
66 } // namespace 85 } // namespace
67 86
68 class FileSystemProviderServiceTest : public testing::Test { 87 class FileSystemProviderServiceTest : public testing::Test {
69 protected: 88 protected:
70 FileSystemProviderServiceTest() {} 89 FileSystemProviderServiceTest() {}
71 virtual ~FileSystemProviderServiceTest() {} 90 virtual ~FileSystemProviderServiceTest() {}
72 91
73 virtual void SetUp() OVERRIDE { 92 virtual void SetUp() OVERRIDE {
93 profile_.reset(new TestingProfile);
74 user_manager_ = new FakeUserManager(); 94 user_manager_ = new FakeUserManager();
95 user_manager_->AddUser(profile_->GetProfileName());
75 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 96 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
76 profile_.reset(new TestingProfile); 97 extension_registry_.reset(new extensions::ExtensionRegistry);
77 user_manager_->AddUser(profile_->GetProfileName()); 98 file_system_provider_service_.reset(
78 file_system_provider_service_.reset(new Service(profile_.get())); 99 new Service(profile_.get(), extension_registry_.get()));
100 extension_ = createFakeExtension(kExtensionId);
79 } 101 }
80 102
81 virtual void TearDown() { 103 virtual void TearDown() {
82 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems(); 104 fileapi::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems();
83 } 105 }
84 106
85 content::TestBrowserThreadBundle thread_bundle_; 107 content::TestBrowserThreadBundle thread_bundle_;
86 scoped_ptr<TestingProfile> profile_; 108 scoped_ptr<TestingProfile> profile_;
109 FakeUserManager* user_manager_;
87 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 110 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
88 FakeUserManager* user_manager_; 111 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
89 scoped_ptr<Service> file_system_provider_service_; 112 scoped_ptr<Service> file_system_provider_service_;
113 scoped_refptr<extensions::Extension> extension_;
90 }; 114 };
91 115
92 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 116 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
93 LoggingObserver observer; 117 LoggingObserver observer;
94 file_system_provider_service_->AddObserver(&observer); 118 file_system_provider_service_->AddObserver(&observer);
95 119
96 int file_system_id = file_system_provider_service_->MountFileSystem( 120 int file_system_id = file_system_provider_service_->MountFileSystem(
97 kExtensionId, kFileSystemName); 121 kExtensionId, kFileSystemName);
98 122
99 EXPECT_LT(0, file_system_id); 123 EXPECT_LT(0, file_system_id);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 EXPECT_EQ(kFileSystemName, 217 EXPECT_EQ(kFileSystemName,
194 observer.unmounts[0].file_system_info().file_system_name()); 218 observer.unmounts[0].file_system_info().file_system_name());
195 219
196 std::vector<ProvidedFileSystemInfo> file_system_info_list = 220 std::vector<ProvidedFileSystemInfo> file_system_info_list =
197 file_system_provider_service_->GetProvidedFileSystemInfoList(); 221 file_system_provider_service_->GetProvidedFileSystemInfoList();
198 ASSERT_EQ(0u, file_system_info_list.size()); 222 ASSERT_EQ(0u, file_system_info_list.size());
199 223
200 file_system_provider_service_->RemoveObserver(&observer); 224 file_system_provider_service_->RemoveObserver(&observer);
201 } 225 }
202 226
227 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
228 LoggingObserver observer;
229 file_system_provider_service_->AddObserver(&observer);
230
231 int file_system_id = file_system_provider_service_->MountFileSystem(
232 kExtensionId, kFileSystemName);
233 EXPECT_LT(0, file_system_id);
234 ASSERT_EQ(1u, observer.mounts.size());
235
236 // Directly call the observer's method.
237 file_system_provider_service_->OnExtensionUnloaded(extension_.get());
238
239 ASSERT_EQ(1u, observer.unmounts.size());
240 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
241
242 EXPECT_EQ(kExtensionId,
243 observer.unmounts[0].file_system_info().extension_id());
244 EXPECT_EQ(1, observer.unmounts[0].file_system_info().file_system_id());
245 EXPECT_EQ(
246 "/provided/mbflcebpggnecokmikipoihdbecnjfoj-1-testing_profile-hash",
hashimoto 2014/03/27 09:18:49 This EXPECT looks fragile for changes in UserManag
mtomasz 2014/03/28 06:01:10 I was thinking about it, but I was concerned that
247 observer.unmounts[0].file_system_info().mount_path().AsUTF8Unsafe());
248 EXPECT_EQ(kFileSystemName,
249 observer.unmounts[0].file_system_info().file_system_name());
250
251 std::vector<ProvidedFileSystemInfo> file_system_info_list =
252 file_system_provider_service_->GetProvidedFileSystemInfoList();
253 ASSERT_EQ(0u, file_system_info_list.size());
254
255 file_system_provider_service_->RemoveObserver(&observer);
256 }
257
203 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 258 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
204 LoggingObserver observer; 259 LoggingObserver observer;
205 file_system_provider_service_->AddObserver(&observer); 260 file_system_provider_service_->AddObserver(&observer);
206 261
207 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 262 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
208 263
209 int file_system_id = file_system_provider_service_->MountFileSystem( 264 int file_system_id = file_system_provider_service_->MountFileSystem(
210 kExtensionId, kFileSystemName); 265 kExtensionId, kFileSystemName);
211 EXPECT_LT(0, file_system_id); 266 EXPECT_LT(0, file_system_id);
212 ASSERT_EQ(1u, observer.mounts.size()); 267 ASSERT_EQ(1u, observer.mounts.size());
(...skipping 12 matching lines...) Expand all
225 280
226 std::vector<ProvidedFileSystemInfo> file_system_info_list = 281 std::vector<ProvidedFileSystemInfo> file_system_info_list =
227 file_system_provider_service_->GetProvidedFileSystemInfoList(); 282 file_system_provider_service_->GetProvidedFileSystemInfoList();
228 ASSERT_EQ(1u, file_system_info_list.size()); 283 ASSERT_EQ(1u, file_system_info_list.size());
229 284
230 file_system_provider_service_->RemoveObserver(&observer); 285 file_system_provider_service_->RemoveObserver(&observer);
231 } 286 }
232 287
233 } // namespace file_system_provider 288 } // namespace file_system_provider
234 } // namespace chromeos 289 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698