Index: net/url_request/url_fetcher_core.cc |
diff --git a/net/url_request/url_fetcher_core.cc b/net/url_request/url_fetcher_core.cc |
index e25fc95a16bc3c8412ddfd8d141241243b5bf570..bd28b4b0161af2c205a3c2cd1766fbc15ef5ab3d 100644 |
--- a/net/url_request/url_fetcher_core.cc |
+++ b/net/url_request/url_fetcher_core.cc |
@@ -31,6 +31,8 @@ const int kUploadProgressTimerInterval = 100; |
bool g_interception_enabled = false; |
bool g_ignore_certificate_requests = false; |
+void EmptyCompletionCallback(int result) {} |
+ |
} // namespace |
namespace net { |
@@ -425,7 +427,6 @@ void URLFetcherCore::OnReadCompleted(URLRequest* request, |
current_response_bytes_ += bytes_read; |
InformDelegateDownloadProgress(); |
- InformDelegateDownloadDataIfNecessary(bytes_read); |
const int result = |
WriteBuffer(new DrainableIOBuffer(buffer_.get(), bytes_read)); |
@@ -650,7 +651,6 @@ void URLFetcherCore::CancelURLRequest(int error) { |
url_request_data_key_ = NULL; |
url_request_create_data_callback_.Reset(); |
was_cancelled_ = true; |
- response_writer_.reset(); |
} |
void URLFetcherCore::OnCompletedURLRequest( |
@@ -801,12 +801,8 @@ int URLFetcherCore::WriteBuffer(scoped_refptr<DrainableIOBuffer> data) { |
data->BytesRemaining(), |
base::Bind(&URLFetcherCore::DidWriteBuffer, this, data)); |
if (result < 0) { |
- if (result != ERR_IO_PENDING) { |
- CancelURLRequest(result); |
- delegate_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind(&URLFetcherCore::InformDelegateFetchIsComplete, this)); |
- } |
+ if (result != ERR_IO_PENDING) |
+ DidWriteBuffer(data, result); |
return result; |
} |
data->DidConsume(result); |
@@ -818,6 +814,7 @@ void URLFetcherCore::DidWriteBuffer(scoped_refptr<DrainableIOBuffer> data, |
int result) { |
if (result < 0) { // Handle errors. |
CancelURLRequest(result); |
+ response_writer_->Finish(base::Bind(&EmptyCompletionCallback)); |
delegate_task_runner_->PostTask( |
FROM_HERE, |
base::Bind(&URLFetcherCore::InformDelegateFetchIsComplete, this)); |
@@ -892,24 +889,4 @@ void URLFetcherCore::InformDelegateDownloadProgressInDelegateThread( |
delegate_->OnURLFetchDownloadProgress(fetcher_, current, total); |
} |
-void URLFetcherCore::InformDelegateDownloadDataIfNecessary(int bytes_read) { |
- DCHECK(network_task_runner_->BelongsToCurrentThread()); |
- if (delegate_ && delegate_->ShouldSendDownloadData()) { |
- scoped_ptr<std::string> download_data( |
- new std::string(buffer_->data(), bytes_read)); |
- delegate_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &URLFetcherCore::InformDelegateDownloadDataInDelegateThread, |
- this, base::Passed(&download_data))); |
- } |
-} |
- |
-void URLFetcherCore::InformDelegateDownloadDataInDelegateThread( |
- scoped_ptr<std::string> download_data) { |
- DCHECK(delegate_task_runner_->BelongsToCurrentThread()); |
- if (delegate_) |
- delegate_->OnURLFetchDownloadData(fetcher_, download_data.Pass()); |
-} |
- |
} // namespace net |