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

Side by Side Diff: chrome/browser/chromeos/drive/file_system.cc

Issue 14838003: Try fast-fetch rather than full fetch if drive::FileSystem::GetEntryInfo failed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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/drive/file_system.h ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/drive/file_system.h" 5 #include "chrome/browser/chromeos/drive/file_system.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop_proxy.h" 9 #include "base/message_loop_proxy.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 FileError error, 656 FileError error,
657 scoped_ptr<DriveEntryProto> entry_proto) { 657 scoped_ptr<DriveEntryProto> entry_proto) {
658 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 658 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
659 DCHECK(!callback.is_null()); 659 DCHECK(!callback.is_null());
660 660
661 if (error == FILE_ERROR_OK) { 661 if (error == FILE_ERROR_OK) {
662 CheckLocalModificationAndRun(entry_proto.Pass(), callback); 662 CheckLocalModificationAndRun(entry_proto.Pass(), callback);
663 return; 663 return;
664 } 664 }
665 665
666 // Start loading if needed. Note that directory_fetch_info is empty here, 666 // If the information about the path is not in the local ResourceMetadata,
667 // as we don't need to fetch the contents of a directory when we just need 667 // try fetching information of the directory and retry.
668 // to get an entry of the directory. 668 LoadDirectoryIfNeeded(
669 change_list_loader_->LoadIfNeeded( 669 file_path.DirName(),
670 DirectoryFetchInfo(),
671 base::Bind(&FileSystem::GetEntryInfoByPathAfterLoad, 670 base::Bind(&FileSystem::GetEntryInfoByPathAfterLoad,
672 weak_ptr_factory_.GetWeakPtr(), 671 weak_ptr_factory_.GetWeakPtr(),
673 file_path, 672 file_path,
674 callback)); 673 callback));
675 } 674 }
676 675
677 void FileSystem::GetEntryInfoByPathAfterLoad( 676 void FileSystem::GetEntryInfoByPathAfterLoad(
678 const base::FilePath& file_path, 677 const base::FilePath& file_path,
679 const GetEntryInfoCallback& callback, 678 const GetEntryInfoCallback& callback,
680 FileError error) { 679 FileError error) {
(...skipping 27 matching lines...) Expand all
708 707
709 CheckLocalModificationAndRun(entry_proto.Pass(), callback); 708 CheckLocalModificationAndRun(entry_proto.Pass(), callback);
710 } 709 }
711 710
712 void FileSystem::ReadDirectoryByPath( 711 void FileSystem::ReadDirectoryByPath(
713 const base::FilePath& directory_path, 712 const base::FilePath& directory_path,
714 const ReadDirectoryWithSettingCallback& callback) { 713 const ReadDirectoryWithSettingCallback& callback) {
715 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 714 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
716 DCHECK(!callback.is_null()); 715 DCHECK(!callback.is_null());
717 716
717 LoadDirectoryIfNeeded(
718 directory_path,
719 base::Bind(&FileSystem::ReadDirectoryByPathAfterLoad,
720 weak_ptr_factory_.GetWeakPtr(),
721 directory_path,
722 callback));
723 }
724
725 void FileSystem::LoadDirectoryIfNeeded(const base::FilePath& directory_path,
726 const FileOperationCallback& callback) {
727 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
728 DCHECK(!callback.is_null());
729
718 // As described in GetEntryInfoByPath(), ResourceMetadata may know 730 // As described in GetEntryInfoByPath(), ResourceMetadata may know
719 // about the entry even if the file system is not yet fully loaded, hence we 731 // about the entry even if the file system is not yet fully loaded, hence we
720 // should just ask ResourceMetadata first. 732 // should just ask ResourceMetadata first.
721 resource_metadata_->GetEntryInfoByPath( 733 resource_metadata_->GetEntryInfoByPath(
722 directory_path, 734 directory_path,
723 base::Bind(&FileSystem::ReadDirectoryByPathAfterGetEntry, 735 base::Bind(&FileSystem::LoadDirectoryIfNeededAfterGetEntry,
724 weak_ptr_factory_.GetWeakPtr(), 736 weak_ptr_factory_.GetWeakPtr(),
725 directory_path, 737 directory_path,
726 callback)); 738 callback));
727 } 739 }
728 740
729 void FileSystem::ReadDirectoryByPathAfterGetEntry( 741 void FileSystem::LoadDirectoryIfNeededAfterGetEntry(
730 const base::FilePath& directory_path, 742 const base::FilePath& directory_path,
731 const ReadDirectoryWithSettingCallback& callback, 743 const FileOperationCallback& callback,
732 FileError error, 744 FileError error,
733 scoped_ptr<DriveEntryProto> entry_proto) { 745 scoped_ptr<DriveEntryProto> entry_proto) {
734 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 746 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
735 DCHECK(!callback.is_null()); 747 DCHECK(!callback.is_null());
736 748
737 if (error != FILE_ERROR_OK) { 749 if (error != FILE_ERROR_OK) {
738 // If we don't know about the directory, start loading. 750 // If we don't know about the directory, start loading full feed.
satorux1 2013/05/02 04:42:38 full feed -> full resource list.
kinaba 2013/05/02 11:32:11 Done.
739 change_list_loader_->LoadIfNeeded( 751 change_list_loader_->LoadIfNeeded(DirectoryFetchInfo(), callback);
740 DirectoryFetchInfo(),
741 base::Bind(&FileSystem::ReadDirectoryByPathAfterLoad,
742 weak_ptr_factory_.GetWeakPtr(),
743 directory_path,
744 callback));
745 return; 752 return;
746 } 753 }
747 754
748 if (!entry_proto->file_info().is_directory()) { 755 if (!entry_proto->file_info().is_directory()) {
749 callback.Run(FILE_ERROR_NOT_A_DIRECTORY, 756 callback.Run(FILE_ERROR_NOT_A_DIRECTORY);
750 hide_hosted_docs_,
751 scoped_ptr<DriveEntryProtoVector>());
752 return; 757 return;
753 } 758 }
754 759
755 // Pass the directory fetch info so we can fetch the contents of the 760 // Pass the directory fetch info so we can fetch the contents of the
756 // directory before loading change lists. 761 // directory before loading change lists.
757 DirectoryFetchInfo directory_fetch_info( 762 DirectoryFetchInfo directory_fetch_info(
758 entry_proto->resource_id(), 763 entry_proto->resource_id(),
759 entry_proto->directory_specific_info().changestamp()); 764 entry_proto->directory_specific_info().changestamp());
760 change_list_loader_->LoadIfNeeded( 765 change_list_loader_->LoadIfNeeded(directory_fetch_info, callback);
761 directory_fetch_info,
762 base::Bind(&FileSystem::ReadDirectoryByPathAfterLoad,
763 weak_ptr_factory_.GetWeakPtr(),
764 directory_path,
765 callback));
766 } 766 }
767 767
768 void FileSystem::ReadDirectoryByPathAfterLoad( 768 void FileSystem::ReadDirectoryByPathAfterLoad(
769 const base::FilePath& directory_path, 769 const base::FilePath& directory_path,
770 const ReadDirectoryWithSettingCallback& callback, 770 const ReadDirectoryWithSettingCallback& callback,
771 FileError error) { 771 FileError error) {
772 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 772 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
773 DCHECK(!callback.is_null()); 773 DCHECK(!callback.is_null());
774 774
775 if (error != FILE_ERROR_OK) { 775 if (error != FILE_ERROR_OK) {
(...skipping 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 util::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info); 1791 util::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info);
1792 *entry_proto->mutable_file_info() = entry_file_info; 1792 *entry_proto->mutable_file_info() = entry_file_info;
1793 callback.Run(FILE_ERROR_OK, entry_proto.Pass()); 1793 callback.Run(FILE_ERROR_OK, entry_proto.Pass());
1794 } 1794 }
1795 1795
1796 void FileSystem::CancelJobInScheduler(JobID id) { 1796 void FileSystem::CancelJobInScheduler(JobID id) {
1797 scheduler_->CancelJob(id); 1797 scheduler_->CancelJob(id);
1798 } 1798 }
1799 1799
1800 } // namespace drive 1800 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/file_system.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698