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

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

Issue 658313002: [fsp] Store observed entries in preferences. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: Created 6 years, 2 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
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 const ProvidedFileSystemInfo& file_system_info, 76 const ProvidedFileSystemInfo& file_system_info,
77 base::File::Error error) override { 77 base::File::Error error) override {
78 unmounts.push_back(Event(file_system_info, error)); 78 unmounts.push_back(Event(file_system_info, error));
79 } 79 }
80 80
81 std::vector<Event> mounts; 81 std::vector<Event> mounts;
82 std::vector<Event> unmounts; 82 std::vector<Event> unmounts;
83 }; 83 };
84 84
85 // Creates a fake extension with the specified |extension_id|. 85 // Creates a fake extension with the specified |extension_id|.
86 scoped_refptr<extensions::Extension> createFakeExtension( 86 scoped_refptr<extensions::Extension> CreateFakeExtension(
87 const std::string& extension_id) { 87 const std::string& extension_id) {
88 base::DictionaryValue manifest; 88 base::DictionaryValue manifest;
89 std::string error; 89 std::string error;
90 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kVersion, 90 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kVersion,
91 "1.0.0.0"); 91 "1.0.0.0");
92 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kName, 92 manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kName,
93 "unused"); 93 "unused");
94 return extensions::Extension::Create(base::FilePath(), 94 return extensions::Extension::Create(base::FilePath(),
95 extensions::Manifest::UNPACKED, 95 extensions::Manifest::UNPACKED,
96 manifest, 96 manifest,
97 extensions::Extension::NO_FLAGS, 97 extensions::Extension::NO_FLAGS,
98 extension_id, 98 extension_id,
99 &error); 99 &error);
100 } 100 }
101 101
102 // Stores a provided file system information in preferences. 102 // Stores a provided file system information in preferences together with a
103 // fake observed entry.
103 void RememberFakeFileSystem(TestingProfile* profile, 104 void RememberFakeFileSystem(TestingProfile* profile,
104 const std::string& extension_id, 105 const std::string& extension_id,
105 const std::string& file_system_id, 106 const std::string& file_system_id,
106 const std::string& display_name, 107 const std::string& display_name,
107 bool writable, 108 bool writable,
108 bool supports_notify_tag) { 109 bool supports_notify_tag,
110 const ObservedEntry& observed_entry) {
109 TestingPrefServiceSyncable* const pref_service = 111 TestingPrefServiceSyncable* const pref_service =
110 profile->GetTestingPrefService(); 112 profile->GetTestingPrefService();
111 ASSERT_TRUE(pref_service); 113 ASSERT_TRUE(pref_service);
112 114
113 base::DictionaryValue extensions; 115 base::DictionaryValue extensions;
114 base::DictionaryValue* file_systems = new base::DictionaryValue(); 116 base::DictionaryValue* file_systems = new base::DictionaryValue();
115 base::DictionaryValue* file_system = new base::DictionaryValue(); 117 base::DictionaryValue* file_system = new base::DictionaryValue();
116 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, 118 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId,
117 kFileSystemId); 119 kFileSystemId);
118 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); 120 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName);
119 file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable); 121 file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable);
120 file_system->SetBooleanWithoutPathExpansion(kPrefKeySupportsNotifyTag, 122 file_system->SetBooleanWithoutPathExpansion(kPrefKeySupportsNotifyTag,
121 supports_notify_tag); 123 supports_notify_tag);
122 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); 124 file_systems->SetWithoutPathExpansion(kFileSystemId, file_system);
123 extensions.SetWithoutPathExpansion(kExtensionId, file_systems); 125 extensions.SetWithoutPathExpansion(kExtensionId, file_systems);
124 126
127 // Remember observed entries.
128 base::DictionaryValue* observed_entries = new base::DictionaryValue();
hirono 2014/10/17 08:22:23 nit: base::DictionaryValue* const
mtomasz 2014/10/20 05:11:56 Done.
129 file_system->SetWithoutPathExpansion(kPrefKeyObservedEntries,
130 observed_entries);
131 base::DictionaryValue* observed_entry_value = new base::DictionaryValue();
hirono 2014/10/17 08:22:23 nit: base::DictionaryValue* const
mtomasz 2014/10/20 05:11:56 Done.
132 observed_entries->SetWithoutPathExpansion(observed_entry.entry_path.value(),
133 observed_entry_value);
134 observed_entry_value->SetStringWithoutPathExpansion(
135 kPrefKeyObservedEntryEntryPath, observed_entry.entry_path.value());
136 observed_entry_value->SetBooleanWithoutPathExpansion(
137 kPrefKeyObservedEntryRecursive, observed_entry.recursive);
138 observed_entry_value->SetStringWithoutPathExpansion(
139 kPrefKeyObservedEntryLastTag, observed_entry.last_tag);
140
125 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); 141 pref_service->Set(prefs::kFileSystemProviderMounted, extensions);
126 } 142 }
127 143
128 } // namespace 144 } // namespace
129 145
130 class FileSystemProviderServiceTest : public testing::Test { 146 class FileSystemProviderServiceTest : public testing::Test {
131 protected: 147 protected:
132 FileSystemProviderServiceTest() : profile_(NULL) {} 148 FileSystemProviderServiceTest() : profile_(NULL) {}
133 149
134 virtual ~FileSystemProviderServiceTest() {} 150 virtual ~FileSystemProviderServiceTest() {}
135 151
136 virtual void SetUp() override { 152 virtual void SetUp() override {
137 profile_manager_.reset( 153 profile_manager_.reset(
138 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 154 new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
139 ASSERT_TRUE(profile_manager_->SetUp()); 155 ASSERT_TRUE(profile_manager_->SetUp());
140 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com"); 156 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com");
141 user_manager_ = new FakeUserManager(); 157 user_manager_ = new FakeUserManager();
142 user_manager_->AddUser(profile_->GetProfileName()); 158 user_manager_->AddUser(profile_->GetProfileName());
143 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 159 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
144 extension_registry_.reset(new extensions::ExtensionRegistry(profile_)); 160 extension_registry_.reset(new extensions::ExtensionRegistry(profile_));
145 service_.reset(new Service(profile_, extension_registry_.get())); 161 service_.reset(new Service(profile_, extension_registry_.get()));
146 service_->SetFileSystemFactoryForTesting( 162 service_->SetFileSystemFactoryForTesting(
147 base::Bind(&FakeProvidedFileSystem::Create)); 163 base::Bind(&FakeProvidedFileSystem::Create));
148 extension_ = createFakeExtension(kExtensionId); 164 extension_ = CreateFakeExtension(kExtensionId);
165 fake_observed_entry_.entry_path =
166 base::FilePath(FILE_PATH_LITERAL("/a/b/c"));
167 fake_observed_entry_.recursive = true;
168 fake_observed_entry_.last_tag = "hello-world";
149 } 169 }
150 170
151 content::TestBrowserThreadBundle thread_bundle_; 171 content::TestBrowserThreadBundle thread_bundle_;
152 scoped_ptr<TestingProfileManager> profile_manager_; 172 scoped_ptr<TestingProfileManager> profile_manager_;
153 TestingProfile* profile_; 173 TestingProfile* profile_;
154 FakeUserManager* user_manager_; 174 FakeUserManager* user_manager_;
155 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 175 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
156 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; 176 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
157 scoped_ptr<Service> service_; 177 scoped_ptr<Service> service_;
158 scoped_refptr<extensions::Extension> extension_; 178 scoped_refptr<extensions::Extension> extension_;
179 ObservedEntry fake_observed_entry_;
159 }; 180 };
160 181
161 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 182 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
162 LoggingObserver observer; 183 LoggingObserver observer;
163 service_->AddObserver(&observer); 184 service_->AddObserver(&observer);
164 185
165 EXPECT_TRUE(service_->MountFileSystem( 186 EXPECT_TRUE(service_->MountFileSystem(
166 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); 187 kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
167 188
168 ASSERT_EQ(1u, observer.mounts.size()); 189 ASSERT_EQ(1u, observer.mounts.size());
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 service_->RemoveObserver(&observer); 354 service_->RemoveObserver(&observer);
334 } 355 }
335 356
336 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { 357 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) {
337 // Create a fake entry in the preferences. 358 // Create a fake entry in the preferences.
338 RememberFakeFileSystem(profile_, 359 RememberFakeFileSystem(profile_,
339 kExtensionId, 360 kExtensionId,
340 kFileSystemId, 361 kFileSystemId,
341 kDisplayName, 362 kDisplayName,
342 true /* writable */, 363 true /* writable */,
343 true /* supports_notify_tag */); 364 true /* supports_notify_tag */,
365 fake_observed_entry_);
344 366
345 // Create a new service instance in order to load remembered file systems 367 // Create a new service instance in order to load remembered file systems
346 // from preferences. 368 // from preferences.
347 scoped_ptr<Service> new_service( 369 scoped_ptr<Service> new_service(
348 new Service(profile_, extension_registry_.get())); 370 new Service(profile_, extension_registry_.get()));
349 LoggingObserver observer; 371 LoggingObserver observer;
350 new_service->AddObserver(&observer); 372 new_service->AddObserver(&observer);
351 373
352 new_service->SetFileSystemFactoryForTesting( 374 new_service->SetFileSystemFactoryForTesting(
353 base::Bind(&FakeProvidedFileSystem::Create)); 375 base::Bind(&FakeProvidedFileSystem::Create));
354 376
355 EXPECT_EQ(0u, observer.mounts.size()); 377 EXPECT_EQ(0u, observer.mounts.size());
356 378
357 // Directly call the observer's method. 379 // Directly call the observer's method.
358 new_service->OnExtensionLoaded(profile_, extension_.get()); 380 new_service->OnExtensionLoaded(profile_, extension_.get());
359 381
360 ASSERT_EQ(1u, observer.mounts.size()); 382 ASSERT_EQ(1u, observer.mounts.size());
361 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 383 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
362 384
363 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 385 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
364 EXPECT_EQ(kFileSystemId, 386 EXPECT_EQ(kFileSystemId,
365 observer.mounts[0].file_system_info().file_system_id()); 387 observer.mounts[0].file_system_info().file_system_id());
366 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); 388 EXPECT_TRUE(observer.mounts[0].file_system_info().writable());
367 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag()); 389 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag());
368 390
369 std::vector<ProvidedFileSystemInfo> file_system_info_list = 391 std::vector<ProvidedFileSystemInfo> file_system_info_list =
370 new_service->GetProvidedFileSystemInfoList(); 392 new_service->GetProvidedFileSystemInfoList();
371 ASSERT_EQ(1u, file_system_info_list.size()); 393 ASSERT_EQ(1u, file_system_info_list.size());
372 394
395 ProvidedFileSystemInterface* file_system =
hirono 2014/10/17 08:22:23 nit: const
mtomasz 2014/10/20 05:11:56 Done.
396 new_service->GetProvidedFileSystem(kExtensionId, kFileSystemId);
397 ASSERT_TRUE(file_system);
398
399 const ObservedEntries* const observed_entries =
400 file_system->GetObservedEntries();
401 ASSERT_TRUE(observed_entries);
402 ASSERT_EQ(1u, observed_entries->size());
403
404 const ObservedEntries::const_iterator restored_observed_entry_it =
405 observed_entries->find(fake_observed_entry_.entry_path);
406 ASSERT_NE(observed_entries->end(), restored_observed_entry_it);
407
408 EXPECT_EQ(fake_observed_entry_.entry_path,
409 restored_observed_entry_it->second.entry_path);
410 EXPECT_EQ(fake_observed_entry_.recursive,
411 restored_observed_entry_it->second.recursive);
412 EXPECT_EQ(fake_observed_entry_.last_tag,
413 restored_observed_entry_it->second.last_tag);
414
373 new_service->RemoveObserver(&observer); 415 new_service->RemoveObserver(&observer);
374 } 416 }
375 417
376 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { 418 TEST_F(FileSystemProviderServiceTest, RememberFileSystem) {
377 LoggingObserver observer;
378 service_->AddObserver(&observer);
379
380 MountOptions options(kFileSystemId, kDisplayName); 419 MountOptions options(kFileSystemId, kDisplayName);
381 options.writable = true; 420 options.writable = true;
382 options.supports_notify_tag = true; 421 options.supports_notify_tag = true;
383 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, options)); 422
384 ASSERT_EQ(1u, observer.mounts.size()); 423 ProvidedFileSystemInfo file_system_info(
424 kExtensionId, options, base::FilePath(FILE_PATH_LITERAL("/a/b/c")));
425
426 ObservedEntries observed_entries;
427 observed_entries[fake_observed_entry_.entry_path] = fake_observed_entry_;
428
429 service_->RememberFileSystem(file_system_info, observed_entries);
385 430
386 TestingPrefServiceSyncable* const pref_service = 431 TestingPrefServiceSyncable* const pref_service =
387 profile_->GetTestingPrefService(); 432 profile_->GetTestingPrefService();
388 ASSERT_TRUE(pref_service); 433 ASSERT_TRUE(pref_service);
389 434
390 const base::DictionaryValue* const extensions = 435 const base::DictionaryValue* const extensions =
391 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 436 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
392 ASSERT_TRUE(extensions); 437 ASSERT_TRUE(extensions);
393 438
394 const base::DictionaryValue* file_systems = NULL; 439 const base::DictionaryValue* file_systems = NULL;
(...skipping 20 matching lines...) Expand all
415 bool writable = false; 460 bool writable = false;
416 EXPECT_TRUE( 461 EXPECT_TRUE(
417 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); 462 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable));
418 EXPECT_TRUE(writable); 463 EXPECT_TRUE(writable);
419 464
420 bool supports_notify_tag = false; 465 bool supports_notify_tag = false;
421 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion( 466 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion(
422 kPrefKeySupportsNotifyTag, &supports_notify_tag)); 467 kPrefKeySupportsNotifyTag, &supports_notify_tag));
423 EXPECT_TRUE(supports_notify_tag); 468 EXPECT_TRUE(supports_notify_tag);
424 469
470 const base::DictionaryValue* observed_entries_value = NULL;
471 ASSERT_TRUE(file_system->GetDictionaryWithoutPathExpansion(
472 kPrefKeyObservedEntries, &observed_entries_value));
473
474 const base::DictionaryValue* observed_entry = NULL;
475 ASSERT_TRUE(observed_entries_value->GetDictionaryWithoutPathExpansion(
476 fake_observed_entry_.entry_path.value(), &observed_entry));
477
478 std::string entry_path;
479 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
480 kPrefKeyObservedEntryEntryPath, &entry_path));
481 EXPECT_EQ(fake_observed_entry_.entry_path.value(), entry_path);
482
483 bool recursive = false;
484 EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion(
485 kPrefKeyObservedEntryRecursive, &recursive));
486 EXPECT_EQ(fake_observed_entry_.recursive, recursive);
487
488 std::string last_tag;
489 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
490 kPrefKeyObservedEntryLastTag, &last_tag));
491 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag);
492 }
493
494 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) {
495 LoggingObserver observer;
496 service_->AddObserver(&observer);
497
498 TestingPrefServiceSyncable* const pref_service =
499 profile_->GetTestingPrefService();
500 ASSERT_TRUE(pref_service);
501
502 EXPECT_TRUE(service_->MountFileSystem(
503 kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
504 ASSERT_EQ(1u, observer.mounts.size());
505
506 const base::DictionaryValue* extensions =
507 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
508 ASSERT_TRUE(extensions);
509
510 const base::DictionaryValue* file_systems = NULL;
511 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
512 &file_systems));
513 EXPECT_EQ(1u, file_systems->size());
514
425 service_->RemoveObserver(&observer); 515 service_->RemoveObserver(&observer);
426 } 516 }
427 517
428 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { 518 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) {
429 LoggingObserver observer; 519 LoggingObserver observer;
430 service_->AddObserver(&observer); 520 service_->AddObserver(&observer);
431 521
432 TestingPrefServiceSyncable* const pref_service = 522 TestingPrefServiceSyncable* const pref_service =
433 profile_->GetTestingPrefService(); 523 profile_->GetTestingPrefService();
434 ASSERT_TRUE(pref_service); 524 ASSERT_TRUE(pref_service);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 const base::DictionaryValue* file_systems = NULL; 589 const base::DictionaryValue* file_systems = NULL;
500 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 590 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
501 &file_systems)); 591 &file_systems));
502 } 592 }
503 593
504 service_->RemoveObserver(&observer); 594 service_->RemoveObserver(&observer);
505 } 595 }
506 596
507 } // namespace file_system_provider 597 } // namespace file_system_provider
508 } // namespace chromeos 598 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698