Chromium Code Reviews| 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/message_loop/message_loop.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_number_conversions.h" | |
| 10 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "base/timer/timer.h" | |
| 11 #include "content/browser/child_process_security_policy_impl.h" | 13 #include "content/browser/child_process_security_policy_impl.h" |
| 12 #include "content/browser/loader/cross_site_resource_handler.h" | 14 #include "content/browser/loader/cross_site_resource_handler.h" |
| 13 #include "content/browser/loader/resource_loader_delegate.h" | 15 #include "content/browser/loader/resource_loader_delegate.h" |
| 14 #include "content/browser/loader/resource_request_info_impl.h" | 16 #include "content/browser/loader/resource_request_info_impl.h" |
| 15 #include "content/browser/ssl/ssl_client_auth_handler.h" | 17 #include "content/browser/ssl/ssl_client_auth_handler.h" |
| 16 #include "content/browser/ssl/ssl_manager.h" | 18 #include "content/browser/ssl/ssl_manager.h" |
| 17 #include "content/common/ssl_status_serialization.h" | 19 #include "content/common/ssl_status_serialization.h" |
| 18 #include "content/public/browser/cert_store.h" | 20 #include "content/public/browser/cert_store.h" |
| 19 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" | 21 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" |
| 20 #include "content/public/browser/site_instance.h" | 22 #include "content/public/browser/site_instance.h" |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 ResourceLoaderDelegate* delegate, | 205 ResourceLoaderDelegate* delegate, |
| 204 scoped_ptr<net::ClientCertStore> client_cert_store) { | 206 scoped_ptr<net::ClientCertStore> client_cert_store) { |
| 205 deferred_stage_ = DEFERRED_NONE; | 207 deferred_stage_ = DEFERRED_NONE; |
| 206 request_ = request.Pass(); | 208 request_ = request.Pass(); |
| 207 handler_ = handler.Pass(); | 209 handler_ = handler.Pass(); |
| 208 delegate_ = delegate; | 210 delegate_ = delegate; |
| 209 last_upload_position_ = 0; | 211 last_upload_position_ = 0; |
| 210 waiting_for_upload_progress_ack_ = false; | 212 waiting_for_upload_progress_ack_ = false; |
| 211 is_transferring_ = false; | 213 is_transferring_ = false; |
| 212 client_cert_store_ = client_cert_store.Pass(); | 214 client_cert_store_ = client_cert_store.Pass(); |
| 215 detachable_delay_ms_ = 60000; | |
|
mmenke
2013/10/24 20:27:21
Wonder if we should reduce this... Regardless, th
jkarlin2
2013/10/25 14:10:21
Done. Yes, 60 seconds is long. It's just until w
mmenke
2013/10/25 14:57:51
I suggest starting short (Like the current behavio
jkarlin2
2013/10/25 18:24:54
I originally had it at seconds.
cbentzel had reco
jkarlin2
2013/10/25 18:28:21
I meant to say that I originally had it at 3 secon
| |
| 213 | 216 |
| 214 request_->set_delegate(this); | 217 request_->set_delegate(this); |
| 215 handler_->SetController(this); | 218 handler_->SetController(this); |
| 216 } | 219 } |
| 217 | 220 |
| 218 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, | 221 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, |
| 219 const GURL& new_url, | 222 const GURL& new_url, |
| 220 bool* defer) { | 223 bool* defer) { |
| 221 DCHECK_EQ(request_.get(), unused); | 224 DCHECK_EQ(request_.get(), unused); |
| 222 | 225 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 451 CancelRequest(false); | 454 CancelRequest(false); |
| 452 } | 455 } |
| 453 | 456 |
| 454 void ResourceLoader::StartRequestInternal() { | 457 void ResourceLoader::StartRequestInternal() { |
| 455 DCHECK(!request_->is_pending()); | 458 DCHECK(!request_->is_pending()); |
| 456 request_->Start(); | 459 request_->Start(); |
| 457 | 460 |
| 458 delegate_->DidStartRequest(this); | 461 delegate_->DidStartRequest(this); |
| 459 } | 462 } |
| 460 | 463 |
| 464 void ResourceLoader::CancelAfterTimeout() { | |
| 465 if (detached_timer_) | |
| 466 return; | |
| 467 | |
| 468 detached_timer_.reset(new base::OneShotTimer<ResourceLoader>()); | |
| 469 detached_timer_->Start(FROM_HERE, | |
| 470 TimeDelta::FromMilliseconds(detachable_delay_ms_), | |
| 471 this, &ResourceLoader::Cancel); | |
| 472 } | |
| 473 | |
| 461 void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) { | 474 void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) { |
| 462 VLOG(1) << "CancelRequestInternal: " << request_->url().spec(); | 475 VLOG(1) << "CancelRequestInternal: " << request_->url().spec(); |
| 463 | 476 |
| 464 ResourceRequestInfoImpl* info = GetRequestInfo(); | 477 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 465 | 478 |
| 466 // WebKit will send us a cancel for downloads since it no longer handles | 479 // WebKit will send us a cancel for downloads since it no longer handles |
| 467 // them. In this case, ignore the cancel since we handle downloads in the | 480 // them. In this case, ignore the cancel since we handle downloads in the |
| 468 // browser. | 481 // browser. |
| 469 if (from_renderer && (info->is_download() || info->is_stream())) | 482 if (from_renderer && (info->is_download() || info->is_stream())) |
| 470 return; | 483 return; |
| 471 | 484 |
| 485 if (from_renderer && info->is_detachable()) { | |
| 486 CancelAfterTimeout(); | |
| 487 return; | |
| 488 } | |
| 489 | |
| 472 // TODO(darin): Perhaps we should really be looking to see if the status is | 490 // TODO(darin): Perhaps we should really be looking to see if the status is |
| 473 // IO_PENDING? | 491 // IO_PENDING? |
| 474 bool was_pending = request_->is_pending(); | 492 bool was_pending = request_->is_pending(); |
| 475 | 493 |
| 476 if (login_delegate_.get()) { | 494 if (login_delegate_.get()) { |
| 477 login_delegate_->OnRequestCancelled(); | 495 login_delegate_->OnRequestCancelled(); |
| 478 login_delegate_ = NULL; | 496 login_delegate_ = NULL; |
| 479 } | 497 } |
| 480 if (ssl_client_auth_handler_.get()) { | 498 if (ssl_client_auth_handler_.get()) { |
| 481 ssl_client_auth_handler_->OnRequestCancelled(); | 499 ssl_client_auth_handler_->OnRequestCancelled(); |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 655 // we resume. | 673 // we resume. |
| 656 deferred_stage_ = DEFERRED_FINISH; | 674 deferred_stage_ = DEFERRED_FINISH; |
| 657 } | 675 } |
| 658 } | 676 } |
| 659 | 677 |
| 660 void ResourceLoader::CallDidFinishLoading() { | 678 void ResourceLoader::CallDidFinishLoading() { |
| 661 delegate_->DidFinishLoading(this); | 679 delegate_->DidFinishLoading(this); |
| 662 } | 680 } |
| 663 | 681 |
| 664 } // namespace content | 682 } // namespace content |
| OLD | NEW |