Skip to content

Commit

Permalink
fix(chromium): avoid premature continue of redirects (#27520)
Browse files Browse the repository at this point in the history
This has recently regressed in #27429.

We now continue requests that are paused for the second time. However,
redirects share `networkId` with the original request, so we may confuse
paused redirect with a second pause for the original request.

This is covered by the flaky test `page-route.spec.ts:392 > should work
with redirects for subresources`
References #27294.
  • Loading branch information
dgozman authored Oct 10, 2023
1 parent fd6bf8a commit 2407041
Showing 1 changed file with 4 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,16 @@ export class CRNetworkManager {
} else {
const existingRequest = this._requestIdToRequest.get(requestId);
const alreadyContinuedParams = existingRequest?._route?._alreadyContinuedParams;
if (alreadyContinuedParams) {
if (alreadyContinuedParams && !event.redirectedRequestId) {
// Sometimes Chromium network stack restarts the request internally.
// For example, when no-cors request hits a "less public address space", it should be resent with cors.
// There are some more examples here: https://source.chromium.org/chromium/chromium/src/+/main:services/network/url_loader.cc;l=1205-1234;drc=d5dd931e0ad3d9ffe74888ec62a3cc106efd7ea6
// There are probably even more cases deep inside the network stack.
//
// Anyway, in this case, continue the request in the same way as before, and it should go through.
//
// Note: make sure not to prematurely continue the redirect, which shares the
// `networkId` between the original request and the redirect.
this._session._sendMayFail('Fetch.continueRequest', {
...alreadyContinuedParams,
requestId: event.requestId,
Expand Down

0 comments on commit 2407041

Please sign in to comment.