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

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

Issue 642023003: [fsp] Allow to create multiple observers for a directory, up to one per origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments + fixed tests. Created 6 years, 1 month 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/registry.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/registry.h" 5 #include "chrome/browser/chromeos/file_system_provider/registry.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h" 12 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info .h"
13 #include "chrome/browser/chromeos/file_system_provider/registry.h"
14 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/testing_browser_process.h" 14 #include "chrome/test/base/testing_browser_process.h"
16 #include "chrome/test/base/testing_pref_service_syncable.h" 15 #include "chrome/test/base/testing_pref_service_syncable.h"
17 #include "chrome/test/base/testing_profile.h" 16 #include "chrome/test/base/testing_profile.h"
18 #include "chrome/test/base/testing_profile_manager.h" 17 #include "chrome/test/base/testing_profile_manager.h"
19 #include "components/user_prefs/user_prefs.h" 18 #include "components/user_prefs/user_prefs.h"
20 #include "content/public/test/test_browser_thread_bundle.h" 19 #include "content/public/test/test_browser_thread_bundle.h"
21 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
22 21
23 namespace chromeos { 22 namespace chromeos {
24 namespace file_system_provider { 23 namespace file_system_provider {
25 namespace { 24 namespace {
26 25
26 const char kTemporaryOrigin[] =
27 "chrome-extension://abcabcabcabcabcabcabcabcabcabcabcabca/";
28 const char kPersistentOrigin[] =
29 "chrome-extension://efgefgefgefgefgefgefgefgefgefgefgefge/";
27 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 30 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
28 const char kDisplayName[] = "Camera Pictures"; 31 const char kDisplayName[] = "Camera Pictures";
29 32
30 // The dot in the file system ID is there in order to check that saving to 33 // The dot in the file system ID is there in order to check that saving to
31 // preferences works correctly. File System ID is used as a key in 34 // preferences works correctly. File System ID is used as a key in
32 // a base::DictionaryValue, so it has to be stored without path expansion. 35 // a base::DictionaryValue, so it has to be stored without path expansion.
33 const char kFileSystemId[] = "camera/pictures/id .!@#$%^&*()_+"; 36 const char kFileSystemId[] = "camera/pictures/id .!@#$%^&*()_+";
34 37
35 // Stores a provided file system information in preferences together with a 38 // Stores a provided file system information in preferences together with a
36 // fake observed entry. 39 // fake observed entry.
37 void RememberFakeFileSystem(TestingProfile* profile, 40 void RememberFakeFileSystem(TestingProfile* profile,
38 const std::string& extension_id, 41 const std::string& extension_id,
39 const std::string& file_system_id, 42 const std::string& file_system_id,
40 const std::string& display_name, 43 const std::string& display_name,
41 bool writable, 44 bool writable,
42 bool supports_notify_tag, 45 bool supports_notify_tag,
43 const ObservedEntry& observed_entry) { 46 const ObservedEntry& observed_entry) {
47 // Warning. Updating this code means that backward compatibility may be
48 // broken, what is unexpected and should be avoided.
44 TestingPrefServiceSyncable* const pref_service = 49 TestingPrefServiceSyncable* const pref_service =
45 profile->GetTestingPrefService(); 50 profile->GetTestingPrefService();
46 ASSERT_TRUE(pref_service); 51 ASSERT_TRUE(pref_service);
47 52
48 base::DictionaryValue extensions; 53 base::DictionaryValue extensions;
49 base::DictionaryValue* const file_systems = new base::DictionaryValue(); 54 base::DictionaryValue* const file_systems = new base::DictionaryValue();
50 base::DictionaryValue* const file_system = new base::DictionaryValue(); 55 base::DictionaryValue* const file_system = new base::DictionaryValue();
51 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, 56 file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId,
52 kFileSystemId); 57 kFileSystemId);
53 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); 58 file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName);
(...skipping 10 matching lines...) Expand all
64 base::DictionaryValue* const observed_entry_value = 69 base::DictionaryValue* const observed_entry_value =
65 new base::DictionaryValue(); 70 new base::DictionaryValue();
66 observed_entries->SetWithoutPathExpansion(observed_entry.entry_path.value(), 71 observed_entries->SetWithoutPathExpansion(observed_entry.entry_path.value(),
67 observed_entry_value); 72 observed_entry_value);
68 observed_entry_value->SetStringWithoutPathExpansion( 73 observed_entry_value->SetStringWithoutPathExpansion(
69 kPrefKeyObservedEntryEntryPath, observed_entry.entry_path.value()); 74 kPrefKeyObservedEntryEntryPath, observed_entry.entry_path.value());
70 observed_entry_value->SetBooleanWithoutPathExpansion( 75 observed_entry_value->SetBooleanWithoutPathExpansion(
71 kPrefKeyObservedEntryRecursive, observed_entry.recursive); 76 kPrefKeyObservedEntryRecursive, observed_entry.recursive);
72 observed_entry_value->SetStringWithoutPathExpansion( 77 observed_entry_value->SetStringWithoutPathExpansion(
73 kPrefKeyObservedEntryLastTag, observed_entry.last_tag); 78 kPrefKeyObservedEntryLastTag, observed_entry.last_tag);
79 base::ListValue* const persistent_origins_value = new base::ListValue();
80 observed_entry_value->SetWithoutPathExpansion(
81 kPrefKeyObservedEntryPersistentOrigins, persistent_origins_value);
82 for (const auto& subscriber_it : observed_entry.subscribers) {
83 if (subscriber_it.second.persistent)
84 persistent_origins_value->AppendString(subscriber_it.first.spec());
85 }
74 86
75 pref_service->Set(prefs::kFileSystemProviderMounted, extensions); 87 pref_service->Set(prefs::kFileSystemProviderMounted, extensions);
76 } 88 }
77 89
78 } // namespace 90 } // namespace
79 91
80 class FileSystemProviderRegistryTest : public testing::Test { 92 class FileSystemProviderRegistryTest : public testing::Test {
81 protected: 93 protected:
82 FileSystemProviderRegistryTest() : profile_(NULL) {} 94 FileSystemProviderRegistryTest() : profile_(NULL) {}
83 95
84 virtual ~FileSystemProviderRegistryTest() {} 96 virtual ~FileSystemProviderRegistryTest() {}
85 97
86 virtual void SetUp() override { 98 virtual void SetUp() override {
87 profile_manager_.reset( 99 profile_manager_.reset(
88 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 100 new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
89 ASSERT_TRUE(profile_manager_->SetUp()); 101 ASSERT_TRUE(profile_manager_->SetUp());
90 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com"); 102 profile_ = profile_manager_->CreateTestingProfile("test-user@example.com");
91 registry_.reset(new Registry(profile_)); 103 registry_.reset(new Registry(profile_));
92 fake_observed_entry_.entry_path = 104 fake_observed_entry_.entry_path =
93 base::FilePath(FILE_PATH_LITERAL("/a/b/c")); 105 base::FilePath(FILE_PATH_LITERAL("/a/b/c"));
94 fake_observed_entry_.recursive = true; 106 fake_observed_entry_.recursive = true;
107 fake_observed_entry_.subscribers[GURL(kTemporaryOrigin)].origin =
108 GURL(kTemporaryOrigin);
109 fake_observed_entry_.subscribers[GURL(kTemporaryOrigin)].persistent = false;
110 fake_observed_entry_.subscribers[GURL(kPersistentOrigin)].origin =
111 GURL(kPersistentOrigin);
112 fake_observed_entry_.subscribers[GURL(kPersistentOrigin)].persistent = true;
95 fake_observed_entry_.last_tag = "hello-world"; 113 fake_observed_entry_.last_tag = "hello-world";
96 } 114 }
97 115
98 content::TestBrowserThreadBundle thread_bundle_; 116 content::TestBrowserThreadBundle thread_bundle_;
99 scoped_ptr<TestingProfileManager> profile_manager_; 117 scoped_ptr<TestingProfileManager> profile_manager_;
100 TestingProfile* profile_; 118 TestingProfile* profile_;
101 scoped_ptr<RegistryInterface> registry_; 119 scoped_ptr<RegistryInterface> registry_;
102 ObservedEntry fake_observed_entry_; 120 ObservedEntry fake_observed_entry_;
103 }; 121 };
104 122
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 226
209 bool recursive = false; 227 bool recursive = false;
210 EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion( 228 EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion(
211 kPrefKeyObservedEntryRecursive, &recursive)); 229 kPrefKeyObservedEntryRecursive, &recursive));
212 EXPECT_EQ(fake_observed_entry_.recursive, recursive); 230 EXPECT_EQ(fake_observed_entry_.recursive, recursive);
213 231
214 std::string last_tag; 232 std::string last_tag;
215 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion( 233 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
216 kPrefKeyObservedEntryLastTag, &last_tag)); 234 kPrefKeyObservedEntryLastTag, &last_tag));
217 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag); 235 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag);
236
237 const base::ListValue* persistent_origins = NULL;
238 ASSERT_TRUE(observed_entry->GetListWithoutPathExpansion(
239 kPrefKeyObservedEntryPersistentOrigins, &persistent_origins));
240 ASSERT_GT(fake_observed_entry_.subscribers.size(),
241 persistent_origins->GetSize());
242 ASSERT_EQ(1u, persistent_origins->GetSize());
243 std::string persistent_origin;
244 EXPECT_TRUE(persistent_origins->GetString(0, &persistent_origin));
245 const auto& fake_subscriber_it =
246 fake_observed_entry_.subscribers.find(GURL(persistent_origin));
247 ASSERT_NE(fake_observed_entry_.subscribers.end(), fake_subscriber_it);
248 EXPECT_TRUE(fake_subscriber_it->second.persistent);
218 } 249 }
219 250
220 TEST_F(FileSystemProviderRegistryTest, ForgetFileSystem) { 251 TEST_F(FileSystemProviderRegistryTest, ForgetFileSystem) {
221 // Create a fake file systems in the preferences. 252 // Create a fake file systems in the preferences.
222 RememberFakeFileSystem(profile_, 253 RememberFakeFileSystem(profile_,
223 kExtensionId, 254 kExtensionId,
224 kFileSystemId, 255 kFileSystemId,
225 kDisplayName, 256 kDisplayName,
226 true /* writable */, 257 true /* writable */,
227 true /* supports_notify_tag */, 258 true /* supports_notify_tag */,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 303 ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId,
273 &file_systems)); 304 &file_systems));
274 EXPECT_EQ(1u, file_systems->size()); 305 EXPECT_EQ(1u, file_systems->size());
275 306
276 const base::Value* file_system_value = NULL; 307 const base::Value* file_system_value = NULL;
277 const base::DictionaryValue* file_system = NULL; 308 const base::DictionaryValue* file_system = NULL;
278 ASSERT_TRUE( 309 ASSERT_TRUE(
279 file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value)); 310 file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value));
280 ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system)); 311 ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system));
281 312
282 std::string file_system_id;
283 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId,
284 &file_system_id));
285 EXPECT_EQ(kFileSystemId, file_system_id);
286
287 std::string display_name;
288 EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName,
289 &display_name));
290 EXPECT_EQ(kDisplayName, display_name);
291
292 bool writable = false;
293 EXPECT_TRUE(
294 file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable));
295 EXPECT_TRUE(writable);
296
297 bool supports_notify_tag = false;
298 EXPECT_TRUE(file_system->GetBooleanWithoutPathExpansion(
299 kPrefKeySupportsNotifyTag, &supports_notify_tag));
300 EXPECT_TRUE(supports_notify_tag);
301
302 const base::DictionaryValue* observed_entries_value = NULL; 313 const base::DictionaryValue* observed_entries_value = NULL;
303 ASSERT_TRUE(file_system->GetDictionaryWithoutPathExpansion( 314 ASSERT_TRUE(file_system->GetDictionaryWithoutPathExpansion(
304 kPrefKeyObservedEntries, &observed_entries_value)); 315 kPrefKeyObservedEntries, &observed_entries_value));
305 316
306 const base::DictionaryValue* observed_entry = NULL; 317 const base::DictionaryValue* observed_entry = NULL;
307 ASSERT_TRUE(observed_entries_value->GetDictionaryWithoutPathExpansion( 318 ASSERT_TRUE(observed_entries_value->GetDictionaryWithoutPathExpansion(
308 fake_observed_entry_.entry_path.value(), &observed_entry)); 319 fake_observed_entry_.entry_path.value(), &observed_entry));
309 320
310 std::string entry_path;
311 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
312 kPrefKeyObservedEntryEntryPath, &entry_path));
313 EXPECT_EQ(fake_observed_entry_.entry_path.value(), entry_path);
314
315 bool recursive = false;
316 EXPECT_TRUE(observed_entry->GetBooleanWithoutPathExpansion(
317 kPrefKeyObservedEntryRecursive, &recursive));
318 EXPECT_EQ(fake_observed_entry_.recursive, recursive);
319
320 std::string last_tag; 321 std::string last_tag;
321 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion( 322 EXPECT_TRUE(observed_entry->GetStringWithoutPathExpansion(
322 kPrefKeyObservedEntryLastTag, &last_tag)); 323 kPrefKeyObservedEntryLastTag, &last_tag));
323 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag); 324 EXPECT_EQ(fake_observed_entry_.last_tag, last_tag);
324 } 325 }
325 326
326 } // namespace file_system_provider 327 } // namespace file_system_provider
327 } // namespace chromeos 328 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/file_system_provider/registry.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698