refactor(aio): remove work-around for browsers without ServiceWorker support
This essentially reverts #15731, which is no longer necessary after angular/mobile-toolkit@eeb4b22 (which is included in v1.0.0-beta.10).
This commit is contained in:
parent
aec65dee71
commit
895f47a9c2
@ -1,35 +0,0 @@
|
||||
// Alternative to NgServiceWorker when the browser doesn't support NgServiceWorker
|
||||
//
|
||||
// Many browsers do not support ServiceWorker (e.g, Safari).
|
||||
// The Angular NgServiceWorker assumes that the browser supports ServiceWorker
|
||||
// and starts talking to it immediately in its constructor without checking if it exists.
|
||||
// Merely injecting the `NgServiceWorker` is an exception in any browser w/o ServiceWorker.
|
||||
//
|
||||
// Solution: when the browser doesn't support service worker and a class injects `NgServiceWorker`
|
||||
// substitute the inert `NoopNgServiceWorker`.
|
||||
|
||||
import { Injector } from '@angular/core';
|
||||
import { NgServiceWorker } from '@angular/service-worker';
|
||||
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs/observable/of';
|
||||
|
||||
export class NoopNgServiceWorker {
|
||||
// Service worker is supported if `navigator['serviceWorker'] is defined.
|
||||
isServiceWorkerSupported = !!navigator['serviceWorker'];
|
||||
|
||||
checkForUpdate() { return of(false); }
|
||||
activateUpdate(version: string) { return of(false); }
|
||||
}
|
||||
|
||||
export abstract class NgServiceWorkerForReals {}
|
||||
|
||||
export function NgServiceWorkerFactory(injector: Injector, nsw: NoopNgServiceWorker) {
|
||||
return nsw.isServiceWorkerSupported ? injector.get(NgServiceWorkerForReals) : nsw;
|
||||
}
|
||||
|
||||
export const noopNgServiceWorkerProviders = [
|
||||
NoopNgServiceWorker,
|
||||
{ provide: NgServiceWorkerForReals, useClass: NgServiceWorker },
|
||||
{ provide: NgServiceWorker, useFactory: NgServiceWorkerFactory,
|
||||
deps: [Injector, NoopNgServiceWorker] }];
|
@ -3,7 +3,6 @@ import { MdSnackBarModule } from '@angular/material';
|
||||
import { ServiceWorkerModule } from '@angular/service-worker';
|
||||
|
||||
import { globalProvider } from './global.value';
|
||||
import { noopNgServiceWorkerProviders } from './noop-ng-service-worker';
|
||||
import { SwUpdateNotificationsService } from './sw-update-notifications.service';
|
||||
import { SwUpdatesService } from './sw-updates.service';
|
||||
|
||||
@ -15,7 +14,6 @@ import { SwUpdatesService } from './sw-updates.service';
|
||||
],
|
||||
providers: [
|
||||
globalProvider,
|
||||
noopNgServiceWorkerProviders,
|
||||
SwUpdateNotificationsService,
|
||||
SwUpdatesService
|
||||
]
|
||||
|
@ -1,20 +1,16 @@
|
||||
import { ReflectiveInjector } from '@angular/core';
|
||||
import { fakeAsync, tick } from '@angular/core/testing';
|
||||
import { NgServiceWorker } from '@angular/service-worker';
|
||||
import { of } from 'rxjs/observable/of';
|
||||
import { Subject } from 'rxjs/Subject';
|
||||
import 'rxjs/add/operator/take';
|
||||
|
||||
import { NgServiceWorkerForReals, NoopNgServiceWorker, noopNgServiceWorkerProviders } from './noop-ng-service-worker';
|
||||
import { SwUpdatesService } from './sw-updates.service';
|
||||
|
||||
describe('SwUpdatesService', () => {
|
||||
let injector: ReflectiveInjector;
|
||||
let service: SwUpdatesService;
|
||||
let sw: MockNgServiceWorker;
|
||||
let nsw: NoopNgServiceWorker;
|
||||
let checkInterval: number;
|
||||
let isServiceWorkerSupportedInTest: boolean;
|
||||
|
||||
// Helpers
|
||||
// NOTE:
|
||||
@ -23,19 +19,13 @@ describe('SwUpdatesService', () => {
|
||||
// `setup()` in a `beforeEach()` block. We use the `run()` helper to call it inside each test' zone.
|
||||
const setup = () => {
|
||||
injector = ReflectiveInjector.resolveAndCreate([
|
||||
noopNgServiceWorkerProviders,
|
||||
{ provide: NgServiceWorkerForReals, useClass: MockNgServiceWorker },
|
||||
{ provide: NoopNgServiceWorker, useClass: MockNoopNgServiceWorker },
|
||||
{ provide: NgServiceWorker, useClass: MockNgServiceWorker },
|
||||
SwUpdatesService
|
||||
]);
|
||||
|
||||
nsw = injector.get(NoopNgServiceWorker);
|
||||
// Set whether service worker exists before getting the SwUpdatesService!
|
||||
nsw.isServiceWorkerSupported = isServiceWorkerSupportedInTest;
|
||||
|
||||
service = injector.get(SwUpdatesService);
|
||||
sw = injector.get(NgServiceWorker);
|
||||
checkInterval = (service as any).checkInterval;
|
||||
sw = injector.get(NgServiceWorkerForReals);
|
||||
};
|
||||
const tearDown = () => service.ngOnDestroy();
|
||||
const run = specFn => () => {
|
||||
@ -44,23 +34,11 @@ describe('SwUpdatesService', () => {
|
||||
tearDown();
|
||||
};
|
||||
|
||||
describe('when service worker is supported', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
isServiceWorkerSupportedInTest = true;
|
||||
});
|
||||
|
||||
it('should create', run(() => {
|
||||
expect(service).toBeTruthy();
|
||||
}));
|
||||
|
||||
it('should call the NgServiceWorker', run(() => {
|
||||
// does not call the Angular ServiceWorker
|
||||
expect(sw.checkForUpdate).toHaveBeenCalled();
|
||||
// calls the noop Angular ServiceWorker instead
|
||||
expect(nsw.checkForUpdate).not.toHaveBeenCalled();
|
||||
}));
|
||||
|
||||
it('should immediatelly check for updates when instantiated', run(() => {
|
||||
expect(sw.checkForUpdate).toHaveBeenCalled();
|
||||
}));
|
||||
@ -224,32 +202,10 @@ describe('SwUpdatesService', () => {
|
||||
})))
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when service worker isn\'t supported (Safari)', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
isServiceWorkerSupportedInTest = false;
|
||||
});
|
||||
|
||||
it('should create', run(() => {
|
||||
expect(service).toBeTruthy();
|
||||
}));
|
||||
|
||||
it('should call the NoopNgServiceWorker', run(() => {
|
||||
// does not call the Angular ServiceWorker
|
||||
expect(sw.checkForUpdate).not.toHaveBeenCalled();
|
||||
// calls the noop Angular ServiceWorker instead
|
||||
expect(nsw.checkForUpdate).toHaveBeenCalled();
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// Mocks
|
||||
class MockNgServiceWorker {
|
||||
|
||||
$$activateUpdateSubj = new Subject<boolean>();
|
||||
$$checkForUpdateSubj = new Subject<boolean>();
|
||||
|
||||
@ -259,12 +215,3 @@ class MockNgServiceWorker {
|
||||
checkForUpdate = jasmine.createSpy('MockNgServiceWorker.checkForUpdate')
|
||||
.and.callFake(() => this.$$checkForUpdateSubj.take(1));
|
||||
}
|
||||
|
||||
class MockNoopNgServiceWorker extends NoopNgServiceWorker {
|
||||
constructor() {
|
||||
super();
|
||||
this.isServiceWorkerSupported = true; // assume it is by default
|
||||
spyOn(this, 'activateUpdate').and.callThrough();
|
||||
spyOn(this, 'checkForUpdate').and.callThrough();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user