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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "base/profiler/scoped_tracker.h" | 12 #include "base/profiler/scoped_tracker.h" |
13 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
14 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
15 #include "base/time/time.h" | 15 #include "base/time/time.h" |
16 #include "base/trace_event/trace_event.h" | |
16 #include "content/browser/appcache/appcache_interceptor.h" | 17 #include "content/browser/appcache/appcache_interceptor.h" |
17 #include "content/browser/child_process_security_policy_impl.h" | 18 #include "content/browser/child_process_security_policy_impl.h" |
18 #include "content/browser/loader/cross_site_resource_handler.h" | 19 #include "content/browser/loader/cross_site_resource_handler.h" |
19 #include "content/browser/loader/detachable_resource_handler.h" | 20 #include "content/browser/loader/detachable_resource_handler.h" |
20 #include "content/browser/loader/resource_loader_delegate.h" | 21 #include "content/browser/loader/resource_loader_delegate.h" |
21 #include "content/browser/loader/resource_request_info_impl.h" | 22 #include "content/browser/loader/resource_request_info_impl.h" |
22 #include "content/browser/service_worker/service_worker_request_handler.h" | 23 #include "content/browser/service_worker/service_worker_request_handler.h" |
23 #include "content/browser/ssl/ssl_client_auth_handler.h" | 24 #include "content/browser/ssl/ssl_client_auth_handler.h" |
24 #include "content/browser/ssl/ssl_manager.h" | 25 #include "content/browser/ssl/ssl_manager.h" |
25 #include "content/browser/ssl/ssl_policy.h" | 26 #include "content/browser/ssl/ssl_policy.h" |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
238 return ResourceRequestInfoImpl::ForRequest(request_.get()); | 239 return ResourceRequestInfoImpl::ForRequest(request_.get()); |
239 } | 240 } |
240 | 241 |
241 void ResourceLoader::ClearLoginDelegate() { | 242 void ResourceLoader::ClearLoginDelegate() { |
242 login_delegate_ = NULL; | 243 login_delegate_ = NULL; |
243 } | 244 } |
244 | 245 |
245 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, | 246 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, |
246 const net::RedirectInfo& redirect_info, | 247 const net::RedirectInfo& redirect_info, |
247 bool* defer) { | 248 bool* defer) { |
249 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), | |
250 "ResourceLoader::OnReceivedRedirect"); | |
248 DCHECK_EQ(request_.get(), unused); | 251 DCHECK_EQ(request_.get(), unused); |
249 | 252 |
250 DVLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); | 253 DVLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); |
251 DCHECK(request_->status().is_success()); | 254 DCHECK(request_->status().is_success()); |
252 | 255 |
253 ResourceRequestInfoImpl* info = GetRequestInfo(); | 256 ResourceRequestInfoImpl* info = GetRequestInfo(); |
254 | 257 |
255 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN && | 258 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN && |
256 !ChildProcessSecurityPolicyImpl::GetInstance()-> | 259 !ChildProcessSecurityPolicyImpl::GetInstance()-> |
257 CanRequestURL(info->GetChildID(), redirect_info.new_url)) { | 260 CanRequestURL(info->GetChildID(), redirect_info.new_url)) { |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
323 bool fatal) { | 326 bool fatal) { |
324 ResourceRequestInfoImpl* info = GetRequestInfo(); | 327 ResourceRequestInfoImpl* info = GetRequestInfo(); |
325 | 328 |
326 SSLManager::OnSSLCertificateError( | 329 SSLManager::OnSSLCertificateError( |
327 weak_ptr_factory_.GetWeakPtr(), info->GetResourceType(), request_->url(), | 330 weak_ptr_factory_.GetWeakPtr(), info->GetResourceType(), request_->url(), |
328 info->GetWebContentsGetterForRequest(), ssl_info, fatal); | 331 info->GetWebContentsGetterForRequest(), ssl_info, fatal); |
329 } | 332 } |
330 | 333 |
331 void ResourceLoader::OnBeforeNetworkStart(net::URLRequest* unused, | 334 void ResourceLoader::OnBeforeNetworkStart(net::URLRequest* unused, |
332 bool* defer) { | 335 bool* defer) { |
336 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), | |
337 "ResourceLoader::OnBeforeNetworkStart"); | |
333 DCHECK_EQ(request_.get(), unused); | 338 DCHECK_EQ(request_.get(), unused); |
334 | 339 |
335 // Give the handler a chance to delay the URLRequest from using the network. | 340 // Give the handler a chance to delay the URLRequest from using the network. |
336 if (!handler_->OnBeforeNetworkStart(request_->url(), defer)) { | 341 if (!handler_->OnBeforeNetworkStart(request_->url(), defer)) { |
337 Cancel(); | 342 Cancel(); |
338 return; | 343 return; |
339 } else if (*defer) { | 344 } else if (*defer) { |
340 deferred_stage_ = DEFERRED_NETWORK_START; | 345 deferred_stage_ = DEFERRED_NETWORK_START; |
341 } | 346 } |
342 } | 347 } |
343 | 348 |
344 void ResourceLoader::OnResponseStarted(net::URLRequest* unused) { | 349 void ResourceLoader::OnResponseStarted(net::URLRequest* unused) { |
350 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), | |
351 "ResourceLoader::OnResponseStarted"); | |
345 DCHECK_EQ(request_.get(), unused); | 352 DCHECK_EQ(request_.get(), unused); |
346 | 353 |
347 DVLOG(1) << "OnResponseStarted: " << request_->url().spec(); | 354 DVLOG(1) << "OnResponseStarted: " << request_->url().spec(); |
348 | 355 |
349 if (!request_->status().is_success()) { | 356 if (!request_->status().is_success()) { |
350 ResponseCompleted(); | 357 ResponseCompleted(); |
351 return; | 358 return; |
352 } | 359 } |
353 | 360 |
354 CompleteResponseStarted(); | 361 CompleteResponseStarted(); |
355 | 362 |
356 if (is_deferred()) | 363 if (is_deferred()) |
357 return; | 364 return; |
358 | 365 |
359 if (request_->status().is_success()) | 366 if (request_->status().is_success()) |
360 StartReading(false); // Read the first chunk. | 367 StartReading(false); // Read the first chunk. |
361 else | 368 else |
362 ResponseCompleted(); | 369 ResponseCompleted(); |
363 } | 370 } |
364 | 371 |
365 void ResourceLoader::OnReadCompleted(net::URLRequest* unused, int bytes_read) { | 372 void ResourceLoader::OnReadCompleted(net::URLRequest* unused, int bytes_read) { |
373 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), | |
374 "ResourceLoader::OnReadCompleted"); | |
366 DCHECK_EQ(request_.get(), unused); | 375 DCHECK_EQ(request_.get(), unused); |
367 DVLOG(1) << "OnReadCompleted: \"" << request_->url().spec() << "\"" | 376 DVLOG(1) << "OnReadCompleted: \"" << request_->url().spec() << "\"" |
368 << " bytes_read = " << bytes_read; | 377 << " bytes_read = " << bytes_read; |
369 | 378 |
370 // bytes_read == -1 always implies an error. | 379 // bytes_read == -1 always implies an error. |
371 if (bytes_read == -1 || !request_->status().is_success()) { | 380 if (bytes_read == -1 || !request_->status().is_success()) { |
372 ResponseCompleted(); | 381 ResponseCompleted(); |
373 return; | 382 return; |
374 } | 383 } |
375 | 384 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
459 case DEFERRED_REDIRECT: | 468 case DEFERRED_REDIRECT: |
460 request_->FollowDeferredRedirect(); | 469 request_->FollowDeferredRedirect(); |
461 break; | 470 break; |
462 case DEFERRED_READ: | 471 case DEFERRED_READ: |
463 base::ThreadTaskRunnerHandle::Get()->PostTask( | 472 base::ThreadTaskRunnerHandle::Get()->PostTask( |
464 FROM_HERE, base::Bind(&ResourceLoader::ResumeReading, | 473 FROM_HERE, base::Bind(&ResourceLoader::ResumeReading, |
465 weak_ptr_factory_.GetWeakPtr())); | 474 weak_ptr_factory_.GetWeakPtr())); |
466 break; | 475 break; |
467 case DEFERRED_RESPONSE_COMPLETE: | 476 case DEFERRED_RESPONSE_COMPLETE: |
468 base::ThreadTaskRunnerHandle::Get()->PostTask( | 477 base::ThreadTaskRunnerHandle::Get()->PostTask( |
469 FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, | 478 FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, |
mmenke
2016/04/04 16:45:49
Looks like you're missing ResponseComplete in the
ssid
2016/04/05 00:50:12
The performance team has added few trace points in
| |
470 weak_ptr_factory_.GetWeakPtr())); | 479 weak_ptr_factory_.GetWeakPtr())); |
471 break; | 480 break; |
472 case DEFERRED_FINISH: | 481 case DEFERRED_FINISH: |
473 // Delay self-destruction since we don't know how we were reached. | 482 // Delay self-destruction since we don't know how we were reached. |
474 base::ThreadTaskRunnerHandle::Get()->PostTask( | 483 base::ThreadTaskRunnerHandle::Get()->PostTask( |
475 FROM_HERE, base::Bind(&ResourceLoader::CallDidFinishLoading, | 484 FROM_HERE, base::Bind(&ResourceLoader::CallDidFinishLoading, |
476 weak_ptr_factory_.GetWeakPtr())); | 485 weak_ptr_factory_.GetWeakPtr())); |
477 break; | 486 break; |
478 } | 487 } |
479 } | 488 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
601 | 610 |
602 // Make sure we track the buffer in at least one place. This ensures it gets | 611 // Make sure we track the buffer in at least one place. This ensures it gets |
603 // deleted even in the case the request has already finished its job and | 612 // deleted even in the case the request has already finished its job and |
604 // doesn't use the buffer. | 613 // doesn't use the buffer. |
605 scoped_refptr<net::IOBuffer> buf; | 614 scoped_refptr<net::IOBuffer> buf; |
606 int buf_size; | 615 int buf_size; |
607 { | 616 { |
608 // TODO(darin): Remove ScopedTracker below once crbug.com/475761 is fixed. | 617 // TODO(darin): Remove ScopedTracker below once crbug.com/475761 is fixed. |
609 tracked_objects::ScopedTracker tracking_profile2( | 618 tracked_objects::ScopedTracker tracking_profile2( |
610 FROM_HERE_WITH_EXPLICIT_FUNCTION("475761 OnWillRead()")); | 619 FROM_HERE_WITH_EXPLICIT_FUNCTION("475761 OnWillRead()")); |
620 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("net"), "ResourceLoader::ReadMore"); | |
611 | 621 |
612 if (!handler_->OnWillRead(&buf, &buf_size, -1)) { | 622 if (!handler_->OnWillRead(&buf, &buf_size, -1)) { |
613 Cancel(); | 623 Cancel(); |
614 return; | 624 return; |
615 } | 625 } |
616 } | 626 } |
617 | 627 |
618 DCHECK(buf.get()); | 628 DCHECK(buf.get()); |
619 DCHECK(buf_size > 0); | 629 DCHECK(buf_size > 0); |
620 | 630 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
716 case net::URLRequestStatus::FAILED: | 726 case net::URLRequestStatus::FAILED: |
717 status = STATUS_UNDEFINED; | 727 status = STATUS_UNDEFINED; |
718 break; | 728 break; |
719 } | 729 } |
720 | 730 |
721 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); | 731 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); |
722 } | 732 } |
723 } | 733 } |
724 | 734 |
725 } // namespace content | 735 } // namespace content |
OLD | NEW |