diff options
author | adamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-19 23:39:56 +0000 |
---|---|---|
committer | adamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-19 23:39:56 +0000 |
commit | 483cad04e9efc1b42f8b2b5b118a95a5650d3c3e (patch) | |
tree | 9b36f45f614a08e6c81798bb093101181dec195c /webkit/fileapi | |
parent | 048a1d02a9e9e42e63df1a26417d3f79494afb7c (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | webkit/fileapi/file_system_callback_dispatcher.h | 5 | ||||
-rw-r--r-- | webkit/fileapi/file_system_dir_url_request_job.cc | 110 | ||||
-rw-r--r-- | webkit/fileapi/file_system_dir_url_request_job.h | 20 | ||||
-rw-r--r-- | webkit/fileapi/file_system_dir_url_request_job_unittest.cc | 2 | ||||
-rw-r--r-- | webkit/fileapi/file_system_operation.cc | 36 | ||||
-rw-r--r-- | webkit/fileapi/file_system_operation.h | 3 | ||||
-rw-r--r-- | webkit/fileapi/file_system_operation_unittest.cc | 19 | ||||
-rw-r--r-- | webkit/fileapi/file_system_operation_write_unittest.cc | 4 | ||||
-rw-r--r-- | webkit/fileapi/file_system_url_request_job.cc | 89 | ||||
-rw-r--r-- | webkit/fileapi/file_system_url_request_job.h | 21 | ||||
-rw-r--r-- | webkit/fileapi/file_system_url_request_job_base.cc | 101 | ||||
-rw-r--r-- | webkit/fileapi/file_system_url_request_job_base.h | 49 | ||||
-rw-r--r-- | webkit/fileapi/file_system_url_request_job_unittest.cc | 2 | ||||
-rw-r--r-- | webkit/fileapi/webkit_fileapi.gypi | 2 |
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', |