Skip to content

Commit 058fe61

Browse files
OrKoNDevtools-frontend LUCI CQ
authored andcommitted
Handle worker main script requests
Bug: 383343309 Change-Id: Ie2da91c7a68e0b4e975c48a9a5e15b9da95e0769 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6281387 Auto-Submit: Alex Rudenko <[email protected]> Reviewed-by: Danil Somsikov <[email protected]> Commit-Queue: Danil Somsikov <[email protected]>
1 parent aebc198 commit 058fe61

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

front_end/core/sdk/NetworkManager.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,31 @@ describeWithMockConnection('MultitargetNetworkManager', () => {
9696
});
9797
});
9898

99+
it('handles worker requests originating from the frame target', async () => {
100+
const target = createTarget();
101+
const workerTarget = createTarget({type: SDK.Target.Type.Worker});
102+
103+
const multiTargetNetworkManager = SDK.NetworkManager.MultitargetNetworkManager.instance();
104+
const initialNetworkManager = target.model(SDK.NetworkManager.NetworkManager)!;
105+
106+
assert.strictEqual(multiTargetNetworkManager.inflightMainResourceRequests.size, 0);
107+
108+
const requestId = 'mockId';
109+
const requestPromise = initialNetworkManager.once(SDK.NetworkManager.Events.RequestStarted);
110+
initialNetworkManager.dispatcher.requestWillBeSent(
111+
{requestId, loaderId: '', request: {url: 'example.com'}} as Protocol.Network.RequestWillBeSentEvent);
112+
113+
const {request} = await requestPromise;
114+
assert.isOk(SDK.NetworkManager.NetworkManager.forRequest(request) === initialNetworkManager);
115+
assert.isOk(multiTargetNetworkManager.inflightMainResourceRequests.has(requestId));
116+
117+
const workerNetworkManager = workerTarget.model(SDK.NetworkManager.NetworkManager)!;
118+
workerNetworkManager.dispatcher.loadingFinished({requestId} as Protocol.Network.LoadingFinishedEvent);
119+
120+
assert.isOk(SDK.NetworkManager.NetworkManager.forRequest(request) === workerNetworkManager);
121+
assert.isOk(!multiTargetNetworkManager.inflightMainResourceRequests.has(requestId));
122+
});
123+
99124
it('uses main frame to get certificate', () => {
100125
SDK.ChildTargetManager.ChildTargetManager.install();
101126
const tabTarget = createTarget({type: SDK.Target.Type.TAB});

front_end/core/sdk/NetworkManager.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,9 +1107,12 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
11071107
if (loaderId) {
11081108
this.#requestsByLoaderId.set(loaderId, networkRequest);
11091109
}
1110-
// The following relies on the fact that loaderIds and requestIds are
1111-
// globally unique and that the main request has them equal.
1112-
if (networkRequest.loaderId === networkRequest.requestId()) {
1110+
// The following relies on the fact that loaderIds and requestIds
1111+
// are globally unique and that the main request has them equal. If
1112+
// loaderId is an empty string, it indicates a worker request. For the
1113+
// request to fetch the main worker script, the request ID is the future
1114+
// worker target ID and, therefore, it is unique.
1115+
if (networkRequest.loaderId === networkRequest.requestId() || networkRequest.loaderId === '') {
11131116
MultitargetNetworkManager.instance().inflightMainResourceRequests.set(networkRequest.requestId(), networkRequest);
11141117
}
11151118

0 commit comments

Comments
 (0)