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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/provided_file_system_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
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/provided_file_system.h" 5 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.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 14 matching lines...) Expand all
25 #include "chrome/common/extensions/api/file_system_provider_internal.h" 25 #include "chrome/common/extensions/api/file_system_provider_internal.h"
26 #include "chrome/test/base/testing_profile.h" 26 #include "chrome/test/base/testing_profile.h"
27 #include "content/public/test/test_browser_thread_bundle.h" 27 #include "content/public/test/test_browser_thread_bundle.h"
28 #include "extensions/browser/event_router.h" 28 #include "extensions/browser/event_router.h"
29 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
30 30
31 namespace chromeos { 31 namespace chromeos {
32 namespace file_system_provider { 32 namespace file_system_provider {
33 namespace { 33 namespace {
34 34
35 const char kOrigin[] =
36 "chrome-extension://abcabcabcabcabcabcabcabcabcabcabcabca/";
37 const char kAnotherOrigin[] =
38 "chrome-extension://efgefgefgefgefgefgefgefgefgefgefgefge/";
35 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 39 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj";
36 const char kFileSystemId[] = "camera-pictures"; 40 const char kFileSystemId[] = "camera-pictures";
37 const char kDisplayName[] = "Camera Pictures"; 41 const char kDisplayName[] = "Camera Pictures";
38 const base::FilePath::CharType kDirectoryPath[] = "/hello/world"; 42 const base::FilePath::CharType kDirectoryPath[] = "/hello/world";
39 43
40 // Fake implementation of the event router, mocking out a real extension. 44 // Fake implementation of the event router, mocking out a real extension.
41 // Handles requests and replies with fake answers back to the file system via 45 // Handles requests and replies with fake answers back to the file system via
42 // the request manager. 46 // the request manager.
43 class FakeEventRouter : public extensions::EventRouter { 47 class FakeEventRouter : public extensions::EventRouter {
44 public: 48 public:
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_NotFound) { 282 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_NotFound) {
279 Log log; 283 Log log;
280 Observer observer; 284 Observer observer;
281 285
282 provided_file_system_->AddObserver(&observer); 286 provided_file_system_->AddObserver(&observer);
283 287
284 // First, set the extension response to an error. 288 // First, set the extension response to an error.
285 event_router_->set_reply_result(base::File::FILE_ERROR_NOT_FOUND); 289 event_router_->set_reply_result(base::File::FILE_ERROR_NOT_FOUND);
286 290
287 provided_file_system_->ObserveDirectory( 291 provided_file_system_->ObserveDirectory(
292 GURL(kOrigin),
288 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 293 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
289 false /* recursive */, 294 false /* recursive */,
295 false /* persistent */,
290 base::Bind(&LogStatus, base::Unretained(&log))); 296 base::Bind(&LogStatus, base::Unretained(&log)));
291 base::RunLoop().RunUntilIdle(); 297 base::RunLoop().RunUntilIdle();
292 298
293 // The directory should not become observed because of an error. 299 // The directory should not become observed because of an error.
294 ASSERT_EQ(1u, log.size()); 300 ASSERT_EQ(1u, log.size());
295 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); 301 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]);
296 302
297 ObservedEntries* const observed_entries = 303 ObservedEntries* const observed_entries =
298 provided_file_system_->GetObservedEntries(); 304 provided_file_system_->GetObservedEntries();
299 EXPECT_EQ(0u, observed_entries->size()); 305 EXPECT_EQ(0u, observed_entries->size());
300 306
301 // The observer should not be called. 307 // The observer should not be called.
302 EXPECT_EQ(0, observer.list_changed_counter()); 308 EXPECT_EQ(0, observer.list_changed_counter());
303 EXPECT_EQ(0, observer.tag_updated_counter()); 309 EXPECT_EQ(0, observer.tag_updated_counter());
304 310
305 provided_file_system_->RemoveObserver(&observer); 311 provided_file_system_->RemoveObserver(&observer);
306 } 312 }
307 313
308 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) { 314 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) {
309 Log log; 315 Log log;
310 Observer observer; 316 Observer observer;
311 317
312 provided_file_system_->AddObserver(&observer); 318 provided_file_system_->AddObserver(&observer);
313 319
314 provided_file_system_->ObserveDirectory( 320 provided_file_system_->ObserveDirectory(
321 GURL(kOrigin),
315 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 322 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
316 false /* recursive */, 323 false /* recursive */,
324 true /* persistent */,
317 base::Bind(&LogStatus, base::Unretained(&log))); 325 base::Bind(&LogStatus, base::Unretained(&log)));
318 base::RunLoop().RunUntilIdle(); 326 base::RunLoop().RunUntilIdle();
319 327
320 ASSERT_EQ(1u, log.size()); 328 ASSERT_EQ(1u, log.size());
321 EXPECT_EQ(base::File::FILE_OK, log[0]); 329 EXPECT_EQ(base::File::FILE_OK, log[0]);
322 EXPECT_EQ(1, observer.list_changed_counter()); 330 EXPECT_EQ(1, observer.list_changed_counter());
323 EXPECT_EQ(0, observer.tag_updated_counter()); 331 EXPECT_EQ(0, observer.tag_updated_counter());
324 332
325 ObservedEntries* const observed_entries = 333 ObservedEntries* const observed_entries =
326 provided_file_system_->GetObservedEntries(); 334 provided_file_system_->GetObservedEntries();
327 ASSERT_EQ(1u, observed_entries->size()); 335 ASSERT_EQ(1u, observed_entries->size());
328 const ObservedEntry& observed_entry = observed_entries->begin()->second; 336 const ObservedEntry& observed_entry = observed_entries->begin()->second;
329 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); 337 EXPECT_EQ(FILE_PATH_LITERAL(kDirectoryPath),
338 observed_entry.entry_path.value());
330 EXPECT_FALSE(observed_entry.recursive); 339 EXPECT_FALSE(observed_entry.recursive);
331 EXPECT_EQ("", observed_entry.last_tag); 340 EXPECT_EQ("", observed_entry.last_tag);
332 341
333 provided_file_system_->RemoveObserver(&observer); 342 provided_file_system_->RemoveObserver(&observer);
334 } 343 }
335 344
345 TEST_F(FileSystemProviderProvidedFileSystemTest,
346 ObserveDirectory_PersistentIllegal) {
347 Log log;
348 Observer observer;
349
350 // Create a provided file system interface, which does not support a notify
351 // tag, though.
352 const base::FilePath mount_path =
353 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId);
354 MountOptions mount_options;
355 mount_options.file_system_id = kFileSystemId;
356 mount_options.display_name = kDisplayName;
357 mount_options.supports_notify_tag = false;
358 ProvidedFileSystemInfo file_system_info(
359 kExtensionId, mount_options, mount_path);
360 ProvidedFileSystem simple_provided_file_system(profile_.get(),
361 file_system_info);
362 simple_provided_file_system.SetEventRouterForTesting(event_router_.get());
363 simple_provided_file_system.SetNotificationManagerForTesting(
364 make_scoped_ptr(new StubNotificationManager));
365
366 simple_provided_file_system.AddObserver(&observer);
367
368 simple_provided_file_system.ObserveDirectory(
369 GURL(kOrigin),
370 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
371 false /* recursive */,
372 true /* persistent */,
373 base::Bind(&LogStatus, base::Unretained(&log)));
374 base::RunLoop().RunUntilIdle();
375
376 ASSERT_EQ(1u, log.size());
377 EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, log[0]);
378 EXPECT_EQ(0, observer.list_changed_counter());
379 EXPECT_EQ(0, observer.tag_updated_counter());
380
381 simple_provided_file_system.RemoveObserver(&observer);
382 }
383
336 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) { 384 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) {
337 Observer observer; 385 Observer observer;
338 provided_file_system_->AddObserver(&observer); 386 provided_file_system_->AddObserver(&observer);
339 387
340 { 388 {
341 // First observe a directory not recursively. 389 // First observe a directory not recursively.
342 Log log; 390 Log log;
343 provided_file_system_->ObserveDirectory( 391 provided_file_system_->ObserveDirectory(
392 GURL(kOrigin),
344 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 393 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
345 false /* recursive */, 394 false /* recursive */,
395 true /* persistent */,
346 base::Bind(&LogStatus, base::Unretained(&log))); 396 base::Bind(&LogStatus, base::Unretained(&log)));
347 base::RunLoop().RunUntilIdle(); 397 base::RunLoop().RunUntilIdle();
348 398
349 ASSERT_EQ(1u, log.size()); 399 ASSERT_EQ(1u, log.size());
350 EXPECT_EQ(base::File::FILE_OK, log[0]); 400 EXPECT_EQ(base::File::FILE_OK, log[0]);
351 EXPECT_EQ(1, observer.list_changed_counter()); 401 EXPECT_EQ(1, observer.list_changed_counter());
352 EXPECT_EQ(0, observer.tag_updated_counter()); 402 EXPECT_EQ(0, observer.tag_updated_counter());
403
404 ObservedEntries* const observed_entries =
405 provided_file_system_->GetObservedEntries();
406 ASSERT_TRUE(observed_entries);
407 ASSERT_EQ(1u, observed_entries->size());
408 const auto& observed_entry_it = observed_entries->find(
409 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)),
410 false /* recursive */));
411 ASSERT_NE(observed_entries->end(), observed_entry_it);
412
413 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size());
414 const auto& subscriber_it =
415 observed_entry_it->second.subscribers.find(GURL(kOrigin));
416 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it);
417 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec());
418 EXPECT_TRUE(subscriber_it->second.persistent);
353 } 419 }
354 420
355 { 421 {
356 // Create another non-recursive observer. That should fail. 422 // Create another non-recursive observer. That should fail.
357 Log log; 423 Log log;
358 provided_file_system_->ObserveDirectory( 424 provided_file_system_->ObserveDirectory(
425 GURL(kOrigin),
359 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 426 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
360 false /* recursive */, 427 false /* recursive */,
428 true /* persistent */,
361 base::Bind(&LogStatus, base::Unretained(&log))); 429 base::Bind(&LogStatus, base::Unretained(&log)));
362 base::RunLoop().RunUntilIdle(); 430 base::RunLoop().RunUntilIdle();
363 431
364 ASSERT_EQ(1u, log.size()); 432 ASSERT_EQ(1u, log.size());
365 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]); 433 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]);
366 EXPECT_EQ(1, observer.list_changed_counter()); // No changes on the list. 434 EXPECT_EQ(1, observer.list_changed_counter()); // No changes on the list.
367 EXPECT_EQ(0, observer.tag_updated_counter()); 435 EXPECT_EQ(0, observer.tag_updated_counter());
368 } 436 }
369 437
370 { 438 {
371 // Create another observer on the same path, but a recursive one. That 439 // Lastly, create another recursive observer. That should succeed.
372 // should succeed.
373 Log log; 440 Log log;
374 provided_file_system_->ObserveDirectory( 441 provided_file_system_->ObserveDirectory(
442 GURL(kOrigin),
375 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 443 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
376 true /* recursive */, 444 true /* recursive */,
445 true /* persistent */,
377 base::Bind(&LogStatus, base::Unretained(&log))); 446 base::Bind(&LogStatus, base::Unretained(&log)));
378 base::RunLoop().RunUntilIdle(); 447 base::RunLoop().RunUntilIdle();
379 448
380 ASSERT_EQ(1u, log.size()); 449 ASSERT_EQ(1u, log.size());
381 EXPECT_EQ(base::File::FILE_OK, log[0]); 450 EXPECT_EQ(base::File::FILE_OK, log[0]);
382 EXPECT_EQ(2, observer.list_changed_counter()); 451 EXPECT_EQ(2, observer.list_changed_counter());
383 EXPECT_EQ(0, observer.tag_updated_counter()); 452 EXPECT_EQ(0, observer.tag_updated_counter());
453 }
454
455 provided_file_system_->RemoveObserver(&observer);
456 }
457
458 TEST_F(FileSystemProviderProvidedFileSystemTest,
459 ObserveDirectory_MultipleOrigins) {
460 Observer observer;
461 provided_file_system_->AddObserver(&observer);
462
463 {
464 // First observe a directory not recursively.
465 Log log;
466 provided_file_system_->ObserveDirectory(
467 GURL(kOrigin),
468 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
469 false /* recursive */,
470 false /* persistent */,
471 base::Bind(&LogStatus, base::Unretained(&log)));
472 base::RunLoop().RunUntilIdle();
473
474 ASSERT_EQ(1u, log.size());
475 EXPECT_EQ(base::File::FILE_OK, log[0]);
476 EXPECT_EQ(1, observer.list_changed_counter());
477 EXPECT_EQ(0, observer.tag_updated_counter());
478
479 ObservedEntries* const observed_entries =
480 provided_file_system_->GetObservedEntries();
481 ASSERT_TRUE(observed_entries);
482 ASSERT_EQ(1u, observed_entries->size());
483 const auto& observed_entry_it = observed_entries->find(
484 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)),
485 false /* recursive */));
486 ASSERT_NE(observed_entries->end(), observed_entry_it);
487
488 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size());
489 const auto& subscriber_it =
490 observed_entry_it->second.subscribers.find(GURL(kOrigin));
491 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it);
492 EXPECT_EQ(kOrigin, subscriber_it->first.spec());
493 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec());
494 EXPECT_FALSE(subscriber_it->second.persistent);
495 }
496
497 {
498 // Create another observer, but recursive and with a different origin.
499 Log log;
500 provided_file_system_->ObserveDirectory(
501 GURL(kAnotherOrigin),
502 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
503 true /* recursive */,
504 true /* persistent */,
505 base::Bind(&LogStatus, base::Unretained(&log)));
506 base::RunLoop().RunUntilIdle();
507
508 ASSERT_EQ(1u, log.size());
509 EXPECT_EQ(base::File::FILE_OK, log[0]);
510 EXPECT_EQ(2, observer.list_changed_counter());
511 EXPECT_EQ(0, observer.tag_updated_counter());
384 512
385 ObservedEntries* const observed_entries = 513 ObservedEntries* const observed_entries =
386 provided_file_system_->GetObservedEntries(); 514 provided_file_system_->GetObservedEntries();
515 ASSERT_TRUE(observed_entries);
516 ASSERT_EQ(2u, observed_entries->size());
387 const auto& observed_entry_it = observed_entries->find( 517 const auto& observed_entry_it = observed_entries->find(
388 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)), 518 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)),
389 true /* recursive */)); 519 false /* recursive */));
390 ASSERT_NE(observed_entries->end(), observed_entry_it); 520 ASSERT_NE(observed_entries->end(), observed_entry_it);
391 521
392 EXPECT_EQ(kDirectoryPath, observed_entry_it->second.entry_path.value()); 522 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size());
393 EXPECT_TRUE(observed_entry_it->second.recursive); 523 const auto& subscriber_it =
394 EXPECT_EQ("", observed_entry_it->second.last_tag); 524 observed_entry_it->second.subscribers.find(GURL(kOrigin));
525 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it);
526 EXPECT_EQ(kOrigin, subscriber_it->first.spec());
527 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec());
528 EXPECT_FALSE(subscriber_it->second.persistent);
395 } 529 }
396 530
397 { 531 {
398 // Lastly, create another recursive observer. That should fail, too. 532 // Unobserve the second one gracefully.
399 Log log; 533 Log log;
400 provided_file_system_->ObserveDirectory( 534 provided_file_system_->UnobserveEntry(
535 GURL(kAnotherOrigin),
401 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 536 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
402 true /* recursive */, 537 true /* recursive */,
403 base::Bind(&LogStatus, base::Unretained(&log))); 538 base::Bind(&LogStatus, base::Unretained(&log)));
404 base::RunLoop().RunUntilIdle(); 539 base::RunLoop().RunUntilIdle();
405 540
406 ASSERT_EQ(1u, log.size()); 541 ASSERT_EQ(1u, log.size());
407 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]); 542 EXPECT_EQ(base::File::FILE_OK, log[0]);
408 EXPECT_EQ(2, observer.list_changed_counter()); // No changes on the list. 543 EXPECT_EQ(3, observer.list_changed_counter());
409 EXPECT_EQ(0, observer.tag_updated_counter()); 544 EXPECT_EQ(0, observer.tag_updated_counter());
545
546 ObservedEntries* const observed_entries =
547 provided_file_system_->GetObservedEntries();
548 ASSERT_TRUE(observed_entries);
549 EXPECT_EQ(1u, observed_entries->size());
550 const auto& observed_entry_it = observed_entries->find(
551 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)),
552 false /* recursive */));
553 ASSERT_NE(observed_entries->end(), observed_entry_it);
554
555 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size());
556 const auto& subscriber_it =
557 observed_entry_it->second.subscribers.find(GURL(kOrigin));
558 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it);
559 EXPECT_EQ(kOrigin, subscriber_it->first.spec());
560 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec());
561 EXPECT_FALSE(subscriber_it->second.persistent);
410 } 562 }
411 563
412 provided_file_system_->RemoveObserver(&observer); 564 provided_file_system_->RemoveObserver(&observer);
413 } 565 }
414 566
415 TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) { 567 TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) {
416 Observer observer; 568 Observer observer;
417 provided_file_system_->AddObserver(&observer); 569 provided_file_system_->AddObserver(&observer);
418 570
419 { 571 {
420 // First, confirm that unobserving an entry which is not observed, results 572 // First, confirm that unobserving an entry which is not observed, results
421 // in an error. 573 // in an error.
422 Log log; 574 Log log;
423 provided_file_system_->UnobserveEntry( 575 provided_file_system_->UnobserveEntry(
576 GURL(kOrigin),
424 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 577 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
425 false /* recursive */, 578 false /* recursive */,
426 base::Bind(&LogStatus, base::Unretained(&log))); 579 base::Bind(&LogStatus, base::Unretained(&log)));
427 base::RunLoop().RunUntilIdle(); 580 base::RunLoop().RunUntilIdle();
428 581
429 ASSERT_EQ(1u, log.size()); 582 ASSERT_EQ(1u, log.size());
430 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); 583 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]);
431 EXPECT_EQ(0, observer.list_changed_counter()); 584 EXPECT_EQ(0, observer.list_changed_counter());
432 EXPECT_EQ(0, observer.tag_updated_counter()); 585 EXPECT_EQ(0, observer.tag_updated_counter());
433 } 586 }
434 587
435 { 588 {
436 // Observe a directory not recursively. 589 // Observe a directory not recursively.
437 Log log; 590 Log log;
438 provided_file_system_->ObserveDirectory( 591 provided_file_system_->ObserveDirectory(
592 GURL(kOrigin),
439 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 593 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
440 false /* recursive */, 594 false /* recursive */,
595 true /* persistent */,
441 base::Bind(&LogStatus, base::Unretained(&log))); 596 base::Bind(&LogStatus, base::Unretained(&log)));
442 base::RunLoop().RunUntilIdle(); 597 base::RunLoop().RunUntilIdle();
443 598
444 ASSERT_EQ(1u, log.size()); 599 ASSERT_EQ(1u, log.size());
445 EXPECT_EQ(base::File::FILE_OK, log[0]); 600 EXPECT_EQ(base::File::FILE_OK, log[0]);
446 EXPECT_EQ(1, observer.list_changed_counter()); 601 EXPECT_EQ(1, observer.list_changed_counter());
447 EXPECT_EQ(0, observer.tag_updated_counter()); 602 EXPECT_EQ(0, observer.tag_updated_counter());
448 603
449 ObservedEntries* const observed_entries = 604 ObservedEntries* const observed_entries =
450 provided_file_system_->GetObservedEntries(); 605 provided_file_system_->GetObservedEntries();
451 EXPECT_EQ(1u, observed_entries->size()); 606 EXPECT_EQ(1u, observed_entries->size());
452 } 607 }
453 608
454 { 609 {
455 // Unobserve it gracefully. 610 // Unobserve it gracefully.
456 Log log; 611 Log log;
457 provided_file_system_->UnobserveEntry( 612 provided_file_system_->UnobserveEntry(
613 GURL(kOrigin),
458 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 614 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
459 false /* recursive */, 615 false /* recursive */,
460 base::Bind(&LogStatus, base::Unretained(&log))); 616 base::Bind(&LogStatus, base::Unretained(&log)));
461 base::RunLoop().RunUntilIdle(); 617 base::RunLoop().RunUntilIdle();
462 618
463 ASSERT_EQ(1u, log.size()); 619 ASSERT_EQ(1u, log.size());
464 EXPECT_EQ(base::File::FILE_OK, log[0]); 620 EXPECT_EQ(base::File::FILE_OK, log[0]);
465 EXPECT_EQ(2, observer.list_changed_counter()); 621 EXPECT_EQ(2, observer.list_changed_counter());
466 EXPECT_EQ(0, observer.tag_updated_counter()); 622 EXPECT_EQ(0, observer.tag_updated_counter());
467 623
468 ObservedEntries* const observed_entries = 624 ObservedEntries* const observed_entries =
469 provided_file_system_->GetObservedEntries(); 625 provided_file_system_->GetObservedEntries();
470 EXPECT_EQ(0u, observed_entries->size()); 626 EXPECT_EQ(0u, observed_entries->size());
471 } 627 }
472 628
473 { 629 {
474 // Confirm that it's possible to observe it again. 630 // Confirm that it's possible to observe it again.
475 Log log; 631 Log log;
476 provided_file_system_->ObserveDirectory( 632 provided_file_system_->ObserveDirectory(
633 GURL(kOrigin),
477 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 634 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
478 false /* recursive */, 635 false /* recursive */,
636 true /* persistent */,
479 base::Bind(&LogStatus, base::Unretained(&log))); 637 base::Bind(&LogStatus, base::Unretained(&log)));
480 base::RunLoop().RunUntilIdle(); 638 base::RunLoop().RunUntilIdle();
481 639
482 ASSERT_EQ(1u, log.size()); 640 ASSERT_EQ(1u, log.size());
483 EXPECT_EQ(base::File::FILE_OK, log[0]); 641 EXPECT_EQ(base::File::FILE_OK, log[0]);
484 EXPECT_EQ(3, observer.list_changed_counter()); 642 EXPECT_EQ(3, observer.list_changed_counter());
485 EXPECT_EQ(0, observer.tag_updated_counter()); 643 EXPECT_EQ(0, observer.tag_updated_counter());
486 644
487 ObservedEntries* const observed_entries = 645 ObservedEntries* const observed_entries =
488 provided_file_system_->GetObservedEntries(); 646 provided_file_system_->GetObservedEntries();
489 EXPECT_EQ(1u, observed_entries->size()); 647 EXPECT_EQ(1u, observed_entries->size());
490 } 648 }
491 649
492 { 650 {
493 // Finally, unobserve it, but with an error from extension. That should 651 // Finally, unobserve it, but with an error from extension. That should
494 // result 652 // result in a removed observer, anyway. The error code should not be
495 // in a removed observer, anyway. 653 // passed.
496 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED); 654 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED);
497 655
498 Log log; 656 Log log;
499 provided_file_system_->UnobserveEntry( 657 provided_file_system_->UnobserveEntry(
658 GURL(kOrigin),
500 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 659 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
501 false /* recursive */, 660 false /* recursive */,
502 base::Bind(&LogStatus, base::Unretained(&log))); 661 base::Bind(&LogStatus, base::Unretained(&log)));
503 base::RunLoop().RunUntilIdle(); 662 base::RunLoop().RunUntilIdle();
504 663
505 ASSERT_EQ(1u, log.size()); 664 ASSERT_EQ(1u, log.size());
506 EXPECT_EQ(base::File::FILE_ERROR_FAILED, log[0]); 665 EXPECT_EQ(base::File::FILE_OK, log[0]);
507 EXPECT_EQ(4, observer.list_changed_counter()); 666 EXPECT_EQ(4, observer.list_changed_counter());
508 EXPECT_EQ(0, observer.tag_updated_counter()); 667 EXPECT_EQ(0, observer.tag_updated_counter());
509 668
510 ObservedEntries* const observed_entries = 669 ObservedEntries* const observed_entries =
511 provided_file_system_->GetObservedEntries(); 670 provided_file_system_->GetObservedEntries();
512 EXPECT_EQ(0u, observed_entries->size()); 671 EXPECT_EQ(0u, observed_entries->size());
513 } 672 }
514 673
515 provided_file_system_->RemoveObserver(&observer); 674 provided_file_system_->RemoveObserver(&observer);
516 } 675 }
517 676
518 TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) { 677 TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) {
519 Observer observer; 678 Observer observer;
520 provided_file_system_->AddObserver(&observer); 679 provided_file_system_->AddObserver(&observer);
521 680
522 { 681 {
523 // Observe a directory. 682 // Observe a directory.
524 Log log; 683 Log log;
525 provided_file_system_->ObserveDirectory( 684 provided_file_system_->ObserveDirectory(
685 GURL(kOrigin),
526 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 686 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
527 false /* recursive */, 687 false /* recursive */,
688 true /* persistent */,
528 base::Bind(&LogStatus, base::Unretained(&log))); 689 base::Bind(&LogStatus, base::Unretained(&log)));
529 base::RunLoop().RunUntilIdle(); 690 base::RunLoop().RunUntilIdle();
530 691
531 ASSERT_EQ(1u, log.size()); 692 ASSERT_EQ(1u, log.size());
532 EXPECT_EQ(base::File::FILE_OK, log[0]); 693 EXPECT_EQ(base::File::FILE_OK, log[0]);
533 EXPECT_EQ(1, observer.list_changed_counter()); 694 EXPECT_EQ(1, observer.list_changed_counter());
534 EXPECT_EQ(0, observer.tag_updated_counter()); 695 EXPECT_EQ(0, observer.tag_updated_counter());
535 696
536 ObservedEntries* const observed_entries = 697 ObservedEntries* const observed_entries =
537 provided_file_system_->GetObservedEntries(); 698 provided_file_system_->GetObservedEntries();
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 EXPECT_EQ(0u, observed_entries->size()); 768 EXPECT_EQ(0u, observed_entries->size());
608 EXPECT_EQ(2, observer.list_changed_counter()); 769 EXPECT_EQ(2, observer.list_changed_counter());
609 EXPECT_EQ(2, observer.tag_updated_counter()); 770 EXPECT_EQ(2, observer.tag_updated_counter());
610 } 771 }
611 772
612 provided_file_system_->RemoveObserver(&observer); 773 provided_file_system_->RemoveObserver(&observer);
613 } 774 }
614 775
615 } // namespace file_system_provider 776 } // namespace file_system_provider
616 } // namespace chromeos 777 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698