diff options
Diffstat (limited to 'chromium/webkit/browser/fileapi/file_system_url_request_job.cc')
-rw-r--r-- | chromium/webkit/browser/fileapi/file_system_url_request_job.cc | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/chromium/webkit/browser/fileapi/file_system_url_request_job.cc b/chromium/webkit/browser/fileapi/file_system_url_request_job.cc index 57db3006557..d8f610d5744 100644 --- a/chromium/webkit/browser/fileapi/file_system_url_request_job.cc +++ b/chromium/webkit/browser/fileapi/file_system_url_request_job.cc @@ -12,7 +12,6 @@ #include "base/files/file_util_proxy.h" #include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop_proxy.h" -#include "base/platform_file.h" #include "base/threading/thread_restrictions.h" #include "base/time/time.h" #include "build/build_config.h" @@ -57,8 +56,10 @@ static net::HttpResponseHeaders* CreateHttpResponseHeaders() { FileSystemURLRequestJob::FileSystemURLRequestJob( URLRequest* request, NetworkDelegate* network_delegate, + const std::string& storage_domain, FileSystemContext* file_system_context) : URLRequestJob(request, network_delegate), + storage_domain_(storage_domain), file_system_context_(file_system_context), is_directory_(false), remaining_bytes_(0), @@ -157,6 +158,14 @@ void FileSystemURLRequestJob::StartAsync() { return; DCHECK(!reader_.get()); url_ = file_system_context_->CrackURL(request_->url()); + if (!url_.is_valid()) { + file_system_context_->AttemptAutoMountForURLRequest( + request_, + storage_domain_, + base::Bind(&FileSystemURLRequestJob::DidAttemptAutoMount, + weak_factory_.GetWeakPtr())); + return; + } if (!file_system_context_->CanServeURLRequest(url_)) { // In incognito mode the API is not usable and there should be no data. NotifyFailed(net::ERR_FILE_NOT_FOUND); @@ -168,11 +177,20 @@ void FileSystemURLRequestJob::StartAsync() { weak_factory_.GetWeakPtr())); } +void FileSystemURLRequestJob::DidAttemptAutoMount(base::File::Error result) { + if (result >= 0 && + file_system_context_->CrackURL(request_->url()).is_valid()) { + StartAsync(); + } else { + NotifyFailed(net::ERR_FILE_NOT_FOUND); + } +} + void FileSystemURLRequestJob::DidGetMetadata( - base::PlatformFileError error_code, - const base::PlatformFileInfo& file_info) { - if (error_code != base::PLATFORM_FILE_OK) { - NotifyFailed(error_code == base::PLATFORM_FILE_ERROR_INVALID_URL ? + base::File::Error error_code, + const base::File::Info& file_info) { + if (error_code != base::File::FILE_OK) { + NotifyFailed(error_code == base::File::FILE_ERROR_INVALID_URL ? net::ERR_INVALID_URL : net::ERR_FILE_NOT_FOUND); return; } |