Update broken references to image assets
[chromium-blink-merge.git] / content / test / data / background_sync / background_sync_test_helpers.js
blob07465387f254aa0b4a3ee4778a420697d225b5aa
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 'use strict';
7 var resultQueue = new ResultQueue();
9 // Sends data back to the test. This must be in response to an earlier
10 // request, but it's ok to respond asynchronously. The request blocks until
11 // the response is sent.
12 function sendResultToTest(result) {
13   console.log('sendResultToTest: ' + result);
14   if (window.domAutomationController) {
15     domAutomationController.send('' + result);
16   }
19 function sendErrorToTest(error) {
20   sendResultToTest(error.name + ' - ' + error.message);
23 function registerServiceWorker() {
24   navigator.serviceWorker.register('service_worker.js', {scope: './'})
25     .then(function() {
26       return navigator.serviceWorker.ready;
27     })
28     .then(function(swRegistration) {
29       sendResultToTest('ok - service worker registered');
30     })
31     .catch(sendErrorToTest);
34 function registerOneShot(tag) {
35   navigator.serviceWorker.ready
36     .then(function(swRegistration) {
37       return swRegistration.sync.register({'tag': tag});
38     })
39     .then(function(syncRegistration) {
40       sendResultToTest('ok - ' + tag + ' registered');
41     })
42     .catch(sendErrorToTest);
45 function getRegistrationOneShot(tag) {
46   navigator.serviceWorker.ready
47     .then(function(swRegistration) {
48       return swRegistration.sync.getRegistration(tag);
49     })
50     .then(function(syncRegistration) {
51       if (!syncRegistration) {
52         sendResultToTest('error - ' + tag + ' not found');
53         return;
54       }
55       sendResultToTest('ok - ' + tag + ' found');
56     })
57     .catch(sendErrorToTest);
60 function getRegistrationsOneShot(tag) {
61   navigator.serviceWorker.ready
62     .then(function(swRegistration) {
63       return swRegistration.sync.getRegistrations();
64     })
65     .then(function(syncRegistrations) {
66       var tags = syncRegistrations.map(function(syncRegistration) {
67         return syncRegistration.tag;
68       });
69       sendResultToTest('ok - ' + tags.toString());
70     })
71     .catch(sendErrorToTest);
74 function completeDelayedOneShot() {
75   navigator.serviceWorker.ready
76     .then(function(swRegistration) {
77       swRegistration.active.postMessage('completeDelayedOneShot');
78       sendResultToTest('ok - delay completing');
79     })
80     .catch(sendErrorToTest);
83 function rejectDelayedOneShot() {
84   navigator.serviceWorker.ready
85     .then(function(swRegistration) {
86       swRegistration.active.postMessage('rejectDelayedOneShot');
87       sendResultToTest('ok - delay rejecting');
88     })
89     .catch(sendErrorToTest);
92 // Queue storing asynchronous results received from the Service Worker. Results
93 // are sent to the test when requested.
94 function ResultQueue() {
95   // Invariant: this.queue.length == 0 || this.pendingGets == 0
96   this.queue = [];
97   this.pendingGets = 0;
100 // Adds a data item to the queue. Will be sent to the test if there are
101 // pendingGets.
102 ResultQueue.prototype.push = function(data) {
103   if (this.pendingGets) {
104     this.pendingGets--;
105     sendResultToTest(data);
106   } else {
107     this.queue.unshift(data);
108   }
111 // Called by native. Sends the next data item to the test if it is available.
112 // Otherwise increments pendingGets so it will be delivered when received.
113 ResultQueue.prototype.pop = function() {
114   if (this.queue.length) {
115     sendResultToTest(this.queue.pop());
116   } else {
117     this.pendingGets++;
118   }
121 // Called by native. Immediately sends the next data item to the test if it is
122 // available, otherwise sends null.
123 ResultQueue.prototype.popImmediately = function() {
124   sendResultToTest(this.queue.length ? this.queue.pop() : null);
127 navigator.serviceWorker.addEventListener('message', function(event) {
128   var message = event.data;
129   if (message.type == 'sync')
130     resultQueue.push(message.data);
131 }, false);