Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/predictors/resource_prefetcher.h" | 5 #include "chrome/browser/predictors/resource_prefetcher.h" |
| 6 | 6 |
| 7 #include <iterator> | 7 #include <iterator> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 159 | 159 |
| 160 TryToLaunchPrefetchRequests(); | 160 TryToLaunchPrefetchRequests(); |
| 161 } | 161 } |
| 162 | 162 |
| 163 void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) { | 163 void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) { |
| 164 bool status = true; | 164 bool status = true; |
| 165 while (status) { | 165 while (status) { |
| 166 int bytes_read = 0; | 166 int bytes_read = 0; |
| 167 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer( | 167 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer( |
| 168 kResourceBufferSizeBytes)); | 168 kResourceBufferSizeBytes)); |
| 169 status = request->Read(buffer.get(), kResourceBufferSizeBytes, &bytes_read); | 169 bytes_read = request->Read(buffer.get(), kResourceBufferSizeBytes); |
| 170 | 170 |
| 171 if (status) { | 171 if (bytes_read >= 0) { |
| 172 status = ShouldContinueReadingRequest(request, bytes_read); | 172 status = ShouldContinueReadingRequest(request, bytes_read); |
| 173 } else if (!request->status().is_success()) { | 173 } else if (bytes_read < 0) { |
|
pasko
2016/09/21 18:14:02
why checking the condition again?
this equivalent
pasko
2016/09/29 13:51:40
please respond to this comment
maksims (do not use this acc)
2016/09/30 06:06:07
Sorry. Right, done!
| |
| 174 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); | 174 if (bytes_read != net::ERR_IO_PENDING) { |
| 175 return; | 175 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); |
| 176 return; | |
| 177 } | |
| 176 } | 178 } |
| 177 } | 179 } |
| 178 } | 180 } |
| 179 | 181 |
| 180 bool ResourcePrefetcher::ShouldContinueReadingRequest(net::URLRequest* request, | 182 bool ResourcePrefetcher::ShouldContinueReadingRequest(net::URLRequest* request, |
| 181 int bytes_read) { | 183 int bytes_read) { |
| 182 if (bytes_read == 0) { // When bytes_read == 0, no more data. | 184 if (bytes_read == 0) { // When bytes_read == 0, no more data. |
| 183 if (request->was_cached()) | 185 if (request->was_cached()) |
| 184 FinishRequest(request, Request::PREFETCH_STATUS_FROM_CACHE); | 186 FinishRequest(request, Request::PREFETCH_STATUS_FROM_CACHE); |
| 185 else | 187 else |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 207 net::SSLCertRequestInfo* cert_request_info) { | 209 net::SSLCertRequestInfo* cert_request_info) { |
| 208 FinishRequest(request, Request::PREFETCH_STATUS_CERT_REQUIRED); | 210 FinishRequest(request, Request::PREFETCH_STATUS_CERT_REQUIRED); |
| 209 } | 211 } |
| 210 | 212 |
| 211 void ResourcePrefetcher::OnSSLCertificateError(net::URLRequest* request, | 213 void ResourcePrefetcher::OnSSLCertificateError(net::URLRequest* request, |
| 212 const net::SSLInfo& ssl_info, | 214 const net::SSLInfo& ssl_info, |
| 213 bool fatal) { | 215 bool fatal) { |
| 214 FinishRequest(request, Request::PREFETCH_STATUS_CERT_ERROR); | 216 FinishRequest(request, Request::PREFETCH_STATUS_CERT_ERROR); |
| 215 } | 217 } |
| 216 | 218 |
| 217 void ResourcePrefetcher::OnResponseStarted(net::URLRequest* request) { | 219 void ResourcePrefetcher::OnResponseStarted(net::URLRequest* request, |
| 218 if (!request->status().is_success()) { | 220 int net_error) { |
| 221 DCHECK_NE(net::ERR_IO_PENDING, net_error); | |
|
pasko
2016/09/21 18:14:02
In what circumstances is net::ERR_IO_PENDING provi
maksims (do not use this acc)
2016/09/22 04:17:48
Because it was done like this in some clients. Wha
| |
| 222 | |
| 223 if (net_error != net::OK) { | |
| 219 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); | 224 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); |
| 220 return; | 225 return; |
| 221 } | 226 } |
| 222 | 227 |
| 223 // TODO(shishir): Do not read cached entries, or ones that are not cacheable. | 228 // TODO(shishir): Do not read cached entries, or ones that are not cacheable. |
| 224 ReadFullResponse(request); | 229 ReadFullResponse(request); |
| 225 } | 230 } |
| 226 | 231 |
| 227 void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request, | 232 void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request, |
| 228 int bytes_read) { | 233 int bytes_read) { |
| 229 if (!request->status().is_success()) { | 234 DCHECK_NE(net::ERR_IO_PENDING, bytes_read); |
| 235 | |
| 236 if (bytes_read < 0) { | |
| 230 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); | 237 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); |
| 231 return; | 238 return; |
| 232 } | 239 } |
| 233 | 240 |
| 234 if (ShouldContinueReadingRequest(request, bytes_read)) | 241 if (ShouldContinueReadingRequest(request, bytes_read)) |
| 235 ReadFullResponse(request); | 242 ReadFullResponse(request); |
| 236 } | 243 } |
| 237 | 244 |
| 238 } // namespace predictors | 245 } // namespace predictors |
| OLD | NEW |