Index: chrome/browser/predictors/resource_prefetcher.cc |
diff --git a/chrome/browser/predictors/resource_prefetcher.cc b/chrome/browser/predictors/resource_prefetcher.cc |
index 44b1057c4165839429cda432b446087e27efc25b..1419ffc9561a29026a34d59765d7aaa2a24b11a1 100644 |
--- a/chrome/browser/predictors/resource_prefetcher.cc |
+++ b/chrome/browser/predictors/resource_prefetcher.cc |
@@ -169,17 +169,17 @@ void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) { |
kResourceBufferSizeBytes)); |
status = request->Read(buffer, kResourceBufferSizeBytes, &bytes_read); |
- if (status) { |
- if (request->status().error()) { |
- FinishRequest(request, Request::PREFETCH_STATUS_FAILED); |
- return; |
- } else if (bytes_read == 0) { |
- if (request->was_cached()) |
- FinishRequest(request, Request::PREFETCH_STATUS_FROM_CACHE); |
- else |
- FinishRequest(request, Request::PREFETCH_STATUS_FROM_NETWORK); |
- return; |
- } |
+ if (request->status().error()) { |
rvargas (doing something else)
2013/01/04 02:02:40
The contract is not to inspect status() regardless
Shishir
2013/01/04 02:21:14
From the comment on the Read function:
// If a rea
|
+ FinishRequest(request, Request::PREFETCH_STATUS_FAILED); |
+ return; |
+ } |
+ |
+ if (status && bytes_read == 0) { // When bytes_read == 0, no more data. |
+ if (request->was_cached()) |
+ FinishRequest(request, Request::PREFETCH_STATUS_FROM_CACHE); |
+ else |
+ FinishRequest(request, Request::PREFETCH_STATUS_FROM_NETWORK); |
+ return; |
} |
} |
} |
@@ -223,6 +223,15 @@ void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request, |
return; |
} |
+ // If the bytes_read is == 0, there is no more data to read. |
+ if (bytes_read == 0) { |
+ if (request->was_cached()) |
+ FinishRequest(request, Request::PREFETCH_STATUS_FROM_CACHE); |
+ else |
+ FinishRequest(request, Request::PREFETCH_STATUS_FROM_NETWORK); |
+ return; |
+ } |
+ |
ReadFullResponse(request); |
} |