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..5c9a0b5f79bf4ad04e002ae205ae343e196bc43b 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. |
|
ericu
2011/11/30 19:16:04
Why do you special-case the root? My Linux box do
tzik
2011/12/01 16:28:46
It is just to keep consistency to current implemen
ericu
2011/12/05 21:43:50
That is incorrect. Look at FileSystemDirectoryDat
|
| + 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"); |
| @@ -291,6 +299,7 @@ PlatformFileError ObfuscatedFileUtil::CreateOrOpen( |
| &file_info, file_flags, file_handle); |
| if (created && base::PLATFORM_FILE_OK == error) |
| *created = true; |
| + TouchDirectory(db, parent_id); |
|
ericu
2011/11/30 19:16:04
You don't want to touch the parent if the creation
tzik
2011/12/01 16:28:46
Done.
|
| return error; |
| } |
| if (file_flags & base::PLATFORM_FILE_CREATE) |
| @@ -352,6 +361,7 @@ PlatformFileError ObfuscatedFileUtil::EnsureFileExists( |
| context->src_type(), FilePath(), &file_info, 0, NULL); |
| if (created && base::PLATFORM_FILE_OK == error) |
| *created = true; |
| + TouchDirectory(db, parent_id); |
|
ericu
2011/11/30 19:16:04
Perhaps it would be better to put the call inside
tzik
2011/12/01 16:28:46
Done.
|
| return error; |
| } |
| @@ -391,6 +401,7 @@ PlatformFileError ObfuscatedFileUtil::CreateDirectory( |
| } |
| if (!recursive && components.size() - index > 1) |
| return base::PLATFORM_FILE_ERROR_NOT_FOUND; |
| + TouchDirectory(db, parent_id); |
| for (; index < components.size(); ++index) { |
| FileInfo file_info; |
| file_info.name = components[index]; |
| @@ -694,9 +705,12 @@ PlatformFileError ObfuscatedFileUtil::CopyOrMoveFile( |
| dest_file_path.BaseName().value()); |
| if (!AllocateQuotaForPath(context, 1, dest_file_info.name.size())) |
| return base::PLATFORM_FILE_ERROR_NO_SPACE; |
| - return CreateFile(context, context->dest_origin_url(), |
| + PlatformFileError error = CreateFile(context, context->dest_origin_url(), |
| context->dest_type(), src_data_path, &dest_file_info, 0, |
| NULL); |
| + if (error == base::PLATFORM_FILE_OK) |
| + TouchDirectory(db, dest_parent_id); |
| + return error; |
| } |
| } else { // It's a move. |
| if (overwrite) { |
| @@ -712,6 +726,7 @@ 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); |
|
ericu
2011/11/30 19:16:04
You need to update the destination directory's mti
tzik
2011/12/01 16:28:46
Done.
|
| return base::PLATFORM_FILE_OK; |
| } else { |
| FileId dest_parent_id; |
| @@ -724,10 +739,13 @@ 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)) |
| return base::PLATFORM_FILE_ERROR_FAILED; |
| + TouchDirectory(db, src_parent_id); |
| + TouchDirectory(db, dest_parent_id); |
| UpdatePathQuotaUsage( |
| context, context->src_origin_url(), context->src_type(), 0, |
| static_cast<int64>(dest_file_path.BaseName().value().size()) - |
| @@ -770,8 +788,10 @@ PlatformFileError ObfuscatedFileUtil::CopyInForeignFile( |
| dest_file_path.BaseName().value()); |
| if (!AllocateQuotaForPath(context, 1, dest_file_info.name.size())) |
| return base::PLATFORM_FILE_ERROR_NO_SPACE; |
| - return CreateFile(context, context->dest_origin_url(), |
| + PlatformFileError error = CreateFile(context, context->dest_origin_url(), |
| context->dest_type(), src_file_path, &dest_file_info, 0, NULL); |
| + TouchDirectory(db, dest_parent_id); |
| + return error; |
| } |
| return base::PLATFORM_FILE_ERROR_FAILED; |
| } |
| @@ -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; |
| } |