Roll src/third_party/WebKit a452221:9ff6d11 (svn 202117:202119)
[chromium-blink-merge.git] / content / test / data / background_sync / service_worker.js
blob56be354933bffe02d4021c9b75ea32e6948e7641
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 === 'completeDelayedOneShot') {
21 if (resolveCallback === null) {
22 sendMessageToClients('sync', 'error - resolveCallback is null');
23 return;
26 resolveCallback();
27 sendMessageToClients('sync', 'ok - delay completed');
28 return;
31 if (event.data === 'rejectDelayedOneShot') {
32 if (rejectCallback === null) {
33 sendMessageToClients('sync', 'error - rejectCallback is null');
34 return;
37 rejectCallback();
38 sendMessageToClients('sync', 'ok - delay rejected');
42 this.onsync = function(event) {
43 var eventProperties = [
44 // Extract name from toString result: "[object <Class>]"
45 Object.prototype.toString.call(event).match(/\s([a-zA-Z]+)/)[1],
46 (typeof event.waitUntil)
49 if (eventProperties[0] != 'SyncEvent') {
50 sendMessageToClients('sync', 'error - wrong event type');
51 return;
54 if (eventProperties[1] != 'function') {
55 sendMessageToClients('sync', 'error - wrong wait until type');
58 if (event.registration === undefined) {
59 sendMessageToClients('sync', 'error - event missing registration');
60 return;
63 if (event.registration.tag === undefined) {
64 sendMessageToClients('sync', 'error - registration missing tag');
65 return;
68 var tag = event.registration.tag;
70 if (tag === 'delay') {
71 var syncPromise = new Promise(function(resolve, reject) {
72 resolveCallback = resolve;
73 rejectCallback = reject;
74 });
75 event.waitUntil(syncPromise);
76 return;
79 if (tag === 'unregister') {
80 event.waitUntil(event.registration.unregister()
81 .then(function() {
82 sendMessageToClients('sync', 'ok - unregister completed');
83 }));
84 return;
87 sendMessageToClients('sync', tag + ' fired');
90 function sendMessageToClients(type, data) {
91 clients.matchAll().then(function(clients) {
92 clients.forEach(function(client) {
93 client.postMessage({type, data});
94 });
95 }, function(error) {
96 console.log(error);
97 });