chore: instrument nested workers (#27400)
Ref: https://github.com/microsoft/playwright/issues/27376
This commit is contained in:
parent
ae08d03d75
commit
47b0255b89
|
|
@ -748,6 +748,9 @@ class FrameSession {
|
|||
session._sendMayFail('Runtime.enable');
|
||||
session._sendMayFail('Network.enable');
|
||||
session._sendMayFail('Runtime.runIfWaitingForDebugger');
|
||||
session._sendMayFail('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });
|
||||
session.on('Target.attachedToTarget', event => this._onAttachedToTarget(event));
|
||||
session.on('Target.detachedFromTarget', event => this._onDetachedFromTarget(event));
|
||||
session.on('Runtime.consoleAPICalled', event => {
|
||||
const args = event.args.map(o => worker._existingExecutionContext!.createHandle(o));
|
||||
this._page._addConsoleMessage(event.type, args, toConsoleMessageLocation(event.stackTrace));
|
||||
|
|
@ -763,6 +766,7 @@ class FrameSession {
|
|||
if (workerSession) {
|
||||
workerSession.dispose();
|
||||
this._page._removeWorker(event.sessionId);
|
||||
return;
|
||||
}
|
||||
|
||||
// ... or an oopif.
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
|
||||
import { test as it, expect } from './pageTest';
|
||||
import type { Worker as PwWorker } from '@playwright/test';
|
||||
import { attachFrame } from '../config/utils';
|
||||
import type { ConsoleMessage } from 'playwright-core';
|
||||
import fs from 'fs';
|
||||
|
|
@ -192,3 +193,32 @@ it('should dispatch console messages when page has workers', async function({ pa
|
|||
]);
|
||||
expect(message.text()).toBe('foo');
|
||||
});
|
||||
|
||||
it('should report and intercept network from nested worker', async function({ page, server, browserName }) {
|
||||
it.fixme(browserName === 'webkit', 'https://github.com/microsoft/playwright/issues/27376');
|
||||
await page.route('**/simple.json', async route => {
|
||||
const json = { foo: 'not bar' };
|
||||
await route.fulfill({ json });
|
||||
});
|
||||
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
const url = server.PREFIX + '/simple.json';
|
||||
const workers: PwWorker[] = [];
|
||||
const messages: string[] = [];
|
||||
|
||||
page.on('worker', worker => workers.push(worker));
|
||||
page.on('console', msg => messages.push(msg.text()));
|
||||
|
||||
await page.evaluate(url => new Worker(URL.createObjectURL(new Blob([`
|
||||
fetch("${url}").then(response => response.text()).then(t => console.log(t.trim()));
|
||||
`], { type: 'application/javascript' }))), url);
|
||||
await expect.poll(() => workers.length).toBe(1);
|
||||
|
||||
await workers[0].evaluate(url => new Worker(URL.createObjectURL(new Blob([`
|
||||
fetch("${url}").then(response => response.text()).then(t => console.log(t.trim()));
|
||||
`], { type: 'application/javascript' }))), url);
|
||||
|
||||
await expect.poll(() => workers.length).toBe(2);
|
||||
|
||||
await expect.poll(() => messages).toEqual(['{"foo":"not bar"}', '{"foo":"not bar"}']);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue