Index: components/certificate_transparency/log_proof_fetcher.cc |
diff --git a/components/certificate_transparency/log_proof_fetcher.cc b/components/certificate_transparency/log_proof_fetcher.cc |
index 53c2e7c73398e654918e0fa06fa1fc9add0383d1..57c2489acd472bde9a9dcb67cd6dd70be9abea92 100644 |
--- a/components/certificate_transparency/log_proof_fetcher.cc |
+++ b/components/certificate_transparency/log_proof_fetcher.cc |
@@ -47,7 +47,7 @@ class LogFetcher : public net::URLRequest::Delegate { |
~LogFetcher() override {} |
// net::URLRequest::Delegate |
- void OnResponseStarted(net::URLRequest* request) override; |
+ void OnResponseStarted(net::URLRequest* request, int net_error) override; |
void OnReadCompleted(net::URLRequest* request, int bytes_read) override; |
const std::string& assembled_response() const { return assembled_response_; } |
@@ -57,7 +57,7 @@ class LogFetcher : public net::URLRequest::Delegate { |
// Returns true if another read should be started, false if the read |
// failed completely or we have to wait for OnResponseStarted to |
// be called. |
- bool HandleReadResult(int bytes_read); |
+ bool HandleReadResult(int result); |
// Calls URLRequest::Read on |request| repeatedly, until HandleReadResult |
// indicates it should no longer be called. Usually this would be when there |
@@ -102,12 +102,13 @@ LogFetcher::LogFetcher(net::URLRequestContext* request_context, |
url_request_->Start(); |
} |
-void LogFetcher::OnResponseStarted(net::URLRequest* request) { |
+void LogFetcher::OnResponseStarted(net::URLRequest* request, int net_error) { |
+ DCHECK_NE(net::ERR_IO_PENDING, net_error); |
DCHECK_EQ(url_request_.get(), request); |
int http_response_code = request->GetResponseCode(); |
- if (!request->status().is_success()) { |
- InvokeFailureCallback(request->status().error(), http_response_code); |
+ if (net_error != net::OK) { |
+ InvokeFailureCallback(net_error, http_response_code); |
return; |
} |
@@ -133,53 +134,43 @@ void LogFetcher::OnReadCompleted(net::URLRequest* request, int bytes_read) { |
StartNextReadLoop(); |
} |
-bool LogFetcher::HandleReadResult(int bytes_read) { |
- // Start by checking for an error condition. |
- // If there are errors, invoke the failure callback and clean up the |
- // request. |
- if (!url_request_->status().is_success() || bytes_read < 0) { |
- int net_error = url_request_->status().error(); |
- if (net_error == net::OK) |
- net_error = net::URLRequestStatus::FAILED; |
- |
- InvokeFailureCallback(net_error, net::HTTP_OK); |
+bool LogFetcher::HandleReadResult(int result) { |
+ if (result == net::ERR_IO_PENDING) |
return false; |
- } |
- // Not an error, but no data available, so wait for OnReadCompleted |
- // callback. |
- if (url_request_->status().is_io_pending()) |
+ if (result < 0) { |
+ InvokeFailureCallback(result, net::HTTP_OK); |
return false; |
+ } |
// Nothing more to read from the stream - finish handling the response. |
- if (bytes_read == 0) { |
+ if (result == 0) { |
RequestComplete(); |
return false; |
} |
// Data is available, collect it and indicate another read is needed. |
- DCHECK_GE(bytes_read, 0); |
- // |bytes_read| is non-negative at this point, casting to size_t should be |
+ DCHECK_GE(result, 0); |
+ // |result| is non-negative at this point, casting to size_t should be |
// safe. |
- if (base::checked_cast<size_t>(bytes_read) > |
+ if (base::checked_cast<size_t>(result) > |
LogProofFetcher::kMaxLogResponseSizeInBytes || |
LogProofFetcher::kMaxLogResponseSizeInBytes < |
- (assembled_response_.size() + bytes_read)) { |
+ (assembled_response_.size() + result)) { |
// Log response is too big, invoke the failure callback. |
InvokeFailureCallback(net::ERR_FILE_TOO_BIG, net::HTTP_OK); |
return false; |
} |
- assembled_response_.append(response_buffer_->data(), bytes_read); |
+ assembled_response_.append(response_buffer_->data(), result); |
return true; |
} |
void LogFetcher::StartNextReadLoop() { |
bool continue_reading = true; |
while (continue_reading) { |
- int read_bytes = 0; |
- url_request_->Read(response_buffer_.get(), response_buffer_->size(), |
- &read_bytes); |
+ int read_bytes = |
+ url_request_->Read(response_buffer_.get(), response_buffer_->size()); |
continue_reading = HandleReadResult(read_bytes); |
} |
} |