| 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/location.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" |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 215 |
| 216 void ResourceLoader::OnUploadProgressACK() { | 216 void ResourceLoader::OnUploadProgressACK() { |
| 217 waiting_for_upload_progress_ack_ = false; | 217 waiting_for_upload_progress_ack_ = false; |
| 218 } | 218 } |
| 219 | 219 |
| 220 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, | 220 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, |
| 221 const net::RedirectInfo& redirect_info, | 221 const net::RedirectInfo& redirect_info, |
| 222 bool* defer) { | 222 bool* defer) { |
| 223 DCHECK_EQ(request_.get(), unused); | 223 DCHECK_EQ(request_.get(), unused); |
| 224 | 224 |
| 225 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); | 225 DVLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); |
| 226 DCHECK(request_->status().is_success()); | 226 DCHECK(request_->status().is_success()); |
| 227 | 227 |
| 228 ResourceRequestInfoImpl* info = GetRequestInfo(); | 228 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 229 | 229 |
| 230 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN && | 230 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN && |
| 231 !ChildProcessSecurityPolicyImpl::GetInstance()-> | 231 !ChildProcessSecurityPolicyImpl::GetInstance()-> |
| 232 CanRequestURL(info->GetChildID(), redirect_info.new_url)) { | 232 CanRequestURL(info->GetChildID(), redirect_info.new_url)) { |
| 233 VLOG(1) << "Denied unauthorized request for " | 233 DVLOG(1) << "Denied unauthorized request for " |
| 234 << redirect_info.new_url.possibly_invalid_spec(); | 234 << redirect_info.new_url.possibly_invalid_spec(); |
| 235 | 235 |
| 236 // Tell the renderer that this request was disallowed. | 236 // Tell the renderer that this request was disallowed. |
| 237 Cancel(); | 237 Cancel(); |
| 238 return; | 238 return; |
| 239 } | 239 } |
| 240 | 240 |
| 241 delegate_->DidReceiveRedirect(this, redirect_info.new_url); | 241 delegate_->DidReceiveRedirect(this, redirect_info.new_url); |
| 242 | 242 |
| 243 if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) { | 243 if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) { |
| 244 // The request is complete so we can remove it. | 244 // The request is complete so we can remove it. |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 Cancel(); | 322 Cancel(); |
| 323 return; | 323 return; |
| 324 } else if (*defer) { | 324 } else if (*defer) { |
| 325 deferred_stage_ = DEFERRED_NETWORK_START; | 325 deferred_stage_ = DEFERRED_NETWORK_START; |
| 326 } | 326 } |
| 327 } | 327 } |
| 328 | 328 |
| 329 void ResourceLoader::OnResponseStarted(net::URLRequest* unused) { | 329 void ResourceLoader::OnResponseStarted(net::URLRequest* unused) { |
| 330 DCHECK_EQ(request_.get(), unused); | 330 DCHECK_EQ(request_.get(), unused); |
| 331 | 331 |
| 332 VLOG(1) << "OnResponseStarted: " << request_->url().spec(); | 332 DVLOG(1) << "OnResponseStarted: " << request_->url().spec(); |
| 333 | 333 |
| 334 progress_timer_.Stop(); | 334 progress_timer_.Stop(); |
| 335 | 335 |
| 336 // The CanLoadPage check should take place after any server redirects have | 336 // The CanLoadPage check should take place after any server redirects have |
| 337 // finished, at the point in time that we know a page will commit in the | 337 // finished, at the point in time that we know a page will commit in the |
| 338 // renderer process. | 338 // renderer process. |
| 339 ResourceRequestInfoImpl* info = GetRequestInfo(); | 339 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 340 ChildProcessSecurityPolicyImpl* policy = | 340 ChildProcessSecurityPolicyImpl* policy = |
| 341 ChildProcessSecurityPolicyImpl::GetInstance(); | 341 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 342 if (!policy->CanLoadPage(info->GetChildID(), | 342 if (!policy->CanLoadPage(info->GetChildID(), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 365 return; | 365 return; |
| 366 | 366 |
| 367 if (request_->status().is_success()) | 367 if (request_->status().is_success()) |
| 368 StartReading(false); // Read the first chunk. | 368 StartReading(false); // Read the first chunk. |
| 369 else | 369 else |
| 370 ResponseCompleted(); | 370 ResponseCompleted(); |
| 371 } | 371 } |
| 372 | 372 |
| 373 void ResourceLoader::OnReadCompleted(net::URLRequest* unused, int bytes_read) { | 373 void ResourceLoader::OnReadCompleted(net::URLRequest* unused, int bytes_read) { |
| 374 DCHECK_EQ(request_.get(), unused); | 374 DCHECK_EQ(request_.get(), unused); |
| 375 VLOG(1) << "OnReadCompleted: \"" << request_->url().spec() << "\"" | 375 DVLOG(1) << "OnReadCompleted: \"" << request_->url().spec() << "\"" |
| 376 << " bytes_read = " << bytes_read; | 376 << " bytes_read = " << bytes_read; |
| 377 | 377 |
| 378 // bytes_read == -1 always implies an error. | 378 // bytes_read == -1 always implies an error. |
| 379 if (bytes_read == -1 || !request_->status().is_success()) { | 379 if (bytes_read == -1 || !request_->status().is_success()) { |
| 380 ResponseCompleted(); | 380 ResponseCompleted(); |
| 381 return; | 381 return; |
| 382 } | 382 } |
| 383 | 383 |
| 384 CompleteRead(bytes_read); | 384 CompleteRead(bytes_read); |
| 385 | 385 |
| 386 // If the handler cancelled or deferred the request, do not continue | 386 // If the handler cancelled or deferred the request, do not continue |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 request_->has_upload()) { | 499 request_->has_upload()) { |
| 500 progress_timer_.Start( | 500 progress_timer_.Start( |
| 501 FROM_HERE, | 501 FROM_HERE, |
| 502 base::TimeDelta::FromMilliseconds(kUploadProgressIntervalMsec), | 502 base::TimeDelta::FromMilliseconds(kUploadProgressIntervalMsec), |
| 503 this, | 503 this, |
| 504 &ResourceLoader::ReportUploadProgress); | 504 &ResourceLoader::ReportUploadProgress); |
| 505 } | 505 } |
| 506 } | 506 } |
| 507 | 507 |
| 508 void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) { | 508 void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) { |
| 509 VLOG(1) << "CancelRequestInternal: " << request_->url().spec(); | 509 DVLOG(1) << "CancelRequestInternal: " << request_->url().spec(); |
| 510 | 510 |
| 511 ResourceRequestInfoImpl* info = GetRequestInfo(); | 511 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 512 | 512 |
| 513 // WebKit will send us a cancel for downloads since it no longer handles | 513 // WebKit will send us a cancel for downloads since it no longer handles |
| 514 // them. In this case, ignore the cancel since we handle downloads in the | 514 // them. In this case, ignore the cancel since we handle downloads in the |
| 515 // browser. | 515 // browser. |
| 516 if (from_renderer && (info->IsDownload() || info->is_stream())) | 516 if (from_renderer && (info->IsDownload() || info->is_stream())) |
| 517 return; | 517 return; |
| 518 | 518 |
| 519 if (from_renderer && info->detachable_handler()) { | 519 if (from_renderer && info->detachable_handler()) { |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 bytes_read > 0 ? DEFERRED_READ : DEFERRED_RESPONSE_COMPLETE; | 682 bytes_read > 0 ? DEFERRED_READ : DEFERRED_RESPONSE_COMPLETE; |
| 683 } | 683 } |
| 684 | 684 |
| 685 // Note: the request may still have been cancelled while OnReadCompleted | 685 // Note: the request may still have been cancelled while OnReadCompleted |
| 686 // returns true if OnReadCompleted caused request to get cancelled | 686 // returns true if OnReadCompleted caused request to get cancelled |
| 687 // out-of-band. (In AwResourceDispatcherHostDelegate::DownloadStarting, for | 687 // out-of-band. (In AwResourceDispatcherHostDelegate::DownloadStarting, for |
| 688 // instance.) | 688 // instance.) |
| 689 } | 689 } |
| 690 | 690 |
| 691 void ResourceLoader::ResponseCompleted() { | 691 void ResourceLoader::ResponseCompleted() { |
| 692 VLOG(1) << "ResponseCompleted: " << request_->url().spec(); | 692 DVLOG(1) << "ResponseCompleted: " << request_->url().spec(); |
| 693 RecordHistograms(); | 693 RecordHistograms(); |
| 694 ResourceRequestInfoImpl* info = GetRequestInfo(); | 694 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 695 | 695 |
| 696 std::string security_info; | 696 std::string security_info; |
| 697 const net::SSLInfo& ssl_info = request_->ssl_info(); | 697 const net::SSLInfo& ssl_info = request_->ssl_info(); |
| 698 if (ssl_info.cert.get() != NULL) { | 698 if (ssl_info.cert.get() != NULL) { |
| 699 int cert_id = CertStore::GetInstance()->StoreCert(ssl_info.cert.get(), | 699 int cert_id = CertStore::GetInstance()->StoreCert(ssl_info.cert.get(), |
| 700 info->GetChildID()); | 700 info->GetChildID()); |
| 701 SignedCertificateTimestampIDStatusList signed_certificate_timestamp_ids; | 701 SignedCertificateTimestampIDStatusList signed_certificate_timestamp_ids; |
| 702 StoreSignedCertificateTimestamps(ssl_info.signed_certificate_timestamps, | 702 StoreSignedCertificateTimestamps(ssl_info.signed_certificate_timestamps, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 757 case net::URLRequestStatus::FAILED: | 757 case net::URLRequestStatus::FAILED: |
| 758 status = STATUS_UNDEFINED; | 758 status = STATUS_UNDEFINED; |
| 759 break; | 759 break; |
| 760 } | 760 } |
| 761 | 761 |
| 762 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); | 762 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); |
| 763 } | 763 } |
| 764 } | 764 } |
| 765 | 765 |
| 766 } // namespace content | 766 } // namespace content |
| OLD | NEW |