|
|
@@ -367,12 +367,27 @@ describe('experimental Inspector real Worker', () => {
|
|
|
client = await InspectorClientFixture.start(inspector.endpoint.client, { label: 'Console Client' })
|
|
|
cdp = await TestCdpClient.connect(inspector.endpoint.webSocketDebuggerUrl)
|
|
|
secondCdp = await TestCdpClient.connect(inspector.endpoint.webSocketDebuggerUrl)
|
|
|
+ await vi.waitFor(async () => {
|
|
|
+ const response = await cdp!.call('DSHInspector.getSources')
|
|
|
+ expect(recordArray(response.result?.sources).some(source => source.kind === 'client')).toBe(true)
|
|
|
+ })
|
|
|
+ // The MessagePort can deliver log requests before ingest receives Console subscriptions.
|
|
|
+ await client.setIngestPaused(true)
|
|
|
await Promise.all([cdp.call('Runtime.enable'), secondCdp.call('Runtime.enable')])
|
|
|
const firstContext = await clientContext(cdp)
|
|
|
const secondContext = await clientContext(secondCdp)
|
|
|
const value = { owner: 'client-console' }
|
|
|
const marker = 'client-console-event'
|
|
|
- await client.log(value, marker)
|
|
|
+ const logged = (async () => {
|
|
|
+ // Both subscriptions precede this request on the same ingest WebSocket.
|
|
|
+ // A Client response, unlike Runtime.enable, acknowledges their delivery.
|
|
|
+ expect((await cdp.call('Runtime.evaluate', {
|
|
|
+ contextId: firstContext,
|
|
|
+ expression: 'void 0',
|
|
|
+ })).error).toBeUndefined()
|
|
|
+ await client.log(value, marker)
|
|
|
+ })()
|
|
|
+ await Promise.all([logged, client.setIngestPaused(false)])
|
|
|
let firstEvent: CdpMessage | undefined
|
|
|
let secondEvent: CdpMessage | undefined
|
|
|
await vi.waitFor(() => {
|
|
|
@@ -398,6 +413,16 @@ describe('experimental Inspector real Worker', () => {
|
|
|
expect((await cdp.call('Runtime.discardConsoleEntries')).error).toBeUndefined()
|
|
|
expect((await cdp.call('Runtime.getProperties', { objectId: firstObjectId })).error).toBeDefined()
|
|
|
expect((await secondCdp.call('Runtime.getProperties', { objectId: secondObjectId })).error).toBeUndefined()
|
|
|
+
|
|
|
+ await client.setIngestPaused(true)
|
|
|
+ await client.close()
|
|
|
+ client = undefined
|
|
|
+ await vi.waitFor(() => {
|
|
|
+ for (const [connection, contextId] of [[cdp!, firstContext], [secondCdp!, secondContext]] as const) {
|
|
|
+ expect(connection.events.some(event => event.method === 'Runtime.executionContextDestroyed'
|
|
|
+ && event.params?.executionContextId === contextId)).toBe(true)
|
|
|
+ }
|
|
|
+ })
|
|
|
})
|
|
|
|
|
|
it('projects a chunked Client bundle as read-only Debugger source', async () => {
|