OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/appcache/appcache_url_request_job.h" | 5 #include "content/browser/appcache/appcache_url_request_job.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 range_response_info_.reset( | 334 range_response_info_.reset( |
335 new net::HttpResponseInfo(*info_->http_response_info())); | 335 new net::HttpResponseInfo(*info_->http_response_info())); |
336 net::HttpResponseHeaders* headers = range_response_info_->headers.get(); | 336 net::HttpResponseHeaders* headers = range_response_info_->headers.get(); |
337 headers->UpdateWithNewRange( | 337 headers->UpdateWithNewRange( |
338 range_requested_, resource_size, true /* replace status line */); | 338 range_requested_, resource_size, true /* replace status line */); |
339 } | 339 } |
340 | 340 |
341 void AppCacheURLRequestJob::OnReadComplete(int result) { | 341 void AppCacheURLRequestJob::OnReadComplete(int result) { |
342 DCHECK(is_delivering_appcache_response()); | 342 DCHECK(is_delivering_appcache_response()); |
343 if (result == 0) { | 343 if (result == 0) { |
| 344 NotifyDone(net::URLRequestStatus()); |
344 AppCacheHistograms::CountResponseRetrieval( | 345 AppCacheHistograms::CountResponseRetrieval( |
345 true, is_main_resource_, manifest_url_.GetOrigin()); | 346 true, is_main_resource_, manifest_url_.GetOrigin()); |
346 } else if (result < 0) { | 347 } else if (result < 0) { |
347 if (storage_->service()->storage() == storage_) { | 348 if (storage_->service()->storage() == storage_) { |
348 storage_->service()->CheckAppCacheResponse(manifest_url_, cache_id_, | 349 storage_->service()->CheckAppCacheResponse(manifest_url_, cache_id_, |
349 entry_.response_id()); | 350 entry_.response_id()); |
350 } | 351 } |
| 352 NotifyDone(net::URLRequestStatus(net::URLRequestStatus::FAILED, result)); |
351 AppCacheHistograms::CountResponseRetrieval( | 353 AppCacheHistograms::CountResponseRetrieval( |
352 false, is_main_resource_, manifest_url_.GetOrigin()); | 354 false, is_main_resource_, manifest_url_.GetOrigin()); |
| 355 } else { |
| 356 SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status |
353 } | 357 } |
354 ReadRawDataComplete(result); | 358 NotifyReadComplete(result); |
355 } | 359 } |
356 | 360 |
357 // net::URLRequestJob overrides ------------------------------------------------ | 361 // net::URLRequestJob overrides ------------------------------------------------ |
358 | 362 |
359 void AppCacheURLRequestJob::Start() { | 363 void AppCacheURLRequestJob::Start() { |
360 DCHECK(!has_been_started()); | 364 DCHECK(!has_been_started()); |
361 has_been_started_ = true; | 365 has_been_started_ = true; |
362 start_time_tick_ = base::TimeTicks::Now(); | 366 start_time_tick_ = base::TimeTicks::Now(); |
363 MaybeBeginDelivery(); | 367 MaybeBeginDelivery(); |
364 } | 368 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 return; | 417 return; |
414 *info = *http_info(); | 418 *info = *http_info(); |
415 } | 419 } |
416 | 420 |
417 int AppCacheURLRequestJob::GetResponseCode() const { | 421 int AppCacheURLRequestJob::GetResponseCode() const { |
418 if (!http_info()) | 422 if (!http_info()) |
419 return -1; | 423 return -1; |
420 return http_info()->headers->response_code(); | 424 return http_info()->headers->response_code(); |
421 } | 425 } |
422 | 426 |
423 int AppCacheURLRequestJob::ReadRawData(net::IOBuffer* buf, int buf_size) { | 427 bool AppCacheURLRequestJob::ReadRawData(net::IOBuffer* buf, |
| 428 int buf_size, |
| 429 int* bytes_read) { |
424 DCHECK(is_delivering_appcache_response()); | 430 DCHECK(is_delivering_appcache_response()); |
425 DCHECK_NE(buf_size, 0); | 431 DCHECK_NE(buf_size, 0); |
| 432 DCHECK(bytes_read); |
426 DCHECK(!reader_->IsReadPending()); | 433 DCHECK(!reader_->IsReadPending()); |
427 reader_->ReadData(buf, buf_size, | 434 reader_->ReadData(buf, buf_size, |
428 base::Bind(&AppCacheURLRequestJob::OnReadComplete, | 435 base::Bind(&AppCacheURLRequestJob::OnReadComplete, |
429 base::Unretained(this))); | 436 base::Unretained(this))); |
430 return net::ERR_IO_PENDING; | 437 SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0)); |
| 438 return false; |
431 } | 439 } |
432 | 440 |
433 void AppCacheURLRequestJob::SetExtraRequestHeaders( | 441 void AppCacheURLRequestJob::SetExtraRequestHeaders( |
434 const net::HttpRequestHeaders& headers) { | 442 const net::HttpRequestHeaders& headers) { |
435 std::string value; | 443 std::string value; |
436 std::vector<net::HttpByteRange> ranges; | 444 std::vector<net::HttpByteRange> ranges; |
437 if (!headers.GetHeader(net::HttpRequestHeaders::kRange, &value) || | 445 if (!headers.GetHeader(net::HttpRequestHeaders::kRange, &value) || |
438 !net::HttpUtil::ParseRangeHeader(value, &ranges)) { | 446 !net::HttpUtil::ParseRangeHeader(value, &ranges)) { |
439 return; | 447 return; |
440 } | 448 } |
441 | 449 |
442 // If multiple ranges are requested, we play dumb and | 450 // If multiple ranges are requested, we play dumb and |
443 // return the entire response with 200 OK. | 451 // return the entire response with 200 OK. |
444 if (ranges.size() == 1U) | 452 if (ranges.size() == 1U) |
445 range_requested_ = ranges[0]; | 453 range_requested_ = ranges[0]; |
446 } | 454 } |
447 | 455 |
448 void AppCacheURLRequestJob::NotifyRestartRequired() { | 456 void AppCacheURLRequestJob::NotifyRestartRequired() { |
449 on_prepare_to_restart_callback_.Run(); | 457 on_prepare_to_restart_callback_.Run(); |
450 URLRequestJob::NotifyRestartRequired(); | 458 URLRequestJob::NotifyRestartRequired(); |
451 } | 459 } |
452 | 460 |
453 } // namespace content | 461 } // namespace content |
OLD | NEW |