| 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..c9814e12fa20a3eaa1f04469303a0765512bd602 100644
|
| --- a/chrome/browser/predictors/resource_prefetcher.cc
|
| +++ b/chrome/browser/predictors/resource_prefetcher.cc
|
| @@ -170,20 +170,27 @@ void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) {
|
| 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;
|
| - }
|
| + status = ShouldContinueReadingRequest(request, bytes_read);
|
| + } else if (request->status().error()) {
|
| + FinishRequest(request, Request::PREFETCH_STATUS_FAILED);
|
| + 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, Request::PREFETCH_STATUS_FROM_CACHE);
|
| + else
|
| + FinishRequest(request, Request::PREFETCH_STATUS_FROM_NETWORK);
|
| + return false;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| void ResourcePrefetcher::OnReceivedRedirect(net::URLRequest* request,
|
| const GURL& new_url,
|
| bool* defer_redirect) {
|
| @@ -213,6 +220,7 @@ void ResourcePrefetcher::OnResponseStarted(net::URLRequest* request) {
|
| return;
|
| }
|
|
|
| + // TODO(shishir): Do not read cached entries, or ones that are not cacheable.
|
| ReadFullResponse(request);
|
| }
|
|
|
| @@ -223,7 +231,8 @@ void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request,
|
| return;
|
| }
|
|
|
| - ReadFullResponse(request);
|
| + if (ShouldContinueReadingRequest(request, bytes_read))
|
| + ReadFullResponse(request);
|
| }
|
|
|
| } // namespace predictors
|
|
|