summaryrefslogtreecommitdiffstats
path: root/webkit/browser/fileapi/async_file_util_adapter.cc
diff options
context:
space:
mode:
authorarv@chromium.org <arv@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 16:27:30 +0000
committerarv@chromium.org <arv@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-11 16:27:30 +0000
commit036019001a23c0ed1112294eed2e1ec645099f3d (patch)
tree7e5fbc0ccfee37a1c3710029e39b5cde428ae762 /webkit/browser/fileapi/async_file_util_adapter.cc
parent506624d720730a69ee10ac12d7567afadd7ce891 (diff)
downloadchromium_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.cc96
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);
}