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

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

Issue 679573002: [fsp] Separate recursive and non-recursive watchers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed. 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 base::File::Error reply_result_; 94 base::File::Error reply_result_;
95 DISALLOW_COPY_AND_ASSIGN(FakeEventRouter); 95 DISALLOW_COPY_AND_ASSIGN(FakeEventRouter);
96 }; 96 };
97 97
98 // Observes the tested file system. 98 // Observes the tested file system.
99 class Observer : public ProvidedFileSystemObserver { 99 class Observer : public ProvidedFileSystemObserver {
100 public: 100 public:
101 class ChangeEvent { 101 class ChangeEvent {
102 public: 102 public:
103 ChangeEvent(ProvidedFileSystemObserver::ChangeType change_type, 103 ChangeEvent(ProvidedFileSystemObserver::ChangeType change_type,
104 const ProvidedFileSystemObserver::ChildChanges& child_changes) 104 const ProvidedFileSystemObserver::Changes& child_changes)
hirono 2014/10/24 06:58:43 nit: child_changes -> changes Same for followings.
mtomasz 2014/10/24 09:50:24 Done.
105 : change_type_(change_type), child_changes_(child_changes) {} 105 : change_type_(change_type), child_changes_(child_changes) {}
106 virtual ~ChangeEvent() {} 106 virtual ~ChangeEvent() {}
107 107
108 ProvidedFileSystemObserver::ChangeType change_type() const { 108 ProvidedFileSystemObserver::ChangeType change_type() const {
109 return change_type_; 109 return change_type_;
110 } 110 }
111 const ProvidedFileSystemObserver::ChildChanges& child_changes() const { 111 const ProvidedFileSystemObserver::Changes& child_changes() const {
112 return child_changes_; 112 return child_changes_;
113 } 113 }
114 114
115 private: 115 private:
116 const ProvidedFileSystemObserver::ChangeType change_type_; 116 const ProvidedFileSystemObserver::ChangeType change_type_;
117 const ProvidedFileSystemObserver::ChildChanges child_changes_; 117 const ProvidedFileSystemObserver::Changes child_changes_;
118 118
119 DISALLOW_COPY_AND_ASSIGN(ChangeEvent); 119 DISALLOW_COPY_AND_ASSIGN(ChangeEvent);
120 }; 120 };
121 121
122 Observer() : list_changed_counter_(0), tag_updated_counter_(0) {} 122 Observer() : list_changed_counter_(0), tag_updated_counter_(0) {}
123 123
124 // ProvidedFileSystemInterfaceObserver overrides. 124 // ProvidedFileSystemInterfaceObserver overrides.
125 virtual void OnObservedEntryChanged( 125 virtual void OnObservedEntryChanged(
126 const ProvidedFileSystemInfo& file_system_info, 126 const ProvidedFileSystemInfo& file_system_info,
127 const ObservedEntry& observed_entry, 127 const ObservedEntry& observed_entry,
128 ProvidedFileSystemObserver::ChangeType change_type, 128 ProvidedFileSystemObserver::ChangeType change_type,
129 const ProvidedFileSystemObserver::ChildChanges& child_changes, 129 const ProvidedFileSystemObserver::Changes& child_changes,
130 const base::Closure& callback) override { 130 const base::Closure& callback) override {
131 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); 131 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id());
132 change_events_.push_back(new ChangeEvent(change_type, child_changes)); 132 change_events_.push_back(new ChangeEvent(change_type, child_changes));
133 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); 133 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
134 } 134 }
135 135
136 virtual void OnObservedEntryTagUpdated( 136 virtual void OnObservedEntryTagUpdated(
137 const ProvidedFileSystemInfo& file_system_info, 137 const ProvidedFileSystemInfo& file_system_info,
138 const ObservedEntry& observed_entry) override { 138 const ObservedEntry& observed_entry) override {
139 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); 139 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id());
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 base::RunLoop().RunUntilIdle(); 362 base::RunLoop().RunUntilIdle();
363 363
364 ASSERT_EQ(1u, log.size()); 364 ASSERT_EQ(1u, log.size());
365 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]); 365 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]);
366 EXPECT_EQ(1, observer.list_changed_counter()); // No changes on the list. 366 EXPECT_EQ(1, observer.list_changed_counter()); // No changes on the list.
367 EXPECT_EQ(0, observer.tag_updated_counter()); 367 EXPECT_EQ(0, observer.tag_updated_counter());
368 } 368 }
369 369
370 { 370 {
371 // Create another observer on the same path, but a recursive one. That 371 // Create another observer on the same path, but a recursive one. That
372 // should 372 // should succeed.
373 // succeed.
374 Log log; 373 Log log;
375 provided_file_system_->ObserveDirectory( 374 provided_file_system_->ObserveDirectory(
376 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 375 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
377 true /* recursive */, 376 true /* recursive */,
378 base::Bind(&LogStatus, base::Unretained(&log))); 377 base::Bind(&LogStatus, base::Unretained(&log)));
379 base::RunLoop().RunUntilIdle(); 378 base::RunLoop().RunUntilIdle();
380 379
381 ASSERT_EQ(1u, log.size()); 380 ASSERT_EQ(1u, log.size());
382 EXPECT_EQ(base::File::FILE_OK, log[0]); 381 EXPECT_EQ(base::File::FILE_OK, log[0]);
383 EXPECT_EQ(2, observer.list_changed_counter()); 382 EXPECT_EQ(2, observer.list_changed_counter());
384 EXPECT_EQ(0, observer.tag_updated_counter()); 383 EXPECT_EQ(0, observer.tag_updated_counter());
385 384
386 ObservedEntries* const observed_entries = 385 ObservedEntries* const observed_entries =
387 provided_file_system_->GetObservedEntries(); 386 provided_file_system_->GetObservedEntries();
388 ASSERT_EQ(1u, observed_entries->size()); 387 const auto& observed_entry_it = observed_entries->find(
389 const ObservedEntry& observed_entry = observed_entries->begin()->second; 388 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)),
390 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); 389 true /* recursive */));
391 EXPECT_TRUE(observed_entry.recursive); 390 ASSERT_NE(observed_entries->end(), observed_entry_it);
392 EXPECT_EQ("", observed_entry.last_tag); 391
392 EXPECT_EQ(kDirectoryPath, observed_entry_it->second.entry_path.value());
393 EXPECT_TRUE(observed_entry_it->second.recursive);
394 EXPECT_EQ("", observed_entry_it->second.last_tag);
393 } 395 }
394 396
395 { 397 {
396 // Lastly, create another recursive observer. That should fail, too. 398 // Lastly, create another recursive observer. That should fail, too.
397 Log log; 399 Log log;
398 provided_file_system_->ObserveDirectory( 400 provided_file_system_->ObserveDirectory(
399 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 401 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
400 true /* recursive */, 402 true /* recursive */,
401 base::Bind(&LogStatus, base::Unretained(&log))); 403 base::Bind(&LogStatus, base::Unretained(&log)));
402 base::RunLoop().RunUntilIdle(); 404 base::RunLoop().RunUntilIdle();
(...skipping 10 matching lines...) Expand all
413 TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) { 415 TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) {
414 Observer observer; 416 Observer observer;
415 provided_file_system_->AddObserver(&observer); 417 provided_file_system_->AddObserver(&observer);
416 418
417 { 419 {
418 // First, confirm that unobserving an entry which is not observed, results 420 // First, confirm that unobserving an entry which is not observed, results
419 // in an error. 421 // in an error.
420 Log log; 422 Log log;
421 provided_file_system_->UnobserveEntry( 423 provided_file_system_->UnobserveEntry(
422 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 424 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
425 false /* recursive */,
423 base::Bind(&LogStatus, base::Unretained(&log))); 426 base::Bind(&LogStatus, base::Unretained(&log)));
424 base::RunLoop().RunUntilIdle(); 427 base::RunLoop().RunUntilIdle();
425 428
426 ASSERT_EQ(1u, log.size()); 429 ASSERT_EQ(1u, log.size());
427 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); 430 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]);
428 EXPECT_EQ(0, observer.list_changed_counter()); 431 EXPECT_EQ(0, observer.list_changed_counter());
429 EXPECT_EQ(0, observer.tag_updated_counter()); 432 EXPECT_EQ(0, observer.tag_updated_counter());
430 } 433 }
431 434
432 { 435 {
(...skipping 13 matching lines...) Expand all
446 ObservedEntries* const observed_entries = 449 ObservedEntries* const observed_entries =
447 provided_file_system_->GetObservedEntries(); 450 provided_file_system_->GetObservedEntries();
448 EXPECT_EQ(1u, observed_entries->size()); 451 EXPECT_EQ(1u, observed_entries->size());
449 } 452 }
450 453
451 { 454 {
452 // Unobserve it gracefully. 455 // Unobserve it gracefully.
453 Log log; 456 Log log;
454 provided_file_system_->UnobserveEntry( 457 provided_file_system_->UnobserveEntry(
455 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 458 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
459 false /* recursive */,
456 base::Bind(&LogStatus, base::Unretained(&log))); 460 base::Bind(&LogStatus, base::Unretained(&log)));
457 base::RunLoop().RunUntilIdle(); 461 base::RunLoop().RunUntilIdle();
458 462
459 ASSERT_EQ(1u, log.size()); 463 ASSERT_EQ(1u, log.size());
460 EXPECT_EQ(base::File::FILE_OK, log[0]); 464 EXPECT_EQ(base::File::FILE_OK, log[0]);
461 EXPECT_EQ(2, observer.list_changed_counter()); 465 EXPECT_EQ(2, observer.list_changed_counter());
462 EXPECT_EQ(0, observer.tag_updated_counter()); 466 EXPECT_EQ(0, observer.tag_updated_counter());
463 467
464 ObservedEntries* const observed_entries = 468 ObservedEntries* const observed_entries =
465 provided_file_system_->GetObservedEntries(); 469 provided_file_system_->GetObservedEntries();
(...skipping 21 matching lines...) Expand all
487 491
488 { 492 {
489 // Finally, unobserve it, but with an error from extension. That should 493 // Finally, unobserve it, but with an error from extension. That should
490 // result 494 // result
491 // in a removed observer, anyway. 495 // in a removed observer, anyway.
492 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED); 496 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED);
493 497
494 Log log; 498 Log log;
495 provided_file_system_->UnobserveEntry( 499 provided_file_system_->UnobserveEntry(
496 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 500 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
501 false /* recursive */,
497 base::Bind(&LogStatus, base::Unretained(&log))); 502 base::Bind(&LogStatus, base::Unretained(&log)));
498 base::RunLoop().RunUntilIdle(); 503 base::RunLoop().RunUntilIdle();
499 504
500 ASSERT_EQ(1u, log.size()); 505 ASSERT_EQ(1u, log.size());
501 EXPECT_EQ(base::File::FILE_ERROR_FAILED, log[0]); 506 EXPECT_EQ(base::File::FILE_ERROR_FAILED, log[0]);
502 EXPECT_EQ(4, observer.list_changed_counter()); 507 EXPECT_EQ(4, observer.list_changed_counter());
503 EXPECT_EQ(0, observer.tag_updated_counter()); 508 EXPECT_EQ(0, observer.tag_updated_counter());
504 509
505 ObservedEntries* const observed_entries = 510 ObservedEntries* const observed_entries =
506 provided_file_system_->GetObservedEntries(); 511 provided_file_system_->GetObservedEntries();
(...skipping 28 matching lines...) Expand all
535 EXPECT_EQ("", observed_entries->begin()->second.last_tag); 540 EXPECT_EQ("", observed_entries->begin()->second.last_tag);
536 } 541 }
537 542
538 { 543 {
539 // Notify about a change. 544 // Notify about a change.
540 const ProvidedFileSystemObserver::ChangeType change_type = 545 const ProvidedFileSystemObserver::ChangeType change_type =
541 ProvidedFileSystemObserver::CHANGED; 546 ProvidedFileSystemObserver::CHANGED;
542 const std::string tag = "hello-world"; 547 const std::string tag = "hello-world";
543 EXPECT_TRUE(provided_file_system_->Notify( 548 EXPECT_TRUE(provided_file_system_->Notify(
544 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 549 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
550 false /* recursive */,
545 change_type, 551 change_type,
546 make_scoped_ptr(new ProvidedFileSystemObserver::ChildChanges), 552 make_scoped_ptr(new ProvidedFileSystemObserver::Changes),
547 tag)); 553 tag));
548 554
549 // Verify the observer event. 555 // Verify the observer event.
550 ASSERT_EQ(1u, observer.change_events().size()); 556 ASSERT_EQ(1u, observer.change_events().size());
551 const Observer::ChangeEvent* const change_event = 557 const Observer::ChangeEvent* const change_event =
552 observer.change_events()[0]; 558 observer.change_events()[0];
553 EXPECT_EQ(change_type, change_event->change_type()); 559 EXPECT_EQ(change_type, change_event->change_type());
554 EXPECT_EQ(0u, change_event->child_changes().size()); 560 EXPECT_EQ(0u, change_event->child_changes().size());
555 561
556 // The tag should not be updated in advance, before all observers handle 562 // The tag should not be updated in advance, before all observers handle
(...skipping 12 matching lines...) Expand all
569 ASSERT_EQ(1u, observed_entries->size()); 575 ASSERT_EQ(1u, observed_entries->size());
570 EXPECT_EQ(tag, observed_entries->begin()->second.last_tag); 576 EXPECT_EQ(tag, observed_entries->begin()->second.last_tag);
571 EXPECT_EQ(1, observer.list_changed_counter()); 577 EXPECT_EQ(1, observer.list_changed_counter());
572 EXPECT_EQ(1, observer.tag_updated_counter()); 578 EXPECT_EQ(1, observer.tag_updated_counter());
573 } 579 }
574 580
575 { 581 {
576 // Notify about deleting of the observed entry. 582 // Notify about deleting of the observed entry.
577 const ProvidedFileSystemObserver::ChangeType change_type = 583 const ProvidedFileSystemObserver::ChangeType change_type =
578 ProvidedFileSystemObserver::DELETED; 584 ProvidedFileSystemObserver::DELETED;
579 const ProvidedFileSystemObserver::ChildChanges child_changes; 585 const ProvidedFileSystemObserver::Changes child_changes;
580 const std::string tag = "chocolate-disco"; 586 const std::string tag = "chocolate-disco";
581 EXPECT_TRUE(provided_file_system_->Notify( 587 EXPECT_TRUE(provided_file_system_->Notify(
582 base::FilePath::FromUTF8Unsafe(kDirectoryPath), 588 base::FilePath::FromUTF8Unsafe(kDirectoryPath),
589 false /* recursive */,
583 change_type, 590 change_type,
584 make_scoped_ptr(new ProvidedFileSystemObserver::ChildChanges), 591 make_scoped_ptr(new ProvidedFileSystemObserver::Changes),
585 tag)); 592 tag));
586 base::RunLoop().RunUntilIdle(); 593 base::RunLoop().RunUntilIdle();
587 594
588 // Verify the observer event. 595 // Verify the observer event.
589 ASSERT_EQ(2u, observer.change_events().size()); 596 ASSERT_EQ(2u, observer.change_events().size());
590 const Observer::ChangeEvent* const change_event = 597 const Observer::ChangeEvent* const change_event =
591 observer.change_events()[1]; 598 observer.change_events()[1];
592 EXPECT_EQ(change_type, change_event->change_type()); 599 EXPECT_EQ(change_type, change_event->change_type());
593 EXPECT_EQ(0u, change_event->child_changes().size()); 600 EXPECT_EQ(0u, change_event->child_changes().size());
594 } 601 }
595 602
596 // Confirm, that the entry is not observed anymore. 603 // Confirm, that the entry is not observed anymore.
597 { 604 {
598 ObservedEntries* const observed_entries = 605 ObservedEntries* const observed_entries =
599 provided_file_system_->GetObservedEntries(); 606 provided_file_system_->GetObservedEntries();
600 EXPECT_EQ(0u, observed_entries->size()); 607 EXPECT_EQ(0u, observed_entries->size());
601 EXPECT_EQ(2, observer.list_changed_counter()); 608 EXPECT_EQ(2, observer.list_changed_counter());
602 EXPECT_EQ(2, observer.tag_updated_counter()); 609 EXPECT_EQ(2, observer.tag_updated_counter());
603 } 610 }
604 611
605 provided_file_system_->RemoveObserver(&observer); 612 provided_file_system_->RemoveObserver(&observer);
606 } 613 }
607 614
608 } // namespace file_system_provider 615 } // namespace file_system_provider
609 } // namespace chromeos 616 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698