(
private serviceWorker: ServiceWorkerContainer | undefined,
injector?: Injector,
)
| 139 | readonly events: Observable<TypedEvent>; |
| 140 | |
| 141 | constructor( |
| 142 | private serviceWorker: ServiceWorkerContainer | undefined, |
| 143 | injector?: Injector, |
| 144 | ) { |
| 145 | if (!serviceWorker) { |
| 146 | this.worker = |
| 147 | this.events = |
| 148 | this.registration = |
| 149 | new Observable<never>((subscriber) => |
| 150 | subscriber.error( |
| 151 | new RuntimeError( |
| 152 | RuntimeErrorCode.SERVICE_WORKER_DISABLED_OR_NOT_SUPPORTED_BY_THIS_BROWSER, |
| 153 | (typeof ngDevMode === 'undefined' || ngDevMode) && ERR_SW_NOT_SUPPORTED, |
| 154 | ), |
| 155 | ), |
| 156 | ); |
| 157 | } else { |
| 158 | let currentWorker: ServiceWorker | null = null; |
| 159 | const workerSubject = new Subject<ServiceWorker>(); |
| 160 | this.worker = new Observable((subscriber) => { |
| 161 | if (currentWorker !== null) { |
| 162 | subscriber.next(currentWorker); |
| 163 | } |
| 164 | return workerSubject.subscribe((v) => subscriber.next(v)); |
| 165 | }); |
| 166 | const updateController = () => { |
| 167 | const {controller} = serviceWorker; |
| 168 | if (controller === null) { |
| 169 | return; |
| 170 | } |
| 171 | currentWorker = controller; |
| 172 | workerSubject.next(currentWorker); |
| 173 | }; |
| 174 | serviceWorker.addEventListener('controllerchange', updateController); |
| 175 | updateController(); |
| 176 | |
| 177 | this.registration = this.worker.pipe( |
| 178 | switchMap(() => |
| 179 | serviceWorker.getRegistration().then((registration) => { |
| 180 | // The `getRegistration()` method may return undefined in |
| 181 | // non-secure contexts or incognito mode, where service worker |
| 182 | // registration might not be allowed. |
| 183 | if (!registration) { |
| 184 | throw new RuntimeError( |
| 185 | RuntimeErrorCode.SERVICE_WORKER_DISABLED_OR_NOT_SUPPORTED_BY_THIS_BROWSER, |
| 186 | (typeof ngDevMode === 'undefined' || ngDevMode) && ERR_SW_NOT_SUPPORTED, |
| 187 | ); |
| 188 | } |
| 189 | |
| 190 | return registration; |
| 191 | }), |
| 192 | ), |
| 193 | ); |
| 194 | |
| 195 | const _events = new Subject<TypedEvent>(); |
| 196 | this.events = _events.asObservable(); |
| 197 | |
| 198 | const messageListener = (event: MessageEvent) => { |
nothing calls this directly
no test coverage detected