| // The source to post setup and completion results to. |
| let source = null; |
| |
| function sendMessageToDocument(msg) { |
| source.postMessage(msg); |
| } |
| |
| // This is needed to create a local javascript object identical to the |
| // one returned by a BackgroundFetchEvent, so that it can be serialized |
| // and transmitted from the service worker context to the document. |
| function cloneRegistration(registration) { |
| function deepCopy(src) { |
| if (typeof src !== 'object' || src === null) |
| return src; |
| var dst = Array.isArray(src) ? [] : {}; |
| for (var property in src) { |
| if (typeof src[property] === 'function') |
| continue; |
| dst[property] = deepCopy(src[property]); |
| } |
| return dst; |
| } |
| |
| return deepCopy(registration); |
| } |
| |
| // Notify the document that the SW is registered and ready. |
| self.addEventListener('message', event => { |
| source = event.source; |
| sendMessageToDocument('ready'); |
| }); |