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

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

Issue 971303003: Simplify file_system_provider::Queue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 | « no previous file | chrome/browser/chromeos/file_system_provider/queue.h » ('j') | 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/provided_file_system.h" 5 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/files/file.h" 9 #include "base/files/file.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 void ProvidedFileSystem::OnAddWatcherInQueueCompleted( 647 void ProvidedFileSystem::OnAddWatcherInQueueCompleted(
648 size_t token, 648 size_t token,
649 const base::FilePath& entry_path, 649 const base::FilePath& entry_path,
650 bool recursive, 650 bool recursive,
651 const Subscriber& subscriber, 651 const Subscriber& subscriber,
652 const storage::AsyncFileUtil::StatusCallback& callback, 652 const storage::AsyncFileUtil::StatusCallback& callback,
653 base::File::Error result) { 653 base::File::Error result) {
654 if (result != base::File::FILE_OK) { 654 if (result != base::File::FILE_OK) {
655 callback.Run(result); 655 callback.Run(result);
656 watcher_queue_.Complete(token); 656 watcher_queue_.Complete(token);
657 watcher_queue_.Remove(token);
658 return; 657 return;
659 } 658 }
660 659
661 const WatcherKey key(entry_path, recursive); 660 const WatcherKey key(entry_path, recursive);
662 const Watchers::iterator it = watchers_.find(key); 661 const Watchers::iterator it = watchers_.find(key);
663 if (it != watchers_.end()) { 662 if (it != watchers_.end()) {
664 callback.Run(base::File::FILE_OK); 663 callback.Run(base::File::FILE_OK);
665 watcher_queue_.Complete(token); 664 watcher_queue_.Complete(token);
666 watcher_queue_.Remove(token);
667 return; 665 return;
668 } 666 }
669 667
670 Watcher* const watcher = &watchers_[key]; 668 Watcher* const watcher = &watchers_[key];
671 watcher->entry_path = entry_path; 669 watcher->entry_path = entry_path;
672 watcher->recursive = recursive; 670 watcher->recursive = recursive;
673 watcher->subscribers[subscriber.origin] = subscriber; 671 watcher->subscribers[subscriber.origin] = subscriber;
674 672
675 FOR_EACH_OBSERVER(ProvidedFileSystemObserver, 673 FOR_EACH_OBSERVER(ProvidedFileSystemObserver,
676 observers_, 674 observers_,
677 OnWatcherListChanged(file_system_info_, watchers_)); 675 OnWatcherListChanged(file_system_info_, watchers_));
678 676
679 callback.Run(base::File::FILE_OK); 677 callback.Run(base::File::FILE_OK);
680 watcher_queue_.Complete(token); 678 watcher_queue_.Complete(token);
681 watcher_queue_.Remove(token);
682 } 679 }
683 680
684 void ProvidedFileSystem::OnRemoveWatcherInQueueCompleted( 681 void ProvidedFileSystem::OnRemoveWatcherInQueueCompleted(
685 size_t token, 682 size_t token,
686 const GURL& origin, 683 const GURL& origin,
687 const WatcherKey& key, 684 const WatcherKey& key,
688 const storage::AsyncFileUtil::StatusCallback& callback, 685 const storage::AsyncFileUtil::StatusCallback& callback,
689 bool extension_response, 686 bool extension_response,
690 base::File::Error result) { 687 base::File::Error result) {
691 if (!extension_response && result != base::File::FILE_OK) { 688 if (!extension_response && result != base::File::FILE_OK) {
692 watcher_queue_.Complete(token); 689 watcher_queue_.Complete(token);
693 watcher_queue_.Remove(token);
694 callback.Run(result); 690 callback.Run(result);
695 return; 691 return;
696 } 692 }
697 693
698 // Even if the extension returns an error, the callback is called with base:: 694 // Even if the extension returns an error, the callback is called with base::
699 // File::FILE_OK. 695 // File::FILE_OK.
700 const auto it = watchers_.find(key); 696 const auto it = watchers_.find(key);
701 DCHECK(it != watchers_.end()); 697 DCHECK(it != watchers_.end());
702 DCHECK(it->second.subscribers.find(origin) != it->second.subscribers.end()); 698 DCHECK(it->second.subscribers.find(origin) != it->second.subscribers.end());
703 699
704 it->second.subscribers.erase(origin); 700 it->second.subscribers.erase(origin);
705 701
706 FOR_EACH_OBSERVER(ProvidedFileSystemObserver, observers_, 702 FOR_EACH_OBSERVER(ProvidedFileSystemObserver, observers_,
707 OnWatcherListChanged(file_system_info_, watchers_)); 703 OnWatcherListChanged(file_system_info_, watchers_));
708 704
709 // If there are no more subscribers, then remove the watcher. 705 // If there are no more subscribers, then remove the watcher.
710 if (!it->second.subscribers.size()) 706 if (!it->second.subscribers.size())
711 watchers_.erase(it); 707 watchers_.erase(it);
712 708
713 callback.Run(base::File::FILE_OK); 709 callback.Run(base::File::FILE_OK);
714 watcher_queue_.Complete(token); 710 watcher_queue_.Complete(token);
715 watcher_queue_.Remove(token);
716 } 711 }
717 712
718 void ProvidedFileSystem::OnNotifyInQueueCompleted( 713 void ProvidedFileSystem::OnNotifyInQueueCompleted(
719 scoped_ptr<NotifyInQueueArgs> args, 714 scoped_ptr<NotifyInQueueArgs> args,
720 base::File::Error result) { 715 base::File::Error result) {
721 if (result != base::File::FILE_OK) { 716 if (result != base::File::FILE_OK) {
722 args->callback.Run(result); 717 args->callback.Run(result);
723 watcher_queue_.Complete(args->token); 718 watcher_queue_.Complete(args->token);
724 watcher_queue_.Remove(args->token);
725 return; 719 return;
726 } 720 }
727 721
728 // Check if the entry is still watched. 722 // Check if the entry is still watched.
729 const WatcherKey key(args->entry_path, args->recursive); 723 const WatcherKey key(args->entry_path, args->recursive);
730 const Watchers::iterator it = watchers_.find(key); 724 const Watchers::iterator it = watchers_.find(key);
731 if (it == watchers_.end()) { 725 if (it == watchers_.end()) {
732 args->callback.Run(base::File::FILE_ERROR_NOT_FOUND); 726 args->callback.Run(base::File::FILE_ERROR_NOT_FOUND);
733 watcher_queue_.Complete(args->token); 727 watcher_queue_.Complete(args->token);
734 watcher_queue_.Remove(args->token);
735 return; 728 return;
736 } 729 }
737 730
738 it->second.last_tag = args->tag; 731 it->second.last_tag = args->tag;
739 732
740 FOR_EACH_OBSERVER(ProvidedFileSystemObserver, 733 FOR_EACH_OBSERVER(ProvidedFileSystemObserver,
741 observers_, 734 observers_,
742 OnWatcherTagUpdated(file_system_info_, it->second)); 735 OnWatcherTagUpdated(file_system_info_, it->second));
743 736
744 // If the watched entry is deleted, then remove the watcher. 737 // If the watched entry is deleted, then remove the watcher.
745 if (args->change_type == storage::WatcherManager::DELETED) { 738 if (args->change_type == storage::WatcherManager::DELETED) {
746 // Make a copy, since the |it| iterator will get invalidated on the last 739 // Make a copy, since the |it| iterator will get invalidated on the last
747 // subscriber. 740 // subscriber.
748 Subscribers subscribers = it->second.subscribers; 741 Subscribers subscribers = it->second.subscribers;
749 for (const auto& subscriber_it : subscribers) { 742 for (const auto& subscriber_it : subscribers) {
750 RemoveWatcher(subscriber_it.second.origin, args->entry_path, 743 RemoveWatcher(subscriber_it.second.origin, args->entry_path,
751 args->recursive, base::Bind(&EmptyStatusCallback)); 744 args->recursive, base::Bind(&EmptyStatusCallback));
752 } 745 }
753 } 746 }
754 747
755 args->callback.Run(base::File::FILE_OK); 748 args->callback.Run(base::File::FILE_OK);
756 watcher_queue_.Complete(args->token); 749 watcher_queue_.Complete(args->token);
757 watcher_queue_.Remove(args->token);
758 } 750 }
759 751
760 void ProvidedFileSystem::OnOpenFileCompleted(const base::FilePath& file_path, 752 void ProvidedFileSystem::OnOpenFileCompleted(const base::FilePath& file_path,
761 OpenFileMode mode, 753 OpenFileMode mode,
762 const OpenFileCallback& callback, 754 const OpenFileCallback& callback,
763 int file_handle, 755 int file_handle,
764 base::File::Error result) { 756 base::File::Error result) {
765 if (result != base::File::FILE_OK) { 757 if (result != base::File::FILE_OK) {
766 callback.Run(file_handle, result); 758 callback.Run(file_handle, result);
767 return; 759 return;
768 } 760 }
769 761
770 opened_files_[file_handle] = OpenedFile(file_path, mode); 762 opened_files_[file_handle] = OpenedFile(file_path, mode);
771 callback.Run(file_handle, base::File::FILE_OK); 763 callback.Run(file_handle, base::File::FILE_OK);
772 } 764 }
773 765
774 void ProvidedFileSystem::OnCloseFileCompleted( 766 void ProvidedFileSystem::OnCloseFileCompleted(
775 int file_handle, 767 int file_handle,
776 const storage::AsyncFileUtil::StatusCallback& callback, 768 const storage::AsyncFileUtil::StatusCallback& callback,
777 base::File::Error result) { 769 base::File::Error result) {
778 // Closing files is final. Even if an error happened, we remove it from the 770 // Closing files is final. Even if an error happened, we remove it from the
779 // list of opened files. 771 // list of opened files.
780 opened_files_.erase(file_handle); 772 opened_files_.erase(file_handle);
781 callback.Run(result); 773 callback.Run(result);
782 } 774 }
783 775
784 } // namespace file_system_provider 776 } // namespace file_system_provider
785 } // namespace chromeos 777 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/file_system_provider/queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698