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.h" | 8 #include "base/message_loop.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "content/browser/child_process_security_policy_impl.h" | 10 #include "content/browser/child_process_security_policy_impl.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 // by that time. In CompleteTransfer, the ResoureHandlers are substituted | 165 // by that time. In CompleteTransfer, the ResoureHandlers are substituted |
166 // again. | 166 // again. |
167 handler_.reset(new DoomedResourceHandler(handler_.Pass())); | 167 handler_.reset(new DoomedResourceHandler(handler_.Pass())); |
168 } | 168 } |
169 | 169 |
170 void ResourceLoader::WillCompleteTransfer() { | 170 void ResourceLoader::WillCompleteTransfer() { |
171 handler_.reset(); | 171 handler_.reset(); |
172 } | 172 } |
173 | 173 |
174 void ResourceLoader::CompleteTransfer(scoped_ptr<ResourceHandler> new_handler) { | 174 void ResourceLoader::CompleteTransfer(scoped_ptr<ResourceHandler> new_handler) { |
175 DCHECK_EQ(DEFERRED_REDIRECT, deferred_stage_); | 175 DCHECK_EQ(DEFERRED_READ, deferred_stage_); |
176 DCHECK(!handler_.get()); | 176 DCHECK(!handler_.get()); |
177 | 177 |
178 handler_ = new_handler.Pass(); | 178 handler_ = new_handler.Pass(); |
179 handler_->SetController(this); | 179 handler_->SetController(this); |
180 is_transferring_ = false; | |
181 | 180 |
182 Resume(); | 181 Resume(); |
183 } | 182 } |
184 | 183 |
185 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() { | 184 ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() { |
186 return ResourceRequestInfoImpl::ForRequest(request_.get()); | 185 return ResourceRequestInfoImpl::ForRequest(request_.get()); |
187 } | 186 } |
188 | 187 |
189 void ResourceLoader::ClearLoginDelegate() { | 188 void ResourceLoader::ClearLoginDelegate() { |
190 login_delegate_ = NULL; | 189 login_delegate_ = NULL; |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 | 418 |
420 void ResourceLoader::ContinueSSLRequest(const GlobalRequestID& id) { | 419 void ResourceLoader::ContinueSSLRequest(const GlobalRequestID& id) { |
421 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 420 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
422 | 421 |
423 DVLOG(1) << "ContinueSSLRequest() url: " << request_->url().spec(); | 422 DVLOG(1) << "ContinueSSLRequest() url: " << request_->url().spec(); |
424 | 423 |
425 request_->ContinueDespiteLastError(); | 424 request_->ContinueDespiteLastError(); |
426 } | 425 } |
427 | 426 |
428 void ResourceLoader::Resume() { | 427 void ResourceLoader::Resume() { |
429 DCHECK(!is_transferring_); | 428 bool was_transfer = is_transferring_; |
| 429 is_transferring_ = false; |
430 | 430 |
431 DeferredStage stage = deferred_stage_; | 431 DeferredStage stage = deferred_stage_; |
432 deferred_stage_ = DEFERRED_NONE; | 432 deferred_stage_ = DEFERRED_NONE; |
433 switch (stage) { | 433 switch (stage) { |
434 case DEFERRED_NONE: | 434 case DEFERRED_NONE: |
435 NOTREACHED(); | 435 NOTREACHED(); |
436 break; | 436 break; |
437 case DEFERRED_START: | 437 case DEFERRED_START: |
438 StartRequestInternal(); | 438 StartRequestInternal(); |
439 break; | 439 break; |
440 case DEFERRED_REDIRECT: | 440 case DEFERRED_REDIRECT: |
441 request_->FollowDeferredRedirect(); | 441 request_->FollowDeferredRedirect(); |
442 break; | 442 break; |
443 case DEFERRED_READ: | 443 case DEFERRED_READ: |
444 base::MessageLoop::current()->PostTask( | 444 if (was_transfer) { |
445 FROM_HERE, | 445 // We need to go through the OnResponseStarted steps again in the new |
446 base::Bind(&ResourceLoader::ResumeReading, | 446 // resource handler. |
447 weak_ptr_factory_.GetWeakPtr())); | 447 OnResponseStarted(request_.get()); |
| 448 } else { |
| 449 base::MessageLoop::current()->PostTask( |
| 450 FROM_HERE, |
| 451 base::Bind(&ResourceLoader::ResumeReading, |
| 452 weak_ptr_factory_.GetWeakPtr())); |
| 453 } |
448 break; | 454 break; |
449 case DEFERRED_FINISH: | 455 case DEFERRED_FINISH: |
450 // Delay self-destruction since we don't know how we were reached. | 456 // Delay self-destruction since we don't know how we were reached. |
451 base::MessageLoop::current()->PostTask( | 457 base::MessageLoop::current()->PostTask( |
452 FROM_HERE, | 458 FROM_HERE, |
453 base::Bind(&ResourceLoader::CallDidFinishLoading, | 459 base::Bind(&ResourceLoader::CallDidFinishLoading, |
454 weak_ptr_factory_.GetWeakPtr())); | 460 weak_ptr_factory_.GetWeakPtr())); |
455 break; | 461 break; |
456 } | 462 } |
457 } | 463 } |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 // we resume. | 659 // we resume. |
654 deferred_stage_ = DEFERRED_FINISH; | 660 deferred_stage_ = DEFERRED_FINISH; |
655 } | 661 } |
656 } | 662 } |
657 | 663 |
658 void ResourceLoader::CallDidFinishLoading() { | 664 void ResourceLoader::CallDidFinishLoading() { |
659 delegate_->DidFinishLoading(this); | 665 delegate_->DidFinishLoading(this); |
660 } | 666 } |
661 | 667 |
662 } // namespace content | 668 } // namespace content |
OLD | NEW |