diff options
Diffstat (limited to 'webkit/browser/fileapi/file_system_url_request_job.cc')
-rw-r--r-- | webkit/browser/fileapi/file_system_url_request_job.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/webkit/browser/fileapi/file_system_url_request_job.cc b/webkit/browser/fileapi/file_system_url_request_job.cc index fe445649..8ccc5bb 100644 --- a/webkit/browser/fileapi/file_system_url_request_job.cc +++ b/webkit/browser/fileapi/file_system_url_request_job.cc @@ -57,8 +57,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 +159,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,6 +178,15 @@ 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::File::Error error_code, const base::File::Info& file_info) { |