diff --git a/core/config/default-config.js b/core/config/default-config.js index ef28546cf3a0..476d00335978 100644 --- a/core/config/default-config.js +++ b/core/config/default-config.js @@ -133,7 +133,6 @@ const defaultConfig = { {id: 'OptimizedImages', gatherer: 'dobetterweb/optimized-images'}, {id: 'ResponseCompression', gatherer: 'dobetterweb/response-compression'}, {id: 'RobotsTxt', gatherer: 'seo/robots-txt'}, - {id: 'ServiceWorker', gatherer: 'service-worker'}, {id: 'Scripts', gatherer: 'scripts'}, {id: 'SourceMaps', gatherer: 'source-maps'}, {id: 'Stacks', gatherer: 'stacks'}, diff --git a/core/gather/driver/service-workers.js b/core/gather/driver/service-workers.js deleted file mode 100644 index 57e8d562f1d2..000000000000 --- a/core/gather/driver/service-workers.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @param {LH.Gatherer.ProtocolSession} session - * @return {Promise} - */ -function getServiceWorkerVersions(session) { - return new Promise((resolve, reject) => { - /** - * @param {LH.Crdp.ServiceWorker.WorkerVersionUpdatedEvent} data - */ - const versionUpdatedListener = data => { - // find a service worker with runningStatus that looks like active - // on slow connections the serviceworker might still be installing - const activateCandidates = data.versions.filter(sw => { - return sw.status !== 'redundant'; - }); - - const hasActiveServiceWorker = activateCandidates.find(sw => { - return sw.status === 'activated'; - }); - - if (!activateCandidates.length || hasActiveServiceWorker) { - session.off('ServiceWorker.workerVersionUpdated', versionUpdatedListener); - session.sendCommand('ServiceWorker.disable').then(_ => resolve(data), reject); - } - }; - - session.on('ServiceWorker.workerVersionUpdated', versionUpdatedListener); - - session.sendCommand('ServiceWorker.enable').catch(reject); - }); -} - -/** - * @param {LH.Gatherer.ProtocolSession} session - * @return {Promise} - */ -function getServiceWorkerRegistrations(session) { - return new Promise((resolve, reject) => { - session.once('ServiceWorker.workerRegistrationUpdated', data => { - session.sendCommand('ServiceWorker.disable').then(_ => resolve(data), reject); - }); - session.sendCommand('ServiceWorker.enable').catch(reject); - }); -} - -export {getServiceWorkerVersions, getServiceWorkerRegistrations}; diff --git a/core/gather/gatherers/service-worker.js b/core/gather/gatherers/service-worker.js deleted file mode 100644 index 1c147af33c6f..000000000000 --- a/core/gather/gatherers/service-worker.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @license - * Copyright 2016 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -import BaseGatherer from '../base-gatherer.js'; -import * as serviceWorkers from '../driver/service-workers.js'; - -class ServiceWorker extends BaseGatherer { - /** @type {LH.Gatherer.GathererMeta} */ - meta = { - supportedModes: ['navigation'], - }; - - /** - * @param {LH.Gatherer.Context} context - * @return {Promise} - */ - async getArtifact(context) { - const session = context.driver.defaultSession; - const {versions} = await serviceWorkers.getServiceWorkerVersions(session); - const {registrations} = await serviceWorkers.getServiceWorkerRegistrations(session); - - return { - versions, - registrations, - }; - } -} - -export default ServiceWorker; diff --git a/core/test/audits/mainthread-work-breakdown-test.js b/core/test/audits/mainthread-work-breakdown-test.js index 3a5f7e50ea90..5265090150cb 100644 --- a/core/test/audits/mainthread-work-breakdown-test.js +++ b/core/test/audits/mainthread-work-breakdown-test.js @@ -54,7 +54,7 @@ describe('Performance: page execution timings audit', () => { }; }); - it('should compute the correct pageExecutionTiming values for the pwa trace', async () => { + it('should compute the correct pageExecutionTiming values for the trace', async () => { const artifacts = { traces: {defaultPass: acceptableTrace}, devtoolsLogs: {defaultPass: acceptableDevtoolsLog}, diff --git a/core/test/gather/driver/service-workers-test.js b/core/test/gather/driver/service-workers-test.js deleted file mode 100644 index 0c117d05b96c..000000000000 --- a/core/test/gather/driver/service-workers-test.js +++ /dev/null @@ -1,87 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -import {createMockSession} from '../mock-driver.js'; -import {makePromiseInspectable, flushAllTimersAndMicrotasks, timers} from '../../test-utils.js'; -import * as serviceWorkers from '../../../gather/driver/service-workers.js'; - -/** @type {ReturnType} */ -let sessionMock; - -describe('Service Worker driver functions', () => { - beforeEach(() => { - timers.useRealTimers(); - sessionMock = createMockSession(); - }); - after(() => timers.dispose()); - - describe('.getServiceWorkerVersions', () => { - it('returns the data from service worker events', async () => { - sessionMock.sendCommand - .mockResponse('ServiceWorker.enable') - .mockResponse('ServiceWorker.disable'); - sessionMock.on.mockEvent('ServiceWorker.workerVersionUpdated', { - versions: [{registrationId: '1', status: 'activated'}], - }); - - const results = await serviceWorkers.getServiceWorkerVersions(sessionMock.asSession()); - expect(results).toEqual({versions: [{registrationId: '1', status: 'activated'}]}); - }); - - it('returns when there are no active candidates', async () => { - sessionMock.sendCommand - .mockResponse('ServiceWorker.enable') - .mockResponse('ServiceWorker.disable'); - sessionMock.on.mockEvent('ServiceWorker.workerVersionUpdated', { - versions: [{registrationId: '1', status: 'redundant'}], - }); - - const results = await serviceWorkers.getServiceWorkerVersions(sessionMock.asSession()); - expect(results).toEqual({versions: [{registrationId: '1', status: 'redundant'}]}); - }); - - it('waits for currently installing workers', async () => { - timers.useFakeTimers(); - after(() => timers.dispose()); - - sessionMock.sendCommand - .mockResponse('ServiceWorker.enable') - .mockResponse('ServiceWorker.disable'); - - const resultPromise = makePromiseInspectable( - serviceWorkers.getServiceWorkerVersions(sessionMock.asSession()) - ); - await flushAllTimersAndMicrotasks(); - expect(resultPromise.isDone()).toBe(false); - - const workerVersionUpdated = - sessionMock.on.findListener('ServiceWorker.workerVersionUpdated'); - workerVersionUpdated({versions: [{status: 'installing'}]}); - await flushAllTimersAndMicrotasks(); - expect(resultPromise.isDone()).toBe(false); - - const versions = {versions: [{registrationId: '3', status: 'activated'}]}; - workerVersionUpdated(versions); - await flushAllTimersAndMicrotasks(); - expect(resultPromise.isDone()).toBe(true); - expect(await resultPromise).toEqual(versions); - }); - }); - - describe('.getServiceWorkerRegistrations', () => { - it('returns the data from service worker events', async () => { - sessionMock.sendCommand - .mockResponse('ServiceWorker.enable') - .mockResponse('ServiceWorker.disable'); - sessionMock.once.mockEvent('ServiceWorker.workerRegistrationUpdated', { - registrations: [{registrationId: '2'}], - }); - - const results = await serviceWorkers.getServiceWorkerRegistrations(sessionMock.asSession()); - expect(results).toEqual({registrations: [{registrationId: '2'}]}); - }); - }); -}); diff --git a/core/test/gather/gatherers/service-worker-test.js b/core/test/gather/gatherers/service-worker-test.js deleted file mode 100644 index f2a06d25d7fd..000000000000 --- a/core/test/gather/gatherers/service-worker-test.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @license - * Copyright 2016 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -import assert from 'assert/strict'; - -import * as td from 'testdouble'; - -import {fnAny} from '../../test-utils.js'; - -const getServiceWorkerVersions = fnAny(); -const getServiceWorkerRegistrations = fnAny(); - -await td.replaceEsm('../../../gather/driver/service-workers.js', { - getServiceWorkerVersions, - getServiceWorkerRegistrations, -}); - -// Some imports needs to be done dynamically, so that their dependencies will be mocked. -// https://github.com/GoogleChrome/lighthouse/blob/main/docs/hacking-tips.md#mocking-modules-with-testdouble -const ServiceWorkerGather = (await import('../../../gather/gatherers/service-worker.js')).default; - -describe('service worker gatherer', () => { - it('obtains the active service worker registration', async () => { - const url = 'https://example.com/'; - const versions = [{ - registrationId: '123', - status: 'activated', - scriptURL: url, - }]; - const registrations = [{ - registrationId: '123', - scopeUrl: url, - isDeleted: false, - }]; - getServiceWorkerVersions.mockResolvedValue({versions}); - getServiceWorkerRegistrations.mockResolvedValue({registrations}); - - const serviceWorkerGatherer = new ServiceWorkerGather(); - const artifact = await serviceWorkerGatherer.getArtifact({ - driver: {}, - url, - }); - - assert.deepEqual(artifact.versions, versions); - assert.deepEqual(artifact.registrations, registrations); - }); -}); diff --git a/core/test/results/artifacts/artifacts.json b/core/test/results/artifacts/artifacts.json index 11dcc6416cf4..40a22d979ed9 100644 --- a/core/test/results/artifacts/artifacts.json +++ b/core/test/results/artifacts/artifacts.json @@ -12680,10 +12680,6 @@ } } }, - "ServiceWorker": { - "versions": [], - "registrations": [] - }, "Inputs": { "inputs": [ { diff --git a/core/test/runner-test.js b/core/test/runner-test.js index 372388414b0c..82f886c22cb4 100644 --- a/core/test/runner-test.js +++ b/core/test/runner-test.js @@ -35,11 +35,6 @@ await td.replaceEsm('../lib/asset-saver.js', { loadArtifacts: loadArtifactsSpy = jestMock.fn((...args) => assetSaver.loadArtifacts(...args)), }); -await td.replaceEsm('../gather/driver/service-workers.js', { - getServiceWorkerVersions: jestMock.fn().mockResolvedValue({versions: []}), - getServiceWorkerRegistrations: jestMock.fn().mockResolvedValue({registrations: []}), -}); - // Some imports needs to be done dynamically, so that their dependencies will be mocked. // https://github.com/GoogleChrome/lighthouse/blob/main/docs/hacking-tips.md#mocking-modules-with-testdouble const {Runner} = await import('../runner.js'); diff --git a/core/test/scripts/run-mocha-tests.js b/core/test/scripts/run-mocha-tests.js index c457cfe0a0be..7f0a88e2f20a 100644 --- a/core/test/scripts/run-mocha-tests.js +++ b/core/test/scripts/run-mocha-tests.js @@ -70,7 +70,6 @@ const testsToIsolate = new Set([ 'core/test/user-flow-test.js', 'core/test/gather/driver/prepare-test.js', 'core/test/gather/gatherers/link-elements-test.js', - 'core/test/gather/gatherers/service-worker-test.js', 'core/test/runner-test.js', // grep -lRE --include='-test.js' 'mockDriverSubmodules|mockRunnerModule|mockDriverModule|mockDriverSubmodules|makeMocksForGatherRunner' --include='*-test.*' --exclude-dir=node_modules diff --git a/report/renderer/report-renderer.js b/report/renderer/report-renderer.js index 6fe64c3567fd..9438da50a280 100644 --- a/report/renderer/report-renderer.js +++ b/report/renderer/report-renderer.js @@ -203,7 +203,7 @@ export class ReportRenderer { * @return {!DocumentFragment[]} */ _renderScoreGauges(report, categoryRenderer, specificCategoryRenderers) { - // Group gauges in this order: default, pwa, plugins. + // Group gauges in this order: default, plugins. const defaultGauges = []; const pluginGauges = []; diff --git a/report/test/renderer/report-renderer-test.js b/report/test/renderer/report-renderer-test.js index e95209ea9e01..964a4875b190 100644 --- a/report/test/renderer/report-renderer-test.js +++ b/report/test/renderer/report-renderer-test.js @@ -61,7 +61,7 @@ describe('ReportRenderer', () => { assert.ok(output.querySelector('.lh-report'), 'has report body'); // 3 sets of gauges - one in sticky header, one in scores header, and one in each section. // eslint-disable-next-line max-len - assert.equal(output.querySelectorAll('.lh-gauge__wrapper, .lh-gauge--pwa__wrapper, .lh-exp-gauge__wrapper').length, + assert.equal(output.querySelectorAll('.lh-gauge__wrapper, .lh-exp-gauge__wrapper').length, Object.keys(sampleResults.categories).length * 3, 'renders category gauges'); }); diff --git a/tsconfig.json b/tsconfig.json index bbbb69119139..added6bbfc9b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -56,7 +56,6 @@ "core/test/gather/gatherers/offline-test.js", "core/test/gather/gatherers/runtime-exceptions-test.js", "core/test/gather/gatherers/seo/font-size-test.js", - "core/test/gather/gatherers/service-worker-test.js", "core/test/gather/gatherers/source-maps-test.js", "core/test/gather/gatherers/stack-collector-test.js", "core/test/gather/gatherers/start-url-test.js", diff --git a/types/artifacts.d.ts b/types/artifacts.d.ts index dcfd48fbf8f0..c95780da9dad 100644 --- a/types/artifacts.d.ts +++ b/types/artifacts.d.ts @@ -141,8 +141,6 @@ export interface GathererArtifacts extends PublicGathererArtifacts { RobotsTxt: {status: number|null, content: string|null, errorMessage?: string}; /** The result of calling the shared trace engine root cause analysis. */ RootCauses: Artifacts.TraceEngineRootCauses; - /** Version information for all ServiceWorkers active after the first page load. */ - ServiceWorker: {versions: Crdp.ServiceWorker.ServiceWorkerVersion[], registrations: Crdp.ServiceWorker.ServiceWorkerRegistration[]}; /** Source maps of scripts executed in the page. */ SourceMaps: Array; /** Information on detected tech stacks (e.g. JS libraries) used by the page. */