Commit 4327bb89 authored by Arthur Sonzogni's avatar Arthur Sonzogni Committed by Commit Bot

DevtoolsUrlLoaderInterceptor: Instrument for bug 882661.

In bug 882661: one mojo::URLLoader is sending OnStartLoadingResponseBody
without sending OnReceiveResponse before.

Add instrumentation to check this never happen with this class.

Bug: 882661
Change-Id: I8a157949feacfe65f0ea1aa8c32b28352d6d6f57
Reviewed-on: https://chromium-review.googlesource.com/c/1288595
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#601087}
parent a872d413
......@@ -317,6 +317,9 @@ class InterceptionJob : public network::mojom::URLLoaderClient,
pending_auth_callback_;
TakeResponseBodyPipeCallback pending_response_body_pipe_callback_;
// TODO(https://crbug.com/882661): Remove this as soon as the bug is fixed.
bool on_receive_response_sent_ = false;
base::WeakPtrFactory<InterceptionJob> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(InterceptionJob);
......@@ -889,6 +892,7 @@ Response InterceptionJob::InnerContinueRequest(
DCHECK_EQ(State::kResponseReceived, state_);
DCHECK(!body_reader_);
client_->OnReceiveResponse(response_metadata_->head);
on_receive_response_sent_ = true;
response_metadata_.reset();
loader_->ResumeReadingBodyFromNet();
client_binding_.ResumeIncomingMethodCallProcessing();
......@@ -1091,6 +1095,7 @@ void InterceptionJob::ProcessRedirectByClient(const GURL& redirect_url) {
void InterceptionJob::SendResponse(const base::StringPiece& body) {
client_->OnReceiveResponse(response_metadata_->head);
on_receive_response_sent_ = true;
// We shouldn't be able to transfer a string that big over the protocol,
// but just in case...
......@@ -1105,6 +1110,7 @@ void InterceptionJob::SendResponse(const base::StringPiece& body) {
if (!response_metadata_->cached_metadata.empty())
client_->OnReceiveCachedMetadata(response_metadata_->cached_metadata);
CHECK(on_receive_response_sent_);
client_->OnStartLoadingResponseBody(std::move(pipe.consumer_handle));
if (response_metadata_->transfer_size)
client_->OnTransferSizeUpdated(response_metadata_->transfer_size);
......@@ -1359,6 +1365,7 @@ void InterceptionJob::OnReceiveResponse(
DCHECK(!response_metadata_);
if (!(stage_ & InterceptionStage::RESPONSE)) {
client_->OnReceiveResponse(head);
on_receive_response_sent_ = true;
return;
}
loader_->PauseReadingBodyFromNet();
......@@ -1432,10 +1439,13 @@ void InterceptionJob::OnStartLoadingResponseBody(
return;
}
DCHECK_EQ(State::kResponseReceived, state_);
if (ShouldBypassForResponse())
if (ShouldBypassForResponse()) {
// Remove this CHECK once https://crbug.com/882661 is fixed.
CHECK(on_receive_response_sent_);
client_->OnStartLoadingResponseBody(std::move(body));
else
} else {
body_reader_->StartReading(std::move(body));
}
}
void InterceptionJob::OnComplete(
......
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