summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi
diff options
context:
space:
mode:
authoradamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-19 23:39:56 +0000
committeradamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-19 23:39:56 +0000
commit483cad04e9efc1b42f8b2b5b118a95a5650d3c3e (patch)
tree9b36f45f614a08e6c81798bb093101181dec195c /webkit/fileapi
parent048a1d02a9e9e42e63df1a26417d3f79494afb7c (diff)
downloadchromium_src-483cad04e9efc1b42f8b2b5b118a95a5650d3c3e.zip
chromium_src-483cad04e9efc1b42f8b2b5b118a95a5650d3c3e.tar.gz
chromium_src-483cad04e9efc1b42f8b2b5b118a95a5650d3c3e.tar.bz2
Use appropriate FileSystemOperations in "filesystem:" URLRequestJobs.
FileSystemURLRequestJob now calls GetMetadata(), while FileSystemDirURLRequestJob calls ReadDirectory(). With neither calling GetLocalPath(), the need for FileSystemURLRequestJobBase has disappeared, as has the need for FileSystemOperation::GetLocalPath and FileSystemCallbackDispatcher::DidGetLocalPath(). The only changes in behavior due to this patch are: - ReadDirectory is now called on the URL, so it will still work properly after the obsfuscated filesystem is in use. - FileSystemDirURLRequestJob has been fixed to show a directory header. This was somehow lost in the refactor to use FileSystemURLRequestJobBase. - The error codes for "file not found" are now always net::ERR_FILE_NOT_FOUND. R=ericu@chromium.org Review URL: http://codereview.chromium.org/7047013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86015 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/fileapi')
-rw-r--r--webkit/fileapi/file_system_callback_dispatcher.cc4
-rw-r--r--webkit/fileapi/file_system_callback_dispatcher.h5
-rw-r--r--webkit/fileapi/file_system_dir_url_request_job.cc110
-rw-r--r--webkit/fileapi/file_system_dir_url_request_job.h20
-rw-r--r--webkit/fileapi/file_system_dir_url_request_job_unittest.cc2
-rw-r--r--webkit/fileapi/file_system_operation.cc36
-rw-r--r--webkit/fileapi/file_system_operation.h3
-rw-r--r--webkit/fileapi/file_system_operation_unittest.cc19
-rw-r--r--webkit/fileapi/file_system_operation_write_unittest.cc4
-rw-r--r--webkit/fileapi/file_system_url_request_job.cc89
-rw-r--r--webkit/fileapi/file_system_url_request_job.h21
-rw-r--r--webkit/fileapi/file_system_url_request_job_base.cc101
-rw-r--r--webkit/fileapi/file_system_url_request_job_base.h49
-rw-r--r--webkit/fileapi/file_system_url_request_job_unittest.cc2
-rw-r--r--webkit/fileapi/webkit_fileapi.gypi2
15 files changed, 183 insertions, 284 deletions
diff --git a/webkit/fileapi/file_system_callback_dispatcher.cc b/webkit/fileapi/file_system_callback_dispatcher.cc
index 618030b..1298979 100644
--- a/webkit/fileapi/file_system_callback_dispatcher.cc
+++ b/webkit/fileapi/file_system_callback_dispatcher.cc
@@ -17,8 +17,4 @@ void FileSystemCallbackDispatcher::DidOpenFile(
NOTREACHED();
}
-void FileSystemCallbackDispatcher::DidGetLocalPath(const FilePath& local_path) {
- NOTREACHED();
-}
-
} // namespace fileapi
diff --git a/webkit/fileapi/file_system_callback_dispatcher.h b/webkit/fileapi/file_system_callback_dispatcher.h
index 63824ed..e2d3caa 100644
--- a/webkit/fileapi/file_system_callback_dispatcher.h
+++ b/webkit/fileapi/file_system_callback_dispatcher.h
@@ -58,11 +58,6 @@ class FileSystemCallbackDispatcher {
virtual void DidOpenFile(
base::PlatformFile file,
base::ProcessHandle peer_handle);
-
- // Callback for the real local platform path lookup, where possible.
- // This isn't in WebFileSystemCallbacks.
- virtual void DidGetLocalPath(const FilePath& local_path);
-
};
} // namespace fileapi
diff --git a/webkit/fileapi/file_system_dir_url_request_job.cc b/webkit/fileapi/file_system_dir_url_request_job.cc
index fb75edf..05c21be 100644
--- a/webkit/fileapi/file_system_dir_url_request_job.cc
+++ b/webkit/fileapi/file_system_dir_url_request_job.cc
@@ -30,11 +30,67 @@ using net::URLRequestStatus;
namespace fileapi {
+static FilePath GetRelativePath(const GURL& url) {
+ FilePath relative_path;
+ GURL unused_url;
+ FileSystemType unused_type;
+ CrackFileSystemURL(url, &unused_url, &unused_type, &relative_path);
+ return relative_path;
+}
+
+class FileSystemDirURLRequestJob::CallbackDispatcher
+ : public FileSystemCallbackDispatcher {
+ public:
+ explicit CallbackDispatcher(FileSystemDirURLRequestJob* job)
+ : job_(job) {
+ DCHECK(job_);
+ }
+
+ // fileapi::FileSystemCallbackDispatcher overrides.
+ virtual void DidSucceed() OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidReadMetadata(const base::PlatformFileInfo& file_info,
+ const FilePath& platform_path) OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidReadDirectory(
+ const std::vector<base::FileUtilProxy::Entry>& entries,
+ bool has_more) OVERRIDE {
+ job_->DidReadDirectory(entries, has_more);
+ }
+
+ virtual void DidWrite(int64 bytes, bool complete) OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidOpenFileSystem(const std::string& name,
+ const GURL& root_path) OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidFail(base::PlatformFileError error_code) OVERRIDE {
+ int rv = net::ERR_FILE_NOT_FOUND;
+ if (error_code == base::PLATFORM_FILE_ERROR_INVALID_URL)
+ rv = net::ERR_INVALID_URL;
+ job_->NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, rv));
+ }
+
+ private:
+ // TODO(adamk): Get rid of the need for refcounting here by
+ // allowing FileSystemOperations to be cancelled.
+ scoped_refptr<FileSystemDirURLRequestJob> job_;
+ DISALLOW_COPY_AND_ASSIGN(CallbackDispatcher);
+};
+
FileSystemDirURLRequestJob::FileSystemDirURLRequestJob(
URLRequest* request, FileSystemContext* file_system_context,
scoped_refptr<base::MessageLoopProxy> file_thread_proxy)
- : FileSystemURLRequestJobBase(request, file_system_context,
- file_thread_proxy),
+ : URLRequestJob(request),
+ file_system_context_(file_system_context),
+ file_thread_proxy_(file_thread_proxy),
ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)),
ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)) {
}
@@ -57,22 +113,15 @@ bool FileSystemDirURLRequestJob::ReadRawData(net::IOBuffer* dest, int dest_size,
void FileSystemDirURLRequestJob::Start() {
MessageLoop::current()->PostTask(FROM_HERE,
method_factory_.NewRunnableMethod(
- &FileSystemURLRequestJobBase::StartAsync));
+ &FileSystemDirURLRequestJob::StartAsync));
}
void FileSystemDirURLRequestJob::Kill() {
URLRequestJob::Kill();
+ method_factory_.RevokeAll();
callback_factory_.RevokeAll();
}
-void FileSystemDirURLRequestJob::DidGetLocalPath(
- const FilePath& local_path) {
- absolute_file_path_ = local_path;
- base::FileUtilProxy::ReadDirectory(file_thread_proxy_, absolute_file_path_,
- callback_factory_.NewCallback(
- &FileSystemDirURLRequestJob::DidReadDirectory));
-}
-
bool FileSystemDirURLRequestJob::GetMimeType(std::string* mime_type) const {
*mime_type = "text/html";
return true;
@@ -83,21 +132,27 @@ bool FileSystemDirURLRequestJob::GetCharset(std::string* charset) {
return true;
}
+void FileSystemDirURLRequestJob::StartAsync() {
+ if (request_)
+ GetNewOperation()->ReadDirectory(request_->url());
+}
+
void FileSystemDirURLRequestJob::DidReadDirectory(
- base::PlatformFileError error_code,
- const std::vector<base::FileUtilProxy::Entry>& entries) {
- if (error_code != base::PLATFORM_FILE_OK) {
- NotifyFailed(error_code);
+ const std::vector<base::FileUtilProxy::Entry>& entries,
+ bool has_more) {
+ if (!request_)
return;
- }
+ if (data_.empty()) {
+ FilePath relative_path = GetRelativePath(request_->url());
#if defined(OS_WIN)
- const string16& title = relative_file_path_.value();
+ const string16& title = relative_path.value();
#elif defined(OS_POSIX)
- const string16& title = WideToUTF16(
- base::SysNativeMBToWide(relative_file_path_.value()));
+ const string16& title = WideToUTF16(
+ base::SysNativeMBToWide(relative_path.value()));
#endif
- data_.append(net::GetDirectoryListingHeader(ASCIIToUTF16("/") + title));
+ data_.append(net::GetDirectoryListingHeader(ASCIIToUTF16("/") + title));
+ }
typedef std::vector<base::FileUtilProxy::Entry>::const_iterator EntryIterator;
for (EntryIterator it = entries.begin(); it != entries.end(); ++it) {
@@ -112,8 +167,19 @@ void FileSystemDirURLRequestJob::DidReadDirectory(
name, std::string(), it->is_directory, 0, base::Time()));
}
- set_expected_content_size(data_.size());
- NotifyHeadersComplete();
+ if (has_more)
+ GetNewOperation()->ReadDirectory(request_->url());
+ else {
+ set_expected_content_size(data_.size());
+ NotifyHeadersComplete();
+ }
+}
+
+FileSystemOperation* FileSystemDirURLRequestJob::GetNewOperation() {
+ return new FileSystemOperation(new CallbackDispatcher(this),
+ file_thread_proxy_,
+ file_system_context_,
+ NULL);
}
} // namespace fileapi
diff --git a/webkit/fileapi/file_system_dir_url_request_job.h b/webkit/fileapi/file_system_dir_url_request_job.h
index e9f566f..1b41438 100644
--- a/webkit/fileapi/file_system_dir_url_request_job.h
+++ b/webkit/fileapi/file_system_dir_url_request_job.h
@@ -16,17 +16,17 @@
#include "base/platform_file.h"
#include "base/task.h"
#include "net/url_request/url_request_job.h"
-#include "webkit/fileapi/file_system_url_request_job_base.h"
namespace fileapi {
class FileSystemContext;
class FileSystemOperation;
// A request job that handles reading filesystem: URLs for directories.
-class FileSystemDirURLRequestJob : public FileSystemURLRequestJobBase {
+class FileSystemDirURLRequestJob : public net::URLRequestJob {
public:
FileSystemDirURLRequestJob(
- net::URLRequest* request, FileSystemContext* file_system_context,
+ net::URLRequest* request,
+ FileSystemContext* file_system_context,
scoped_refptr<base::MessageLoopProxy> file_thread_proxy);
// URLRequestJob methods:
@@ -40,17 +40,19 @@ class FileSystemDirURLRequestJob : public FileSystemURLRequestJobBase {
// TODO(adamk): Implement GetResponseInfo and GetResponseCode to simulate
// an HTTP response.
- protected:
- // FileSystemURLRequestJobBase methods.
- virtual void DidGetLocalPath(const FilePath& local_path);
+ private:
+ class CallbackDispatcher;
virtual ~FileSystemDirURLRequestJob();
- void DidReadDirectory(base::PlatformFileError error_code,
- const std::vector<base::FileUtilProxy::Entry>& entries);
- fileapi::FileSystemOperation* GetNewOperation();
+ void StartAsync();
+ void DidReadDirectory(const std::vector<base::FileUtilProxy::Entry>& entries,
+ bool has_more);
+ FileSystemOperation* GetNewOperation();
std::string data_;
+ FileSystemContext* file_system_context_;
+ scoped_refptr<base::MessageLoopProxy> file_thread_proxy_;
ScopedRunnableMethodFactory<FileSystemDirURLRequestJob> method_factory_;
base::ScopedCallbackFactory<FileSystemDirURLRequestJob> callback_factory_;
diff --git a/webkit/fileapi/file_system_dir_url_request_job_unittest.cc b/webkit/fileapi/file_system_dir_url_request_job_unittest.cc
index 388f7a1..a504f95 100644
--- a/webkit/fileapi/file_system_dir_url_request_job_unittest.cc
+++ b/webkit/fileapi/file_system_dir_url_request_job_unittest.cc
@@ -190,7 +190,7 @@ TEST_F(FileSystemDirURLRequestJobTest, NoSuchDirectory) {
TestRequest(CreateFileSystemURL("somedir/"));
ASSERT_FALSE(request_->is_pending());
ASSERT_FALSE(request_->status().is_success());
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, request_->status().os_error());
+ EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request_->status().os_error());
}
class QuitNowTask : public Task {
diff --git a/webkit/fileapi/file_system_operation.cc b/webkit/fileapi/file_system_operation.cc
index 8479808..d3f1f37 100644
--- a/webkit/fileapi/file_system_operation.cc
+++ b/webkit/fileapi/file_system_operation.cc
@@ -321,32 +321,6 @@ void FileSystemOperation::FileExists(const GURL& path) {
&FileSystemOperation::DidFileExists));
}
-void FileSystemOperation::GetLocalPath(const GURL& path) {
-#ifndef NDEBUG
- DCHECK(kOperationNone == pending_operation_);
- pending_operation_ = kOperationGetLocalPath;
-#endif
-
- FilePath virtual_path;
- GURL origin_url;
- FileSystemType type;
- FileSystemFileUtil* file_system_file_util;
- if (!VerifyFileSystemPathForRead(path, &origin_url, &type, &virtual_path,
- &file_system_file_util)) {
- delete this;
- return;
- }
- file_system_operation_context_.set_src_origin_url(origin_url);
- file_system_operation_context_.set_src_type(type);
- if (!file_system_operation_context_.src_file_system_file_util())
- file_system_operation_context_.set_src_file_system_file_util(
- file_system_file_util);
- FileSystemFileUtilProxy::GetLocalPath(
- file_system_operation_context_,
- proxy_, virtual_path, callback_factory_.NewCallback(
- &FileSystemOperation::DidGetLocalPath));
-}
-
void FileSystemOperation::GetMetadata(const GURL& path) {
#ifndef NDEBUG
DCHECK(kOperationNone == pending_operation_);
@@ -738,16 +712,6 @@ void FileSystemOperation::DidFileExists(
delete this;
}
-void FileSystemOperation::DidGetLocalPath(
- base::PlatformFileError rv,
- const FilePath& local_path) {
- if (rv == base::PLATFORM_FILE_OK)
- dispatcher_->DidGetLocalPath(local_path);
- else
- dispatcher_->DidFail(rv);
- delete this;
-}
-
void FileSystemOperation::DidGetMetadata(
base::PlatformFileError rv,
const base::PlatformFileInfo& file_info,
diff --git a/webkit/fileapi/file_system_operation.h b/webkit/fileapi/file_system_operation.h
index 6442d50..a4cee55 100644
--- a/webkit/fileapi/file_system_operation.h
+++ b/webkit/fileapi/file_system_operation.h
@@ -85,7 +85,6 @@ class FileSystemOperation {
const GURL& path,
int file_flags,
base::ProcessHandle peer_handle);
- void GetLocalPath(const GURL& path);
// Try to cancel the current operation [we support cancelling write or
// truncate only]. Report failure for the current operation, then tell the
@@ -156,8 +155,6 @@ class FileSystemOperation {
base::PlatformFileError rv,
base::PassPlatformFile file,
bool created);
- void DidGetLocalPath(base::PlatformFileError rv,
- const FilePath& local_path);
// Helper for Write().
void OnFileOpenedForWrite(
diff --git a/webkit/fileapi/file_system_operation_unittest.cc b/webkit/fileapi/file_system_operation_unittest.cc
index 0161362..3e349d6 100644
--- a/webkit/fileapi/file_system_operation_unittest.cc
+++ b/webkit/fileapi/file_system_operation_unittest.cc
@@ -186,11 +186,6 @@ class MockDispatcher : public FileSystemCallbackDispatcher {
test_->set_status(base::PLATFORM_FILE_OK);
}
- virtual void DidGetLocalPath(const FilePath& local_path) {
- test_->set_local_path(local_path);
- test_->set_status(base::PLATFORM_FILE_OK);
- }
-
virtual void DidReadMetadata(
const base::PlatformFileInfo& info,
const FilePath& platform_path) {
@@ -659,20 +654,6 @@ TEST_F(FileSystemOperationTest, TestExistsAndMetadataSuccess) {
EXPECT_EQ(PlatformPath(file_path), path());
}
-TEST_F(FileSystemOperationTest, TestGetLocalFilePathSuccess) {
- FilePath dir_path(CreateVirtualTemporaryDir());
- operation()->GetLocalPath(URLForPath(dir_path));
- MessageLoop::current()->RunAllPending();
- EXPECT_EQ(base::PLATFORM_FILE_OK, status());
- EXPECT_EQ(local_path().value(), PlatformPath(dir_path).value());
-
- FilePath file_path(CreateVirtualTemporaryFileInDir(dir_path));
- operation()->GetLocalPath(URLForPath(file_path));
- MessageLoop::current()->RunAllPending();
- EXPECT_EQ(base::PLATFORM_FILE_OK, status());
- EXPECT_EQ(local_path().value(), PlatformPath(file_path).value());
-}
-
TEST_F(FileSystemOperationTest, TestTypeMismatchErrors) {
FilePath dir_path(CreateVirtualTemporaryDir());
operation()->FileExists(URLForPath(dir_path));
diff --git a/webkit/fileapi/file_system_operation_write_unittest.cc b/webkit/fileapi/file_system_operation_write_unittest.cc
index 022fb00..cd571b6 100644
--- a/webkit/fileapi/file_system_operation_write_unittest.cc
+++ b/webkit/fileapi/file_system_operation_write_unittest.cc
@@ -150,10 +150,6 @@ class MockDispatcher : public FileSystemCallbackDispatcher {
ADD_FAILURE();
}
- virtual void DidGetLocalPath(const FilePath& local_path) {
- ADD_FAILURE();
- }
-
virtual void DidReadMetadata(
const base::PlatformFileInfo& info,
const FilePath& platform_path) {
diff --git a/webkit/fileapi/file_system_url_request_job.cc b/webkit/fileapi/file_system_url_request_job.cc
index 6b4732a..746c2c5 100644
--- a/webkit/fileapi/file_system_url_request_job.cc
+++ b/webkit/fileapi/file_system_url_request_job.cc
@@ -20,6 +20,8 @@
#include "net/http/http_response_info.h"
#include "net/http/http_util.h"
#include "net/url_request/url_request.h"
+#include "webkit/fileapi/file_system_callback_dispatcher.h"
+#include "webkit/fileapi/file_system_operation.h"
#include "webkit/fileapi/file_system_path_manager.h"
#include "webkit/fileapi/file_system_util.h"
@@ -49,11 +51,59 @@ static net::HttpResponseHeaders* CreateHttpResponseHeaders() {
return headers;
}
+class FileSystemURLRequestJob::CallbackDispatcher
+ : public FileSystemCallbackDispatcher {
+ public:
+ explicit CallbackDispatcher(FileSystemURLRequestJob* job)
+ : job_(job) {
+ DCHECK(job_);
+ }
+
+ // fileapi::FileSystemCallbackDispatcher overrides.
+ virtual void DidSucceed() OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidReadMetadata(const base::PlatformFileInfo& file_info,
+ const FilePath& platform_path) OVERRIDE {
+ job_->DidGetMetadata(file_info, platform_path);
+ }
+
+ virtual void DidReadDirectory(
+ const std::vector<base::FileUtilProxy::Entry>& entries,
+ bool has_more) OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidWrite(int64 bytes, bool complete) OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidOpenFileSystem(const std::string& name,
+ const GURL& root_path) OVERRIDE {
+ NOTREACHED();
+ }
+
+ virtual void DidFail(base::PlatformFileError error_code) OVERRIDE {
+ int rv = net::ERR_FILE_NOT_FOUND;
+ if (error_code == base::PLATFORM_FILE_ERROR_INVALID_URL)
+ rv = net::ERR_INVALID_URL;
+ job_->NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, rv));
+ }
+
+ private:
+ // TODO(adamk): Get rid of the need for refcounting here by
+ // allowing FileSystemOperations to be cancelled.
+ scoped_refptr<FileSystemURLRequestJob> job_;
+ DISALLOW_COPY_AND_ASSIGN(CallbackDispatcher);
+};
+
FileSystemURLRequestJob::FileSystemURLRequestJob(
URLRequest* request, FileSystemContext* file_system_context,
scoped_refptr<base::MessageLoopProxy> file_thread_proxy)
- : FileSystemURLRequestJobBase(request, file_system_context,
- file_thread_proxy),
+ : URLRequestJob(request),
+ file_system_context_(file_system_context),
+ file_thread_proxy_(file_thread_proxy),
ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)),
ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)),
ALLOW_THIS_IN_INITIALIZER_LIST(
@@ -82,6 +132,7 @@ void FileSystemURLRequestJob::Kill() {
stream_.reset(NULL);
}
URLRequestJob::Kill();
+ method_factory_.RevokeAll();
callback_factory_.RevokeAll();
}
@@ -146,12 +197,6 @@ void FileSystemURLRequestJob::SetExtraRequestHeaders(
}
}
-void FileSystemURLRequestJob::DidGetLocalPath(const FilePath& local_path) {
- absolute_file_path_ = local_path;
- base::FileUtilProxy::GetFileInfo(file_thread_proxy_, absolute_file_path_,
- callback_factory_.NewCallback(&FileSystemURLRequestJob::DidResolve));
-}
-
void FileSystemURLRequestJob::GetResponseInfo(net::HttpResponseInfo* info) {
if (response_info_.get())
*info = *response_info_;
@@ -163,21 +208,23 @@ int FileSystemURLRequestJob::GetResponseCode() const {
return URLRequestJob::GetResponseCode();
}
-void FileSystemURLRequestJob::DidResolve(base::PlatformFileError error_code,
- const base::PlatformFileInfo& file_info) {
+void FileSystemURLRequestJob::StartAsync() {
+ if (request_) {
+ (new FileSystemOperation(new CallbackDispatcher(this),
+ file_thread_proxy_,
+ file_system_context_,
+ NULL))->GetMetadata(request_->url());
+ }
+}
+
+void FileSystemURLRequestJob::DidGetMetadata(
+ const base::PlatformFileInfo& file_info,
+ const FilePath& platform_path) {
// We may have been orphaned...
if (!request_)
return;
- // We use FileSystemURLRequestJob to handle files as well as directories
- // without trailing slash.
- // If a directory does not exist, we return ERR_FILE_NOT_FOUND. Otherwise,
- // we will append trailing slash and redirect to FileDirJob.
- if (error_code != base::PLATFORM_FILE_OK) {
- NotifyFailed(error_code);
- return;
- }
-
+ absolute_file_path_ = platform_path;
is_directory_ = file_info.is_directory;
if (!byte_range_.ComputeBounds(file_info.size)) {
@@ -257,4 +304,8 @@ bool FileSystemURLRequestJob::IsRedirectResponse(GURL* location,
return false;
}
+void FileSystemURLRequestJob::NotifyFailed(int rv) {
+ NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, rv));
+}
+
} // namespace fileapi
diff --git a/webkit/fileapi/file_system_url_request_job.h b/webkit/fileapi/file_system_url_request_job.h
index dd3c45c..38baaba 100644
--- a/webkit/fileapi/file_system_url_request_job.h
+++ b/webkit/fileapi/file_system_url_request_job.h
@@ -17,7 +17,6 @@
#include "net/base/completion_callback.h"
#include "net/http/http_byte_range.h"
#include "net/url_request/url_request_job.h"
-#include "webkit/fileapi/file_system_url_request_job_base.h"
class GURL;
@@ -29,10 +28,11 @@ namespace fileapi {
class FileSystemContext;
// A request job that handles reading filesystem: URLs
-class FileSystemURLRequestJob : public FileSystemURLRequestJobBase {
+class FileSystemURLRequestJob : public net::URLRequestJob {
public:
FileSystemURLRequestJob(
- net::URLRequest* request, FileSystemContext* file_system_context,
+ net::URLRequest* request,
+ FileSystemContext* file_system_context,
scoped_refptr<base::MessageLoopProxy> file_thread_proxy);
// URLRequestJob methods:
@@ -47,23 +47,26 @@ class FileSystemURLRequestJob : public FileSystemURLRequestJobBase {
// FilterContext methods (via URLRequestJob):
virtual bool GetMimeType(std::string* mime_type) const;
- protected:
- // FileSystemURLRequestJobBase methods.
- virtual void DidGetLocalPath(const FilePath& local_path);
-
private:
+ class CallbackDispatcher;
+
virtual ~FileSystemURLRequestJob();
- void DidResolve(base::PlatformFileError error_code,
- const base::PlatformFileInfo& file_info);
+ void StartAsync();
+ void DidGetMetadata(const base::PlatformFileInfo& file_info,
+ const FilePath& platform_path);
void DidOpen(base::PlatformFileError error_code,
base::PassPlatformFile file, bool created);
void DidRead(int result);
+ void NotifyFailed(int rv);
+ FileSystemContext* file_system_context_;
+ scoped_refptr<base::MessageLoopProxy> file_thread_proxy_;
ScopedRunnableMethodFactory<FileSystemURLRequestJob> method_factory_;
base::ScopedCallbackFactory<FileSystemURLRequestJob> callback_factory_;
net::CompletionCallbackImpl<FileSystemURLRequestJob> io_callback_;
scoped_ptr<net::FileStream> stream_;
+ FilePath absolute_file_path_;
bool is_directory_;
scoped_ptr<net::HttpResponseInfo> response_info_;
int64 remaining_bytes_;
diff --git a/webkit/fileapi/file_system_url_request_job_base.cc b/webkit/fileapi/file_system_url_request_job_base.cc
deleted file mode 100644
index b9820d3..0000000
--- a/webkit/fileapi/file_system_url_request_job_base.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-#include "webkit/fileapi/file_system_url_request_job_base.h"
-
-#include "base/message_loop.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/url_request.h"
-
-using net::URLRequest;
-using net::URLRequestJob;
-using net::URLRequestStatus;
-
-namespace fileapi {
-
-class LocalPathCallbackDispatcher : public FileSystemCallbackDispatcher {
- public:
- explicit LocalPathCallbackDispatcher(FileSystemURLRequestJobBase* job)
- : job_(job) {
- DCHECK(job_);
- }
-
- // fileapi::FileSystemCallbackDispatcher overrides.
- virtual void DidSucceed() OVERRIDE {
- NOTREACHED();
- }
-
- virtual void DidGetLocalPath(const FilePath& local_path) {
- job_->OnGetLocalPath(local_path);
- }
-
- virtual void DidReadMetadata(const base::PlatformFileInfo& info,
- const FilePath& unused) OVERRIDE {
- NOTREACHED();
- }
-
- virtual void DidReadDirectory(
- const std::vector<base::FileUtilProxy::Entry>& entries,
- bool has_more) OVERRIDE {
- NOTREACHED();
- }
-
- virtual void DidWrite(int64 bytes, bool complete) OVERRIDE {
- NOTREACHED();
- }
-
- virtual void DidOpenFileSystem(const std::string& name,
- const GURL& root_path) OVERRIDE {
- NOTREACHED();
- }
-
- virtual void DidFail(base::PlatformFileError error_code) OVERRIDE {
- int rv = net::ERR_FILE_NOT_FOUND;
- if (error_code == base::PLATFORM_FILE_ERROR_INVALID_URL)
- rv = net::ERR_INVALID_URL;
- job_->NotifyFailed(rv);
- }
-
- private:
- // TODO(adamk): Get rid of the need for refcounting here by
- // allowing FileSystemOperations to be cancelled.
- scoped_refptr<FileSystemURLRequestJobBase> job_;
- DISALLOW_COPY_AND_ASSIGN(LocalPathCallbackDispatcher);
-};
-
-FileSystemURLRequestJobBase::FileSystemURLRequestJobBase(
- URLRequest* request, FileSystemContext* file_system_context,
- scoped_refptr<base::MessageLoopProxy> file_thread_proxy)
- : URLRequestJob(request),
- file_system_context_(file_system_context),
- file_thread_proxy_(file_thread_proxy) {
-}
-
-FileSystemURLRequestJobBase::~FileSystemURLRequestJobBase() {
-}
-
-FileSystemOperation* FileSystemURLRequestJobBase::GetNewOperation() {
- LocalPathCallbackDispatcher* dispatcher =
- new LocalPathCallbackDispatcher(this);
- FileSystemOperation* operation = new FileSystemOperation(
- dispatcher,
- file_thread_proxy_,
- file_system_context_,
- NULL);
- return operation;
-}
-
-void FileSystemURLRequestJobBase::StartAsync() {
- GetNewOperation()->GetLocalPath(request_->url());
-}
-
-void FileSystemURLRequestJobBase::NotifyFailed(int rv) {
- NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, rv));
-}
-
-void FileSystemURLRequestJobBase::OnGetLocalPath(
- const FilePath& local_path) {
- DidGetLocalPath(local_path);
-}
-
-} // namespace fileapi
diff --git a/webkit/fileapi/file_system_url_request_job_base.h b/webkit/fileapi/file_system_url_request_job_base.h
deleted file mode 100644
index 91edc26..0000000
--- a/webkit/fileapi/file_system_url_request_job_base.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBKIT_FILEAPI_FILE_SYSTEM_URL_REQUEST_JOB_BASE_H_
-#define WEBKIT_FILEAPI_FILE_SYSTEM_URL_REQUEST_JOB_BASE_H_
-#pragma once
-
-#include "base/file_path.h"
-#include "base/message_loop_proxy.h"
-#include "net/url_request/url_request_job.h"
-#include "webkit/fileapi/file_system_callback_dispatcher.h"
-#include "webkit/fileapi/file_system_context.h"
-#include "webkit/fileapi/file_system_operation.h"
-
-namespace fileapi {
-
-// A base class for request jobs that handle reading filesystem: URLs for
-// files and directories.
-class FileSystemURLRequestJobBase : public net::URLRequestJob {
- public:
- FileSystemURLRequestJobBase(
- net::URLRequest* request, FileSystemContext* file_system_context,
- scoped_refptr<base::MessageLoopProxy> file_thread_proxy);
-
- virtual ~FileSystemURLRequestJobBase();
-
- void StartAsync();
-
- protected:
- virtual void DidGetLocalPath(const FilePath& local_path) = 0 ;
-
- void NotifyFailed(int rv);
- FileSystemOperation* GetNewOperation();
-
- FilePath relative_file_path_;
- FilePath absolute_file_path_;
- scoped_refptr<FileSystemContext> file_system_context_;
- scoped_refptr<base::MessageLoopProxy> file_thread_proxy_;
-
- private:
- friend class LocalPathCallbackDispatcher;
- void OnGetLocalPath(const FilePath& local_path);
- DISALLOW_COPY_AND_ASSIGN(FileSystemURLRequestJobBase);
-};
-
-} // namespace fileapi
-
-#endif // WEBKIT_FILEAPI_FILE_SYSTEM_URL_REQUEST_JOB_BASE_H_
diff --git a/webkit/fileapi/file_system_url_request_job_unittest.cc b/webkit/fileapi/file_system_url_request_job_unittest.cc
index d0e5ae3..0012c64 100644
--- a/webkit/fileapi/file_system_url_request_job_unittest.cc
+++ b/webkit/fileapi/file_system_url_request_job_unittest.cc
@@ -301,7 +301,7 @@ TEST_F(FileSystemURLRequestJobTest, NoSuchFile) {
TestRequest(CreateFileSystemURL("somefile"));
ASSERT_FALSE(request_->is_pending());
EXPECT_TRUE(delegate_->request_failed());
- EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, request_->status().os_error());
+ EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request_->status().os_error());
}
class QuitNowTask : public Task {
diff --git a/webkit/fileapi/webkit_fileapi.gypi b/webkit/fileapi/webkit_fileapi.gypi
index fc0c748..3179d28 100644
--- a/webkit/fileapi/webkit_fileapi.gypi
+++ b/webkit/fileapi/webkit_fileapi.gypi
@@ -44,8 +44,6 @@
'file_system_types.h',
'file_system_url_request_job.cc',
'file_system_url_request_job.h',
- 'file_system_url_request_job_base.cc',
- 'file_system_url_request_job_base.h',
'file_system_url_request_job_factory.cc',
'file_system_url_request_job_factory.h',
'file_system_usage_cache.cc',