| 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 |