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

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: Fixed. 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
« 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 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* const observed_entries = new base::DictionaryValue();
129 file_system->SetWithoutPathExpansion(kPrefKeyObservedEntries,
130 observed_entries);
131 base::DictionaryValue* const observed_entry_value =
132 new base::DictionaryValue();
133 observed_entries->SetWithoutPathExpansion(observed_entry.entry_path.value(),
134 observed_entry_value);
135 observed_entry_value->SetStringWithoutPathExpansion(
136 kPrefKeyObservedEntryEntryPath, observed_entry.entry_path.value());
137 observed_entry_value->SetBooleanWithoutPathExpansion(
138 kPrefKeyObservedEntryRecursive, observed_entry.recursive);
139 observed_entry_value->SetStringWithoutPathExpansion(
140 kPrefKeyObservedEntryLastTag, observed_entry.last_tag);
141
125 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); 142 pref_service->Set(prefs::kFileSystemProviderMounted, extensions);
126 } 143 }
127 144
128 } // namespace 145 } // namespace
129 146
130 class FileSystemProviderServiceTest : public testing::Test { 147 class FileSystemProviderServiceTest : public testing::Test {
131 protected: 148 protected:
132 FileSystemProviderServiceTest() : profile_(NULL) {} 149 FileSystemProviderServiceTest() : profile_(NULL) {}
133 150
134 virtual ~FileSystemProviderServiceTest() {} 151 virtual ~FileSystemProviderServiceTest() {}
135 152
136 virtual void SetUp() override { 153 virtual void SetUp() override {
137 profile_manager_.reset( 154 profile_manager_.reset(
138 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 155 new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
139 ASSERT_TRUE(profile_manager_->SetUp()); 156 ASSERT_TRUE(profile_manager_->SetUp());
140 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com"); 157 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com");
141 user_manager_ = new FakeUserManager(); 158 user_manager_ = new FakeUserManager();
142 user_manager_->AddUser(profile_->GetProfileName()); 159 user_manager_->AddUser(profile_->GetProfileName());
143 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 160 user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_));
144 extension_registry_.reset(new extensions::ExtensionRegistry(profile_)); 161 extension_registry_.reset(new extensions::ExtensionRegistry(profile_));
145 service_.reset(new Service(profile_, extension_registry_.get())); 162 service_.reset(new Service(profile_, extension_registry_.get()));
146 service_->SetFileSystemFactoryForTesting( 163 service_->SetFileSystemFactoryForTesting(
147 base::Bind(&FakeProvidedFileSystem::Create)); 164 base::Bind(&FakeProvidedFileSystem::Create));
148 extension_ = createFakeExtension(kExtensionId); 165 extension_ = CreateFakeExtension(kExtensionId);
166 fake_observed_entry_.entry_path =
167 base::FilePath(FILE_PATH_LITERAL("/a/b/c"));
168 fake_observed_entry_.recursive = true;
169 fake_observed_entry_.last_tag = "hello-world";
149 } 170 }
150 171
151 content::TestBrowserThreadBundle thread_bundle_; 172 content::TestBrowserThreadBundle thread_bundle_;
152 scoped_ptr<TestingProfileManager> profile_manager_; 173 scoped_ptr<TestingProfileManager> profile_manager_;
153 TestingProfile* profile_; 174 TestingProfile* profile_;
154 FakeUserManager* user_manager_; 175 FakeUserManager* user_manager_;
155 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 176 scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
156 scoped_ptr<extensions::ExtensionRegistry> extension_registry_; 177 scoped_ptr<extensions::ExtensionRegistry> extension_registry_;
157 scoped_ptr<Service> service_; 178 scoped_ptr<Service> service_;
158 scoped_refptr<extensions::Extension> extension_; 179 scoped_refptr<extensions::Extension> extension_;
180 ObservedEntry fake_observed_entry_;
159 }; 181 };
160 182
161 TEST_F(FileSystemProviderServiceTest, MountFileSystem) { 183 TEST_F(FileSystemProviderServiceTest, MountFileSystem) {
162 LoggingObserver observer; 184 LoggingObserver observer;
163 service_->AddObserver(&observer); 185 service_->AddObserver(&observer);
164 186
165 EXPECT_TRUE(service_->MountFileSystem( 187 EXPECT_TRUE(service_->MountFileSystem(
166 kExtensionId, MountOptions(kFileSystemId, kDisplayName))); 188 kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
167 189
168 ASSERT_EQ(1u, observer.mounts.size()); 190 ASSERT_EQ(1u, observer.mounts.size());
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 service_->RemoveObserver(&observer); 355 service_->RemoveObserver(&observer);
334 } 356 }
335 357
336 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { 358 TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) {
337 // Create a fake entry in the preferences. 359 // Create a fake entry in the preferences.
338 RememberFakeFileSystem(profile_, 360 RememberFakeFileSystem(profile_,
339 kExtensionId, 361 kExtensionId,
340 kFileSystemId, 362 kFileSystemId,
341 kDisplayName, 363 kDisplayName,
342 true /* writable */, 364 true /* writable */,
343 true /* supports_notify_tag */); 365 true /* supports_notify_tag */,
366 fake_observed_entry_);
344 367
345 // Create a new service instance in order to load remembered file systems 368 // Create a new service instance in order to load remembered file systems
346 // from preferences. 369 // from preferences.
347 scoped_ptr<Service> new_service( 370 scoped_ptr<Service> new_service(
348 new Service(profile_, extension_registry_.get())); 371 new Service(profile_, extension_registry_.get()));
349 LoggingObserver observer; 372 LoggingObserver observer;
350 new_service->AddObserver(&observer); 373 new_service->AddObserver(&observer);
351 374
352 new_service->SetFileSystemFactoryForTesting( 375 new_service->SetFileSystemFactoryForTesting(
353 base::Bind(&FakeProvidedFileSystem::Create)); 376 base::Bind(&FakeProvidedFileSystem::Create));
354 377
355 EXPECT_EQ(0u, observer.mounts.size()); 378 EXPECT_EQ(0u, observer.mounts.size());
356 379
357 // Directly call the observer's method. 380 // Directly call the observer's method.
358 new_service->OnExtensionLoaded(profile_, extension_.get()); 381 new_service->OnExtensionLoaded(profile_, extension_.get());
359 382
360 ASSERT_EQ(1u, observer.mounts.size()); 383 ASSERT_EQ(1u, observer.mounts.size());
361 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 384 EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error());
362 385
363 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 386 EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id());
364 EXPECT_EQ(kFileSystemId, 387 EXPECT_EQ(kFileSystemId,
365 observer.mounts[0].file_system_info().file_system_id()); 388 observer.mounts[0].file_system_info().file_system_id());
366 EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); 389 EXPECT_TRUE(observer.mounts[0].file_system_info().writable());
367 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag()); 390 EXPECT_TRUE(observer.mounts[0].file_system_info().supports_notify_tag());
368 391
369 std::vector<ProvidedFileSystemInfo> file_system_info_list = 392 std::vector<ProvidedFileSystemInfo> file_system_info_list =
370 new_service->GetProvidedFileSystemInfoList(); 393 new_service->GetProvidedFileSystemInfoList();
371 ASSERT_EQ(1u, file_system_info_list.size()); 394 ASSERT_EQ(1u, file_system_info_list.size());
372 395
396 ProvidedFileSystemInterface* const file_system =
397 new_service->GetProvidedFileSystem(kExtensionId, kFileSystemId);
398 ASSERT_TRUE(file_system);
399
400 const ObservedEntries* const observed_entries =
401 file_system->GetObservedEntries();
402 ASSERT_TRUE(observed_entries);
403 ASSERT_EQ(1u, observed_entries->size());
404
405 const ObservedEntries::const_iterator restored_observed_entry_it =
406 observed_entries->find(fake_observed_entry_.entry_path);
407 ASSERT_NE(observed_entries->end(), restored_observed_entry_it);
408
409 EXPECT_EQ(fake_observed_entry_.entry_path,
410 restored_observed_entry_it->second.entry_path);
411 EXPECT_EQ(fake_observed_entry_.recursive,
412 restored_observed_entry_it->second.recursive);
413 EXPECT_EQ(fake_observed_entry_.last_tag,
414 restored_observed_entry_it->second.last_tag);
415
373 new_service->RemoveObserver(&observer); 416 new_service->RemoveObserver(&observer);
374 } 417 }
375 418
376 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { 419 TEST_F(FileSystemProviderServiceTest, RememberFileSystem) {
377 LoggingObserver observer;
378 service_->AddObserver(&observer);
379
380 MountOptions options(kFileSystemId, kDisplayName); 420 MountOptions options(kFileSystemId, kDisplayName);
381 options.writable = true; 421 options.writable = true;
382 options.supports_notify_tag = true; 422 options.supports_notify_tag = true;
383 EXPECT_TRUE(service_->MountFileSystem(kExtensionId, options)); 423
384 ASSERT_EQ(1u, observer.mounts.size()); 424 ProvidedFileSystemInfo file_system_info(
425 kExtensionId, options, base::FilePath(FILE_PATH_LITERAL("/a/b/c")));
426
427 ObservedEntries observed_entries;
428 observed_entries[fake_observed_entry_.entry_path] = fake_observed_entry_;
429
430 service_->RememberFileSystem(file_system_info, observed_entries);
385 431
386 TestingPrefServiceSyncable* const pref_service = 432 TestingPrefServiceSyncable* const pref_service =
387 profile_->GetTestingPrefService(); 433 profile_->GetTestingPrefService();
388 ASSERT_TRUE(pref_service); 434 ASSERT_TRUE(pref_service);
389 435
390 const base::DictionaryValue* const extensions = 436 const base::DictionaryValue* const extensions =
391 pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 437 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
392 ASSERT_TRUE(extensions); 438 ASSERT_TRUE(extensions);
393 439
394 const base::DictionaryValue* file_systems = NULL; 440 const base::DictionaryValue* file_systems = NULL;
(...skipping 20 matching lines...) Expand all
415 bool writable = false; 461 bool writable = false;
416 EXPECT_TRUE( 462 EXPECT_TRUE(
417 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); 463 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable));
418 EXPECT_TRUE(writable); 464 EXPECT_TRUE(writable);
419 465
420 bool supports_notify_tag = false; 466 bool supports_notify_tag = false;
421 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion( 467 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion(
422 kPrefKeySupportsNotifyTag, &supports_notify_tag)); 468 kPrefKeySupportsNotifyTag, &supports_notify_tag));
423 EXPECT_TRUE(supports_notify_tag); 469 EXPECT_TRUE(supports_notify_tag);
424 470
471 const base::DictionaryValue* observed_entries_value = NULL;
472 ASSERT_TRUE(file_system->GetDictionaryWithoutPathExpansion(
473 kPrefKeyObservedEntries, &observed_entries_value));
474
475 const base::DictionaryValue* observed_entry = NULL;
476 ASSERT_TRUE(observed_entries_value->GetDictionaryWithoutPathExpansion(
477 fake_observed_entry_.entry_path.value(), &observed_entry));
478
479 std::string entry_path;
480 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
481 kPrefKeyObservedEntryEntryPath, &entry_path));
482 EXPECT_EQ(fake_observed_entry_.entry_path.value(), entry_path);
483
484 bool recursive = false;
485 EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion(
486 kPrefKeyObservedEntryRecursive, &recursive));
487 EXPECT_EQ(fake_observed_entry_.recursive, recursive);
488
489 std::string last_tag;
490 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
491 kPrefKeyObservedEntryLastTag, &last_tag));
492 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag);
493 }
494
495 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) {
496 LoggingObserver observer;
497 service_->AddObserver(&observer);
498
499 TestingPrefServiceSyncable* const pref_service =
500 profile_->GetTestingPrefService();
501 ASSERT_TRUE(pref_service);
502
503 EXPECT_TRUE(service_->MountFileSystem(
504 kExtensionId, MountOptions(kFileSystemId, kDisplayName)));
505 ASSERT_EQ(1u, observer.mounts.size());
506
507 const base::DictionaryValue* extensions =
508 pref_service->GetDictionary(prefs::kFileSystemProviderMounted);
509 ASSERT_TRUE(extensions);
510
511 const base::DictionaryValue* file_systems = NULL;
512 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
513 &file_systems));
514 EXPECT_EQ(1u, file_systems->size());
515
425 service_->RemoveObserver(&observer); 516 service_->RemoveObserver(&observer);
426 } 517 }
427 518
428 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { 519 TEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) {
429 LoggingObserver observer; 520 LoggingObserver observer;
430 service_->AddObserver(&observer); 521 service_->AddObserver(&observer);
431 522
432 TestingPrefServiceSyncable* const pref_service = 523 TestingPrefServiceSyncable* const pref_service =
433 profile_->GetTestingPrefService(); 524 profile_->GetTestingPrefService();
434 ASSERT_TRUE(pref_service); 525 ASSERT_TRUE(pref_service);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 const base::DictionaryValue* file_systems = NULL; 590 const base::DictionaryValue* file_systems = NULL;
500 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 591 EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
501 &file_systems)); 592 &file_systems));
502 } 593 }
503 594
504 service_->RemoveObserver(&observer); 595 service_->RemoveObserver(&observer);
505 } 596 }
506 597
507 } // namespace file_system_provider 598 } // namespace file_system_provider
508 } // namespace chromeos 599 } // 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