export default class ServiceWorkerManager extends SDK.SDKModel{constructor(target){super(target);target.registerServiceWorkerDispatcher(new ServiceWorkerDispatcher(this));this._lastAnonymousTargetId=0;this._agent=target.serviceWorkerAgent();this._registrations=new Map();this.enable();this._forceUpdateSetting=Common.settings.createSetting('serviceWorkerUpdateOnReload',false);if(this._forceUpdateSetting.get()){this._forceUpdateSettingChanged();} this._forceUpdateSetting.addChangeListener(this._forceUpdateSettingChanged,this);new ServiceWorkerContextNamer(target,this);} enable(){if(this._enabled){return;} this._enabled=true;this._agent.enable();} disable(){if(!this._enabled){return;} this._enabled=false;this._registrations.clear();this._agent.disable();} registrations(){return this._registrations;} hasRegistrationForURLs(urls){for(const registration of this._registrations.values()){if(urls.filter(url=>url&&url.startsWith(registration.scopeURL)).length===urls.length){return true;}} return false;} findVersion(versionId){for(const registration of this.registrations().values()){const version=registration.versions.get(versionId);if(version){return version;}} return null;} deleteRegistration(registrationId){const registration=this._registrations.get(registrationId);if(!registration){return;} if(registration._isRedundant()){this._registrations.delete(registrationId);this.dispatchEventToListeners(Events.RegistrationDeleted,registration);return;} registration._deleting=true;for(const version of registration.versions.values()){this.stopWorker(version.id);} this._unregister(registration.scopeURL);} updateRegistration(registrationId){const registration=this._registrations.get(registrationId);if(!registration){return;} this._agent.updateRegistration(registration.scopeURL);} deliverPushMessage(registrationId,data){const registration=this._registrations.get(registrationId);if(!registration){return;} const origin=Common.ParsedURL.extractOrigin(registration.scopeURL);this._agent.deliverPushMessage(origin,registrationId,data);} dispatchSyncEvent(registrationId,tag,lastChance){const registration=this._registrations.get(registrationId);if(!registration){return;} const origin=Common.ParsedURL.extractOrigin(registration.scopeURL);this._agent.dispatchSyncEvent(origin,registrationId,tag,lastChance);} dispatchPeriodicSyncEvent(registrationId,tag){const registration=this._registrations.get(registrationId);if(!registration){return;} const origin=Common.ParsedURL.extractOrigin(registration.scopeURL);this._agent.dispatchPeriodicSyncEvent(origin,registrationId,tag);} _unregister(scope){this._agent.unregister(scope);} startWorker(scope){this._agent.startWorker(scope);} skipWaiting(scope){this._agent.skipWaiting(scope);} stopWorker(versionId){this._agent.stopWorker(versionId);} inspectWorker(versionId){this._agent.inspectWorker(versionId);} _workerRegistrationUpdated(registrations){for(const payload of registrations){let registration=this._registrations.get(payload.registrationId);if(!registration){registration=new ServiceWorkerRegistration(payload);this._registrations.set(payload.registrationId,registration);this.dispatchEventToListeners(Events.RegistrationUpdated,registration);continue;} registration._update(payload);if(registration._shouldBeRemoved()){this._registrations.delete(registration.id);this.dispatchEventToListeners(Events.RegistrationDeleted,registration);}else{this.dispatchEventToListeners(Events.RegistrationUpdated,registration);}}} _workerVersionUpdated(versions){const registrations=new Set();for(const payload of versions){const registration=this._registrations.get(payload.registrationId);if(!registration){continue;} registration._updateVersion(payload);registrations.add(registration);} for(const registration of registrations){if(registration._shouldBeRemoved()){this._registrations.delete(registration.id);this.dispatchEventToListeners(Events.RegistrationDeleted,registration);}else{this.dispatchEventToListeners(Events.RegistrationUpdated,registration);}}} _workerErrorReported(payload){const registration=this._registrations.get(payload.registrationId);if(!registration){return;} registration.errors.push(payload);this.dispatchEventToListeners(Events.RegistrationErrorAdded,{registration:registration,error:payload});} forceUpdateOnReloadSetting(){return this._forceUpdateSetting;} _forceUpdateSettingChanged(){this._agent.setForceUpdateOnPageLoad(this._forceUpdateSetting.get());}} export const Events={RegistrationUpdated:Symbol('RegistrationUpdated'),RegistrationErrorAdded:Symbol('RegistrationErrorAdded'),RegistrationDeleted:Symbol('RegistrationDeleted')};class ServiceWorkerDispatcher{constructor(manager){this._manager=manager;} workerRegistrationUpdated(registrations){this._manager._workerRegistrationUpdated(registrations);} workerVersionUpdated(versions){this._manager._workerVersionUpdated(versions);} workerErrorReported(errorMessage){this._manager._workerErrorReported(errorMessage);}} export class ServiceWorkerVersion{constructor(registration,payload){this.registration=registration;this._update(payload);} _update(payload){this.id=payload.versionId;this.scriptURL=payload.scriptURL;const parsedURL=new Common.ParsedURL(payload.scriptURL);this.securityOrigin=parsedURL.securityOrigin();this.runningStatus=payload.runningStatus;this.status=payload.status;this.scriptLastModified=payload.scriptLastModified;this.scriptResponseTime=payload.scriptResponseTime;this.controlledClients=[];for(let i=0;i