diff --git a/packages/service-worker/worker/src/assets.ts b/packages/service-worker/worker/src/assets.ts index 6b7f7373f5..b5dc2a9f04 100644 --- a/packages/service-worker/worker/src/assets.ts +++ b/packages/service-worker/worker/src/assets.ts @@ -193,9 +193,10 @@ export abstract class AssetGroup { cacheDirectives.forEach(v => v[0] = v[0].toLowerCase()); // Find the max-age directive, if one exists. - const cacheAge = cacheDirectives.filter(v => v[0] === 'max-age').map(v => v[1])[0]; + const maxAgeDirective = cacheDirectives.find(v => v[0] === 'max-age'); + const cacheAge = maxAgeDirective ? maxAgeDirective[1] : undefined; - if (cacheAge.length === 0) { + if (!cacheAge) { // No usable TTL defined. Must assume that the response is stale. return true; } diff --git a/packages/service-worker/worker/test/happy_spec.ts b/packages/service-worker/worker/test/happy_spec.ts index 1b558ef799..4ca3969b4a 100644 --- a/packages/service-worker/worker/test/happy_spec.ts +++ b/packages/service-worker/worker/test/happy_spec.ts @@ -28,6 +28,7 @@ const dist = .addFile('/lazy/unchanged1.txt', 'this is unchanged (1)') .addFile('/lazy/unchanged2.txt', 'this is unchanged (2)') .addUnhashedFile('/unhashed/a.txt', 'this is unhashed', {'Cache-Control': 'max-age=10'}) + .addUnhashedFile('/unhashed/b.txt', 'this is unhashed b', {'Cache-Control': 'no-cache'}) .build(); const distUpdate = @@ -621,6 +622,13 @@ const manifestUpdateHash = sha1(JSON.stringify(manifestUpdate)); server.assertNoOtherRequests(); }); + async_it(`doesn't error when 'Cache-Control' is 'no-cache'`, async() => { + expect(await makeRequest(scope, '/unhashed/b.txt')).toEqual('this is unhashed b'); + server.assertSawRequestFor('/unhashed/b.txt'); + expect(await makeRequest(scope, '/unhashed/b.txt')).toEqual('this is unhashed b'); + server.assertNoOtherRequests(); + }); + async_it('avoid opaque responses', async() => { expect(await makeRequest(scope, '/unhashed/a.txt', 'default', { credentials: 'include'