Chromium Code Reviews| 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; |
| } |