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

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

Powered by Google App Engine
This is Rietveld 408576698