[refactor] More post-NSS WebCrypto cleanups (utility functions).
[chromium-blink-merge.git] / content / test / data / background_sync / service_worker.js
blob68f57b55e5e45817b495c90f962a1ef605cac34d
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // The "onsync" event currently understands commands (passed as
6 // registration tags) coming from the test. Any other tag is
7 // passed through to the document unchanged.
8 //
9 // "delay" - Delays finishing the sync event with event.waitUntil.
10 //           Send a postMessage of "completeDelayedOneShot" to finish the
11 //           event.
12 // "unregister" - Unregisters the sync registration from within the sync event.
14 'use strict';
16 var resolveCallback = null;
17 var rejectCallback = null;
19 this.onmessage = function(event) {
20   if (event.data['action'] === 'completeDelayedOneShot') {
21     if (resolveCallback === null) {
22       sendMessageToClients('sync', 'error - resolveCallback is null');
23       return;
24     }
26     resolveCallback();
27     sendMessageToClients('sync', 'ok - delay completed');
28     return;
29   }
31   if (event.data['action'] === 'rejectDelayedOneShot') {
32     if (rejectCallback === null) {
33       sendMessageToClients('sync', 'error - rejectCallback is null');
34       return;
35     }
37     rejectCallback();
38     sendMessageToClients('sync', 'ok - delay rejected');
39   }
41   if (event.data['action'] === 'notifyWhenDone') {
42     var tag = event.data['tag'];
43     registration.sync.getRegistration(tag)
44       .then(function (syncRegistration) {
45         sendMessageToClients('sync', 'ok - ' + tag + ' done');
46         return syncRegistration.done;
47       })
48       .then(function(success) {
49         sendMessageToClients('sync', tag + " done result: " + success);
50       }, function(error) {
51         sendMessageToClients('sync', tag + " done result: error");
52       })
53       .catch(sendSyncErrorToClients);
54   }
57 this.onsync = function(event) {
58   var eventProperties = [
59     // Extract name from toString result: "[object <Class>]"
60     Object.prototype.toString.call(event).match(/\s([a-zA-Z]+)/)[1],
61     (typeof event.waitUntil)
62   ];
64   if (eventProperties[0] != 'SyncEvent') {
65     sendMessageToClients('sync', 'error - wrong event type');
66     return;
67   }
69   if (eventProperties[1] != 'function') {
70     sendMessageToClients('sync', 'error - wrong wait until type');
71   }
73   if (event.registration === undefined) {
74     sendMessageToClients('sync', 'error - event missing registration');
75     return;
76   }
78   if (event.registration.tag === undefined) {
79     sendMessageToClients('sync', 'error - registration missing tag');
80     return;
81   }
83   var tag = event.registration.tag;
85   if (tag === 'delay') {
86     var syncPromise = new Promise(function(resolve, reject) {
87       resolveCallback = resolve;
88       rejectCallback = reject;
89     });
90     event.waitUntil(syncPromise);
91     return;
92   }
94   if (tag === 'unregister') {
95     event.waitUntil(event.registration.unregister()
96       .then(function() {
97         sendMessageToClients('sync', 'ok - unregister completed');
98       }));
99     return;
100   }
102   sendMessageToClients('sync', tag + ' fired');
105 function sendMessageToClients(type, data) {
106   clients.matchAll().then(function(clients) {
107     clients.forEach(function(client) {
108       client.postMessage({type, data});
109     });
110   }, function(error) {
111     console.log(error);
112   });
115 function sendSyncErrorToClients(error) {
116   sendMessageToClients('sync', error.name + ' - ' + error.message);