| 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);
|
| }
|
|
|
|
|