summaryrefslogtreecommitdiffstats
path: root/chromium/webkit/browser/fileapi/file_writer_delegate.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/webkit/browser/fileapi/file_writer_delegate.cc')
-rw-r--r--chromium/webkit/browser/fileapi/file_writer_delegate.cc52
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);