Index: chrome/browser/predictors/resource_prefetcher.cc |
diff --git a/chrome/browser/predictors/resource_prefetcher.cc b/chrome/browser/predictors/resource_prefetcher.cc |
index 422e67183b7ace968d1485b308a170f613d71b39..e62d245d1393f7b79538c6bb6f988b1ec9c6fcb0 100644 |
--- a/chrome/browser/predictors/resource_prefetcher.cc |
+++ b/chrome/browser/predictors/resource_prefetcher.cc |
@@ -22,6 +22,7 @@ static const size_t kResourceBufferSizeBytes = 50000; |
} // namespace |
namespace predictors { |
+ |
ResourcePrefetcher::ResourcePrefetcher( |
Delegate* delegate, |
const ResourcePrefetchPredictorConfig& config, |
@@ -137,33 +138,19 @@ void ResourcePrefetcher::FinishRequest(net::URLRequest* request) { |
} |
void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) { |
- bool status = true; |
- while (status) { |
- int bytes_read = 0; |
+ int bytes_read = 0; |
+ do { |
scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer( |
kResourceBufferSizeBytes)); |
- status = request->Read(buffer.get(), kResourceBufferSizeBytes, &bytes_read); |
- |
- if (status) { |
- status = ShouldContinueReadingRequest(request, bytes_read); |
- } else if (!request->status().is_success()) { |
+ bytes_read = request->Read(buffer.get(), kResourceBufferSizeBytes); |
+ if (bytes_read == net::ERR_IO_PENDING) { |
+ return; |
+ } else if (bytes_read <= 0) { |
FinishRequest(request); |
return; |
} |
- } |
-} |
- |
-bool ResourcePrefetcher::ShouldContinueReadingRequest(net::URLRequest* request, |
- int bytes_read) { |
- if (bytes_read == 0) { // When bytes_read == 0, no more data. |
- if (request->was_cached()) |
- FinishRequest(request); |
- else |
- FinishRequest(request); |
- return false; |
- } |
- return true; |
+ } while (bytes_read > 0); |
} |
void ResourcePrefetcher::OnReceivedRedirect( |
@@ -190,22 +177,29 @@ void ResourcePrefetcher::OnSSLCertificateError(net::URLRequest* request, |
FinishRequest(request); |
} |
-void ResourcePrefetcher::OnResponseStarted(net::URLRequest* request) { |
- // TODO(shishir): Do not read cached entries, or ones that are not cacheable. |
- if (request->status().is_success()) |
- ReadFullResponse(request); |
- else |
+void ResourcePrefetcher::OnResponseStarted(net::URLRequest* request, |
+ int net_error) { |
+ DCHECK_NE(net::ERR_IO_PENDING, net_error); |
+ |
+ if (net_error != net::OK) { |
FinishRequest(request); |
+ return; |
+ } |
+ |
+ // TODO(shishir): Do not read cached entries, or ones that are not cacheable. |
+ ReadFullResponse(request); |
} |
void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request, |
int bytes_read) { |
- if (!request->status().is_success()) { |
+ DCHECK_NE(net::ERR_IO_PENDING, bytes_read); |
+ |
+ if (bytes_read <= 0) { |
FinishRequest(request); |
return; |
} |
- if (ShouldContinueReadingRequest(request, bytes_read)) |
+ if (bytes_read > 0) |
ReadFullResponse(request); |
} |