Skip to content

Commit efac0d1

Browse files
committed
fix: emit responseCompleted at the right time
1 parent 5049b1b commit efac0d1

File tree

4 files changed

+41
-18
lines changed

4 files changed

+41
-18
lines changed

src/bidiMapper/modules/network/NetworkModuleMocks.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,14 @@ export class MockCdpNetworkEvents {
415415
});
416416
}
417417

418+
loadingFinished() {
419+
this.cdpClient.emit('Network.loadingFinished', {
420+
requestId: this.requestId,
421+
timestamp: 279179.745291,
422+
encodedDataLength: 999,
423+
});
424+
}
425+
418426
setJsonEvent(json: string | Record<string, unknown>, _normalize = false) {
419427
const event = json instanceof Object ? json : JSON.parse(json);
420428

src/bidiMapper/modules/network/NetworkRequest.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ export class NetworkRequest {
101101
info?: Protocol.Network.Response;
102102
extraInfo?: Protocol.Network.ResponseReceivedExtraInfoEvent;
103103
paused?: Protocol.Fetch.RequestPausedEvent;
104+
loadingFinished?: Protocol.Network.LoadingFinishedEvent;
105+
loadingFailed?: Protocol.Network.LoadingFailedEvent;
104106
} = {};
105107

106108
#eventManager: EventManager;
@@ -453,13 +455,12 @@ export class NetworkRequest {
453455
#emitEventsIfReady(
454456
options: {
455457
wasRedirected?: boolean;
456-
hasFailed?: boolean;
457458
} = {},
458459
) {
459460
const requestExtraInfoCompleted =
460461
// Flush redirects
461462
options.wasRedirected ||
462-
options.hasFailed ||
463+
Boolean(this.#response.loadingFailed) ||
463464
this.#isDataUrl() ||
464465
Boolean(this.#request.extraInfo) ||
465466
// Requests from cache don't have extra info
@@ -508,10 +509,15 @@ export class NetworkRequest {
508509
!responseInterceptionExpected ||
509510
(responseInterceptionExpected && Boolean(this.#response.paused));
510511

512+
const loadingFinished =
513+
Boolean(this.#response.loadingFailed) ||
514+
Boolean(this.#response.loadingFinished);
515+
511516
if (
512517
Boolean(this.#response.info) &&
513518
responseExtraInfoCompleted &&
514-
responseInterceptionCompleted
519+
responseInterceptionCompleted &&
520+
(loadingFinished || options.wasRedirected)
515521
) {
516522
this.#emitEvent(this.#getResponseReceivedEvent.bind(this));
517523
this.#networkStorage.disposeRequest(this.id);
@@ -561,10 +567,14 @@ export class NetworkRequest {
561567
this.#emitEventsIfReady();
562568
}
563569

570+
onLoadingFinishedEvent(event: Protocol.Network.LoadingFinishedEvent) {
571+
this.#response.loadingFinished = event;
572+
this.#emitEventsIfReady();
573+
}
574+
564575
onLoadingFailedEvent(event: Protocol.Network.LoadingFailedEvent) {
565-
this.#emitEventsIfReady({
566-
hasFailed: true,
567-
});
576+
this.#response.loadingFailed = event;
577+
this.#emitEventsIfReady();
568578

569579
this.#emitEvent(() => {
570580
return {

src/bidiMapper/modules/network/NetworkStorage.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ describe('NetworkStorage', () => {
413413

414414
request.requestWillBeSent();
415415
request.responseReceived();
416+
request.loadingFinished();
416417
const event = await getEvent('network.responseCompleted');
417418
expect(event).to.exist;
418419
});
@@ -438,6 +439,7 @@ describe('NetworkStorage', () => {
438439
request.requestWillBeSentExtraInfo();
439440
request.responseReceived();
440441
request.responseReceivedExtraInfo();
442+
request.loadingFinished();
441443

442444
const event = await getEvent('network.responseCompleted');
443445

@@ -466,6 +468,7 @@ describe('NetworkStorage', () => {
466468
});
467469
request.responseReceived();
468470
request.responseReceivedExtraInfo();
471+
request.loadingFinished();
469472

470473
const event = await getEvent('network.responseCompleted');
471474

src/bidiMapper/modules/network/NetworkStorage.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,17 +185,6 @@ export class NetworkStorage {
185185
request.onServedFromCache();
186186
},
187187
],
188-
[
189-
'Network.loadingFailed',
190-
(params: Protocol.Network.LoadingFailedEvent) => {
191-
const request = this.#getOrCreateNetworkRequest(
192-
params.requestId,
193-
cdpTarget,
194-
);
195-
request.updateCdpTarget(cdpTarget);
196-
request.onLoadingFailedEvent(params);
197-
},
198-
],
199188
[
200189
'Fetch.requestPaused',
201190
(event: Protocol.Fetch.RequestPausedEvent) => {
@@ -228,10 +217,23 @@ export class NetworkStorage {
228217
this.getRequestById(params.requestId)?.updateCdpTarget(cdpTarget);
229218
},
230219
],
220+
[
221+
'Network.loadingFailed',
222+
(params: Protocol.Network.LoadingFailedEvent) => {
223+
const request = this.#getOrCreateNetworkRequest(
224+
params.requestId,
225+
cdpTarget,
226+
);
227+
request.updateCdpTarget(cdpTarget);
228+
request.onLoadingFailedEvent(params);
229+
},
230+
],
231231
[
232232
'Network.loadingFinished',
233233
(params: Protocol.Network.LoadingFinishedEvent) => {
234-
this.getRequestById(params.requestId)?.updateCdpTarget(cdpTarget);
234+
const request = this.getRequestById(params.requestId);
235+
request?.updateCdpTarget(cdpTarget);
236+
request?.onLoadingFinishedEvent(params);
235237
},
236238
],
237239
] as const;

0 commit comments

Comments
 (0)