Index: webkit/fileapi/obfuscated_file_util.cc |
diff --git a/webkit/fileapi/obfuscated_file_util.cc b/webkit/fileapi/obfuscated_file_util.cc |
index 385393b9db01ff630b29dd345acb4510d95b0bc8..48203ba870854ad928e371178bea8cb4c045bde3 100644 |
--- a/webkit/fileapi/obfuscated_file_util.cc |
+++ b/webkit/fileapi/obfuscated_file_util.cc |
@@ -92,6 +92,14 @@ void UpdatePathQuotaUsage( |
type, growth); |
} |
+void TouchDirectory(fileapi::FileSystemDirectoryDatabase* db, |
+ fileapi::FileSystemDirectoryDatabase::FileId dir_id) { |
+ DCHECK(db); |
+ // Do nothing for root directory. |
+ if (dir_id && !db->UpdateModificationTime(dir_id, base::Time::Now())) |
+ NOTREACHED(); |
+} |
+ |
const FilePath::CharType kLegacyDataDirectory[] = FILE_PATH_LITERAL("Legacy"); |
const FilePath::CharType kTemporaryDirectoryName[] = FILE_PATH_LITERAL("t"); |
@@ -391,6 +399,7 @@ PlatformFileError ObfuscatedFileUtil::CreateDirectory( |
} |
if (!recursive && components.size() - index > 1) |
return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
+ bool first = true; |
for (; index < components.size(); ++index) { |
FileInfo file_info; |
file_info.name = components[index]; |
@@ -406,6 +415,10 @@ PlatformFileError ObfuscatedFileUtil::CreateDirectory( |
} |
UpdatePathQuotaUsage(context, context->src_origin_url(), |
context->src_type(), 1, file_info.name.size()); |
+ if (first) { |
+ first = false; |
+ TouchDirectory(db, file_info.parent_id); |
+ } |
} |
return base::PLATFORM_FILE_OK; |
} |
@@ -533,8 +546,7 @@ PlatformFileError ObfuscatedFileUtil::Touch( |
return base::PLATFORM_FILE_ERROR_FAILED; |
} |
if (file_info.is_directory()) { |
- file_info.modification_time = last_modified_time; |
- if (!db->UpdateFileInfo(file_id, file_info)) |
tzik
2011/12/01 16:28:46
Calling UpdateFileInfo failed for updating directo
|
+ if (!db->UpdateModificationTime(file_id, last_modified_time)) |
return base::PLATFORM_FILE_ERROR_FAILED; |
return base::PLATFORM_FILE_OK; |
} |
@@ -682,8 +694,11 @@ PlatformFileError ObfuscatedFileUtil::CopyOrMoveFile( |
if (overwrite) { |
FilePath dest_data_path = DataPathToLocalPath(context->src_origin_url(), |
context->src_type(), dest_file_info.data_path); |
- return underlying_file_util()->CopyOrMoveFile(context, |
+ PlatformFileError error = underlying_file_util()->CopyOrMoveFile(context, |
src_data_path, dest_data_path, copy); |
+ if (error == base::PLATFORM_FILE_OK) |
+ TouchDirectory(db, dest_file_info.parent_id); |
+ return error; |
} else { |
FileId dest_parent_id; |
if (!db->GetFileWithPath(dest_file_path.DirName(), &dest_parent_id)) { |
@@ -712,6 +727,8 @@ PlatformFileError ObfuscatedFileUtil::CopyOrMoveFile( |
UpdatePathQuotaUsage(context, context->src_origin_url(), |
context->src_type(), -1, |
-static_cast<int64>(src_file_info.name.size())); |
+ TouchDirectory(db, src_file_info.parent_id); |
+ TouchDirectory(db, dest_file_info.parent_id); |
return base::PLATFORM_FILE_OK; |
} else { |
FileId dest_parent_id; |
@@ -724,6 +741,7 @@ PlatformFileError ObfuscatedFileUtil::CopyOrMoveFile( |
static_cast<int64>(dest_file_path.BaseName().value().size()) |
- static_cast<int64>(src_file_info.name.size()))) |
return base::PLATFORM_FILE_ERROR_NO_SPACE; |
+ FileId src_parent_id = src_file_info.parent_id; |
src_file_info.parent_id = dest_parent_id; |
src_file_info.name = dest_file_path.BaseName().value(); |
if (!db->UpdateFileInfo(src_file_id, src_file_info)) |
@@ -732,6 +750,8 @@ PlatformFileError ObfuscatedFileUtil::CopyOrMoveFile( |
context, context->src_origin_url(), context->src_type(), 0, |
static_cast<int64>(dest_file_path.BaseName().value().size()) - |
static_cast<int64>(src_file_path.BaseName().value().size())); |
+ TouchDirectory(db, src_parent_id); |
+ TouchDirectory(db, dest_parent_id); |
return base::PLATFORM_FILE_OK; |
} |
} |
@@ -803,6 +823,7 @@ PlatformFileError ObfuscatedFileUtil::DeleteFile( |
if (base::PLATFORM_FILE_OK != |
underlying_file_util()->DeleteFile(context, data_path)) |
LOG(WARNING) << "Leaked a backing file."; |
+ TouchDirectory(db, file_info.parent_id); |
return base::PLATFORM_FILE_OK; |
} |
@@ -826,6 +847,7 @@ PlatformFileError ObfuscatedFileUtil::DeleteSingleDirectory( |
AllocateQuotaForPath(context, -1, -static_cast<int64>(file_info.name.size())); |
UpdatePathQuotaUsage(context, context->src_origin_url(), context->src_type(), |
-1, -static_cast<int64>(file_info.name.size())); |
+ TouchDirectory(db, file_info.parent_id); |
return base::PLATFORM_FILE_OK; |
} |
@@ -1117,6 +1139,7 @@ PlatformFileError ObfuscatedFileUtil::CreateFile( |
return base::PLATFORM_FILE_ERROR_FAILED; |
} |
UpdatePathQuotaUsage(context, origin_url, type, 1, file_info->name.size()); |
+ TouchDirectory(db, file_info->parent_id); |
return base::PLATFORM_FILE_OK; |
} |