Index: webkit/fileapi/obfuscated_file_system_file_util.cc |
diff --git a/webkit/fileapi/obfuscated_file_system_file_util.cc b/webkit/fileapi/obfuscated_file_system_file_util.cc |
index dc6b70e80461d2299a24a73e14a8aae02f51cbcc..4550f57958eeffee794df15caa1c4b36bdcc1524 100644 |
--- a/webkit/fileapi/obfuscated_file_system_file_util.cc |
+++ b/webkit/fileapi/obfuscated_file_system_file_util.cc |
@@ -664,8 +664,15 @@ class ObfuscatedFileSystemFileEnumerator |
: public FileSystemFileUtil::AbstractFileEnumerator { |
public: |
ObfuscatedFileSystemFileEnumerator( |
- FileSystemDirectoryDatabase* db, const FilePath& virtual_root_path) |
- : db_(db) { |
+ const FilePath& base_path, |
+ FileSystemDirectoryDatabase* db, |
+ FileSystemOperationContext* context, |
ericu
2011/08/25 18:29:30
You're assuming that this context will remain vali
tzik
2011/08/26 02:41:53
Make sense. I added a comment there.
|
+ FileSystemFileUtil* underlying_file_util, |
+ const FilePath& virtual_root_path) |
+ : base_path_(base_path), |
+ db_(db), |
+ context_(context), |
+ underlying_file_util_(underlying_file_util) { |
kinuko
2011/08/25 09:28:49
DCHECK() for pointers? (db, context, underlying_fu
tzik
2011/08/26 02:41:53
Done.
|
FileId file_id; |
FileInfo file_info; |
if (!db_->GetFileWithPath(virtual_root_path, &file_id)) |
@@ -681,7 +688,7 @@ class ObfuscatedFileSystemFileEnumerator |
~ObfuscatedFileSystemFileEnumerator() {} |
- virtual FilePath Next() { |
+ virtual FilePath Next() OVERRIDE { |
ProcessRecurseQueue(); |
if (display_queue_.empty()) |
return FilePath(); |
@@ -692,7 +699,25 @@ class ObfuscatedFileSystemFileEnumerator |
return current_.file_path; |
} |
- virtual bool IsDirectory() { |
+ virtual int64 Size() OVERRIDE { |
+ if (IsDirectory()) |
+ return 0; |
+ FileSystemOperationContext context(*context_); |
ericu
2011/08/25 18:29:30
There's no need to copy the context here; just pas
tzik
2011/08/26 02:41:53
I see. Done.
|
+ |
+ base::PlatformFileInfo file_info; |
+ FilePath platform_file_path; |
+ |
+ FilePath local_path = base_path_.Append(current_.file_info.data_path); |
+ base::PlatformFileError error = underlying_file_util_->GetFileInfo( |
+ &context, local_path, &file_info, &platform_file_path); |
+ if (error != base::PLATFORM_FILE_OK) { |
+ LOG(WARNING) << "Lost a backing file."; |
+ return 0; |
+ } |
+ return file_info.size; |
+ } |
+ |
+ virtual bool IsDirectory() OVERRIDE { |
return current_.file_info.is_directory(); |
} |
@@ -728,7 +753,10 @@ class ObfuscatedFileSystemFileEnumerator |
std::queue<FileRecord> display_queue_; |
std::queue<FileRecord> recurse_queue_; |
FileRecord current_; |
+ FilePath base_path_; |
FileSystemDirectoryDatabase* db_; |
+ FileSystemOperationContext* context_; |
+ FileSystemFileUtil* underlying_file_util_; |
}; |
class ObfuscatedFileSystemOriginEnumerator |
@@ -793,7 +821,13 @@ ObfuscatedFileSystemFileUtil::CreateFileEnumerator( |
context->src_origin_url(), context->src_type(), false); |
if (!db) |
return new FileSystemFileUtil::EmptyFileEnumerator(); |
- return new ObfuscatedFileSystemFileEnumerator(db, root_path); |
+ return new ObfuscatedFileSystemFileEnumerator( |
+ GetDirectoryForOriginAndType(context->src_origin_url(), |
+ context->src_type(), false), |
+ db, |
+ context, |
+ underlying_file_util_.get(), |
+ root_path); |
} |
PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal( |