fix(webkit): clear workers on navigation (#535)
This commit is contained in:
parent
040531062f
commit
ab806e6274
|
|
@ -202,6 +202,8 @@ export class WKPage implements PageDelegate {
|
|||
frame._contextDestroyed(context);
|
||||
}
|
||||
}
|
||||
if (!framePayload.parentId)
|
||||
this._workers.clear();
|
||||
this._page._frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url, framePayload.name || '', framePayload.loaderId, initial);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,8 +31,7 @@ export class WKWorkers {
|
|||
|
||||
setSession(session: WKSession) {
|
||||
helper.removeEventListeners(this._sessionListeners);
|
||||
this._page._clearWorkers();
|
||||
this._workerSessions.clear();
|
||||
this.clear();
|
||||
this._sessionListeners = [
|
||||
helper.addEventListener(session, 'Worker.workerCreated', async (event: Protocol.Worker.workerCreatedPayload) => {
|
||||
const worker = new Worker(event.url);
|
||||
|
|
@ -62,10 +61,14 @@ export class WKWorkers {
|
|||
}),
|
||||
helper.addEventListener(session, 'Worker.dispatchMessageFromWorker', (event: Protocol.Worker.dispatchMessageFromWorkerPayload) => {
|
||||
const workerSession = this._workerSessions.get(event.workerId)!;
|
||||
if (!workerSession)
|
||||
return;
|
||||
workerSession.dispatchMessage(JSON.parse(event.message));
|
||||
}),
|
||||
helper.addEventListener(session, 'Worker.workerTerminated', (event: Protocol.Worker.workerTerminatedPayload) => {
|
||||
const workerSession = this._workerSessions.get(event.workerId)!;
|
||||
if (!workerSession)
|
||||
return;
|
||||
workerSession.dispose();
|
||||
this._workerSessions.delete(event.workerId);
|
||||
this._page._removeWorker(event.workerId);
|
||||
|
|
@ -73,6 +76,11 @@ export class WKWorkers {
|
|||
];
|
||||
}
|
||||
|
||||
clear() {
|
||||
this._page._clearWorkers();
|
||||
this._workerSessions.clear();
|
||||
}
|
||||
|
||||
async initializeSession(session: WKSession) {
|
||||
await session.send('Worker.enable');
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue