Commit d96ad866 authored by momohatt's avatar momohatt Committed by Commit Bot

[ServiceWorker] Fix the timing of state transition in NewScriptLoader

ServiceWorkerNewScriptLoader uses an internal variable called
|network_loader_state_| to control the state of URLLoaderClient. This
state is changed from kLoadingHeader to kWaitingForBody at the end of
OnReceiveResponse(). However, WriteHeaders() could call
OnWriteHeadersComplete() synchronously and it calls
MaybeStartNetworkConsumerHandleWatcher() when |network_loader_state_| is set to
kLoadingHeader. And later OnStartLoadingResponseBody() calls
MaybeStartNetworkConsumerHandleWatcher() again and hits
DCHECK_EQ(kNotStarted, body_writer_state_).

Change-Id: I3b9450ca53e6b98423d532ea02134d002d7753b6
Reviewed-on: https://chromium-review.googlesource.com/1237634Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Commit-Queue: Momoko Hattori <momohatt@google.com>
Cr-Commit-Position: refs/heads/master@{#593809}
parent 56be0859
...@@ -248,6 +248,8 @@ void ServiceWorkerNewScriptLoader::OnReceiveResponse( ...@@ -248,6 +248,8 @@ void ServiceWorkerNewScriptLoader::OnReceiveResponse(
version_->SetMainScriptHttpResponseInfo(*response_info); version_->SetMainScriptHttpResponseInfo(*response_info);
} }
network_loader_state_ = NetworkLoaderState::kWaitingForBody;
WriteHeaders( WriteHeaders(
base::MakeRefCounted<HttpResponseInfoIOBuffer>(std::move(response_info))); base::MakeRefCounted<HttpResponseInfoIOBuffer>(std::move(response_info)));
...@@ -259,11 +261,9 @@ void ServiceWorkerNewScriptLoader::OnReceiveResponse( ...@@ -259,11 +261,9 @@ void ServiceWorkerNewScriptLoader::OnReceiveResponse(
network::ResourceResponseHead new_response_head = response_head; network::ResourceResponseHead new_response_head = response_head;
new_response_head.ssl_info.reset(); new_response_head.ssl_info.reset();
client_->OnReceiveResponse(new_response_head); client_->OnReceiveResponse(new_response_head);
} else { return;
client_->OnReceiveResponse(response_head);
} }
client_->OnReceiveResponse(response_head);
network_loader_state_ = NetworkLoaderState::kWaitingForBody;
} }
void ServiceWorkerNewScriptLoader::OnReceiveRedirect( void ServiceWorkerNewScriptLoader::OnReceiveRedirect(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment