refactor(service-worker): Remove deprecated activated & available observables. (#49498)

`activated`and `available` were deprecated by #43535 in v13.

PR Close #49498
This commit is contained in:
Matthieu Riegler 2023-03-20 21:08:04 +01:00 committed by Andrew Scott
parent 21b085d221
commit a645ceca94
15 changed files with 53 additions and 211 deletions

View file

@ -1,8 +1,6 @@
// #docplaster
import { Injectable } from '@angular/core';
// #docregion sw-replicate-available
import { filter, map } from 'rxjs/operators';
// #enddocregion sw-replicate-available
import { filter, map } from 'rxjs/operators';
import { SwUpdate, VersionReadyEvent } from '@angular/service-worker';
function promptUser(event: VersionReadyEvent): boolean {
@ -23,7 +21,6 @@ export class PromptUpdateService {
}
});
// #enddocregion sw-version-ready
// #docregion sw-replicate-available
// ...
const updatesAvailable = swUpdate.versionUpdates.pipe(
filter((evt): evt is VersionReadyEvent => evt.type === 'VERSION_READY'),
@ -32,7 +29,6 @@ export class PromptUpdateService {
current: evt.currentVersion,
available: evt.latestVersion,
})));
// #enddocregion sw-replicate-available
// #docregion sw-version-ready
}

View file

@ -96,8 +96,7 @@ v16 - v19
| `@angular/platform-browser-dynamic` | [`JitCompilerFactory`](#platform-browser-dynamic) | v13 | v16 |
| `@angular/platform-browser-dynamic` | [`RESOURCE_CACHE_PROVIDER`](#platform-browser-dynamic) | v13 | v16 |
| `@angular/platform-server` | [`ServerTransferStateModule`](#platform-server) | v14 | v16 |
| `@angular/service-worker` | [`SwUpdate#activated`](api/service-worker/SwUpdate#activated) | v13 | v16 |
| `@angular/service-worker` | [`SwUpdate#available`](api/service-worker/SwUpdate#available) | v13 | v16 |
| `@angular/platform-browser` | [`BrowserModule.withServerTransition`](api/platform-browser/BrowserModule#withservertransition) | v16 | v18 |
### Deprecated features that can be removed in v17 or later
@ -253,15 +252,6 @@ In the [API reference section](api) of this site, deprecated APIs are indicated
| [`ngModel` with reactive forms](#ngmodel-reactive) | [`FormControlDirective`](api/forms/FormControlDirective) | v6 | none |
| [`FormBuilder.group` legacy options parameter](api/forms/FormBuilder#group) | [`AbstractControlOptions` parameter value](api/forms/AbstractControlOptions) | v11 | none |
<a id="service-worker"></a>
### &commat;angular/service-worker
| API | Replacement | Deprecation announced | Details |
|:--- |:--- |:--- |:--- |
| [`SwUpdate#activated`](api/service-worker/SwUpdate#activated) | [`SwUpdate#activateUpdate()` return value](api/service-worker/SwUpdate#activateUpdate) | v13 | The return value of `SwUpdate#activateUpdate()` indicates whether an update was successfully activated. |
| [`SwUpdate#available`](api/service-worker/SwUpdate#available) | [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) | v13 | The behavior of `SwUpdate#available` can be rebuilt by filtering for `VersionReadyEvent` events on [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) |
<a id="upgrade"></a>
### &commat;angular/upgrade

View file

@ -73,7 +73,7 @@ More specifically:
* The browser does not download the service worker script and the `ngsw.json` manifest file
* Active attempts to interact with the service worker, such as calling `SwUpdate.checkForUpdate()`, return rejected promises
* The observable events of related services, such as `SwUpdate.available`, are not triggered
* The observable events of related services, such as `SwUpdate.versionUpdates`, are not triggered
It is highly recommended that you ensure that your application works even without service worker support in the browser.
Although an unsupported browser ignores service worker caching, it still reports errors if the application attempts to interact with the service worker.

View file

@ -67,7 +67,7 @@ For information about the deprecation and removal practices of Angular, see [Ang
| `relativeLinkResolution` in the Router [`ExtraOptions`](api/router/ExtraOptions) | Switch to the default of `'corrected'` link resolution | This option was introduced to fix a bug with link resolution in a backwards compatible way. Existing apps which still depend on the buggy legacy behavior should switch to the new corrected behavior and stop passing this flag. |
| `resolver` argument in [`RouterOutletContract.activateWith`](api/router/RouterOutletContract#activateWith) | n/a | `ComponentFactory` and `ComponentFactoryResolver` are deprecated, and passing an argument for a resolver to retrieve a `ComponentFactory` is no longer required. |
| [`OutletContext#resolver](https://v14.angular.io/api/router/OutletContext#resolver) | n/a | `ComponentFactory` and `ComponentFactoryResolver` are deprecated, and using a resolver to retrieve a `ComponentFactory` is no longer required. |
| [`SwUpdate#activated`](api/service-worker/SwUpdate#activated) | Return value of [`SwUpdate#activateUpdate`](api/service-worker/SwUpdate#activateUpdate) | The `activated` property is deprecated. Existing usages can migrate to [`SwUpdate#activateUpdate`](api/service-worker/SwUpdate#activateUpdate). |
| [`SwUpdate#available`](api/service-worker/SwUpdate#available) | [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) | The behavior of [`SwUpdate#available`](api/service-worker/SwUpdate#available) can be achieved by filtering for the [`VersionReadyEvent`](api/service-worker/VersionReadyEvent) from [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) |
| [`SwUpdate#activated`](https://v14.angular.io/api/service-worker/SwUpdate#activated) | Return value of [`SwUpdate#activateUpdate`](api/service-worker/SwUpdate#activateUpdate) | The `activated` property is deprecated. Existing usages can migrate to [`SwUpdate#activateUpdate`](api/service-worker/SwUpdate#activateUpdate). |
| [`SwUpdate#available`](https://v14.angular.io/api/service-worker/SwUpdate#available) | [`SwUpdate#versionUpdates`](https://v14.angular.io/api/service-worker/SwUpdate#versionUpdates) | The behavior of [`SwUpdate#available`](https://v14.angular.io/api/service-worker/SwUpdate#available) can be achieved by filtering for the [`VersionReadyEvent`](https://v14.angular.io/api/service-worker/VersionReadyEvent) from [`SwUpdate#versionUpdates`](api/service-worker/SwUpdate#versionUpdates) |
@reviewed 2022-05-31

View file

@ -1,6 +1,6 @@
import { ApplicationRef, ErrorHandler, Injector } from '@angular/core';
import { discardPeriodicTasks, fakeAsync, tick } from '@angular/core/testing';
import { SwUpdate, VersionEvent, VersionReadyEvent } from '@angular/service-worker';
import { SwUpdate, VersionEvent } from '@angular/service-worker';
import { BehaviorSubject, Subject } from 'rxjs';
import { LocationService } from 'app/shared/location.service';
@ -89,7 +89,7 @@ describe('SwUpdatesService', () => {
appRef.isStable.next(true);
expect(swu.activateUpdate).not.toHaveBeenCalled();
swu.$$versionUpdatesSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'} as VersionReadyEvent);
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
expect(swu.activateUpdate).toHaveBeenCalled();
})));
@ -100,7 +100,7 @@ describe('SwUpdatesService', () => {
tick(checkInterval);
expect(swu.checkForUpdate).toHaveBeenCalledTimes(1);
swu.$$versionUpdatesSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'} as VersionReadyEvent);
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(swu.checkForUpdate).toHaveBeenCalledTimes(2);
@ -111,14 +111,15 @@ describe('SwUpdatesService', () => {
discardPeriodicTasks();
})));
it('should request a full page navigation when an update has been activated', fakeAsync(run(() => {
swu.$$versionUpdatesSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'} as VersionReadyEvent);
tick();
it('should request a full page navigation when an update has been activated', fakeAsync(run(async () => {
expect(location.fullPageNavigationNeeded).toHaveBeenCalledTimes(0);
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(location.fullPageNavigationNeeded).toHaveBeenCalledTimes(1);
swu.$$versionUpdatesSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'} as VersionReadyEvent);
tick();
swu.$$availableSubj.next({latestVersion: {hash: 'baz'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(location.fullPageNavigationNeeded).toHaveBeenCalledTimes(2);
})));
@ -159,9 +160,7 @@ describe('SwUpdatesService', () => {
tick(checkInterval);
tick(checkInterval);
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'foo'}, currentVersion: {hash: 'bar'} , type: 'VERSION_READY'
});
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
tick(checkInterval);
@ -170,21 +169,18 @@ describe('SwUpdatesService', () => {
})));
it('should not activate available updates', fakeAsync(runDeactivated(() => {
swu.$$versionUpdatesSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'} as VersionReadyEvent);
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
expect(swu.activateUpdate).not.toHaveBeenCalled();
})));
it('should never request a full page navigation', runDeactivated(() => {
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'foo'}, currentVersion: {hash: 'bar'} , type: 'VERSION_READY'
});
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'baz'}, currentVersion: {hash: 'qux'} , type: 'VERSION_READY'
});
it('should never request a full page navigation', fakeAsync(runDeactivated(() => {
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
swu.$$availableSubj.next({latestVersion: {hash: 'baz'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(location.fullPageNavigationNeeded).not.toHaveBeenCalled();
}));
})));
it('should never request a page reload', runDeactivated(() => {
swu.$$unrecoverableSubj.next({reason: 'Something bad happened'});
@ -216,9 +212,7 @@ describe('SwUpdatesService', () => {
service.disable();
swu.checkForUpdate.calls.reset();
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'foo'}, currentVersion: {hash: 'baz'} , type: 'VERSION_READY'
});
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
tick(checkInterval);
@ -228,24 +222,22 @@ describe('SwUpdatesService', () => {
it('should not activate available updates', fakeAsync(run(() => {
service.disable();
swu.$$versionUpdatesSubj.next({latestVersion: {hash: 'foo'}} as VersionReadyEvent);
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
expect(swu.activateUpdate).not.toHaveBeenCalled();
})));
it('should stop requesting full page navigations when updates are activated', fakeAsync(run(() => {
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'foo'}, currentVersion: {hash: 'bar'}, type: 'VERSION_READY'
});
tick();
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(location.fullPageNavigationNeeded).toHaveBeenCalledTimes(1);
service.disable();
location.fullPageNavigationNeeded.calls.reset();
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'baz'}, currentVersion: {hash: 'qux'}, type: 'VERSION_READY'
});
swu.$$availableSubj.next({latestVersion: {hash: 'baz'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(location.fullPageNavigationNeeded).not.toHaveBeenCalled();
})));
@ -281,6 +273,7 @@ describe('SwUpdatesService', () => {
service.enable();
swu.checkForUpdate.calls.reset();
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
tick(checkInterval);
expect(swu.checkForUpdate).toHaveBeenCalled();
@ -290,10 +283,7 @@ describe('SwUpdatesService', () => {
service.disable();
service.enable();
swu.$$versionUpdatesSubj.next({
latestVersion: {hash: 'foo'}, type: 'VERSION_READY'
} as VersionReadyEvent);
swu.$$availableSubj.next({latestVersion: {hash: 'foo'}, type: 'VERSION_READY'});
expect(swu.activateUpdate).toHaveBeenCalled();
})));
});
@ -316,11 +306,12 @@ class MockApplicationRef {
}
class MockSwUpdate {
$$availableSubj = new Subject<{latestVersion: {hash: string}, type: 'VERSION_READY'}>();
$$unrecoverableSubj = new Subject<{reason: string}>();
$$versionUpdatesSubj = new Subject<VersionEvent>();
versionUpdates = this.$$availableSubj.asObservable();
unrecoverable = this.$$unrecoverableSubj.asObservable();
versionUpdates =this.$$versionUpdatesSubj.asObservable();
activateUpdate = jasmine.createSpy('MockSwUpdate.activateUpdate')
.and.callFake(() => Promise.resolve(true));

View file

@ -1,5 +1,5 @@
import { ApplicationRef, ErrorHandler, Injectable, OnDestroy } from '@angular/core';
import { SwUpdate, VersionReadyEvent } from '@angular/service-worker';
import { SwUpdate, VersionEvent, VersionReadyEvent } from '@angular/service-worker';
import { concat, from, interval, Subject } from 'rxjs';
import { filter, first, switchMap, takeUntil, tap } from 'rxjs/operators';
@ -45,11 +45,12 @@ export class SwUpdatesService implements OnDestroy {
// Activate available updates.
this.swu.versionUpdates
.pipe(
filter((evt): evt is VersionReadyEvent => evt.type === 'VERSION_READY'),
filter((evt: VersionEvent): evt is VersionReadyEvent => evt.type === 'VERSION_READY'),
tap(evt => this.log(`Update available: ${JSON.stringify(evt)}`)),
takeUntil(this.onDisable),
switchMap(() => from(this.swu.activateUpdate()))
)
.subscribe((isActivated) => {
if(isActivated) {
this.log('Update activated');

View file

@ -66,11 +66,7 @@ export abstract class SwRegistrationOptions {
// @public
export class SwUpdate {
constructor(sw: NgswCommChannel);
// @deprecated
readonly activated: Observable<UpdateActivatedEvent>;
activateUpdate(): Promise<boolean>;
// @deprecated
readonly available: Observable<UpdateAvailableEvent>;
checkForUpdate(): Promise<boolean>;
get isEnabled(): boolean;
readonly unrecoverable: Observable<UnrecoverableStateEvent>;
@ -89,38 +85,6 @@ export interface UnrecoverableStateEvent {
type: 'UNRECOVERABLE_STATE';
}
// @public @deprecated
export interface UpdateActivatedEvent {
// (undocumented)
current: {
hash: string;
appData?: Object;
};
// (undocumented)
previous?: {
hash: string;
appData?: Object;
};
// (undocumented)
type: 'UPDATE_ACTIVATED';
}
// @public @deprecated
export interface UpdateAvailableEvent {
// (undocumented)
available: {
hash: string;
appData?: Object;
};
// (undocumented)
current: {
hash: string;
appData?: Object;
};
// (undocumented)
type: 'UPDATE_AVAILABLE';
}
// @public
export interface VersionDetectedEvent {
// (undocumented)

View file

@ -19,4 +19,4 @@
"dark-theme": 34598
}
}
}
}

View file

@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
export {NoNewVersionDetectedEvent, UnrecoverableStateEvent, UpdateActivatedEvent, UpdateAvailableEvent, VersionDetectedEvent, VersionEvent, VersionInstallationFailedEvent, VersionReadyEvent} from './low_level';
export {NoNewVersionDetectedEvent, UnrecoverableStateEvent, VersionDetectedEvent, VersionEvent, VersionInstallationFailedEvent, VersionReadyEvent} from './low_level';
export {ServiceWorkerModule} from './module';
export {provideServiceWorker, SwRegistrationOptions} from './provider';
export {SwPush} from './push';

View file

@ -11,41 +11,6 @@ import {filter, map, publish, switchMap, take, tap} from 'rxjs/operators';
export const ERR_SW_NOT_SUPPORTED = 'Service workers are disabled or not supported by this browser';
/**
* An event emitted when a new version of the app is available.
*
* @see {@link guide/service-worker-communications Service worker communication guide}
*
* @deprecated
* This event is only emitted by the deprecated {@link SwUpdate#available}.
* Use the {@link VersionReadyEvent} instead, which is emitted by {@link SwUpdate#versionUpdates}.
* See {@link SwUpdate#available} docs for an example.
*
* @publicApi
*/
export interface UpdateAvailableEvent {
type: 'UPDATE_AVAILABLE';
current: {hash: string, appData?: Object};
available: {hash: string, appData?: Object};
}
/**
* An event emitted when a new version of the app has been downloaded and activated.
*
* @see {@link guide/service-worker-communications Service worker communication guide}
*
* @deprecated
* This event is only emitted by the deprecated {@link SwUpdate#activated}.
* Use the return value of {@link SwUpdate#activateUpdate} instead.
*
* @publicApi
*/
export interface UpdateActivatedEvent {
type: 'UPDATE_ACTIVATED';
previous?: {hash: string, appData?: Object};
current: {hash: string, appData?: Object};
}
/**
* An event emitted when the service worker has checked the version of the app on the server and it
* didn't find a new version that it doesn't have already downloaded.
@ -135,7 +100,7 @@ export interface PushEvent {
data: any;
}
export type IncomingEvent = UpdateActivatedEvent|UnrecoverableStateEvent|VersionEvent;
export type IncomingEvent = UnrecoverableStateEvent|VersionEvent;
export interface TypedEvent {
type: string;

View file

@ -8,11 +8,8 @@
import {Injectable} from '@angular/core';
import {NEVER, Observable} from 'rxjs';
import {filter, map} from 'rxjs/operators';
import {ERR_SW_NOT_SUPPORTED, NgswCommChannel, UnrecoverableStateEvent, UpdateActivatedEvent, UpdateAvailableEvent, VersionEvent, VersionReadyEvent} from './low_level';
import {ERR_SW_NOT_SUPPORTED, NgswCommChannel, UnrecoverableStateEvent, VersionEvent} from './low_level';
/**
* Subscribe to update notifications from the Service Worker, trigger update
@ -35,27 +32,6 @@ export class SwUpdate {
*/
readonly versionUpdates: Observable<VersionEvent>;
/**
* Emits an `UpdateAvailableEvent` event whenever a new app version is available.
*
* @deprecated Use {@link versionUpdates} instead.
*
* The behavior of `available` can be replicated by using `versionUpdates` by filtering for the
* `VersionReadyEvent`:
*
* {@example service-worker-getting-started/src/app/prompt-update.service.ts
* region='sw-replicate-available'}
*/
readonly available: Observable<UpdateAvailableEvent>;
/**
* Emits an `UpdateActivatedEvent` event whenever the app has been updated to a new version.
*
* @deprecated Use the return value of {@link SwUpdate#activateUpdate} instead.
*
*/
readonly activated: Observable<UpdateActivatedEvent>;
/**
* Emits an `UnrecoverableStateEvent` event whenever the version of the app used by the service
* worker to serve this client is in a broken state that cannot be recovered from without a full
@ -74,8 +50,6 @@ export class SwUpdate {
constructor(private sw: NgswCommChannel) {
if (!sw.isEnabled) {
this.versionUpdates = NEVER;
this.available = NEVER;
this.activated = NEVER;
this.unrecoverable = NEVER;
return;
}
@ -85,14 +59,6 @@ export class SwUpdate {
'VERSION_READY',
'NO_NEW_VERSION_DETECTED',
]);
this.available = this.versionUpdates.pipe(
filter((evt: VersionEvent): evt is VersionReadyEvent => evt.type === 'VERSION_READY'),
map(evt => ({
type: 'UPDATE_AVAILABLE',
current: evt.currentVersion,
available: evt.latestVersion,
})));
this.activated = this.sw.eventsOfType<UpdateActivatedEvent>('UPDATE_ACTIVATED');
this.unrecoverable = this.sw.eventsOfType<UnrecoverableStateEvent>('UNRECOVERABLE_STATE');
}

View file

@ -8,11 +8,12 @@
import {PLATFORM_ID} from '@angular/core';
import {TestBed} from '@angular/core/testing';
import {NgswCommChannel, NoNewVersionDetectedEvent, VersionDetectedEvent} from '@angular/service-worker/src/low_level';
import {NgswCommChannel, NoNewVersionDetectedEvent, VersionDetectedEvent, VersionEvent, VersionReadyEvent} from '@angular/service-worker/src/low_level';
import {ngswCommChannelFactory, SwRegistrationOptions} from '@angular/service-worker/src/provider';
import {SwPush} from '@angular/service-worker/src/push';
import {SwUpdate} from '@angular/service-worker/src/update';
import {MockPushManager, MockPushSubscription, MockServiceWorkerContainer, MockServiceWorkerRegistration, patchDecodeBase64} from '@angular/service-worker/testing/mock';
import {filter} from 'rxjs/operators';
{
describe('ServiceWorker library', () => {
@ -419,12 +420,14 @@ import {MockPushManager, MockPushSubscription, MockServiceWorkerContainer, MockS
mock.setupSw();
});
it('processes update availability notifications when sent', done => {
update.available.subscribe(event => {
expect(event.current).toEqual({hash: 'A'});
expect(event.available).toEqual({hash: 'B'});
expect(event.type).toEqual('UPDATE_AVAILABLE');
done();
});
update.versionUpdates
.pipe(filter(
(evt: VersionEvent): evt is VersionReadyEvent => evt.type === 'VERSION_READY'))
.subscribe(event => {
expect(event.currentVersion).toEqual({hash: 'A'});
expect(event.latestVersion).toEqual({hash: 'B'});
done();
});
mock.sendMessage({
type: 'VERSION_READY',
currentVersion: {
@ -443,23 +446,7 @@ import {MockPushManager, MockPushSubscription, MockServiceWorkerContainer, MockS
});
mock.sendMessage({type: 'UNRECOVERABLE_STATE', reason: 'Invalid Resource'});
});
it('processes update activation notifications when sent', done => {
update.activated.subscribe(event => {
expect(event.previous).toEqual({hash: 'A'});
expect(event.current).toEqual({hash: 'B'});
expect(event.type).toEqual('UPDATE_ACTIVATED');
done();
});
mock.sendMessage({
type: 'UPDATE_ACTIVATED',
previous: {
hash: 'A',
},
current: {
hash: 'B',
},
});
});
it('processes a no new version event when sent', done => {
update.versionUpdates.subscribe(event => {
expect(event.type).toEqual('NO_NEW_VERSION_DETECTED');
@ -526,8 +513,6 @@ import {MockPushManager, MockPushSubscription, MockServiceWorkerContainer, MockS
});
it('does not crash on subscription to observables', () => {
update = new SwUpdate(comm);
update.available.toPromise().catch(err => fail(err));
update.activated.toPromise().catch(err => fail(err));
update.unrecoverable.toPromise().catch(err => fail(err));
update.versionUpdates.toPromise().catch(err => fail(err));
});

View file

@ -116,7 +116,7 @@ describe('ngsw + companion lib', () => {
const update = new SwUpdate(comm);
scope.updateServerState(serverUpdate);
const gotUpdateNotice = (async () => await obsToSinglePromise(update.available))();
const gotUpdateNotice = (async () => await obsToSinglePromise(update.versionUpdates))();
await update.checkForUpdate();
await gotUpdateNotice;

View file

@ -446,13 +446,7 @@ export class Driver implements Debuggable, UpdateSource {
// Notify the client about this activation.
const current = this.versions.get(this.latestHash!)!;
const notice = {
type: 'UPDATE_ACTIVATED',
previous,
current: this.mergeHashWithAppData(current.manifest, this.latestHash!),
};
client.postMessage(notice);
return true;
}

View file

@ -542,11 +542,6 @@ describe('Driver', () => {
type: 'VERSION_READY',
currentVersion: {hash: manifestHash, appData: {version: 'original'}},
latestVersion: {hash: manifestUpdateHash, appData: {version: 'update'}},
},
{
type: 'UPDATE_ACTIVATED',
previous: {hash: manifestHash, appData: {version: 'original'}},
current: {hash: manifestUpdateHash, appData: {version: 'update'}},
}
]);
@ -659,11 +654,6 @@ describe('Driver', () => {
type: 'VERSION_READY',
currentVersion: {hash: manifestHash, appData: {version: 'original'}},
latestVersion: {hash: manifestUpdateHash, appData: {version: 'update'}},
},
{
type: 'UPDATE_ACTIVATED',
previous: {hash: manifestHash, appData: {version: 'original'}},
current: {hash: manifestUpdateHash, appData: {version: 'update'}},
}
]);
serverUpdate.assertNoOtherRequests();