fix(webkit): clear workers on navigation (#535)

This commit is contained in:
Yury Semikhatsky 2020-01-17 18:46:45 -08:00 committed by GitHub
parent 040531062f
commit ab806e6274
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 2 deletions

View file

@ -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);
}

View file

@ -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');
}