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

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

Issue 334263017: [fsp] Remember mounted file systems as soon as possible. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updated a comment. Created 6 years, 5 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.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 "chrome/browser/chromeos/file_system_provider/service.h" 5 #include "chrome/browser/chromeos/file_system_provider/service.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/files/file.h" 10 #include "base/files/file.h"
(...skipping 14 matching lines...) Expand all
25 #include "extensions/common/extension.h" 25 #include "extensions/common/extension.h"
26 #include "extensions/common/manifest_constants.h" 26 #include "extensions/common/manifest_constants.h"
27 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
28 #include "webkit/browser/fileapi/external_mount_points.h" 28 #include "webkit/browser/fileapi/external_mount_points.h"
29 29
30 namespace chromeos { 30 namespace chromeos {
31 namespace file_system_provider { 31 namespace file_system_provider {
32 namespace { 32 namespace {
33 33
34 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 34 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
35 const char kFileSystemId[] = "camera/pictures/id !@#$%^&*()_+";
36 const char kDisplayName[] = "Camera Pictures"; 35 const char kDisplayName[] = "Camera Pictures";
37 36
37 // The dot in the file system ID is there in order to check that saving to
38 // preferences works correctly. File System ID is used as a key in
39 // a base::DictionaryValue, so it has to be stored without path expansion.
40 const char kFileSystemId[] = "camera/pictures/id .!@#$%^&*()_+";
41
38 // Utility observer, logging events from file_system_provider::Service. 42 // Utility observer, logging events from file_system_provider::Service.
39 class LoggingObserver : public Observer { 43 class LoggingObserver : public Observer {
40 public: 44 public:
41 class Event { 45 class Event {
42 public: 46 public:
43 Event(const ProvidedFileSystemInfo& file_system_info, 47 Event(const ProvidedFileSystemInfo& file_system_info,
44 base::File::Error error) 48 base::File::Error error)
45 : file_system_info_(file_system_info), error_(error) {} 49 : file_system_info_(file_system_info), error_(error) {}
46 ~Event() {} 50 ~Event() {}
47 51
(...skipping 25 matching lines...) Expand all
73 77
74 std::vector<Event> mounts; 78 std::vector<Event> mounts;
75 std::vector<Event> unmounts; 79 std::vector<Event> unmounts;
76 }; 80 };
77 81
78 // Creates a fake extension with the specified |extension_id|. 82 // Creates a fake extension with the specified |extension_id|.
79 scoped_refptr<extensions::Extension> createFakeExtension( 83 scoped_refptr<extensions::Extension> createFakeExtension(
80 const std::string& extension_id) { 84 const std::string& extension_id) {
81 base::DictionaryValue manifest; 85 base::DictionaryValue manifest;
82 std::string error; 86 std::string error;
83 manifest.SetString(extensions::manifest_keys::kVersion, "1.0.0.0"); 87 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kVersion,
84 manifest.SetString(extensions::manifest_keys::kName, "unused"); 88 "1.0.0.0");
89 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kName,
90 "unused");
85 return extensions::Extension::Create(base::FilePath(), 91 return extensions::Extension::Create(base::FilePath(),
86 extensions::Manifest::UNPACKED, 92 extensions::Manifest::UNPACKED,
87 manifest, 93 manifest,
88 extensions::Extension::NO_FLAGS, 94 extensions::Extension::NO_FLAGS,
89 extension_id, 95 extension_id,
90 &error); 96 &error);
91 } 97 }
92 98
93 // Stores a provided file system information in preferences. 99 // Stores a provided file system information in preferences.
94 void RememberFakeFileSystem(TestingProfile* profile, 100 void RememberFakeFileSystem(TestingProfile* profile,
95 const std::string& extension_id, 101 const std::string& extension_id,
96 const std::string& file_system_id, 102 const std::string& file_system_id,
97 const std::string& display_name) { 103 const std::string& display_name) {
98 TestingPrefServiceSyncable* pref_service = profile->GetTestingPrefService(); 104 TestingPrefServiceSyncable* const pref_service =
105 profile->GetTestingPrefService();
99 ASSERT_TRUE(pref_service); 106 ASSERT_TRUE(pref_service);
100 107
101 base::DictionaryValue extensions; 108 base::DictionaryValue extensions;
102 base::ListValue* file_systems = new base::ListValue(); 109 base::DictionaryValue* file_systems = new base::DictionaryValue();
103 base::DictionaryValue* file_system = new base::DictionaryValue(); 110 base::DictionaryValue* file_system = new base::DictionaryValue();
104 file_system->SetString(kPrefKeyFileSystemId, kFileSystemId); 111 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId,
105 file_system->SetString(kPrefKeyDisplayName, kDisplayName); 112 kFileSystemId);
106 file_systems->Append(file_system); 113 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName);
107 extensions.Set(kExtensionId, file_systems); 114 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system);
115 extensions.SetWithoutPathExpansion(kExtensionId, file_systems);
108 116
109 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); 117 pref_service->Set(prefs::kFileSystemProviderMounted, extensions);
110 } 118 }
111 119
112 } // namespace 120 } // namespace
113 121
114 class FileSystemProviderServiceTest : public testing::Test { 122 class FileSystemProviderServiceTest : public testing::Test {
115 protected: 123 protected:
116 FileSystemProviderServiceTest() {} 124 FileSystemProviderServiceTest() {}
117 virtual ~FileSystemProviderServiceTest() {} 125 virtual ~FileSystemProviderServiceTest() {}
118 126
119 virtual void SetUp() OVERRIDE { 127 virtual void SetUp() OVERRIDE {
120 profile_.reset(new TestingProfile); 128 profile_.reset(new TestingProfile);
121 user_manager_ = new FakeUserManager(); 129 user_manager_ = new FakeUserManager();
122 user_manager_->AddUser(profile_->GetProfileName()); 130 user_manager_->AddUser(profile_->GetProfileName());
123 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 131 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
124 extension_registry_.reset( 132 extension_registry_.reset(
125 new extensions::ExtensionRegistry(profile_.get())); 133 new extensions::ExtensionRegistry(profile_.get()));
126 file_system_provider_service_.reset( 134 service_.reset(new Service(profile_.get(), extension_registry_.get()));
127 new Service(profile_.get(), extension_registry_.get())); 135 service_->SetFileSystemFactoryForTesting(
128 file_system_provider_service_->SetFileSystemFactoryForTesting(
129 base::Bind(&FakeProvidedFileSystem::Create)); 136 base::Bind(&FakeProvidedFileSystem::Create));
130 extension_ = createFakeExtension(kExtensionId); 137 extension_ = createFakeExtension(kExtensionId);
131 } 138 }
132 139
133 content::TestBrowserThreadBundle thread_bundle_; 140 content::TestBrowserThreadBundle thread_bundle_;
134 scoped_ptr<TestingProfile> profile_; 141 scoped_ptr<TestingProfile> profile_;
135 FakeUserManager* user_manager_; 142 FakeUserManager* user_manager_;
136 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 143 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
137 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; 144 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
138 scoped_ptr<Service> file_system_provider_service_; 145 scoped_ptr<Service> service_;
139 scoped_refptr<extensions::Extension> extension_; 146 scoped_refptr<extensions::Extension> extension_;
140 }; 147 };
141 148
142 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 149 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
143 LoggingObserver observer; 150 LoggingObserver observer;
144 file_system_provider_service_->AddObserver(&observer); 151 service_->AddObserver(&observer);
145 152
146 const bool result = file_system_provider_service_->MountFileSystem( 153 EXPECT_TRUE(
147 kExtensionId, kFileSystemId, kDisplayName); 154 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
148 EXPECT_TRUE(result);
149 155
150 ASSERT_EQ(1u, observer.mounts.size()); 156 ASSERT_EQ(1u, observer.mounts.size());
151 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 157 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
152 EXPECT_EQ(kFileSystemId, 158 EXPECT_EQ(kFileSystemId,
153 observer.mounts[0].file_system_info().file_system_id()); 159 observer.mounts[0].file_system_info().file_system_id());
154 base::FilePath expected_mount_path = 160 base::FilePath expected_mount_path =
155 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId); 161 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId);
156 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), 162 EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(),
157 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); 163 observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe());
158 EXPECT_EQ(kDisplayName, observer.mounts[0].file_system_info().display_name()); 164 EXPECT_EQ(kDisplayName, observer.mounts[0].file_system_info().display_name());
159 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 165 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
160 ASSERT_EQ(0u, observer.unmounts.size()); 166 ASSERT_EQ(0u, observer.unmounts.size());
161 167
162 std::vector<ProvidedFileSystemInfo> file_system_info_list = 168 std::vector<ProvidedFileSystemInfo> file_system_info_list =
163 file_system_provider_service_->GetProvidedFileSystemInfoList(); 169 service_->GetProvidedFileSystemInfoList();
164 ASSERT_EQ(1u, file_system_info_list.size()); 170 ASSERT_EQ(1u, file_system_info_list.size());
165 171
166 file_system_provider_service_->RemoveObserver(&observer); 172 service_->RemoveObserver(&observer);
167 } 173 }
168 174
169 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { 175 TEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) {
170 LoggingObserver observer; 176 LoggingObserver observer;
171 file_system_provider_service_->AddObserver(&observer); 177 service_->AddObserver(&observer);
172 178
173 const bool result = file_system_provider_service_->MountFileSystem( 179 EXPECT_TRUE(
174 kExtensionId, kFileSystemId, kDisplayName); 180 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
175 EXPECT_TRUE(result); 181 EXPECT_FALSE(
176 182 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
177 const bool second_result = file_system_provider_service_->MountFileSystem(
178 kExtensionId, kFileSystemId, kDisplayName);
179 EXPECT_FALSE(second_result);
180 183
181 ASSERT_EQ(2u, observer.mounts.size()); 184 ASSERT_EQ(2u, observer.mounts.size());
182 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 185 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
183 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error()); 186 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error());
184 187
185 std::vector<ProvidedFileSystemInfo> file_system_info_list = 188 std::vector<ProvidedFileSystemInfo> file_system_info_list =
186 file_system_provider_service_->GetProvidedFileSystemInfoList(); 189 service_->GetProvidedFileSystemInfoList();
187 ASSERT_EQ(1u, file_system_info_list.size()); 190 ASSERT_EQ(1u, file_system_info_list.size());
188 191
189 file_system_provider_service_->RemoveObserver(&observer); 192 service_->RemoveObserver(&observer);
190 } 193 }
191 194
192 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { 195 TEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) {
193 LoggingObserver observer; 196 LoggingObserver observer;
194 file_system_provider_service_->AddObserver(&observer); 197 service_->AddObserver(&observer);
195 198
196 const size_t kMaxFileSystems = 16; 199 const size_t kMaxFileSystems = 16;
197 for (size_t i = 0; i < kMaxFileSystems; ++i) { 200 for (size_t i = 0; i < kMaxFileSystems; ++i) {
198 const std::string file_system_id = 201 const std::string file_system_id =
199 std::string("test-") + base::IntToString(i); 202 std::string("test-") + base::IntToString(i);
200 const bool result = file_system_provider_service_->MountFileSystem( 203 EXPECT_TRUE(
201 kExtensionId, file_system_id, kDisplayName); 204 service_->MountFileSystem(kExtensionId, file_system_id, kDisplayName));
202 EXPECT_TRUE(result);
203 } 205 }
204 ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); 206 ASSERT_EQ(kMaxFileSystems, observer.mounts.size());
205 207
206 // The next file system is out of limit, and registering it should fail. 208 // The next file system is out of limit, and registering it should fail.
207 const bool result = file_system_provider_service_->MountFileSystem( 209 EXPECT_FALSE(
208 kExtensionId, kFileSystemId, kDisplayName); 210 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
209 EXPECT_FALSE(result);
210 211
211 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); 212 ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size());
212 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, 213 EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED,
213 observer.mounts[kMaxFileSystems].error()); 214 observer.mounts[kMaxFileSystems].error());
214 215
215 std::vector<ProvidedFileSystemInfo> file_system_info_list = 216 std::vector<ProvidedFileSystemInfo> file_system_info_list =
216 file_system_provider_service_->GetProvidedFileSystemInfoList(); 217 service_->GetProvidedFileSystemInfoList();
217 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); 218 ASSERT_EQ(kMaxFileSystems, file_system_info_list.size());
218 219
219 file_system_provider_service_->RemoveObserver(&observer); 220 service_->RemoveObserver(&observer);
220 } 221 }
221 222
222 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { 223 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem) {
223 LoggingObserver observer; 224 LoggingObserver observer;
224 file_system_provider_service_->AddObserver(&observer); 225 service_->AddObserver(&observer);
225 226
226 const bool result = file_system_provider_service_->MountFileSystem( 227 EXPECT_TRUE(
227 kExtensionId, kFileSystemId, kDisplayName); 228 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
228 EXPECT_TRUE(result);
229 ASSERT_EQ(1u, observer.mounts.size()); 229 ASSERT_EQ(1u, observer.mounts.size());
230 230
231 const bool unmount_result = file_system_provider_service_->UnmountFileSystem( 231 EXPECT_TRUE(service_->UnmountFileSystem(
232 kExtensionId, kFileSystemId); 232 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER));
233 EXPECT_TRUE(unmount_result);
234 ASSERT_EQ(1u, observer.unmounts.size()); 233 ASSERT_EQ(1u, observer.unmounts.size());
235 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 234 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
236 235
237 EXPECT_EQ(kExtensionId, 236 EXPECT_EQ(kExtensionId,
238 observer.unmounts[0].file_system_info().extension_id()); 237 observer.unmounts[0].file_system_info().extension_id());
239 EXPECT_EQ(kFileSystemId, 238 EXPECT_EQ(kFileSystemId,
240 observer.unmounts[0].file_system_info().file_system_id()); 239 observer.unmounts[0].file_system_info().file_system_id());
241 240
242 std::vector<ProvidedFileSystemInfo> file_system_info_list = 241 std::vector<ProvidedFileSystemInfo> file_system_info_list =
243 file_system_provider_service_->GetProvidedFileSystemInfoList(); 242 service_->GetProvidedFileSystemInfoList();
244 ASSERT_EQ(0u, file_system_info_list.size()); 243 ASSERT_EQ(0u, file_system_info_list.size());
245 244
246 file_system_provider_service_->RemoveObserver(&observer); 245 service_->RemoveObserver(&observer);
247 } 246 }
248 247
249 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { 248 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) {
250 LoggingObserver observer; 249 LoggingObserver observer;
251 file_system_provider_service_->AddObserver(&observer); 250 service_->AddObserver(&observer);
252 251
253 const bool result = file_system_provider_service_->MountFileSystem( 252 EXPECT_TRUE(
254 kExtensionId, kFileSystemId, kDisplayName); 253 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
255 EXPECT_TRUE(result);
256 ASSERT_EQ(1u, observer.mounts.size()); 254 ASSERT_EQ(1u, observer.mounts.size());
257 255
258 // Directly call the observer's method. 256 // Directly call the observer's method.
259 file_system_provider_service_->OnExtensionUnloaded( 257 service_->OnExtensionUnloaded(
260 profile_.get(), 258 profile_.get(),
261 extension_.get(), 259 extension_.get(),
262 extensions::UnloadedExtensionInfo::REASON_DISABLE); 260 extensions::UnloadedExtensionInfo::REASON_DISABLE);
263 261
264 ASSERT_EQ(1u, observer.unmounts.size()); 262 ASSERT_EQ(1u, observer.unmounts.size());
265 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 263 EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error());
266 264
267 EXPECT_EQ(kExtensionId, 265 EXPECT_EQ(kExtensionId,
268 observer.unmounts[0].file_system_info().extension_id()); 266 observer.unmounts[0].file_system_info().extension_id());
269 EXPECT_EQ(kFileSystemId, 267 EXPECT_EQ(kFileSystemId,
270 observer.unmounts[0].file_system_info().file_system_id()); 268 observer.unmounts[0].file_system_info().file_system_id());
271 269
272 std::vector<ProvidedFileSystemInfo> file_system_info_list = 270 std::vector<ProvidedFileSystemInfo> file_system_info_list =
273 file_system_provider_service_->GetProvidedFileSystemInfoList(); 271 service_->GetProvidedFileSystemInfoList();
274 ASSERT_EQ(0u, file_system_info_list.size()); 272 ASSERT_EQ(0u, file_system_info_list.size());
275 273
276 file_system_provider_service_->RemoveObserver(&observer); 274 service_->RemoveObserver(&observer);
277 } 275 }
278 276
279 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 277 TEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) {
280 LoggingObserver observer; 278 LoggingObserver observer;
281 file_system_provider_service_->AddObserver(&observer); 279 service_->AddObserver(&observer);
282 280
283 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 281 const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe";
284 282
285 const bool result = file_system_provider_service_->MountFileSystem( 283 EXPECT_TRUE(
286 kExtensionId, kFileSystemId, kDisplayName); 284 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
287 EXPECT_TRUE(result);
288 ASSERT_EQ(1u, observer.mounts.size()); 285 ASSERT_EQ(1u, observer.mounts.size());
289 ASSERT_EQ( 286 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size());
290 1u,
291 file_system_provider_service_->GetProvidedFileSystemInfoList().size());
292 287
293 const bool unmount_result = file_system_provider_service_->UnmountFileSystem( 288 EXPECT_FALSE(service_->UnmountFileSystem(
294 kWrongExtensionId, kFileSystemId); 289 kWrongExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER));
295 EXPECT_FALSE(unmount_result);
296 ASSERT_EQ(1u, observer.unmounts.size()); 290 ASSERT_EQ(1u, observer.unmounts.size());
297 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); 291 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error());
298 ASSERT_EQ( 292 ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size());
299 1u,
300 file_system_provider_service_->GetProvidedFileSystemInfoList().size());
301 293
302 std::vector<ProvidedFileSystemInfo> file_system_info_list = 294 std::vector<ProvidedFileSystemInfo> file_system_info_list =
303 file_system_provider_service_->GetProvidedFileSystemInfoList(); 295 service_->GetProvidedFileSystemInfoList();
304 ASSERT_EQ(1u, file_system_info_list.size()); 296 ASSERT_EQ(1u, file_system_info_list.size());
305 297
306 file_system_provider_service_->RemoveObserver(&observer); 298 service_->RemoveObserver(&observer);
307 } 299 }
308 300
309 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { 301 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) {
310 LoggingObserver observer;
311 file_system_provider_service_->AddObserver(&observer);
312
313 // Create a fake entry in the preferences. 302 // Create a fake entry in the preferences.
314 RememberFakeFileSystem( 303 RememberFakeFileSystem(
315 profile_.get(), kExtensionId, kFileSystemId, kDisplayName); 304 profile_.get(), kExtensionId, kFileSystemId, kDisplayName);
316 305
306 // Create a new service instance in order to load remembered file systems
307 // from preferences.
308 scoped_ptr<Service> new_service(
309 new Service(profile_.get(), extension_registry_.get()));
310 LoggingObserver observer;
311 new_service->AddObserver(&observer);
312
313 new_service->SetFileSystemFactoryForTesting(
314 base::Bind(&FakeProvidedFileSystem::Create));
315
317 EXPECT_EQ(0u, observer.mounts.size()); 316 EXPECT_EQ(0u, observer.mounts.size());
318 317
319 // Directly call the observer's method. 318 // Directly call the observer's method.
320 file_system_provider_service_->OnExtensionLoaded(profile_.get(), 319 new_service->OnExtensionLoaded(profile_.get(), extension_.get());
321 extension_.get());
322 320
323 ASSERT_EQ(1u, observer.mounts.size()); 321 ASSERT_EQ(1u, observer.mounts.size());
324 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 322 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
325 323
326 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 324 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
327 EXPECT_EQ(kFileSystemId, 325 EXPECT_EQ(kFileSystemId,
328 observer.mounts[0].file_system_info().file_system_id()); 326 observer.mounts[0].file_system_info().file_system_id());
329 327
330 std::vector<ProvidedFileSystemInfo> file_system_info_list = 328 std::vector<ProvidedFileSystemInfo> file_system_info_list =
331 file_system_provider_service_->GetProvidedFileSystemInfoList(); 329 new_service->GetProvidedFileSystemInfoList();
332 ASSERT_EQ(1u, file_system_info_list.size()); 330 ASSERT_EQ(1u, file_system_info_list.size());
333 331
334 file_system_provider_service_->RemoveObserver(&observer); 332 new_service->RemoveObserver(&observer);
335 } 333 }
336 334
337 TEST_F(FileSystemProviderServiceTest, ForgetFileSystem_OnExtensionUnload) { 335 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) {
338 LoggingObserver observer; 336 LoggingObserver observer;
339 file_system_provider_service_->AddObserver(&observer); 337 service_->AddObserver(&observer);
340 338
341 // Create a fake entry in the preferences. 339 EXPECT_TRUE(
342 RememberFakeFileSystem( 340 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
343 profile_.get(), kExtensionId, kFileSystemId, kDisplayName); 341 ASSERT_EQ(1u, observer.mounts.size());
344 342
345 // Directly call the observer's methods. 343 TestingPrefServiceSyncable* const pref_service =
346 file_system_provider_service_->OnExtensionLoaded(profile_.get(), 344 profile_->GetTestingPrefService();
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); 345 ASSERT_TRUE(pref_service);
361 346
362 const base::DictionaryValue* extensions = 347 const base::DictionaryValue* const extensions =
363 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 348 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
364 ASSERT_TRUE(extensions); 349 ASSERT_TRUE(extensions);
365 350
366 const base::ListValue* file_systems; 351 const base::DictionaryValue* file_systems = NULL;
367 EXPECT_FALSE(extensions->GetList(kExtensionId, &file_systems)); 352 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
353 &file_systems));
354 EXPECT_EQ(1u, file_systems->size());
368 355
369 file_system_provider_service_->RemoveObserver(&observer); 356 const base::Value* file_system_value = NULL;
370 }
371
372 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnShutdown) {
373 {
374 scoped_ptr<Service> service(
375 new Service(profile_.get(), extension_registry_.get()));
376 service->SetFileSystemFactoryForTesting(
377 base::Bind(&FakeProvidedFileSystem::Create));
378
379 LoggingObserver observer;
380 service->AddObserver(&observer);
381
382 const bool result =
383 service->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName);
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; 357 const base::DictionaryValue* file_system = NULL;
402 ASSERT_TRUE(file_systems->GetDictionary(0, &file_system)); 358 ASSERT_TRUE(
359 file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value));
360 ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system));
403 361
404 std::string file_system_id; 362 std::string file_system_id;
405 file_system->GetString(kPrefKeyFileSystemId, &file_system_id); 363 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId,
364 &file_system_id));
406 EXPECT_EQ(kFileSystemId, file_system_id); 365 EXPECT_EQ(kFileSystemId, file_system_id);
407 366
408 std::string display_name; 367 std::string display_name;
409 file_system->GetString(kPrefKeyDisplayName, &display_name); 368 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName,
369 &display_name));
410 EXPECT_EQ(kDisplayName, display_name); 370 EXPECT_EQ(kDisplayName, display_name);
371
372 service_->RemoveObserver(&observer);
373 }
374
375 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) {
376 LoggingObserver observer;
377 service_->AddObserver(&observer);
378
379 TestingPrefServiceSyncable* const pref_service =
380 profile_->GetTestingPrefService();
381 ASSERT_TRUE(pref_service);
382
383 {
384 EXPECT_TRUE(
385 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
386 ASSERT_EQ(1u, observer.mounts.size());
387
388 const base::DictionaryValue* extensions =
389 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
390 ASSERT_TRUE(extensions);
391
392 const base::DictionaryValue* file_systems = NULL;
393 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
394 &file_systems));
395 EXPECT_EQ(1u, file_systems->size());
396 }
397
398 {
399 EXPECT_TRUE(service_->UnmountFileSystem(
400 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_SHUTDOWN));
401
402 const base::DictionaryValue* const extensions =
403 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
404 ASSERT_TRUE(extensions);
405
406 const base::DictionaryValue* file_systems = NULL;
407 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
408 &file_systems));
409 EXPECT_EQ(1u, file_systems->size());
410 }
411
412 service_->RemoveObserver(&observer);
413 }
414
415 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) {
416 LoggingObserver observer;
417 service_->AddObserver(&observer);
418
419 TestingPrefServiceSyncable* const pref_service =
420 profile_->GetTestingPrefService();
421 ASSERT_TRUE(pref_service);
422
423 {
424 EXPECT_TRUE(
425 service_->MountFileSystem(kExtensionId, kFileSystemId, kDisplayName));
426 ASSERT_EQ(1u, observer.mounts.size());
427
428 const base::DictionaryValue* extensions =
429 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
430 ASSERT_TRUE(extensions);
431
432 const base::DictionaryValue* file_systems = NULL;
433 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
434 &file_systems));
435 EXPECT_EQ(1u, file_systems->size());
436 }
437
438 {
439 EXPECT_TRUE(service_->UnmountFileSystem(
440 kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER));
441
442 const base::DictionaryValue* const extensions =
443 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
444 ASSERT_TRUE(extensions);
445
446 const base::DictionaryValue* file_systems = NULL;
447 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
448 &file_systems));
449 }
450
451 service_->RemoveObserver(&observer);
411 } 452 }
412 453
413 } // namespace file_system_provider 454 } // namespace file_system_provider
414 } // namespace chromeos 455 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698