| Index: content/browser/loader/resource_loader.cc
|
| diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
|
| index 00f700d40d997dcd6828840677f1fb5700b42d07..5bc7035b499bbd49b5cd6f5ae93ec27f96373230 100644
|
| --- a/content/browser/loader/resource_loader.cc
|
| +++ b/content/browser/loader/resource_loader.cc
|
| @@ -172,12 +172,11 @@ void ResourceLoader::WillCompleteTransfer() {
|
| }
|
|
|
| void ResourceLoader::CompleteTransfer(scoped_ptr<ResourceHandler> new_handler) {
|
| - DCHECK_EQ(DEFERRED_REDIRECT, deferred_stage_);
|
| + DCHECK_EQ(DEFERRED_READ, deferred_stage_);
|
| DCHECK(!handler_.get());
|
|
|
| handler_ = new_handler.Pass();
|
| handler_->SetController(this);
|
| - is_transferring_ = false;
|
|
|
| Resume();
|
| }
|
| @@ -426,7 +425,8 @@ void ResourceLoader::ContinueSSLRequest(const GlobalRequestID& id) {
|
| }
|
|
|
| void ResourceLoader::Resume() {
|
| - DCHECK(!is_transferring_);
|
| + bool was_transfer = is_transferring_;
|
| + is_transferring_ = false;
|
|
|
| DeferredStage stage = deferred_stage_;
|
| deferred_stage_ = DEFERRED_NONE;
|
| @@ -441,10 +441,16 @@ void ResourceLoader::Resume() {
|
| request_->FollowDeferredRedirect();
|
| break;
|
| case DEFERRED_READ:
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ResourceLoader::ResumeReading,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| + if (was_transfer) {
|
| + // We need to go through the OnResponseStarted steps again in the new
|
| + // resource handler.
|
| + OnResponseStarted(request_.get());
|
| + } else {
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ResourceLoader::ResumeReading,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + }
|
| break;
|
| case DEFERRED_FINISH:
|
| // Delay self-destruction since we don't know how we were reached.
|
|
|