diff options
author | arv@chromium.org <arv@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 16:27:30 +0000 |
---|---|---|
committer | arv@chromium.org <arv@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-11 16:27:30 +0000 |
commit | 036019001a23c0ed1112294eed2e1ec645099f3d (patch) | |
tree | 7e5fbc0ccfee37a1c3710029e39b5cde428ae762 /webkit/browser/fileapi/async_file_util_adapter.cc | |
parent | 506624d720730a69ee10ac12d7567afadd7ce891 (diff) | |
download | chromium_src-036019001a23c0ed1112294eed2e1ec645099f3d.zip chromium_src-036019001a23c0ed1112294eed2e1ec645099f3d.tar.gz chromium_src-036019001a23c0ed1112294eed2e1ec645099f3d.tar.bz2 |
Revert of Use has_more parameter to return entries from AsyncFileUtilAdapter (https://codereview.chromium.org/194233002/)
Reason for revert:
Broke LayoutTest/fast/filesystem/workers/read-directory-sync-many.html
FAIL [Worker] numFiles should be 150. Was 100.
FAIL [Worker] numDirectories should be 150. Was 0.
Original issue's description:
> Use has_more parameter to return entries from AsyncFileUtilAdapter
>
> BUG=347900
> TEST=git cl try
>
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=256217
TBR=tzik@chromium.org,hashimoto@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=347900
Review URL: https://codereview.chromium.org/195323002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@256251 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/browser/fileapi/async_file_util_adapter.cc')
-rw-r--r-- | webkit/browser/fileapi/async_file_util_adapter.cc | 96 |
1 files changed, 46 insertions, 50 deletions
diff --git a/webkit/browser/fileapi/async_file_util_adapter.cc b/webkit/browser/fileapi/async_file_util_adapter.cc index b66cf02..6950002 100644 --- a/webkit/browser/fileapi/async_file_util_adapter.cc +++ b/webkit/browser/fileapi/async_file_util_adapter.cc @@ -9,7 +9,6 @@ #include "base/bind.h" #include "base/sequenced_task_runner.h" #include "base/task_runner_util.h" -#include "base/thread_task_runner_handle.h" #include "webkit/browser/fileapi/file_system_context.h" #include "webkit/browser/fileapi/file_system_file_util.h" #include "webkit/browser/fileapi/file_system_operation_context.h" @@ -83,54 +82,50 @@ class GetFileInfoHelper { DISALLOW_COPY_AND_ASSIGN(GetFileInfoHelper); }; -void ReadDirectoryHelper(FileSystemFileUtil* file_util, - FileSystemOperationContext* context, - const FileSystemURL& url, - base::SingleThreadTaskRunner* origin_loop, - const AsyncFileUtil::ReadDirectoryCallback& callback) { - base::File::Info file_info; - base::FilePath platform_path; - base::File::Error error = file_util->GetFileInfo( - context, url, &file_info, &platform_path); - - if (error == base::File::FILE_OK && !file_info.is_directory) - error = base::File::FILE_ERROR_NOT_A_DIRECTORY; - - std::vector<DirectoryEntry> entries; - if (error != base::File::FILE_OK) { - origin_loop->PostTask( - FROM_HERE, base::Bind(callback, error, entries, false /* has_more */)); - return; - } +class ReadDirectoryHelper { + public: + ReadDirectoryHelper() : error_(base::File::FILE_OK) {} - // Note: Increasing this value may make some tests in LayoutTests meaningless. - // (Namely, read-directory-many.html and read-directory-sync-many.html are - // assuming that they are reading much more entries than this constant.) - const size_t kResultChunkSize = 100; - - scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum( - file_util->CreateFileEnumerator(context, url)); - - base::FilePath current; - while (!(current = file_enum->Next()).empty()) { - DirectoryEntry entry; - entry.is_directory = file_enum->IsDirectory(); - entry.name = VirtualPath::BaseName(current).value(); - entry.size = file_enum->Size(); - entry.last_modified_time = file_enum->LastModifiedTime(); - entries.push_back(entry); - - if (entries.size() == kResultChunkSize) { - origin_loop->PostTask( - FROM_HERE, base::Bind(callback, base::File::FILE_OK, entries, - true /* has_more */)); - entries.clear(); + void RunWork(FileSystemFileUtil* file_util, + FileSystemOperationContext* context, + const FileSystemURL& url) { + base::File::Info file_info; + base::FilePath platform_path; + base::File::Error error = file_util->GetFileInfo( + context, url, &file_info, &platform_path); + if (error != base::File::FILE_OK) { + error_ = error; + return; } + if (!file_info.is_directory) { + error_ = base::File::FILE_ERROR_NOT_A_DIRECTORY; + return; + } + + scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> file_enum( + file_util->CreateFileEnumerator(context, url)); + + base::FilePath current; + while (!(current = file_enum->Next()).empty()) { + DirectoryEntry entry; + entry.is_directory = file_enum->IsDirectory(); + entry.name = VirtualPath::BaseName(current).value(); + entry.size = file_enum->Size(); + entry.last_modified_time = file_enum->LastModifiedTime(); + entries_.push_back(entry); + } + error_ = base::File::FILE_OK; } - origin_loop->PostTask( - FROM_HERE, base::Bind(callback, base::File::FILE_OK, entries, - false /* has_more */)); -} + + void Reply(const AsyncFileUtil::ReadDirectoryCallback& callback) { + callback.Run(error_, entries_, false /* has_more */); + } + + private: + base::File::Error error_; + std::vector<DirectoryEntry> entries_; + DISALLOW_COPY_AND_ASSIGN(ReadDirectoryHelper); +}; void RunCreateOrOpenCallback( const AsyncFileUtil::CreateOrOpenCallback& callback, @@ -216,11 +211,12 @@ void AsyncFileUtilAdapter::ReadDirectory( const FileSystemURL& url, const ReadDirectoryCallback& callback) { FileSystemOperationContext* context_ptr = context.release(); - const bool success = context_ptr->task_runner()->PostTask( + ReadDirectoryHelper* helper = new ReadDirectoryHelper; + const bool success = context_ptr->task_runner()->PostTaskAndReply( FROM_HERE, - Bind(&ReadDirectoryHelper, - sync_file_util_.get(), base::Owned(context_ptr), url, - base::ThreadTaskRunnerHandle::Get(), callback)); + Bind(&ReadDirectoryHelper::RunWork, Unretained(helper), + sync_file_util_.get(), base::Owned(context_ptr), url), + Bind(&ReadDirectoryHelper::Reply, Owned(helper), callback)); DCHECK(success); } |