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

Unified Diff: chrome/browser/chromeos/drive/file_system/download_operation.cc

Issue 16278006: In DownloadOperation use locally modified file info if dirty Drive cache exists. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add comment Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/drive/file_system/download_operation_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/drive/file_system/download_operation.cc
diff --git a/chrome/browser/chromeos/drive/file_system/download_operation.cc b/chrome/browser/chromeos/drive/file_system/download_operation.cc
index c11457daeb210529b2e24f94436204d3ab016468..e5a1076246d6eae2318fa81b8d3bc43b41d1180b 100644
--- a/chrome/browser/chromeos/drive/file_system/download_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/download_operation.cc
@@ -37,31 +37,31 @@ namespace {
FileError CheckPreConditionForEnsureFileDownloaded(
internal::ResourceMetadata* metadata,
internal::FileCache* cache,
- const ResourceEntry& entry,
+ ResourceEntry* entry,
base::FilePath* cache_file_path) {
DCHECK(metadata);
DCHECK(cache);
DCHECK(cache_file_path);
- if (entry.file_info().is_directory())
+ if (entry->file_info().is_directory())
return FILE_ERROR_NOT_A_FILE;
// The file's entry should have its file specific info.
- DCHECK(entry.has_file_specific_info());
+ DCHECK(entry->has_file_specific_info());
// For a hosted document, we create a special JSON file to represent the
// document instead of fetching the document content in one of the exported
// formats. The JSON file contains the edit URL and resource ID of the
// document.
- if (entry.file_specific_info().is_hosted_document()) {
+ if (entry->file_specific_info().is_hosted_document()) {
base::FilePath gdoc_file_path;
if (!file_util::CreateTemporaryFileInDir(
cache->GetCacheDirectoryPath(
internal::FileCache::CACHE_TYPE_TMP_DOCUMENTS),
&gdoc_file_path) ||
!util::CreateGDocFile(gdoc_file_path,
- GURL(entry.file_specific_info().alternate_url()),
- entry.resource_id()))
+ GURL(entry->file_specific_info().alternate_url()),
+ entry->resource_id()))
return FILE_ERROR_FAILED;
*cache_file_path = gdoc_file_path;
@@ -69,9 +69,31 @@ FileError CheckPreConditionForEnsureFileDownloaded(
}
// Get the cache file path if available.
- cache->GetFile(entry.resource_id(),
- entry.file_specific_info().file_md5(),
+ cache->GetFile(entry->resource_id(),
+ entry->file_specific_info().file_md5(),
cache_file_path);
+
+ // If the cache file is available and dirty, the modified file info needs to
+ // be stored in |entry|.
+ // TODO(kinaba): crbug.com/246469. The logic below is a duplicate of that in
+ // drive::FileSystem::CheckLocalModificationAndRun. We should merge them once
+ // the drive::FS side is also converted to run fully on blocking pool.
+ if (!cache_file_path->empty()) {
+ FileCacheEntry cache_entry;
+ if (cache->GetCacheEntry(entry->resource_id(),
+ entry->file_specific_info().file_md5(),
+ &cache_entry) &&
+ cache_entry.is_dirty()) {
+ base::PlatformFileInfo file_info;
+ if (file_util::GetFileInfo(*cache_file_path, &file_info)) {
+ PlatformFileInfoProto entry_file_info;
+ util::ConvertPlatformFileInfoToResourceEntry(file_info,
+ &entry_file_info);
+ *entry->mutable_file_info() = entry_file_info;
+ }
+ }
+ }
+
return FILE_ERROR_OK;
}
@@ -87,7 +109,7 @@ FileError CheckPreConditionForEnsureFileDownloadedByResourceId(
if (error != FILE_ERROR_OK)
return error;
return CheckPreConditionForEnsureFileDownloaded(
- metadata, cache, *entry, cache_file_path);
+ metadata, cache, entry, cache_file_path);
}
// Calls CheckPreConditionForEnsureFileDownloaded() with the entry specified by
@@ -102,7 +124,7 @@ FileError CheckPreConditionForEnsureFileDownloadedByPath(
if (error != FILE_ERROR_OK)
return error;
return CheckPreConditionForEnsureFileDownloaded(
- metadata, cache, *entry, cache_file_path);
+ metadata, cache, entry, cache_file_path);
}
// Creates a file with unique name in |dir| and stores the path to |temp_file|.
« no previous file with comments | « no previous file | chrome/browser/chromeos/drive/file_system/download_operation_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698