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

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_cache.cc

Issue 10581038: chromeos: Stop returning scoped_ptr from GDataCache::GetCacheEntry (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase and review fix Created 8 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
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/gdata/gdata_cache.h" 5 #include "chrome/browser/chromeos/gdata/gdata_cache.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/chromeos/chromeos_version.h" 9 #include "base/chromeos/chromeos_version.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 } 704 }
705 705
706 void GDataCache::RequestInitializeOnUIThread() { 706 void GDataCache::RequestInitializeOnUIThread() {
707 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 707 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
708 708
709 pool_->GetSequencedTaskRunner(sequence_token_)->PostTask( 709 pool_->GetSequencedTaskRunner(sequence_token_)->PostTask(
710 FROM_HERE, 710 FROM_HERE,
711 base::Bind(&GDataCache::Initialize, base::Unretained(this))); 711 base::Bind(&GDataCache::Initialize, base::Unretained(this)));
712 } 712 }
713 713
714 scoped_ptr<GDataCache::CacheEntry> GDataCache::GetCacheEntry( 714 bool GDataCache::GetCacheEntry(const std::string& resource_id,
715 const std::string& resource_id, 715 const std::string& md5,
716 const std::string& md5) { 716 CacheEntry* entry) {
717 DCHECK(entry);
717 AssertOnSequencedWorkerPool(); 718 AssertOnSequencedWorkerPool();
718 return metadata_->GetCacheEntry(resource_id, md5); 719 return metadata_->GetCacheEntry(resource_id, md5, entry);
719 } 720 }
720 721
721 // static 722 // static
722 GDataCache* GDataCache::CreateGDataCacheOnUIThread( 723 GDataCache* GDataCache::CreateGDataCacheOnUIThread(
723 const FilePath& cache_root_path, 724 const FilePath& cache_root_path,
724 base::SequencedWorkerPool* pool, 725 base::SequencedWorkerPool* pool,
725 const base::SequencedWorkerPool::SequenceToken& sequence_token) { 726 const base::SequencedWorkerPool::SequenceToken& sequence_token) {
726 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 727 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
727 return new GDataCache(cache_root_path, pool, sequence_token); 728 return new GDataCache(cache_root_path, pool, sequence_token);
728 } 729 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 } 774 }
774 775
775 void GDataCache::GetFile(const std::string& resource_id, 776 void GDataCache::GetFile(const std::string& resource_id,
776 const std::string& md5, 777 const std::string& md5,
777 base::PlatformFileError* error, 778 base::PlatformFileError* error,
778 FilePath* cache_file_path) { 779 FilePath* cache_file_path) {
779 AssertOnSequencedWorkerPool(); 780 AssertOnSequencedWorkerPool();
780 DCHECK(error); 781 DCHECK(error);
781 DCHECK(cache_file_path); 782 DCHECK(cache_file_path);
782 783
783 scoped_ptr<CacheEntry> cache_entry = GetCacheEntry( 784 CacheEntry cache_entry;
784 resource_id, md5); 785 if (GetCacheEntry(resource_id, md5, &cache_entry) &&
785 if (cache_entry.get() && cache_entry->IsPresent()) { 786 cache_entry.IsPresent()) {
786 CachedFileOrigin file_origin; 787 CachedFileOrigin file_origin;
787 if (cache_entry->IsMounted()) { 788 if (cache_entry.IsMounted()) {
788 file_origin = CACHED_FILE_MOUNTED; 789 file_origin = CACHED_FILE_MOUNTED;
789 } else if (cache_entry->IsDirty()) { 790 } else if (cache_entry.IsDirty()) {
790 file_origin = CACHED_FILE_LOCALLY_MODIFIED; 791 file_origin = CACHED_FILE_LOCALLY_MODIFIED;
791 } else { 792 } else {
792 file_origin = CACHED_FILE_FROM_SERVER; 793 file_origin = CACHED_FILE_FROM_SERVER;
793 } 794 }
794 *cache_file_path = GetCacheFilePath( 795 *cache_file_path = GetCacheFilePath(
795 resource_id, 796 resource_id,
796 md5, 797 md5,
797 cache_entry->GetSubDirectoryType(), 798 cache_entry.GetSubDirectoryType(),
798 file_origin); 799 file_origin);
799 *error = base::PLATFORM_FILE_OK; 800 *error = base::PLATFORM_FILE_OK;
800 } else { 801 } else {
801 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 802 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND;
802 } 803 }
803 } 804 }
804 805
805 void GDataCache::Store(const std::string& resource_id, 806 void GDataCache::Store(const std::string& resource_id,
806 const std::string& md5, 807 const std::string& md5,
807 const FilePath& source_path, 808 const FilePath& source_path,
808 FileOperationType file_operation_type, 809 FileOperationType file_operation_type,
809 base::PlatformFileError* error) { 810 base::PlatformFileError* error) {
810 AssertOnSequencedWorkerPool(); 811 AssertOnSequencedWorkerPool();
811 DCHECK(error); 812 DCHECK(error);
812 813
813 FilePath dest_path; 814 FilePath dest_path;
814 FilePath symlink_path; 815 FilePath symlink_path;
815 int cache_state = CACHE_STATE_PRESENT; 816 int cache_state = CACHE_STATE_PRESENT;
816 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_TMP; 817 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_TMP;
817 818
818 scoped_ptr<CacheEntry> cache_entry = GetCacheEntry(resource_id, md5); 819 CacheEntry cache_entry;
achuithb 2012/07/11 19:09:59 nit: Can we move this declaration to right before
hashimoto 2012/07/12 05:15:19 Done.
819 820
820 // If file was previously pinned, store it in persistent dir and create 821 // If file was previously pinned, store it in persistent dir and create
821 // symlink in pinned dir. 822 // symlink in pinned dir.
822 if (cache_entry.get()) { // File exists in cache. 823 if (GetCacheEntry(resource_id, md5, &cache_entry)) { // File exists in cache.
823 // If file is dirty or mounted, return error. 824 // If file is dirty or mounted, return error.
824 if (cache_entry->IsDirty() || cache_entry->IsMounted()) { 825 if (cache_entry.IsDirty() || cache_entry.IsMounted()) {
825 LOG(WARNING) << "Can't store a file to replace a " 826 LOG(WARNING) << "Can't store a file to replace a "
826 << (cache_entry->IsDirty() ? "dirty" : "mounted") 827 << (cache_entry.IsDirty() ? "dirty" : "mounted")
827 << " file: res_id=" << resource_id 828 << " file: res_id=" << resource_id
828 << ", md5=" << md5; 829 << ", md5=" << md5;
829 *error = base::PLATFORM_FILE_ERROR_IN_USE; 830 *error = base::PLATFORM_FILE_ERROR_IN_USE;
830 return; 831 return;
831 } 832 }
832 833
833 cache_state |= cache_entry->cache_state; 834 cache_state |= cache_entry.cache_state;
834 835
835 // If file is pinned, determines destination path. 836 // If file is pinned, determines destination path.
836 if (cache_entry->IsPinned()) { 837 if (cache_entry.IsPinned()) {
837 sub_dir_type = CACHE_TYPE_PERSISTENT; 838 sub_dir_type = CACHE_TYPE_PERSISTENT;
838 dest_path = GetCacheFilePath(resource_id, md5, sub_dir_type, 839 dest_path = GetCacheFilePath(resource_id, md5, sub_dir_type,
839 CACHED_FILE_FROM_SERVER); 840 CACHED_FILE_FROM_SERVER);
840 symlink_path = GetCacheFilePath( 841 symlink_path = GetCacheFilePath(
841 resource_id, std::string(), CACHE_TYPE_PINNED, 842 resource_id, std::string(), CACHE_TYPE_PINNED,
842 CACHED_FILE_FROM_SERVER); 843 CACHED_FILE_FROM_SERVER);
843 } 844 }
844 } 845 }
845 846
846 // File wasn't pinned or doesn't exist in cache, store in tmp dir. 847 // File wasn't pinned or doesn't exist in cache, store in tmp dir.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 AssertOnSequencedWorkerPool(); 895 AssertOnSequencedWorkerPool();
895 DCHECK(error); 896 DCHECK(error);
896 897
897 FilePath source_path; 898 FilePath source_path;
898 FilePath dest_path; 899 FilePath dest_path;
899 FilePath symlink_path; 900 FilePath symlink_path;
900 bool create_symlink = true; 901 bool create_symlink = true;
901 int cache_state = CACHE_STATE_PINNED; 902 int cache_state = CACHE_STATE_PINNED;
902 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_PERSISTENT; 903 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_PERSISTENT;
903 904
904 scoped_ptr<CacheEntry> cache_entry = GetCacheEntry(resource_id, md5); 905 CacheEntry cache_entry;
905 906
achuithb 2012/07/11 19:09:59 nit: Don't think this newline is necessary.
hashimoto 2012/07/12 05:15:19 Done.
906 if (!cache_entry.get()) { // Entry does not exist in cache. 907 if (!GetCacheEntry(resource_id, md5, &cache_entry)) {
908 // Entry does not exist in cache.
907 // Set both |dest_path| and |source_path| to /dev/null, so that: 909 // Set both |dest_path| and |source_path| to /dev/null, so that:
908 // 1) ModifyCacheState won't move files when |source_path| and |dest_path| 910 // 1) ModifyCacheState won't move files when |source_path| and |dest_path|
909 // are the same. 911 // are the same.
910 // 2) symlinks to /dev/null will be picked up by GDataSyncClient to download 912 // 2) symlinks to /dev/null will be picked up by GDataSyncClient to download
911 // pinned files that don't exist in cache. 913 // pinned files that don't exist in cache.
912 dest_path = FilePath::FromUTF8Unsafe(util::kSymLinkToDevNull); 914 dest_path = FilePath::FromUTF8Unsafe(util::kSymLinkToDevNull);
913 source_path = dest_path; 915 source_path = dest_path;
914 916
915 // Set sub_dir_type to TMP. The file will be first downloaded in 'tmp', 917 // Set sub_dir_type to TMP. The file will be first downloaded in 'tmp',
916 // then moved to 'persistent'. 918 // then moved to 'persistent'.
917 sub_dir_type = CACHE_TYPE_TMP; 919 sub_dir_type = CACHE_TYPE_TMP;
918 } else { // File exists in cache, determines destination path. 920 } else { // File exists in cache, determines destination path.
919 cache_state |= cache_entry->cache_state; 921 cache_state |= cache_entry.cache_state;
920 922
921 // Determine source and destination paths. 923 // Determine source and destination paths.
922 924
923 // If file is dirty or mounted, don't move it, so determine |dest_path| and 925 // If file is dirty or mounted, don't move it, so determine |dest_path| and
924 // set |source_path| the same, because ModifyCacheState only moves files if 926 // set |source_path| the same, because ModifyCacheState only moves files if
925 // source and destination are different. 927 // source and destination are different.
926 if (cache_entry->IsDirty() || cache_entry->IsMounted()) { 928 if (cache_entry.IsDirty() || cache_entry.IsMounted()) {
927 DCHECK(cache_entry->IsPersistent()); 929 DCHECK(cache_entry.IsPersistent());
928 dest_path = GetCacheFilePath(resource_id, 930 dest_path = GetCacheFilePath(resource_id,
929 md5, 931 md5,
930 cache_entry->GetSubDirectoryType(), 932 cache_entry.GetSubDirectoryType(),
931 CACHED_FILE_LOCALLY_MODIFIED); 933 CACHED_FILE_LOCALLY_MODIFIED);
932 source_path = dest_path; 934 source_path = dest_path;
933 } else { 935 } else {
934 // Gets the current path of the file in cache. 936 // Gets the current path of the file in cache.
935 source_path = GetCacheFilePath(resource_id, 937 source_path = GetCacheFilePath(resource_id,
936 md5, 938 md5,
937 cache_entry->GetSubDirectoryType(), 939 cache_entry.GetSubDirectoryType(),
938 CACHED_FILE_FROM_SERVER); 940 CACHED_FILE_FROM_SERVER);
939 941
940 // If file was pinned before but actual file blob doesn't exist in cache: 942 // If file was pinned before but actual file blob doesn't exist in cache:
941 // - don't need to move the file, so set |dest_path| to |source_path|, 943 // - don't need to move the file, so set |dest_path| to |source_path|,
942 // because ModifyCacheState only moves files if source and destination 944 // because ModifyCacheState only moves files if source and destination
943 // are different 945 // are different
944 // - don't create symlink since it already exists. 946 // - don't create symlink since it already exists.
945 if (!cache_entry->IsPresent()) { 947 if (!cache_entry.IsPresent()) {
946 dest_path = source_path; 948 dest_path = source_path;
947 create_symlink = false; 949 create_symlink = false;
948 } else { // File exists, move it to persistent dir. 950 } else { // File exists, move it to persistent dir.
949 dest_path = GetCacheFilePath(resource_id, 951 dest_path = GetCacheFilePath(resource_id,
950 md5, 952 md5,
951 CACHE_TYPE_PERSISTENT, 953 CACHE_TYPE_PERSISTENT,
952 CACHED_FILE_FROM_SERVER); 954 CACHED_FILE_FROM_SERVER);
953 } 955 }
954 } 956 }
955 } 957 }
(...skipping 21 matching lines...) Expand all
977 } 979 }
978 } 980 }
979 981
980 void GDataCache::Unpin(const std::string& resource_id, 982 void GDataCache::Unpin(const std::string& resource_id,
981 const std::string& md5, 983 const std::string& md5,
982 FileOperationType file_operation_type, 984 FileOperationType file_operation_type,
983 base::PlatformFileError* error) { 985 base::PlatformFileError* error) {
984 AssertOnSequencedWorkerPool(); 986 AssertOnSequencedWorkerPool();
985 DCHECK(error); 987 DCHECK(error);
986 988
987 scoped_ptr<CacheEntry> cache_entry = GetCacheEntry(resource_id, md5); 989 CacheEntry cache_entry;
988 990
achuithb 2012/07/11 19:09:59 nit: Move this to right before GetCacheEntry.
hashimoto 2012/07/12 05:15:19 Done.
989 // Unpinning a file means its entry must exist in cache. 991 // Unpinning a file means its entry must exist in cache.
990 if (!cache_entry.get()) { 992 if (!GetCacheEntry(resource_id, md5, &cache_entry)) {
991 LOG(WARNING) << "Can't unpin a file that wasn't pinned or cached: res_id=" 993 LOG(WARNING) << "Can't unpin a file that wasn't pinned or cached: res_id="
992 << resource_id 994 << resource_id
993 << ", md5=" << md5; 995 << ", md5=" << md5;
994 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 996 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND;
995 return; 997 return;
996 } 998 }
997 999
998 // Entry exists in cache, determines source and destination paths. 1000 // Entry exists in cache, determines source and destination paths.
999 1001
1000 FilePath source_path; 1002 FilePath source_path;
1001 FilePath dest_path; 1003 FilePath dest_path;
1002 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_TMP; 1004 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_TMP;
1003 1005
1004 // If file is dirty or mounted, don't move it, so determine |dest_path| and 1006 // If file is dirty or mounted, don't move it, so determine |dest_path| and
1005 // set |source_path| the same, because ModifyCacheState moves files if source 1007 // set |source_path| the same, because ModifyCacheState moves files if source
1006 // and destination are different. 1008 // and destination are different.
1007 if (cache_entry->IsDirty() || cache_entry->IsMounted()) { 1009 if (cache_entry.IsDirty() || cache_entry.IsMounted()) {
1008 sub_dir_type = CACHE_TYPE_PERSISTENT; 1010 sub_dir_type = CACHE_TYPE_PERSISTENT;
1009 DCHECK(cache_entry->IsPersistent()); 1011 DCHECK(cache_entry.IsPersistent());
1010 dest_path = GetCacheFilePath(resource_id, 1012 dest_path = GetCacheFilePath(resource_id,
1011 md5, 1013 md5,
1012 cache_entry->GetSubDirectoryType(), 1014 cache_entry.GetSubDirectoryType(),
1013 CACHED_FILE_LOCALLY_MODIFIED); 1015 CACHED_FILE_LOCALLY_MODIFIED);
1014 source_path = dest_path; 1016 source_path = dest_path;
1015 } else { 1017 } else {
1016 // Gets the current path of the file in cache. 1018 // Gets the current path of the file in cache.
1017 source_path = GetCacheFilePath(resource_id, 1019 source_path = GetCacheFilePath(resource_id,
1018 md5, 1020 md5,
1019 cache_entry->GetSubDirectoryType(), 1021 cache_entry.GetSubDirectoryType(),
1020 CACHED_FILE_FROM_SERVER); 1022 CACHED_FILE_FROM_SERVER);
1021 1023
1022 // If file was pinned but actual file blob still doesn't exist in cache, 1024 // If file was pinned but actual file blob still doesn't exist in cache,
1023 // don't need to move the file, so set |dest_path| to |source_path|, because 1025 // don't need to move the file, so set |dest_path| to |source_path|, because
1024 // ModifyCacheState only moves files if source and destination are 1026 // ModifyCacheState only moves files if source and destination are
1025 // different. 1027 // different.
1026 if (!cache_entry->IsPresent()) { 1028 if (!cache_entry.IsPresent()) {
1027 dest_path = source_path; 1029 dest_path = source_path;
1028 } else { // File exists, move it to tmp dir. 1030 } else { // File exists, move it to tmp dir.
1029 dest_path = GetCacheFilePath(resource_id, md5, 1031 dest_path = GetCacheFilePath(resource_id, md5,
1030 CACHE_TYPE_TMP, 1032 CACHE_TYPE_TMP,
1031 CACHED_FILE_FROM_SERVER); 1033 CACHED_FILE_FROM_SERVER);
1032 } 1034 }
1033 } 1035 }
1034 1036
1035 // If file was pinned, get absolute path of symlink in pinned dir so as to 1037 // If file was pinned, get absolute path of symlink in pinned dir so as to
1036 // remove it. 1038 // remove it.
1037 FilePath symlink_path; 1039 FilePath symlink_path;
1038 if (cache_entry->IsPinned()) { 1040 if (cache_entry.IsPinned()) {
1039 symlink_path = GetCacheFilePath(resource_id, 1041 symlink_path = GetCacheFilePath(resource_id,
1040 std::string(), 1042 std::string(),
1041 CACHE_TYPE_PINNED, 1043 CACHE_TYPE_PINNED,
1042 CACHED_FILE_FROM_SERVER); 1044 CACHED_FILE_FROM_SERVER);
1043 } 1045 }
1044 1046
1045 *error = ModifyCacheState( 1047 *error = ModifyCacheState(
1046 source_path, 1048 source_path,
1047 dest_path, 1049 dest_path,
1048 file_operation_type, 1050 file_operation_type,
1049 symlink_path, // This will be deleted if it exists. 1051 symlink_path, // This will be deleted if it exists.
1050 false /* don't create symlink*/); 1052 false /* don't create symlink*/);
1051 1053
1052 if (*error == base::PLATFORM_FILE_OK) { 1054 if (*error == base::PLATFORM_FILE_OK) {
1053 // Now that file operations have completed, update cache map. 1055 // Now that file operations have completed, update cache map.
1054 int cache_state = ClearCachePinned(cache_entry->cache_state); 1056 int cache_state = ClearCachePinned(cache_entry.cache_state);
1055 UpdateCacheWithSubDirectoryType(resource_id, 1057 UpdateCacheWithSubDirectoryType(resource_id,
1056 md5, 1058 md5,
1057 sub_dir_type, 1059 sub_dir_type,
1058 cache_state); 1060 cache_state);
1059 } 1061 }
1060 } 1062 }
1061 1063
1062 void GDataCache::SetMountedState(const FilePath& file_path, 1064 void GDataCache::SetMountedState(const FilePath& file_path,
1063 bool to_mount, 1065 bool to_mount,
1064 base::PlatformFileError *error, 1066 base::PlatformFileError *error,
1065 FilePath* cache_file_path) { 1067 FilePath* cache_file_path) {
1066 AssertOnSequencedWorkerPool(); 1068 AssertOnSequencedWorkerPool();
1067 DCHECK(error); 1069 DCHECK(error);
1068 DCHECK(cache_file_path); 1070 DCHECK(cache_file_path);
1069 1071
1070 // Parse file path to obtain resource_id, md5 and extra_extension. 1072 // Parse file path to obtain resource_id, md5 and extra_extension.
1071 std::string resource_id; 1073 std::string resource_id;
1072 std::string md5; 1074 std::string md5;
1073 std::string extra_extension; 1075 std::string extra_extension;
1074 util::ParseCacheFilePath(file_path, &resource_id, &md5, &extra_extension); 1076 util::ParseCacheFilePath(file_path, &resource_id, &md5, &extra_extension);
1075 // The extra_extension shall be ".mounted" iff we're unmounting. 1077 // The extra_extension shall be ".mounted" iff we're unmounting.
1076 DCHECK(!to_mount == (extra_extension == util::kMountedArchiveFileExtension)); 1078 DCHECK(!to_mount == (extra_extension == util::kMountedArchiveFileExtension));
1077 1079
1078 // Get cache entry associated with the resource_id and md5 1080 // Get cache entry associated with the resource_id and md5
1079 scoped_ptr<CacheEntry> cache_entry = GetCacheEntry( 1081 CacheEntry cache_entry;
1080 resource_id, md5); 1082 if (!GetCacheEntry(resource_id, md5, &cache_entry)) {
1081 if (!cache_entry.get()) {
1082 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 1083 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND;
1083 return; 1084 return;
1084 } 1085 }
1085 if (to_mount == cache_entry->IsMounted()) { 1086 if (to_mount == cache_entry.IsMounted()) {
1086 *error = base::PLATFORM_FILE_ERROR_INVALID_OPERATION; 1087 *error = base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
1087 return; 1088 return;
1088 } 1089 }
1089 1090
1090 // Get the subdir type and path for the unmounted state. 1091 // Get the subdir type and path for the unmounted state.
1091 CacheSubDirectoryType unmounted_subdir = 1092 CacheSubDirectoryType unmounted_subdir =
1092 cache_entry->IsPinned() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP; 1093 cache_entry.IsPinned() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP;
1093 FilePath unmounted_path = GetCacheFilePath( 1094 FilePath unmounted_path = GetCacheFilePath(
1094 resource_id, md5, unmounted_subdir, CACHED_FILE_FROM_SERVER); 1095 resource_id, md5, unmounted_subdir, CACHED_FILE_FROM_SERVER);
1095 1096
1096 // Get the subdir type and path for the mounted state. 1097 // Get the subdir type and path for the mounted state.
1097 CacheSubDirectoryType mounted_subdir = CACHE_TYPE_PERSISTENT; 1098 CacheSubDirectoryType mounted_subdir = CACHE_TYPE_PERSISTENT;
1098 FilePath mounted_path = GetCacheFilePath( 1099 FilePath mounted_path = GetCacheFilePath(
1099 resource_id, md5, mounted_subdir, CACHED_FILE_MOUNTED); 1100 resource_id, md5, mounted_subdir, CACHED_FILE_MOUNTED);
1100 1101
1101 // Determine the source and destination paths for moving the cache blob. 1102 // Determine the source and destination paths for moving the cache blob.
1102 FilePath source_path; 1103 FilePath source_path;
1103 CacheSubDirectoryType dest_subdir; 1104 CacheSubDirectoryType dest_subdir;
1104 int cache_state = cache_entry->cache_state; 1105 int cache_state = cache_entry.cache_state;
1105 if (to_mount) { 1106 if (to_mount) {
1106 source_path = unmounted_path; 1107 source_path = unmounted_path;
1107 *cache_file_path = mounted_path; 1108 *cache_file_path = mounted_path;
1108 dest_subdir = mounted_subdir; 1109 dest_subdir = mounted_subdir;
1109 cache_state = SetCacheMounted(cache_state); 1110 cache_state = SetCacheMounted(cache_state);
1110 } else { 1111 } else {
1111 source_path = mounted_path; 1112 source_path = mounted_path;
1112 *cache_file_path = unmounted_path; 1113 *cache_file_path = unmounted_path;
1113 dest_subdir = unmounted_subdir; 1114 dest_subdir = unmounted_subdir;
1114 cache_state = ClearCacheMounted(cache_state); 1115 cache_state = ClearCacheMounted(cache_state);
(...skipping 17 matching lines...) Expand all
1132 base::PlatformFileError* error, 1133 base::PlatformFileError* error,
1133 FilePath* cache_file_path) { 1134 FilePath* cache_file_path) {
1134 AssertOnSequencedWorkerPool(); 1135 AssertOnSequencedWorkerPool();
1135 DCHECK(error); 1136 DCHECK(error);
1136 DCHECK(cache_file_path); 1137 DCHECK(cache_file_path);
1137 1138
1138 // If file has already been marked dirty in previous instance of chrome, we 1139 // If file has already been marked dirty in previous instance of chrome, we
1139 // would have lost the md5 info during cache initialization, because the file 1140 // would have lost the md5 info during cache initialization, because the file
1140 // would have been renamed to .local extension. 1141 // would have been renamed to .local extension.
1141 // So, search for entry in cache without comparing md5. 1142 // So, search for entry in cache without comparing md5.
1142 scoped_ptr<CacheEntry> cache_entry = 1143 CacheEntry cache_entry;
achuithb 2012/07/11 19:09:59 same.
hashimoto 2012/07/12 05:15:19 Done.
1143 GetCacheEntry(resource_id, std::string());
1144 1144
1145 // Marking a file dirty means its entry and actual file blob must exist in 1145 // Marking a file dirty means its entry and actual file blob must exist in
1146 // cache. 1146 // cache.
1147 if (!cache_entry.get() || !cache_entry->IsPresent()) { 1147 if (!GetCacheEntry(resource_id, std::string(), &cache_entry) ||
1148 !cache_entry.IsPresent()) {
1148 LOG(WARNING) << "Can't mark dirty a file that wasn't cached: res_id=" 1149 LOG(WARNING) << "Can't mark dirty a file that wasn't cached: res_id="
1149 << resource_id 1150 << resource_id
1150 << ", md5=" << md5; 1151 << ", md5=" << md5;
1151 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 1152 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND;
1152 return; 1153 return;
1153 } 1154 }
1154 1155
1155 // If a file is already dirty (i.e. MarkDirtyInCache was called before), 1156 // If a file is already dirty (i.e. MarkDirtyInCache was called before),
1156 // delete outgoing symlink if it exists. 1157 // delete outgoing symlink if it exists.
1157 // TODO(benchan): We should only delete outgoing symlink if file is currently 1158 // TODO(benchan): We should only delete outgoing symlink if file is currently
1158 // not being uploaded. However, for now, cache doesn't know if uploading of a 1159 // not being uploaded. However, for now, cache doesn't know if uploading of a
1159 // file is in progress. Per zel, the upload process should be canceled before 1160 // file is in progress. Per zel, the upload process should be canceled before
1160 // MarkDirtyInCache is called again. 1161 // MarkDirtyInCache is called again.
1161 if (cache_entry->IsDirty()) { 1162 if (cache_entry.IsDirty()) {
1162 // The file must be in persistent dir. 1163 // The file must be in persistent dir.
1163 DCHECK(cache_entry->IsPersistent()); 1164 DCHECK(cache_entry.IsPersistent());
1164 1165
1165 // Determine symlink path in outgoing dir, so as to remove it. 1166 // Determine symlink path in outgoing dir, so as to remove it.
1166 FilePath symlink_path = GetCacheFilePath( 1167 FilePath symlink_path = GetCacheFilePath(
1167 resource_id, 1168 resource_id,
1168 std::string(), 1169 std::string(),
1169 CACHE_TYPE_OUTGOING, 1170 CACHE_TYPE_OUTGOING,
1170 CACHED_FILE_FROM_SERVER); 1171 CACHED_FILE_FROM_SERVER);
1171 1172
1172 // We're not moving files here, so simply use empty FilePath for both 1173 // We're not moving files here, so simply use empty FilePath for both
1173 // |source_path| and |dest_path| because ModifyCacheState only move files 1174 // |source_path| and |dest_path| because ModifyCacheState only move files
(...skipping 15 matching lines...) Expand all
1189 } 1190 }
1190 return; 1191 return;
1191 } 1192 }
1192 1193
1193 // Move file to persistent dir with new .local extension. 1194 // Move file to persistent dir with new .local extension.
1194 1195
1195 // Get the current path of the file in cache. 1196 // Get the current path of the file in cache.
1196 FilePath source_path = GetCacheFilePath( 1197 FilePath source_path = GetCacheFilePath(
1197 resource_id, 1198 resource_id,
1198 md5, 1199 md5,
1199 cache_entry->GetSubDirectoryType(), 1200 cache_entry.GetSubDirectoryType(),
1200 CACHED_FILE_FROM_SERVER); 1201 CACHED_FILE_FROM_SERVER);
1201 1202
1202 // Determine destination path. 1203 // Determine destination path.
1203 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_PERSISTENT; 1204 CacheSubDirectoryType sub_dir_type = CACHE_TYPE_PERSISTENT;
1204 *cache_file_path = GetCacheFilePath(resource_id, 1205 *cache_file_path = GetCacheFilePath(resource_id,
1205 md5, 1206 md5,
1206 sub_dir_type, 1207 sub_dir_type,
1207 CACHED_FILE_LOCALLY_MODIFIED); 1208 CACHED_FILE_LOCALLY_MODIFIED);
1208 1209
1209 // If file is pinned, update symlink in pinned dir. 1210 // If file is pinned, update symlink in pinned dir.
1210 FilePath symlink_path; 1211 FilePath symlink_path;
1211 if (cache_entry->IsPinned()) { 1212 if (cache_entry.IsPinned()) {
1212 symlink_path = GetCacheFilePath(resource_id, 1213 symlink_path = GetCacheFilePath(resource_id,
1213 std::string(), 1214 std::string(),
1214 CACHE_TYPE_PINNED, 1215 CACHE_TYPE_PINNED,
1215 CACHED_FILE_FROM_SERVER); 1216 CACHED_FILE_FROM_SERVER);
1216 } 1217 }
1217 1218
1218 *error = ModifyCacheState( 1219 *error = ModifyCacheState(
1219 source_path, 1220 source_path,
1220 *cache_file_path, 1221 *cache_file_path,
1221 file_operation_type, 1222 file_operation_type,
1222 symlink_path, 1223 symlink_path,
1223 !symlink_path.empty() /* create symlink */); 1224 !symlink_path.empty() /* create symlink */);
1224 1225
1225 if (*error == base::PLATFORM_FILE_OK) { 1226 if (*error == base::PLATFORM_FILE_OK) {
1226 // Now that file operations have completed, update cache map. 1227 // Now that file operations have completed, update cache map.
1227 int cache_state = SetCacheDirty(cache_entry->cache_state); 1228 int cache_state = SetCacheDirty(cache_entry.cache_state);
1228 UpdateCacheWithSubDirectoryType(resource_id, 1229 UpdateCacheWithSubDirectoryType(resource_id,
1229 md5, 1230 md5,
1230 sub_dir_type, 1231 sub_dir_type,
1231 cache_state); 1232 cache_state);
1232 } 1233 }
1233 } 1234 }
1234 1235
1235 void GDataCache::CommitDirty(const std::string& resource_id, 1236 void GDataCache::CommitDirty(const std::string& resource_id,
1236 const std::string& md5, 1237 const std::string& md5,
1237 FileOperationType file_operation_type, 1238 FileOperationType file_operation_type,
1238 base::PlatformFileError* error) { 1239 base::PlatformFileError* error) {
1239 AssertOnSequencedWorkerPool(); 1240 AssertOnSequencedWorkerPool();
1240 DCHECK(error); 1241 DCHECK(error);
1241 1242
1242 // If file has already been marked dirty in previous instance of chrome, we 1243 // If file has already been marked dirty in previous instance of chrome, we
1243 // would have lost the md5 info during cache initialization, because the file 1244 // would have lost the md5 info during cache initialization, because the file
1244 // would have been renamed to .local extension. 1245 // would have been renamed to .local extension.
1245 // So, search for entry in cache without comparing md5. 1246 // So, search for entry in cache without comparing md5.
1246 scoped_ptr<CacheEntry> cache_entry = 1247 CacheEntry cache_entry;
achuithb 2012/07/11 19:09:59 same
hashimoto 2012/07/12 05:15:19 Done.
1247 GetCacheEntry(resource_id, std::string());
1248 1248
1249 // Committing a file dirty means its entry and actual file blob must exist in 1249 // Committing a file dirty means its entry and actual file blob must exist in
1250 // cache. 1250 // cache.
1251 if (!cache_entry.get() || !cache_entry->IsPresent()) { 1251 if (!GetCacheEntry(resource_id, std::string(), &cache_entry) ||
1252 !cache_entry.IsPresent()) {
1252 LOG(WARNING) << "Can't commit dirty a file that wasn't cached: res_id=" 1253 LOG(WARNING) << "Can't commit dirty a file that wasn't cached: res_id="
1253 << resource_id 1254 << resource_id
1254 << ", md5=" << md5; 1255 << ", md5=" << md5;
1255 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 1256 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND;
1256 return; 1257 return;
1257 } 1258 }
1258 1259
1259 // If a file is not dirty (it should have been marked dirty via 1260 // If a file is not dirty (it should have been marked dirty via
1260 // MarkDirtyInCache), committing it dirty is an invalid operation. 1261 // MarkDirtyInCache), committing it dirty is an invalid operation.
1261 if (!cache_entry->IsDirty()) { 1262 if (!cache_entry.IsDirty()) {
1262 LOG(WARNING) << "Can't commit a non-dirty file: res_id=" 1263 LOG(WARNING) << "Can't commit a non-dirty file: res_id="
1263 << resource_id 1264 << resource_id
1264 << ", md5=" << md5; 1265 << ", md5=" << md5;
1265 *error = base::PLATFORM_FILE_ERROR_INVALID_OPERATION; 1266 *error = base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
1266 return; 1267 return;
1267 } 1268 }
1268 1269
1269 // Dirty files must be in persistent dir. 1270 // Dirty files must be in persistent dir.
1270 DCHECK(cache_entry->IsPersistent()); 1271 DCHECK(cache_entry.IsPersistent());
1271 1272
1272 // Create symlink in outgoing dir. 1273 // Create symlink in outgoing dir.
1273 FilePath symlink_path = GetCacheFilePath(resource_id, 1274 FilePath symlink_path = GetCacheFilePath(resource_id,
1274 std::string(), 1275 std::string(),
1275 CACHE_TYPE_OUTGOING, 1276 CACHE_TYPE_OUTGOING,
1276 CACHED_FILE_FROM_SERVER); 1277 CACHED_FILE_FROM_SERVER);
1277 1278
1278 // Get target path of symlink i.e. current path of the file in cache. 1279 // Get target path of symlink i.e. current path of the file in cache.
1279 FilePath target_path = GetCacheFilePath(resource_id, 1280 FilePath target_path = GetCacheFilePath(resource_id,
1280 md5, 1281 md5,
1281 cache_entry->GetSubDirectoryType(), 1282 cache_entry.GetSubDirectoryType(),
1282 CACHED_FILE_LOCALLY_MODIFIED); 1283 CACHED_FILE_LOCALLY_MODIFIED);
1283 1284
1284 // Since there's no need to move files, use |target_path| for both 1285 // Since there's no need to move files, use |target_path| for both
1285 // |source_path| and |dest_path|, because ModifyCacheState only moves files 1286 // |source_path| and |dest_path|, because ModifyCacheState only moves files
1286 // if source and destination are different. 1287 // if source and destination are different.
1287 *error = ModifyCacheState(target_path, // source 1288 *error = ModifyCacheState(target_path, // source
1288 target_path, // destination 1289 target_path, // destination
1289 file_operation_type, 1290 file_operation_type,
1290 symlink_path, 1291 symlink_path,
1291 true /* create symlink */); 1292 true /* create symlink */);
1292 } 1293 }
1293 1294
1294 void GDataCache::ClearDirty(const std::string& resource_id, 1295 void GDataCache::ClearDirty(const std::string& resource_id,
1295 const std::string& md5, 1296 const std::string& md5,
1296 FileOperationType file_operation_type, 1297 FileOperationType file_operation_type,
1297 base::PlatformFileError* error) { 1298 base::PlatformFileError* error) {
1298 AssertOnSequencedWorkerPool(); 1299 AssertOnSequencedWorkerPool();
1299 DCHECK(error); 1300 DCHECK(error);
1300 1301
1301 // |md5| is the new .<md5> extension to rename the file to. 1302 // |md5| is the new .<md5> extension to rename the file to.
1302 // So, search for entry in cache without comparing md5. 1303 // So, search for entry in cache without comparing md5.
1303 scoped_ptr<CacheEntry> cache_entry = 1304 CacheEntry cache_entry;
1304 GetCacheEntry(resource_id, std::string());
1305 1305
1306 // Clearing a dirty file means its entry and actual file blob must exist in 1306 // Clearing a dirty file means its entry and actual file blob must exist in
1307 // cache. 1307 // cache.
1308 if (!cache_entry.get() || !cache_entry->IsPresent()) { 1308 if (!GetCacheEntry(resource_id, std::string(), &cache_entry) ||
1309 !cache_entry.IsPresent()) {
1309 LOG(WARNING) << "Can't clear dirty state of a file that wasn't cached: " 1310 LOG(WARNING) << "Can't clear dirty state of a file that wasn't cached: "
1310 << "res_id=" << resource_id 1311 << "res_id=" << resource_id
1311 << ", md5=" << md5; 1312 << ", md5=" << md5;
1312 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND; 1313 *error = base::PLATFORM_FILE_ERROR_NOT_FOUND;
1313 return; 1314 return;
1314 } 1315 }
1315 1316
1316 // If a file is not dirty (it should have been marked dirty via 1317 // If a file is not dirty (it should have been marked dirty via
1317 // MarkDirtyInCache), clearing its dirty state is an invalid operation. 1318 // MarkDirtyInCache), clearing its dirty state is an invalid operation.
1318 if (!cache_entry->IsDirty()) { 1319 if (!cache_entry.IsDirty()) {
1319 LOG(WARNING) << "Can't clear dirty state of a non-dirty file: res_id=" 1320 LOG(WARNING) << "Can't clear dirty state of a non-dirty file: res_id="
1320 << resource_id 1321 << resource_id
1321 << ", md5=" << md5; 1322 << ", md5=" << md5;
1322 *error = base::PLATFORM_FILE_ERROR_INVALID_OPERATION; 1323 *error = base::PLATFORM_FILE_ERROR_INVALID_OPERATION;
1323 return; 1324 return;
1324 } 1325 }
1325 1326
1326 // File must be dirty and hence in persistent dir. 1327 // File must be dirty and hence in persistent dir.
1327 DCHECK(cache_entry->IsPersistent()); 1328 DCHECK(cache_entry.IsPersistent());
1328 1329
1329 // Get the current path of the file in cache. 1330 // Get the current path of the file in cache.
1330 FilePath source_path = GetCacheFilePath(resource_id, 1331 FilePath source_path = GetCacheFilePath(resource_id,
1331 md5, 1332 md5,
1332 cache_entry->GetSubDirectoryType(), 1333 cache_entry.GetSubDirectoryType(),
1333 CACHED_FILE_LOCALLY_MODIFIED); 1334 CACHED_FILE_LOCALLY_MODIFIED);
1334 1335
1335 // Determine destination path. 1336 // Determine destination path.
1336 // If file is pinned, move it to persistent dir with .md5 extension; 1337 // If file is pinned, move it to persistent dir with .md5 extension;
1337 // otherwise, move it to tmp dir with .md5 extension. 1338 // otherwise, move it to tmp dir with .md5 extension.
1338 CacheSubDirectoryType sub_dir_type = 1339 CacheSubDirectoryType sub_dir_type =
1339 cache_entry->IsPinned() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP; 1340 cache_entry.IsPinned() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP;
1340 FilePath dest_path = GetCacheFilePath(resource_id, 1341 FilePath dest_path = GetCacheFilePath(resource_id,
1341 md5, 1342 md5,
1342 sub_dir_type, 1343 sub_dir_type,
1343 CACHED_FILE_FROM_SERVER); 1344 CACHED_FILE_FROM_SERVER);
1344 1345
1345 // Delete symlink in outgoing dir. 1346 // Delete symlink in outgoing dir.
1346 FilePath symlink_path = GetCacheFilePath(resource_id, 1347 FilePath symlink_path = GetCacheFilePath(resource_id,
1347 std::string(), 1348 std::string(),
1348 CACHE_TYPE_OUTGOING, 1349 CACHE_TYPE_OUTGOING,
1349 CACHED_FILE_FROM_SERVER); 1350 CACHED_FILE_FROM_SERVER);
1350 1351
1351 *error = ModifyCacheState(source_path, 1352 *error = ModifyCacheState(source_path,
1352 dest_path, 1353 dest_path,
1353 file_operation_type, 1354 file_operation_type,
1354 symlink_path, 1355 symlink_path,
1355 false /* don't create symlink */); 1356 false /* don't create symlink */);
1356 1357
1357 // If file is pinned, update symlink in pinned dir. 1358 // If file is pinned, update symlink in pinned dir.
1358 if (*error == base::PLATFORM_FILE_OK && cache_entry->IsPinned()) { 1359 if (*error == base::PLATFORM_FILE_OK && cache_entry.IsPinned()) {
1359 symlink_path = GetCacheFilePath(resource_id, 1360 symlink_path = GetCacheFilePath(resource_id,
1360 std::string(), 1361 std::string(),
1361 CACHE_TYPE_PINNED, 1362 CACHE_TYPE_PINNED,
1362 CACHED_FILE_FROM_SERVER); 1363 CACHED_FILE_FROM_SERVER);
1363 1364
1364 // Since there's no moving of files here, use |dest_path| for both 1365 // Since there's no moving of files here, use |dest_path| for both
1365 // |source_path| and |dest_path|, because ModifyCacheState only moves files 1366 // |source_path| and |dest_path|, because ModifyCacheState only moves files
1366 // if source and destination are different. 1367 // if source and destination are different.
1367 *error = ModifyCacheState(dest_path, // source path 1368 *error = ModifyCacheState(dest_path, // source path
1368 dest_path, // destination path 1369 dest_path, // destination path
1369 file_operation_type, 1370 file_operation_type,
1370 symlink_path, 1371 symlink_path,
1371 true /* create symlink */); 1372 true /* create symlink */);
1372 } 1373 }
1373 1374
1374 if (*error == base::PLATFORM_FILE_OK) { 1375 if (*error == base::PLATFORM_FILE_OK) {
1375 // Now that file operations have completed, update cache map. 1376 // Now that file operations have completed, update cache map.
1376 int cache_state = ClearCacheDirty(cache_entry->cache_state); 1377 int cache_state = ClearCacheDirty(cache_entry.cache_state);
1377 UpdateCacheWithSubDirectoryType(resource_id, 1378 UpdateCacheWithSubDirectoryType(resource_id,
1378 md5, 1379 md5,
1379 sub_dir_type, 1380 sub_dir_type,
1380 cache_state); 1381 cache_state);
1381 } 1382 }
1382 } 1383 }
1383 1384
1384 void GDataCache::Remove(const std::string& resource_id, 1385 void GDataCache::Remove(const std::string& resource_id,
1385 base::PlatformFileError* error) { 1386 base::PlatformFileError* error) {
1386 AssertOnSequencedWorkerPool(); 1387 AssertOnSequencedWorkerPool();
1387 DCHECK(error); 1388 DCHECK(error);
1388 1389
1389 // MD5 is not passed into RemoveFromCache and hence 1390 // MD5 is not passed into RemoveFromCache and hence
1390 // RemoveFromCacheOnBlockingPool, because we would delete all cache files 1391 // RemoveFromCacheOnBlockingPool, because we would delete all cache files
1391 // corresponding to <resource_id> regardless of the md5. 1392 // corresponding to <resource_id> regardless of the md5.
1392 // So, search for entry in cache without taking md5 into account. 1393 // So, search for entry in cache without taking md5 into account.
1393 scoped_ptr<CacheEntry> cache_entry = 1394 CacheEntry cache_entry;
1394 GetCacheEntry(resource_id, std::string());
1395 1395
1396 // If entry doesn't exist or is dirty or mounted in cache, nothing to do. 1396 // If entry doesn't exist or is dirty or mounted in cache, nothing to do.
1397 if (!cache_entry.get() || 1397 const bool entry_found =
1398 cache_entry->IsDirty() || 1398 GetCacheEntry(resource_id, std::string(), &cache_entry);
1399 cache_entry->IsMounted()) { 1399 if (!entry_found || cache_entry.IsDirty() || cache_entry.IsMounted()) {
1400 DVLOG(1) << "Entry is " 1400 DVLOG(1) << "Entry is "
1401 << (cache_entry.get() ? 1401 << (entry_found ?
1402 (cache_entry->IsDirty() ? "dirty" : "mounted") : 1402 (cache_entry.IsDirty() ? "dirty" : "mounted") :
1403 "non-existent") 1403 "non-existent")
1404 << " in cache, not removing"; 1404 << " in cache, not removing";
1405 *error = base::PLATFORM_FILE_OK; 1405 *error = base::PLATFORM_FILE_OK;
1406 return; 1406 return;
1407 } 1407 }
1408 1408
1409 // Determine paths to delete all cache versions of |resource_id| in 1409 // Determine paths to delete all cache versions of |resource_id| in
1410 // persistent, tmp and pinned directories. 1410 // persistent, tmp and pinned directories.
1411 std::vector<FilePath> paths_to_delete; 1411 std::vector<FilePath> paths_to_delete;
1412 1412
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1499 } 1499 }
1500 1500
1501 void GDataCache::GetCacheEntryHelper(const std::string& resource_id, 1501 void GDataCache::GetCacheEntryHelper(const std::string& resource_id,
1502 const std::string& md5, 1502 const std::string& md5,
1503 bool* success, 1503 bool* success,
1504 GDataCache::CacheEntry* cache_entry) { 1504 GDataCache::CacheEntry* cache_entry) {
1505 AssertOnSequencedWorkerPool(); 1505 AssertOnSequencedWorkerPool();
1506 DCHECK(success); 1506 DCHECK(success);
1507 DCHECK(cache_entry); 1507 DCHECK(cache_entry);
1508 1508
1509 scoped_ptr<GDataCache::CacheEntry> value(GetCacheEntry(resource_id, md5)); 1509 *success = GetCacheEntry(resource_id, md5, cache_entry);
1510 *success = value.get();
1511 if (*success)
1512 *cache_entry = *value;
1513 } 1510 }
1514 1511
1515 void GDataCache::UpdateCacheWithSubDirectoryType( 1512 void GDataCache::UpdateCacheWithSubDirectoryType(
1516 const std::string& resource_id, 1513 const std::string& resource_id,
1517 const std::string& md5, 1514 const std::string& md5,
1518 CacheSubDirectoryType sub_dir_type, 1515 CacheSubDirectoryType sub_dir_type,
1519 int cache_state) { 1516 int cache_state) {
1520 DCHECK(sub_dir_type == CACHE_TYPE_PERSISTENT || 1517 DCHECK(sub_dir_type == CACHE_TYPE_PERSISTENT ||
1521 sub_dir_type == CACHE_TYPE_TMP); 1518 sub_dir_type == CACHE_TYPE_TMP);
1522 1519
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 } 1568 }
1572 return success; 1569 return success;
1573 } 1570 }
1574 1571
1575 void SetFreeDiskSpaceGetterForTesting(FreeDiskSpaceGetterInterface* getter) { 1572 void SetFreeDiskSpaceGetterForTesting(FreeDiskSpaceGetterInterface* getter) {
1576 delete global_free_disk_getter_for_testing; // Safe to delete NULL; 1573 delete global_free_disk_getter_for_testing; // Safe to delete NULL;
1577 global_free_disk_getter_for_testing = getter; 1574 global_free_disk_getter_for_testing = getter;
1578 } 1575 }
1579 1576
1580 } // namespace gdata 1577 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698