Skip to content

Commit 6a2cc27

Browse files
author
Thiago Perrotta
committed
align network module with BiDi spec
Bug: #765 Spec: https://w3c.github.io/webdriver-bidi/#module-network
1 parent fce48df commit 6a2cc27

File tree

5 files changed

+48
-27
lines changed

5 files changed

+48
-27
lines changed

src/bidiMapper/domains/events/SubscriptionManager.spec.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -451,8 +451,9 @@ describe('unroll events', () => {
451451
it('all Network events', () => {
452452
expect(unrollEvents([Network.AllEvents])).to.deep.equal([
453453
Network.EventNames.BeforeRequestSentEvent,
454-
Network.EventNames.ResponseCompletedEvent,
455454
Network.EventNames.FetchErrorEvent,
455+
Network.EventNames.ResponseStartedEvent,
456+
Network.EventNames.ResponseCompletedEvent,
456457
]);
457458
});
458459

src/bidiMapper/domains/network/networkProcessor.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import Protocol from 'devtools-protocol';
2525
import {CdpClient} from '../../CdpConnection.js';
2626
import {IEventManager} from '../events/EventManager.js';
2727
import {DefaultMap} from '../../../utils/DefaultMap.js';
28+
import {Network} from '../../../protocol/protocol.js';
2829

2930
import {NetworkRequest} from './networkRequest.js';
3031

@@ -35,11 +36,11 @@ export class NetworkProcessor {
3536
* Map of request ID to NetworkRequest objects. Needed as long as information
3637
* about requests comes from different events.
3738
*/
38-
readonly #requestMap: DefaultMap<string, NetworkRequest>;
39+
readonly #requestMap: DefaultMap<Network.Request, NetworkRequest>;
3940

4041
private constructor(eventManager: IEventManager) {
4142
this.#eventManager = eventManager;
42-
this.#requestMap = new DefaultMap<string, NetworkRequest>(
43+
this.#requestMap = new DefaultMap(
4344
(requestId) => new NetworkRequest(requestId, this.#eventManager)
4445
);
4546
}
@@ -100,7 +101,7 @@ export class NetworkProcessor {
100101
return networkProcessor;
101102
}
102103

103-
#getOrCreateNetworkRequest(requestId: string): NetworkRequest {
104+
#getOrCreateNetworkRequest(requestId: Network.Request): NetworkRequest {
104105
return this.#requestMap.get(requestId);
105106
}
106107
}

src/bidiMapper/domains/network/networkRequest.ts

+15-16
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
* @fileoverview `NetworkRequest` represents a single network request and keeps
2121
* track of all the related CDP events.
2222
*/
23-
2423
import Protocol from 'devtools-protocol';
2524

2625
import {Deferred} from '../../../utils/deferred.js';
@@ -29,22 +28,19 @@ import {Network} from '../../../protocol/protocol.js';
2928

3029
export class NetworkRequest {
3130
static #unknown = 'UNKNOWN';
32-
requestId: string;
31+
32+
requestId: Network.Request;
3333
#eventManager: IEventManager;
34-
#requestWillBeSentEvent: Protocol.Network.RequestWillBeSentEvent | undefined;
35-
#requestWillBeSentExtraInfoEvent:
36-
| Protocol.Network.RequestWillBeSentExtraInfoEvent
37-
| undefined;
38-
#responseReceivedEvent: Protocol.Network.ResponseReceivedEvent | undefined;
3934

40-
#responseReceivedExtraInfoEvent:
41-
| Protocol.Network.ResponseReceivedExtraInfoEvent
42-
| undefined;
35+
#requestWillBeSentEvent?: Protocol.Network.RequestWillBeSentEvent;
36+
#requestWillBeSentExtraInfoEvent?: Protocol.Network.RequestWillBeSentExtraInfoEvent;
37+
#responseReceivedEvent?: Protocol.Network.ResponseReceivedEvent;
38+
#responseReceivedExtraInfoEvent?: Protocol.Network.ResponseReceivedExtraInfoEvent;
4339

4440
#beforeRequestSentDeferred: Deferred<void>;
4541
#responseReceivedDeferred: Deferred<void>;
4642

47-
constructor(requestId: string, eventManager: IEventManager) {
43+
constructor(requestId: Network.Request, eventManager: IEventManager) {
4844
this.requestId = requestId;
4945
this.#eventManager = eventManager;
5046
this.#beforeRequestSentDeferred = new Deferred<void>();
@@ -63,6 +59,7 @@ export class NetworkRequest {
6359
if (this.#requestWillBeSentExtraInfoEvent !== undefined) {
6460
this.#beforeRequestSentDeferred.resolve();
6561
}
62+
6663
this.#sendBeforeRequestEvent();
6764
}
6865

@@ -73,6 +70,7 @@ export class NetworkRequest {
7370
// TODO: Handle redirect event, requestId is same for the redirect chain
7471
return;
7572
}
73+
7674
this.#requestWillBeSentExtraInfoEvent = requestWillBeSentExtraInfoEvent;
7775
if (this.#requestWillBeSentEvent !== undefined) {
7876
this.#beforeRequestSentDeferred.resolve();
@@ -87,18 +85,21 @@ export class NetworkRequest {
8785
return;
8886
}
8987
this.#responseReceivedEvent = responseReceivedEvent;
88+
9089
if (
9190
!responseReceivedEvent.hasExtraInfo &&
9291
!this.#beforeRequestSentDeferred.isFinished
9392
) {
9493
this.#beforeRequestSentDeferred.resolve();
9594
}
95+
9696
if (
9797
!responseReceivedEvent.hasExtraInfo ||
9898
this.#responseReceivedExtraInfoEvent !== undefined
9999
) {
100100
this.#responseReceivedDeferred.resolve();
101101
}
102+
102103
this.#sendResponseReceivedEvent();
103104
}
104105

@@ -110,6 +111,7 @@ export class NetworkRequest {
110111
return;
111112
}
112113
this.#responseReceivedExtraInfoEvent = responseReceivedExtraInfoEvent;
114+
113115
if (this.#responseReceivedEvent !== undefined) {
114116
this.#responseReceivedDeferred.resolve();
115117
}
@@ -161,7 +163,7 @@ export class NetworkRequest {
161163
};
162164
}
163165

164-
#getBaseEventParams(): Network.BaseEventParams {
166+
#getBaseEventParams(): Network.BaseParameters {
165167
return {
166168
context: this.#requestWillBeSentEvent?.frameId ?? null,
167169
navigation: this.#requestWillBeSentEvent?.loaderId ?? null,
@@ -221,8 +223,6 @@ export class NetworkRequest {
221223
// TODO: implement.
222224
tlsStart: 0,
223225
// TODO: implement.
224-
tlsEnd: 0,
225-
// TODO: implement.
226226
requestStart: 0,
227227
// TODO: implement.
228228
responseStart: 0,
@@ -244,7 +244,7 @@ export class NetworkRequest {
244244
}
245245

246246
static #getCookiesSameSite(
247-
cdpSameSiteValue: string | undefined
247+
cdpSameSiteValue?: string
248248
): Network.Cookie['sameSite'] {
249249
switch (cdpSameSiteValue) {
250250
case 'Strict':
@@ -309,7 +309,6 @@ export class NetworkRequest {
309309
fromCache:
310310
this.#responseReceivedEvent.response.fromDiskCache ||
311311
this.#responseReceivedEvent.response.fromPrefetchCache,
312-
// TODO: implement.
313312
headers: this.#getHeaders(
314313
this.#responseReceivedEvent.response.headers
315314
),

src/protocol/protocol.ts

+26-7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export interface EventResponse<MethodType, ParamsType> {
3232
export type BiDiCommand =
3333
| BrowsingContext.Command
3434
| CDP.Command
35+
| Network.Command
3536
| Script.Command
3637
| Session.Command;
3738

@@ -51,6 +52,7 @@ export namespace Message {
5152
export type CommandRequest = Pick<RawCommandRequest, 'id'> & BiDiCommand;
5253
export type CommandResponse = Pick<RawCommandRequest, 'id'> & ResultData;
5354

55+
export type EmptyCommand = never;
5456
export type EmptyParams = Record<string, never>;
5557
export type EmptyResult = {result: Record<string, never>};
5658

@@ -60,6 +62,7 @@ export namespace Message {
6062
| BrowsingContext.Result
6163
| CDP.Result
6264
| ErrorResult
65+
| Network.Result
6366
| Script.Result
6467
| Session.Result;
6568
// keep-sorted end
@@ -1018,9 +1021,14 @@ export namespace Log {
10181021
}
10191022

10201023
export namespace Network {
1024+
export type Command = Message.EmptyCommand;
1025+
1026+
export type Result = Message.EmptyResult;
1027+
10211028
export type Event =
10221029
| BeforeRequestSentEvent
10231030
| ResponseCompletedEvent
1031+
| ResponseStartedEvent
10241032
| FetchErrorEvent;
10251033

10261034
export type BeforeRequestSentEvent = EventResponse<
@@ -1033,6 +1041,11 @@ export namespace Network {
10331041
ResponseCompletedParams
10341042
>;
10351043

1044+
export type ResponseStartedEvent = EventResponse<
1045+
EventNames.ResponseStartedEvent,
1046+
ResponseStartedParams
1047+
>;
1048+
10361049
export type FetchErrorEvent = EventResponse<
10371050
EventNames.FetchErrorEvent,
10381051
FetchErrorParams
@@ -1068,12 +1081,13 @@ export namespace Network {
10681081
connectStart: number;
10691082
connectEnd: number;
10701083
tlsStart: number;
1071-
tlsEnd: number;
10721084
requestStart: number;
10731085
responseStart: number;
10741086
responseEnd: number;
10751087
};
10761088

1089+
export type Request = string;
1090+
10771091
export type RequestData = {
10781092
request: string;
10791093
url: string;
@@ -1085,8 +1099,8 @@ export namespace Network {
10851099
timings: FetchTimingInfo;
10861100
};
10871101

1088-
export type BaseEventParams = {
1089-
context: string | null;
1102+
export type BaseParameters = {
1103+
context: CommonDataTypes.BrowsingContext | null;
10901104
navigation: BrowsingContext.Navigation | null;
10911105
redirectCount: number;
10921106
request: RequestData;
@@ -1119,24 +1133,29 @@ export namespace Network {
11191133
content: ResponseContent;
11201134
};
11211135

1122-
export type BeforeRequestSentParams = BaseEventParams & {
1136+
export type BeforeRequestSentParams = BaseParameters & {
11231137
initiator: Initiator;
11241138
};
11251139

1126-
export type ResponseCompletedParams = BaseEventParams & {
1140+
export type ResponseCompletedParams = BaseParameters & {
11271141
response: ResponseData;
11281142
};
11291143

1130-
export type FetchErrorParams = BaseEventParams & {
1144+
export type ResponseStartedParams = BaseParameters & {
1145+
response: ResponseData;
1146+
};
1147+
1148+
export type FetchErrorParams = BaseParameters & {
11311149
errorText: string;
11321150
};
11331151

11341152
export const AllEvents = 'network';
11351153

11361154
export enum EventNames {
11371155
BeforeRequestSentEvent = 'network.beforeRequestSent',
1138-
ResponseCompletedEvent = 'network.responseCompleted',
11391156
FetchErrorEvent = 'network.fetchError',
1157+
ResponseStartedEvent = 'network.responseStarted',
1158+
ResponseCompletedEvent = 'network.responseCompleted',
11401159
}
11411160
}
11421161

wpt-metadata/chromedriver/headless/webdriver/tests/bidi/network/response_started/response_started.py.ini

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[response_started.py]
2+
expected: TIMEOUT
23
[test_subscribe_status]
34
expected: FAIL
45

0 commit comments

Comments
 (0)