OLD | NEW |
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_file_system.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/eintr_wrapper.h" | 10 #include "base/eintr_wrapper.h" |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 void ReadOnlyFindFileDelegate::OnDone(base::PlatformFileError error, | 513 void ReadOnlyFindFileDelegate::OnDone(base::PlatformFileError error, |
514 const FilePath& directory_path, | 514 const FilePath& directory_path, |
515 GDataFileBase* file) { | 515 GDataFileBase* file) { |
516 DCHECK(!file_); | 516 DCHECK(!file_); |
517 if (error == base::PLATFORM_FILE_OK) | 517 if (error == base::PLATFORM_FILE_OK) |
518 file_ = file; | 518 file_ = file; |
519 else | 519 else |
520 file_ = NULL; | 520 file_ = NULL; |
521 } | 521 } |
522 | 522 |
| 523 // GDataFileProperties struct implementation. |
| 524 |
| 525 GDataFileProperties::GDataFileProperties() : is_hosted_document(false) { |
| 526 } |
| 527 |
| 528 GDataFileProperties::~GDataFileProperties() { |
| 529 } |
| 530 |
523 // GDataFileSystem::CreateDirectoryParams struct implementation. | 531 // GDataFileSystem::CreateDirectoryParams struct implementation. |
524 | 532 |
525 GDataFileSystem::CreateDirectoryParams::CreateDirectoryParams( | 533 GDataFileSystem::CreateDirectoryParams::CreateDirectoryParams( |
526 const FilePath& created_directory_path, | 534 const FilePath& created_directory_path, |
527 const FilePath& target_directory_path, | 535 const FilePath& target_directory_path, |
528 bool is_exclusive, | 536 bool is_exclusive, |
529 bool is_recursive, | 537 bool is_recursive, |
530 const FileOperationCallback& callback) | 538 const FileOperationCallback& callback) |
531 : created_directory_path(created_directory_path), | 539 : created_directory_path(created_directory_path), |
532 target_directory_path(target_directory_path), | 540 target_directory_path(target_directory_path), |
533 is_exclusive(is_exclusive), | 541 is_exclusive(is_exclusive), |
534 is_recursive(is_recursive), | 542 is_recursive(is_recursive), |
535 callback(callback) { | 543 callback(callback) { |
536 } | 544 } |
537 | 545 |
538 GDataFileSystem::CreateDirectoryParams::~CreateDirectoryParams() { | 546 GDataFileSystem::CreateDirectoryParams::~CreateDirectoryParams() { |
539 } | 547 } |
540 | 548 |
| 549 //=================== GetFileFromCacheParams implementation =================== |
| 550 |
| 551 GDataFileSystem::GetFileFromCacheParams::GetFileFromCacheParams( |
| 552 const FilePath& virtual_file_path, |
| 553 const FilePath& local_tmp_path, |
| 554 const GURL& content_url, |
| 555 const std::string& resource_id, |
| 556 const std::string& md5, |
| 557 scoped_refptr<base::MessageLoopProxy> proxy, |
| 558 const GetFileCallback& callback) |
| 559 : virtual_file_path(virtual_file_path), |
| 560 local_tmp_path(local_tmp_path), |
| 561 content_url(content_url), |
| 562 resource_id(resource_id), |
| 563 md5(md5), |
| 564 proxy(proxy), |
| 565 callback(callback) { |
| 566 } |
| 567 |
| 568 GDataFileSystem::GetFileFromCacheParams::~GetFileFromCacheParams() { |
| 569 } |
| 570 |
541 // GDataFileSystem class implementatsion. | 571 // GDataFileSystem class implementatsion. |
542 | 572 |
543 GDataFileSystem::GDataFileSystem(Profile* profile, | 573 GDataFileSystem::GDataFileSystem(Profile* profile, |
544 DocumentsServiceInterface* documents_service, | 574 DocumentsServiceInterface* documents_service, |
545 GDataSyncClientInterface* sync_client) | 575 GDataSyncClientInterface* sync_client) |
546 : profile_(profile), | 576 : profile_(profile), |
547 documents_service_(documents_service), | 577 documents_service_(documents_service), |
548 gdata_uploader_(new GDataUploader(ALLOW_THIS_IN_INITIALIZER_LIST(this))), | 578 gdata_uploader_(new GDataUploader(ALLOW_THIS_IN_INITIALIZER_LIST(this))), |
549 gdata_download_observer_(new GDataDownloadObserver()), | 579 gdata_download_observer_(new GDataDownloadObserver()), |
550 on_cache_initialized_(new base::WaitableEvent( | 580 on_cache_initialized_(new base::WaitableEvent( |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1024 if (error != base::PLATFORM_FILE_OK) | 1054 if (error != base::PLATFORM_FILE_OK) |
1025 temp_file.clear(); | 1055 temp_file.clear(); |
1026 | 1056 |
1027 relay_proxy->PostTask(FROM_HERE, | 1057 relay_proxy->PostTask(FROM_HERE, |
1028 base::Bind(callback, error, temp_file, HOSTED_DOCUMENT)); | 1058 base::Bind(callback, error, temp_file, HOSTED_DOCUMENT)); |
1029 } | 1059 } |
1030 } | 1060 } |
1031 | 1061 |
1032 void GDataFileSystem::GetFile(const FilePath& file_path, | 1062 void GDataFileSystem::GetFile(const FilePath& file_path, |
1033 const GetFileCallback& callback) { | 1063 const GetFileCallback& callback) { |
1034 base::AutoLock lock(lock_); | 1064 GDataFileProperties file_properties; |
1035 GDataFileBase* file_info = GetGDataFileInfoFromPath(file_path); | 1065 if (!GetFileInfoFromPath(file_path, &file_properties)) { |
1036 if (!file_info) { | |
1037 if (!callback.is_null()) { | 1066 if (!callback.is_null()) { |
1038 MessageLoop::current()->PostTask( | 1067 MessageLoop::current()->PostTask( |
1039 FROM_HERE, | 1068 FROM_HERE, |
1040 base::Bind(callback, | 1069 base::Bind(callback, |
1041 base::PLATFORM_FILE_ERROR_NOT_FOUND, | 1070 base::PLATFORM_FILE_ERROR_NOT_FOUND, |
1042 FilePath(), | 1071 FilePath(), |
1043 REGULAR_FILE)); | 1072 REGULAR_FILE)); |
1044 } | 1073 } |
1045 return; | 1074 return; |
1046 } | 1075 } |
1047 | 1076 |
1048 // For a hosted document, we create a special JSON file to represent the | 1077 // For a hosted document, we create a special JSON file to represent the |
1049 // document instead of fetching the document content in one of the exported | 1078 // document instead of fetching the document content in one of the exported |
1050 // formats. The JSON file contains the edit URL and resource ID of the | 1079 // formats. The JSON file contains the edit URL and resource ID of the |
1051 // document. | 1080 // document. |
1052 GDataFile* gdata_file = file_info->AsGDataFile(); | 1081 if (file_properties.is_hosted_document) { |
1053 if (gdata_file && gdata_file->is_hosted_document()) { | |
1054 BrowserThread::PostBlockingPoolTask(FROM_HERE, | 1082 BrowserThread::PostBlockingPoolTask(FROM_HERE, |
1055 base::Bind(&GDataFileSystem::CreateDocumentJsonFileOnIOThreadPool, | 1083 base::Bind(&GDataFileSystem::CreateDocumentJsonFileOnIOThreadPool, |
1056 gdata_file->edit_url(), | 1084 file_properties.edit_url, |
1057 gdata_file->resource_id(), | 1085 file_properties.resource_id, |
1058 callback, | 1086 callback, |
1059 base::MessageLoopProxy::current())); | 1087 base::MessageLoopProxy::current())); |
1060 return; | 1088 return; |
1061 } | 1089 } |
1062 | 1090 |
1063 // TODO(satorux): We should get a file from the cache if it's present, but | 1091 // Returns absolute path of the file if it were cached or to be cached. |
1064 // the caching layer is not implemented yet. For now, always download from | 1092 FilePath local_tmp_path = GetCacheFilePath(file_properties.resource_id, |
1065 // the cloud. | 1093 file_properties.file_md5, |
| 1094 CACHE_TYPE_TMP, |
| 1095 CACHED_FILE_FROM_SERVER); |
| 1096 GetFromCache(file_properties.resource_id, file_properties.file_md5, |
| 1097 base::Bind( |
| 1098 &GDataFileSystem::OnGetFileFromCache, |
| 1099 weak_ptr_factory_.GetWeakPtr(), |
| 1100 GetFileFromCacheParams(file_path, |
| 1101 local_tmp_path, |
| 1102 file_properties.content_url, |
| 1103 file_properties.resource_id, |
| 1104 file_properties.file_md5, |
| 1105 base::MessageLoopProxy::current(), |
| 1106 callback))); |
| 1107 } |
| 1108 |
| 1109 void GDataFileSystem::OnGetFileFromCache(const GetFileFromCacheParams& params, |
| 1110 base::PlatformFileError error, |
| 1111 const std::string& resource_id, |
| 1112 const std::string& md5, |
| 1113 const FilePath& gdata_file_path, |
| 1114 const FilePath& cache_file_path) { |
| 1115 // Have we found the file in cache? If so, return it back to the caller. |
| 1116 if (error == base::PLATFORM_FILE_OK) { |
| 1117 if (!params.callback.is_null()) { |
| 1118 params.proxy->PostTask(FROM_HERE, |
| 1119 base::Bind(params.callback, |
| 1120 error, |
| 1121 cache_file_path, |
| 1122 REGULAR_FILE)); |
| 1123 } |
| 1124 |
| 1125 return; |
| 1126 } |
| 1127 |
| 1128 // If cache file is not found, try to download it from the server instead. |
1066 documents_service_->DownloadFile( | 1129 documents_service_->DownloadFile( |
1067 file_info->GetFilePath(), | 1130 params.virtual_file_path, |
1068 file_info->content_url(), | 1131 params.local_tmp_path, |
| 1132 params.content_url, |
1069 base::Bind(&GDataFileSystem::OnFileDownloaded, | 1133 base::Bind(&GDataFileSystem::OnFileDownloaded, |
1070 weak_ptr_factory_.GetWeakPtr(), | 1134 weak_ptr_factory_.GetWeakPtr(), |
1071 callback)); | 1135 params)); |
1072 } | 1136 } |
1073 | 1137 |
1074 void GDataFileSystem::InitiateUpload( | 1138 void GDataFileSystem::InitiateUpload( |
1075 const std::string& file_name, | 1139 const std::string& file_name, |
1076 const std::string& content_type, | 1140 const std::string& content_type, |
1077 int64 content_length, | 1141 int64 content_length, |
1078 const FilePath& destination_directory, | 1142 const FilePath& destination_directory, |
1079 const FilePath& virtual_path, | 1143 const FilePath& virtual_path, |
1080 const InitiateUploadCallback& callback) { | 1144 const InitiateUploadCallback& callback) { |
1081 GURL destination_directory_url = | 1145 GURL destination_directory_url = |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 delegate->OnDone(base::PLATFORM_FILE_ERROR_NOT_FOUND, FilePath(), NULL); | 1252 delegate->OnDone(base::PLATFORM_FILE_ERROR_NOT_FOUND, FilePath(), NULL); |
1189 } | 1253 } |
1190 | 1254 |
1191 return; | 1255 return; |
1192 } | 1256 } |
1193 } | 1257 } |
1194 delegate->OnDone(base::PLATFORM_FILE_ERROR_NOT_FOUND, FilePath(), NULL); | 1258 delegate->OnDone(base::PLATFORM_FILE_ERROR_NOT_FOUND, FilePath(), NULL); |
1195 } | 1259 } |
1196 | 1260 |
1197 bool GDataFileSystem::GetFileInfoFromPath( | 1261 bool GDataFileSystem::GetFileInfoFromPath( |
1198 const FilePath& file_path, base::PlatformFileInfo* file_info) { | 1262 const FilePath& file_path, GDataFileProperties* properties) { |
| 1263 DCHECK(properties); |
1199 base::AutoLock lock(lock_); | 1264 base::AutoLock lock(lock_); |
1200 GDataFileBase* file = GetGDataFileInfoFromPath(file_path); | 1265 GDataFileBase* file = GetGDataFileInfoFromPath(file_path); |
1201 if (!file) | 1266 if (!file) |
1202 return false; | 1267 return false; |
1203 | 1268 |
1204 *file_info = file->file_info(); | 1269 properties->file_info = file->file_info(); |
| 1270 properties->resource_id = file->resource_id(); |
| 1271 |
| 1272 GDataFile* regular_file = file->AsGDataFile(); |
| 1273 if (regular_file) { |
| 1274 properties->file_md5 = regular_file->file_md5(); |
| 1275 properties->content_url = regular_file->content_url(); |
| 1276 properties->edit_url = regular_file->edit_url(); |
| 1277 properties->is_hosted_document = regular_file->is_hosted_document(); |
| 1278 } |
1205 return true; | 1279 return true; |
1206 } | 1280 } |
1207 | 1281 |
1208 FilePath GDataFileSystem::GetGDataCacheTmpDirectory() { | 1282 FilePath GDataFileSystem::GetGDataCacheTmpDirectory() { |
1209 return cache_paths_[CACHE_TYPE_TMP]; | 1283 return cache_paths_[CACHE_TYPE_TMP]; |
1210 } | 1284 } |
1211 | 1285 |
1212 GDataFileBase* GDataFileSystem::GetGDataFileInfoFromPath( | 1286 GDataFileBase* GDataFileSystem::GetGDataFileInfoFromPath( |
1213 const FilePath& file_path) { | 1287 const FilePath& file_path) { |
1214 lock_.AssertAcquired(); | 1288 lock_.AssertAcquired(); |
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1697 | 1771 |
1698 if (error == base::PLATFORM_FILE_OK) | 1772 if (error == base::PLATFORM_FILE_OK) |
1699 error = RemoveFileFromFileSystem(file_path); | 1773 error = RemoveFileFromFileSystem(file_path); |
1700 | 1774 |
1701 if (!callback.is_null()) { | 1775 if (!callback.is_null()) { |
1702 callback.Run(error); | 1776 callback.Run(error); |
1703 } | 1777 } |
1704 } | 1778 } |
1705 | 1779 |
1706 void GDataFileSystem::OnFileDownloaded( | 1780 void GDataFileSystem::OnFileDownloaded( |
1707 const GetFileCallback& callback, | 1781 const GetFileFromCacheParams& params, |
1708 GDataErrorCode status, | 1782 GDataErrorCode status, |
1709 const GURL& content_url, | 1783 const GURL& content_url, |
1710 const FilePath& file_path) { | 1784 const FilePath& downloaded_file_path) { |
1711 base::PlatformFileError error = GDataToPlatformError(status); | 1785 base::PlatformFileError error = GDataToPlatformError(status); |
1712 | 1786 |
1713 if (!callback.is_null()) { | 1787 // Make sure that downloaded file is properly stored in cache. We don't have |
1714 callback.Run(error, file_path, REGULAR_FILE); | 1788 // to wait for this operation to finish since the user can already use the |
| 1789 // downloaded file. |
| 1790 if (error == base::PLATFORM_FILE_OK) { |
| 1791 StoreToCache(params.resource_id, |
| 1792 params.md5, |
| 1793 downloaded_file_path, |
| 1794 base::Bind(&GDataFileSystem::OnDownloadStoredToCache, |
| 1795 weak_ptr_factory_.GetWeakPtr())); |
1715 } | 1796 } |
| 1797 |
| 1798 if (!params.callback.is_null()) { |
| 1799 params.proxy->PostTask(FROM_HERE, |
| 1800 base::Bind(params.callback, |
| 1801 error, |
| 1802 downloaded_file_path, |
| 1803 REGULAR_FILE)); |
| 1804 } |
| 1805 } |
| 1806 |
| 1807 void GDataFileSystem::OnDownloadStoredToCache(base::PlatformFileError error, |
| 1808 const std::string& resource_id, |
| 1809 const std::string& md5) { |
| 1810 // Nothing much to do here for now. |
1716 } | 1811 } |
1717 | 1812 |
1718 base::PlatformFileError GDataFileSystem::RenameFileOnFilesystem( | 1813 base::PlatformFileError GDataFileSystem::RenameFileOnFilesystem( |
1719 const FilePath& file_path, | 1814 const FilePath& file_path, |
1720 const FilePath::StringType& new_name, | 1815 const FilePath::StringType& new_name, |
1721 FilePath* updated_file_path) { | 1816 FilePath* updated_file_path) { |
1722 DCHECK(updated_file_path); | 1817 DCHECK(updated_file_path); |
1723 | 1818 |
1724 base::AutoLock lock(lock_); | 1819 base::AutoLock lock(lock_); |
1725 GDataFileBase* file = GetGDataFileInfoFromPath(file_path); | 1820 GDataFileBase* file = GetGDataFileInfoFromPath(file_path); |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2017 return base::PLATFORM_FILE_ERROR_NOT_FOUND; | 2112 return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
2018 | 2113 |
2019 return base::PLATFORM_FILE_OK; | 2114 return base::PLATFORM_FILE_OK; |
2020 } | 2115 } |
2021 | 2116 |
2022 //===================== GDataFileSystem: Cache entry points ==================== | 2117 //===================== GDataFileSystem: Cache entry points ==================== |
2023 | 2118 |
2024 FilePath GDataFileSystem::GetCacheFilePath(const std::string& resource_id, | 2119 FilePath GDataFileSystem::GetCacheFilePath(const std::string& resource_id, |
2025 const std::string& md5, | 2120 const std::string& md5, |
2026 CacheSubdir subdir_id, | 2121 CacheSubdir subdir_id, |
2027 bool is_local) { | 2122 CachedFileOrigin file_origin) { |
2028 DCHECK(subdir_id != CACHE_TYPE_META); | 2123 DCHECK(subdir_id != CACHE_TYPE_META); |
2029 // Runs on any thread. | 2124 // Runs on any thread. |
2030 // Filename is formatted as resource_id.md5, i.e. resource_id is the base | 2125 // Filename is formatted as resource_id.md5, i.e. resource_id is the base |
2031 // name and md5 is the extension. | 2126 // name and md5 is the extension. |
2032 std::string base_name = GDataFileBase::EscapeUtf8FileName(resource_id); | 2127 std::string base_name = GDataFileBase::EscapeUtf8FileName(resource_id); |
2033 if (is_local) { | 2128 if (file_origin == CACHED_FILE_LOCALLY_MODIFIED) { |
2034 DCHECK(subdir_id == CACHE_TYPE_PERSISTENT); | 2129 DCHECK(subdir_id == CACHE_TYPE_PERSISTENT); |
2035 base_name += FilePath::kExtensionSeparator; | 2130 base_name += FilePath::kExtensionSeparator; |
2036 base_name += kLocallyModifiedFileExtension; | 2131 base_name += kLocallyModifiedFileExtension; |
2037 } else if (!md5.empty()) { | 2132 } else if (!md5.empty()) { |
2038 base_name += FilePath::kExtensionSeparator; | 2133 base_name += FilePath::kExtensionSeparator; |
2039 base_name += GDataFileBase::EscapeUtf8FileName(md5); | 2134 base_name += GDataFileBase::EscapeUtf8FileName(md5); |
2040 } | 2135 } |
2041 return cache_paths_[subdir_id].Append(base_name); | 2136 return cache_paths_[subdir_id].Append(base_name); |
2042 } | 2137 } |
2043 | 2138 |
(...skipping 14 matching lines...) Expand all Loading... |
2058 FROM_HERE, | 2153 FROM_HERE, |
2059 base::Bind(StoreToCacheOnIOThreadPool, | 2154 base::Bind(StoreToCacheOnIOThreadPool, |
2060 StoreToCacheParams( | 2155 StoreToCacheParams( |
2061 resource_id, | 2156 resource_id, |
2062 md5, | 2157 md5, |
2063 source_path, | 2158 source_path, |
2064 callback, | 2159 callback, |
2065 GetCacheFilePath(resource_id, | 2160 GetCacheFilePath(resource_id, |
2066 md5, | 2161 md5, |
2067 CACHE_TYPE_TMP, | 2162 CACHE_TYPE_TMP, |
2068 false /* is_local */), | 2163 CACHED_FILE_FROM_SERVER), |
2069 base::Bind(&GDataFileSystem::OnStoredToCache, | 2164 base::Bind(&GDataFileSystem::OnStoredToCache, |
2070 weak_ptr_factory_.GetWeakPtr()), | 2165 weak_ptr_factory_.GetWeakPtr()), |
2071 base::MessageLoopProxy::current()))); | 2166 base::MessageLoopProxy::current()))); |
2072 } | 2167 } |
2073 | 2168 |
2074 void GDataFileSystem::GetFromCache(const std::string& resource_id, | 2169 void GDataFileSystem::GetFromCache(const std::string& resource_id, |
2075 const std::string& md5, | 2170 const std::string& md5, |
2076 const GetFromCacheCallback& callback) { | 2171 const GetFromCacheCallback& callback) { |
2077 GetFromCacheInternal(resource_id, md5, FilePath(), callback); | 2172 GetFromCacheInternal(resource_id, md5, FilePath(), callback); |
2078 } | 2173 } |
2079 | 2174 |
2080 void GDataFileSystem::RemoveFromCache(const std::string& resource_id, | 2175 void GDataFileSystem::RemoveFromCache(const std::string& resource_id, |
2081 const CacheOperationCallback& callback) { | 2176 const CacheOperationCallback& callback) { |
2082 InitializeCacheIfNecessary(); | 2177 InitializeCacheIfNecessary(); |
2083 | 2178 |
2084 // Lock to access cache map. | 2179 // Lock to access cache map. |
2085 base::AutoLock lock(lock_); | 2180 base::AutoLock lock(lock_); |
2086 root_->RemoveFromCacheMap(resource_id); | 2181 root_->RemoveFromCacheMap(resource_id); |
2087 | 2182 |
2088 // Post task to delete all cache versions of resource_id. | 2183 // Post task to delete all cache versions of resource_id. |
2089 // If $resource_id.* is passed to DeleteStaleCacheVersions, then all | 2184 // If $resource_id.* is passed to DeleteStaleCacheVersions, then all |
2090 // $resource_id.* will be deleted since no file will match "$resource_id.*". | 2185 // $resource_id.* will be deleted since no file will match "$resource_id.*". |
2091 FilePath files_to_delete = GetCacheFilePath(resource_id, | 2186 FilePath files_to_delete = GetCacheFilePath(resource_id, |
2092 kWildCard, | 2187 kWildCard, |
2093 CACHE_TYPE_TMP, | 2188 CACHE_TYPE_TMP, |
2094 false /* is_local */); | 2189 CACHED_FILE_FROM_SERVER); |
2095 BrowserThread::PostBlockingPoolSequencedTask( | 2190 BrowserThread::PostBlockingPoolSequencedTask( |
2096 kGDataFileSystemToken, | 2191 kGDataFileSystemToken, |
2097 FROM_HERE, | 2192 FROM_HERE, |
2098 base::Bind(DeleteStaleCacheVersionsWithCallback, | 2193 base::Bind(DeleteStaleCacheVersionsWithCallback, |
2099 resource_id, | 2194 resource_id, |
2100 callback, | 2195 callback, |
2101 files_to_delete, | 2196 files_to_delete, |
2102 base::MessageLoopProxy::current())); | 2197 base::MessageLoopProxy::current())); |
2103 | 2198 |
2104 } | 2199 } |
2105 | 2200 |
2106 void GDataFileSystem::Pin(const std::string& resource_id, | 2201 void GDataFileSystem::Pin(const std::string& resource_id, |
2107 const std::string& md5, | 2202 const std::string& md5, |
2108 const CacheOperationCallback& callback) { | 2203 const CacheOperationCallback& callback) { |
2109 InitializeCacheIfNecessary(); | 2204 InitializeCacheIfNecessary(); |
2110 | 2205 |
2111 BrowserThread::PostBlockingPoolSequencedTask( | 2206 BrowserThread::PostBlockingPoolSequencedTask( |
2112 kGDataFileSystemToken, | 2207 kGDataFileSystemToken, |
2113 FROM_HERE, | 2208 FROM_HERE, |
2114 base::Bind(ModifyCacheStatusOnIOThreadPool, | 2209 base::Bind(ModifyCacheStatusOnIOThreadPool, |
2115 ModifyCacheStatusParams( | 2210 ModifyCacheStatusParams( |
2116 resource_id, | 2211 resource_id, |
2117 md5, | 2212 md5, |
2118 callback, | 2213 callback, |
2119 GDataRootDirectory::CACHE_PINNED, | 2214 GDataRootDirectory::CACHE_PINNED, |
2120 true, | 2215 true, |
2121 GetCacheFilePath(resource_id, | 2216 GetCacheFilePath(resource_id, |
2122 md5, | 2217 md5, |
2123 CACHE_TYPE_TMP, | 2218 CACHE_TYPE_TMP, |
2124 false /* is_local */), | 2219 CACHED_FILE_FROM_SERVER), |
2125 base::Bind(&GDataFileSystem::OnFilePinned, | 2220 base::Bind(&GDataFileSystem::OnFilePinned, |
2126 weak_ptr_factory_.GetWeakPtr()), | 2221 weak_ptr_factory_.GetWeakPtr()), |
2127 base::MessageLoopProxy::current()))); | 2222 base::MessageLoopProxy::current()))); |
2128 } | 2223 } |
2129 | 2224 |
2130 void GDataFileSystem::Unpin(const std::string& resource_id, | 2225 void GDataFileSystem::Unpin(const std::string& resource_id, |
2131 const std::string& md5, | 2226 const std::string& md5, |
2132 const CacheOperationCallback& callback) { | 2227 const CacheOperationCallback& callback) { |
2133 InitializeCacheIfNecessary(); | 2228 InitializeCacheIfNecessary(); |
2134 | 2229 |
2135 BrowserThread::PostBlockingPoolSequencedTask( | 2230 BrowserThread::PostBlockingPoolSequencedTask( |
2136 kGDataFileSystemToken, | 2231 kGDataFileSystemToken, |
2137 FROM_HERE, | 2232 FROM_HERE, |
2138 base::Bind(ModifyCacheStatusOnIOThreadPool, | 2233 base::Bind(ModifyCacheStatusOnIOThreadPool, |
2139 ModifyCacheStatusParams( | 2234 ModifyCacheStatusParams( |
2140 resource_id, | 2235 resource_id, |
2141 md5, | 2236 md5, |
2142 callback, | 2237 callback, |
2143 GDataRootDirectory::CACHE_PINNED, | 2238 GDataRootDirectory::CACHE_PINNED, |
2144 false, | 2239 false, |
2145 GetCacheFilePath(resource_id, | 2240 GetCacheFilePath(resource_id, |
2146 md5, | 2241 md5, |
2147 CACHE_TYPE_TMP, | 2242 CACHE_TYPE_TMP, |
2148 false /* is_local */), | 2243 CACHED_FILE_FROM_SERVER), |
2149 base::Bind(&GDataFileSystem::OnFileUnpinned, | 2244 base::Bind(&GDataFileSystem::OnFileUnpinned, |
2150 weak_ptr_factory_.GetWeakPtr()), | 2245 weak_ptr_factory_.GetWeakPtr()), |
2151 base::MessageLoopProxy::current()))); | 2246 base::MessageLoopProxy::current()))); |
2152 } | 2247 } |
2153 | 2248 |
2154 //========= GDataFileSystem: Cache tasks that ran on io thread pool ============ | 2249 //========= GDataFileSystem: Cache tasks that ran on io thread pool ============ |
2155 | 2250 |
2156 void GDataFileSystem::InitializeCacheOnIOThreadPool() { | 2251 void GDataFileSystem::InitializeCacheOnIOThreadPool() { |
2157 base::PlatformFileError error = CreateCacheDirectories(cache_paths_); | 2252 base::PlatformFileError error = CreateCacheDirectories(cache_paths_); |
2158 | 2253 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2234 | 2329 |
2235 base::PlatformFileError error = base::PLATFORM_FILE_OK; | 2330 base::PlatformFileError error = base::PLATFORM_FILE_OK; |
2236 FilePath path; | 2331 FilePath path; |
2237 | 2332 |
2238 // Lock to access cache map. | 2333 // Lock to access cache map. |
2239 base::AutoLock lock(lock_); | 2334 base::AutoLock lock(lock_); |
2240 if (root_->CacheFileExists(resource_id, md5)) { | 2335 if (root_->CacheFileExists(resource_id, md5)) { |
2241 path = GetCacheFilePath(resource_id, | 2336 path = GetCacheFilePath(resource_id, |
2242 md5, | 2337 md5, |
2243 CACHE_TYPE_TMP, | 2338 CACHE_TYPE_TMP, |
2244 false /* is_local */); | 2339 CACHED_FILE_FROM_SERVER); |
2245 } else { | 2340 } else { |
2246 error = base::PLATFORM_FILE_ERROR_NOT_FOUND; | 2341 error = base::PLATFORM_FILE_ERROR_NOT_FOUND; |
2247 } | 2342 } |
2248 | 2343 |
2249 // Invoke callback. | 2344 // Invoke callback. |
2250 if (!callback.is_null()) | 2345 if (!callback.is_null()) |
2251 callback.Run(error, resource_id, md5, gdata_file_path, path); | 2346 callback.Run(error, resource_id, md5, gdata_file_path, path); |
2252 } | 2347 } |
2253 | 2348 |
2254 void GDataFileSystem::OnRemovedFromCache(base::PlatformFileError error, | 2349 void GDataFileSystem::OnRemovedFromCache(base::PlatformFileError error, |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2391 } | 2486 } |
2392 | 2487 |
2393 ProfileKeyedService* GDataFileSystemFactory::BuildServiceInstanceFor( | 2488 ProfileKeyedService* GDataFileSystemFactory::BuildServiceInstanceFor( |
2394 Profile* profile) const { | 2489 Profile* profile) const { |
2395 return new GDataFileSystem(profile, | 2490 return new GDataFileSystem(profile, |
2396 new DocumentsService, | 2491 new DocumentsService, |
2397 new GDataSyncClient); | 2492 new GDataSyncClient); |
2398 } | 2493 } |
2399 | 2494 |
2400 } // namespace gdata | 2495 } // namespace gdata |
OLD | NEW |