| 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/loader/resource_loader.h" | 5 #include "content/browser/loader/resource_loader.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/location.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/profiler/scoped_tracker.h" | 10 #include "base/profiler/scoped_tracker.h" |
| 11 #include "base/single_thread_task_runner.h" |
| 12 #include "base/thread_task_runner_handle.h" |
| 11 #include "base/time/time.h" | 13 #include "base/time/time.h" |
| 12 #include "content/browser/appcache/appcache_interceptor.h" | 14 #include "content/browser/appcache/appcache_interceptor.h" |
| 13 #include "content/browser/child_process_security_policy_impl.h" | 15 #include "content/browser/child_process_security_policy_impl.h" |
| 14 #include "content/browser/loader/cross_site_resource_handler.h" | 16 #include "content/browser/loader/cross_site_resource_handler.h" |
| 15 #include "content/browser/loader/detachable_resource_handler.h" | 17 #include "content/browser/loader/detachable_resource_handler.h" |
| 16 #include "content/browser/loader/resource_loader_delegate.h" | 18 #include "content/browser/loader/resource_loader_delegate.h" |
| 17 #include "content/browser/loader/resource_request_info_impl.h" | 19 #include "content/browser/loader/resource_request_info_impl.h" |
| 18 #include "content/browser/service_worker/service_worker_request_handler.h" | 20 #include "content/browser/service_worker/service_worker_request_handler.h" |
| 19 #include "content/browser/ssl/ssl_client_auth_handler.h" | 21 #include "content/browser/ssl/ssl_client_auth_handler.h" |
| 20 #include "content/browser/ssl/ssl_manager.h" | 22 #include "content/browser/ssl/ssl_manager.h" |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 case DEFERRED_START: | 460 case DEFERRED_START: |
| 459 StartRequestInternal(); | 461 StartRequestInternal(); |
| 460 break; | 462 break; |
| 461 case DEFERRED_NETWORK_START: | 463 case DEFERRED_NETWORK_START: |
| 462 request_->ResumeNetworkStart(); | 464 request_->ResumeNetworkStart(); |
| 463 break; | 465 break; |
| 464 case DEFERRED_REDIRECT: | 466 case DEFERRED_REDIRECT: |
| 465 request_->FollowDeferredRedirect(); | 467 request_->FollowDeferredRedirect(); |
| 466 break; | 468 break; |
| 467 case DEFERRED_READ: | 469 case DEFERRED_READ: |
| 468 base::MessageLoop::current()->PostTask( | 470 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 469 FROM_HERE, | 471 FROM_HERE, base::Bind(&ResourceLoader::ResumeReading, |
| 470 base::Bind(&ResourceLoader::ResumeReading, | 472 weak_ptr_factory_.GetWeakPtr())); |
| 471 weak_ptr_factory_.GetWeakPtr())); | |
| 472 break; | 473 break; |
| 473 case DEFERRED_RESPONSE_COMPLETE: | 474 case DEFERRED_RESPONSE_COMPLETE: |
| 474 base::MessageLoop::current()->PostTask( | 475 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 475 FROM_HERE, | 476 FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, |
| 476 base::Bind(&ResourceLoader::ResponseCompleted, | 477 weak_ptr_factory_.GetWeakPtr())); |
| 477 weak_ptr_factory_.GetWeakPtr())); | |
| 478 break; | 478 break; |
| 479 case DEFERRED_FINISH: | 479 case DEFERRED_FINISH: |
| 480 // Delay self-destruction since we don't know how we were reached. | 480 // Delay self-destruction since we don't know how we were reached. |
| 481 base::MessageLoop::current()->PostTask( | 481 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 482 FROM_HERE, | 482 FROM_HERE, base::Bind(&ResourceLoader::CallDidFinishLoading, |
| 483 base::Bind(&ResourceLoader::CallDidFinishLoading, | 483 weak_ptr_factory_.GetWeakPtr())); |
| 484 weak_ptr_factory_.GetWeakPtr())); | |
| 485 break; | 484 break; |
| 486 } | 485 } |
| 487 } | 486 } |
| 488 | 487 |
| 489 void ResourceLoader::Cancel() { | 488 void ResourceLoader::Cancel() { |
| 490 CancelRequest(false); | 489 CancelRequest(false); |
| 491 } | 490 } |
| 492 | 491 |
| 493 void ResourceLoader::StartRequestInternal() { | 492 void ResourceLoader::StartRequestInternal() { |
| 494 DCHECK(!request_->is_pending()); | 493 DCHECK(!request_->is_pending()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 login_delegate_ = NULL; | 537 login_delegate_ = NULL; |
| 539 } | 538 } |
| 540 ssl_client_auth_handler_.reset(); | 539 ssl_client_auth_handler_.reset(); |
| 541 | 540 |
| 542 request_->CancelWithError(error); | 541 request_->CancelWithError(error); |
| 543 | 542 |
| 544 if (!was_pending) { | 543 if (!was_pending) { |
| 545 // If the request isn't in flight, then we won't get an asynchronous | 544 // If the request isn't in flight, then we won't get an asynchronous |
| 546 // notification from the request, so we have to signal ourselves to finish | 545 // notification from the request, so we have to signal ourselves to finish |
| 547 // this request. | 546 // this request. |
| 548 base::MessageLoop::current()->PostTask( | 547 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 549 FROM_HERE, | 548 FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, |
| 550 base::Bind(&ResourceLoader::ResponseCompleted, | 549 weak_ptr_factory_.GetWeakPtr())); |
| 551 weak_ptr_factory_.GetWeakPtr())); | |
| 552 } | 550 } |
| 553 } | 551 } |
| 554 | 552 |
| 555 void ResourceLoader::StoreSignedCertificateTimestamps( | 553 void ResourceLoader::StoreSignedCertificateTimestamps( |
| 556 const net::SignedCertificateTimestampAndStatusList& sct_list, | 554 const net::SignedCertificateTimestampAndStatusList& sct_list, |
| 557 int process_id, | 555 int process_id, |
| 558 SignedCertificateTimestampIDStatusList* sct_ids) { | 556 SignedCertificateTimestampIDStatusList* sct_ids) { |
| 559 SignedCertificateTimestampStore* sct_store( | 557 SignedCertificateTimestampStore* sct_store( |
| 560 SignedCertificateTimestampStore::GetInstance()); | 558 SignedCertificateTimestampStore::GetInstance()); |
| 561 | 559 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 | 614 |
| 617 // If IO is pending, wait for the URLRequest to call OnReadCompleted. | 615 // If IO is pending, wait for the URLRequest to call OnReadCompleted. |
| 618 if (request_->status().is_io_pending()) | 616 if (request_->status().is_io_pending()) |
| 619 return; | 617 return; |
| 620 | 618 |
| 621 if (!is_continuation || bytes_read <= 0) { | 619 if (!is_continuation || bytes_read <= 0) { |
| 622 OnReadCompleted(request_.get(), bytes_read); | 620 OnReadCompleted(request_.get(), bytes_read); |
| 623 } else { | 621 } else { |
| 624 // Else, trigger OnReadCompleted asynchronously to avoid starving the IO | 622 // Else, trigger OnReadCompleted asynchronously to avoid starving the IO |
| 625 // thread in case the URLRequest can provide data synchronously. | 623 // thread in case the URLRequest can provide data synchronously. |
| 626 base::MessageLoop::current()->PostTask( | 624 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 627 FROM_HERE, | 625 FROM_HERE, |
| 628 base::Bind(&ResourceLoader::OnReadCompleted, | 626 base::Bind(&ResourceLoader::OnReadCompleted, |
| 629 weak_ptr_factory_.GetWeakPtr(), | 627 weak_ptr_factory_.GetWeakPtr(), request_.get(), bytes_read)); |
| 630 request_.get(), | |
| 631 bytes_read)); | |
| 632 } | 628 } |
| 633 } | 629 } |
| 634 | 630 |
| 635 void ResourceLoader::ResumeReading() { | 631 void ResourceLoader::ResumeReading() { |
| 636 DCHECK(!is_deferred()); | 632 DCHECK(!is_deferred()); |
| 637 | 633 |
| 638 if (!read_deferral_start_time_.is_null()) { | 634 if (!read_deferral_start_time_.is_null()) { |
| 639 UMA_HISTOGRAM_TIMES("Net.ResourceLoader.ReadDeferral", | 635 UMA_HISTOGRAM_TIMES("Net.ResourceLoader.ReadDeferral", |
| 640 base::TimeTicks::Now() - read_deferral_start_time_); | 636 base::TimeTicks::Now() - read_deferral_start_time_); |
| 641 read_deferral_start_time_ = base::TimeTicks(); | 637 read_deferral_start_time_ = base::TimeTicks(); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 case net::URLRequestStatus::FAILED: | 762 case net::URLRequestStatus::FAILED: |
| 767 status = STATUS_UNDEFINED; | 763 status = STATUS_UNDEFINED; |
| 768 break; | 764 break; |
| 769 } | 765 } |
| 770 | 766 |
| 771 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); | 767 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); |
| 772 } | 768 } |
| 773 } | 769 } |
| 774 | 770 |
| 775 } // namespace content | 771 } // namespace content |
| OLD | NEW |