fix: do not use old utility world (#6528)
Don’t use the old utility world, as it is being destroyed later when browser reconnects to the page. Issue: #6527
This commit is contained in:
parent
3bf5a55289
commit
fb859115c0
@ -322,18 +322,19 @@ export class FrameManager extends EventEmitter {
|
|||||||
await this._client.send('Page.addScriptToEvaluateOnNewDocument', {
|
await this._client.send('Page.addScriptToEvaluateOnNewDocument', {
|
||||||
source: `//# sourceURL=${EVALUATION_SCRIPT_URL}`,
|
source: `//# sourceURL=${EVALUATION_SCRIPT_URL}`,
|
||||||
worldName: name,
|
worldName: name,
|
||||||
}),
|
});
|
||||||
|
// Frames might be removed before we send this.
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
this.frames().map((frame) =>
|
this.frames().map((frame) =>
|
||||||
this._client
|
this._client
|
||||||
.send('Page.createIsolatedWorld', {
|
.send('Page.createIsolatedWorld', {
|
||||||
frameId: frame._id,
|
frameId: frame._id,
|
||||||
grantUniveralAccess: true,
|
|
||||||
worldName: name,
|
worldName: name,
|
||||||
|
grantUniveralAccess: true,
|
||||||
})
|
})
|
||||||
.catch(debugError)
|
.catch(debugError)
|
||||||
)
|
)
|
||||||
); // frames might be removed before we send this
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onFrameNavigatedWithinDocument(frameId: string, url: string): void {
|
_onFrameNavigatedWithinDocument(frameId: string, url: string): void {
|
||||||
@ -369,8 +370,6 @@ export class FrameManager extends EventEmitter {
|
|||||||
world = frame._secondaryWorld;
|
world = frame._secondaryWorld;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (contextPayload.auxData && contextPayload.auxData['type'] === 'isolated')
|
|
||||||
this._isolatedWorlds.add(contextPayload.name);
|
|
||||||
const context = new ExecutionContext(this._client, contextPayload, world);
|
const context = new ExecutionContext(this._client, contextPayload, world);
|
||||||
if (world) world._setContext(context);
|
if (world) world._setContext(context);
|
||||||
this._contextIdToContext.set(contextPayload.id, context);
|
this._contextIdToContext.set(contextPayload.id, context);
|
||||||
|
@ -589,6 +589,25 @@ describe('Launcher specs', function () {
|
|||||||
await browserOne.close();
|
await browserOne.close();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
// @see https://github.com/puppeteer/puppeteer/issues/6527
|
||||||
|
it('should be able to reconnect', async () => {
|
||||||
|
const { puppeteer, server } = getTestState();
|
||||||
|
const browserOne = await puppeteer.launch();
|
||||||
|
const browserWSEndpoint = browserOne.wsEndpoint();
|
||||||
|
const pageOne = await browserOne.newPage();
|
||||||
|
await pageOne.goto(server.EMPTY_PAGE);
|
||||||
|
browserOne.disconnect();
|
||||||
|
|
||||||
|
const browserTwo = await puppeteer.connect({ browserWSEndpoint });
|
||||||
|
const pages = await browserTwo.pages();
|
||||||
|
const pageTwo = pages.find((page) => page.url() === server.EMPTY_PAGE);
|
||||||
|
await pageTwo.reload();
|
||||||
|
const bodyHandle = await pageTwo.waitForSelector('body', {
|
||||||
|
timeout: 10000,
|
||||||
|
});
|
||||||
|
await bodyHandle.dispose();
|
||||||
|
await browserTwo.close();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
describe('Puppeteer.executablePath', function () {
|
describe('Puppeteer.executablePath', function () {
|
||||||
itOnlyRegularInstall('should work', async () => {
|
itOnlyRegularInstall('should work', async () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user