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

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