diff options
Diffstat (limited to 'chromium/webkit/browser/fileapi/file_writer_delegate.cc')
-rw-r--r-- | chromium/webkit/browser/fileapi/file_writer_delegate.cc | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/chromium/webkit/browser/fileapi/file_writer_delegate.cc b/chromium/webkit/browser/fileapi/file_writer_delegate.cc index 295cd642ab1..83112780cb9 100644 --- a/chromium/webkit/browser/fileapi/file_writer_delegate.cc +++ b/chromium/webkit/browser/fileapi/file_writer_delegate.cc @@ -21,9 +21,11 @@ namespace fileapi { static const int kReadBufSize = 32768; FileWriterDelegate::FileWriterDelegate( - scoped_ptr<FileStreamWriter> file_stream_writer) + scoped_ptr<FileStreamWriter> file_stream_writer, + FlushPolicy flush_policy) : file_stream_writer_(file_stream_writer.Pass()), writing_started_(false), + flush_policy_(flush_policy), bytes_written_backlog_(0), bytes_written_(0), bytes_read_(0), @@ -54,7 +56,7 @@ void FileWriterDelegate::Cancel() { // Return true to finish immediately if we have no pending writes. // Otherwise we'll do the final cleanup in the Cancel callback. if (status != net::ERR_IO_PENDING) { - write_callback_.Run(base::PLATFORM_FILE_ERROR_ABORT, 0, + write_callback_.Run(base::File::FILE_ERROR_ABORT, 0, GetCompletionStatusOnError()); } } @@ -63,33 +65,33 @@ void FileWriterDelegate::OnReceivedRedirect(net::URLRequest* request, const GURL& new_url, bool* defer_redirect) { NOTREACHED(); - OnError(base::PLATFORM_FILE_ERROR_SECURITY); + OnError(base::File::FILE_ERROR_SECURITY); } void FileWriterDelegate::OnAuthRequired(net::URLRequest* request, net::AuthChallengeInfo* auth_info) { NOTREACHED(); - OnError(base::PLATFORM_FILE_ERROR_SECURITY); + OnError(base::File::FILE_ERROR_SECURITY); } void FileWriterDelegate::OnCertificateRequested( net::URLRequest* request, net::SSLCertRequestInfo* cert_request_info) { NOTREACHED(); - OnError(base::PLATFORM_FILE_ERROR_SECURITY); + OnError(base::File::FILE_ERROR_SECURITY); } void FileWriterDelegate::OnSSLCertificateError(net::URLRequest* request, const net::SSLInfo& ssl_info, bool fatal) { NOTREACHED(); - OnError(base::PLATFORM_FILE_ERROR_SECURITY); + OnError(base::File::FILE_ERROR_SECURITY); } void FileWriterDelegate::OnResponseStarted(net::URLRequest* request) { DCHECK_EQ(request_.get(), request); if (!request->status().is_success() || request->GetResponseCode() != 200) { - OnError(base::PLATFORM_FILE_ERROR_FAILED); + OnError(base::File::FILE_ERROR_FAILED); return; } Read(); @@ -99,7 +101,7 @@ void FileWriterDelegate::OnReadCompleted(net::URLRequest* request, int bytes_read) { DCHECK_EQ(request_.get(), request); if (!request->status().is_success()) { - OnError(base::PLATFORM_FILE_ERROR_FAILED); + OnError(base::File::FILE_ERROR_FAILED); return; } OnDataReceived(bytes_read); @@ -114,7 +116,7 @@ void FileWriterDelegate::Read() { base::Bind(&FileWriterDelegate::OnDataReceived, weak_factory_.GetWeakPtr(), bytes_read_)); } else if (!request_->status().is_io_pending()) { - OnError(base::PLATFORM_FILE_ERROR_FAILED); + OnError(base::File::FILE_ERROR_FAILED); } } @@ -145,7 +147,7 @@ void FileWriterDelegate::Write() { base::Bind(&FileWriterDelegate::OnDataWritten, weak_factory_.GetWeakPtr(), write_response)); } else if (net::ERR_IO_PENDING != write_response) { - OnError(NetErrorToPlatformFileError(write_response)); + OnError(NetErrorToFileError(write_response)); } } @@ -159,7 +161,7 @@ void FileWriterDelegate::OnDataWritten(int write_response) { else Write(); } else { - OnError(NetErrorToPlatformFileError(write_response)); + OnError(NetErrorToFileError(write_response)); } } @@ -168,14 +170,14 @@ FileWriterDelegate::GetCompletionStatusOnError() const { return writing_started_ ? ERROR_WRITE_STARTED : ERROR_WRITE_NOT_STARTED; } -void FileWriterDelegate::OnError(base::PlatformFileError error) { +void FileWriterDelegate::OnError(base::File::Error error) { if (request_) { request_->set_delegate(NULL); request_->Cancel(); } if (writing_started_) - FlushForCompletion(error, 0, ERROR_WRITE_STARTED); + MaybeFlushForCompletion(error, 0, ERROR_WRITE_STARTED); else write_callback_.Run(error, 0, ERROR_WRITE_NOT_STARTED); } @@ -192,10 +194,10 @@ void FileWriterDelegate::OnProgress(int bytes_written, bool done) { bytes_written_backlog_ = 0; if (done) { - FlushForCompletion(base::PLATFORM_FILE_OK, bytes_written, - SUCCESS_COMPLETED); + MaybeFlushForCompletion(base::File::FILE_OK, bytes_written, + SUCCESS_COMPLETED); } else { - write_callback_.Run(base::PLATFORM_FILE_OK, bytes_written, + write_callback_.Run(base::File::FILE_OK, bytes_written, SUCCESS_IO_PENDING); } return; @@ -204,14 +206,20 @@ void FileWriterDelegate::OnProgress(int bytes_written, bool done) { } void FileWriterDelegate::OnWriteCancelled(int status) { - write_callback_.Run(base::PLATFORM_FILE_ERROR_ABORT, 0, + write_callback_.Run(base::File::FILE_ERROR_ABORT, 0, GetCompletionStatusOnError()); } -void FileWriterDelegate::FlushForCompletion( - base::PlatformFileError error, +void FileWriterDelegate::MaybeFlushForCompletion( + base::File::Error error, int bytes_written, WriteProgressStatus progress_status) { + if (flush_policy_ == NO_FLUSH_ON_COMPLETION) { + write_callback_.Run(error, bytes_written, progress_status); + return; + } + DCHECK_EQ(FLUSH_ON_COMPLETION, flush_policy_); + int flush_error = file_stream_writer_->Flush( base::Bind(&FileWriterDelegate::OnFlushed, weak_factory_.GetWeakPtr(), error, bytes_written, progress_status)); @@ -219,14 +227,14 @@ void FileWriterDelegate::FlushForCompletion( OnFlushed(error, bytes_written, progress_status, flush_error); } -void FileWriterDelegate::OnFlushed(base::PlatformFileError error, +void FileWriterDelegate::OnFlushed(base::File::Error error, int bytes_written, WriteProgressStatus progress_status, int flush_error) { - if (error == base::PLATFORM_FILE_OK && flush_error != net::OK) { + if (error == base::File::FILE_OK && flush_error != net::OK) { // If the Flush introduced an error, overwrite the status. // Otherwise, keep the original error status. - error = NetErrorToPlatformFileError(flush_error); + error = NetErrorToFileError(flush_error); progress_status = GetCompletionStatusOnError(); } write_callback_.Run(error, bytes_written, progress_status); |