/** * Copyright (c) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ 'use strict'; const CACHE_NAME = 'travis-cache'; const JOBS_URL = 'https://api.travis-ci.org/jobs/'; async function FetchAndCacheIfJob(event) { if (!event.request.url.startsWith(JOBS_URL)) { return fetch(event.request); } // Try and retrieve from the cache. const cachedResponse = await caches.match(event.request); if (cachedResponse) { return cachedResponse; } // If network request failed just return the response. const response = await fetch(event.request); if (!response || response.status !== 200) { return response; } // Extract the JSON from the response. const json = await response.clone().json(); if (json.state !== 'cancelled' && json.state !== 'finished') { return response; } var responseToCache = response.clone(); caches.open(CACHE_NAME) .then(cache => { cache.put(event.request, responseToCache); }); return response; } self.addEventListener('fetch', event => { event.respondWith(FetchAndCacheIfJob(event)); });