Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: chrome/test/data/push_messaging/push_test.js

Issue 2387483002: Push API: Refactor and fix unsubscribe API (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 var resultQueue = new ResultQueue(); 7 var resultQueue = new ResultQueue();
8 8
9 var pushSubscriptionOptions = { 9 var pushSubscriptionOptions = {
10 userVisibleOnly: true 10 userVisibleOnly: true
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 this.pendingGets++; 52 this.pendingGets++;
53 } 53 }
54 }; 54 };
55 55
56 // Called by native. Immediately sends the next data item to the test if it is 56 // Called by native. Immediately sends the next data item to the test if it is
57 // available, otherwise sends null. 57 // available, otherwise sends null.
58 ResultQueue.prototype.popImmediately = function() { 58 ResultQueue.prototype.popImmediately = function() {
59 sendResultToTest(this.queue.length ? this.queue.pop() : null); 59 sendResultToTest(this.queue.length ? this.queue.pop() : null);
60 }; 60 };
61 61
62 function swRegistrationReady(reg) {
Peter Beverloo 2016/09/30 14:26:07 nit: this definitely deserves some documentation :
johnme 2016/09/30 17:02:10 Done.
63 return new Promise((resolve, reject) => {
64 if (reg.active) {
65 resolve();
66 return;
67 }
68
69 if (!reg.installing && !reg.waiting) {
70 reject(Error('Install failed'));
71 return;
72 }
73
74 (reg.installing || reg.waiting).addEventListener('statechange', function() {
75 if (this.state == 'redundant') {
76 reject(Error('Install failed'));
77 } else if (this.state == 'activated') {
78 resolve();
79 }
80 });
81 });
82 }
83
62 // Notification permission has been coalesced with Push permission. After 84 // Notification permission has been coalesced with Push permission. After
63 // this is granted, Push API subscription can succeed. 85 // this is granted, Push API subscription can succeed.
64 function requestNotificationPermission() { 86 function requestNotificationPermission() {
65 Notification.requestPermission(function(permission) { 87 Notification.requestPermission(function(permission) {
66 sendResultToTest('permission status - ' + permission); 88 sendResultToTest('permission status - ' + permission);
67 }); 89 });
68 } 90 }
69 91
70 function registerServiceWorker() { 92 function registerServiceWorker() {
71 // The base dir used to resolve service_worker.js and the scope depends on 93 // The base dir used to resolve service_worker.js and the scope depends on
72 // whether this script is included from an html file in ./, subscope1/, or 94 // whether this script is included from an html file in ./, subscope1/, or
73 // subscope2/. 95 // subscope2/.
74 navigator.serviceWorker.register('service_worker.js', {scope: './'}).then( 96 navigator.serviceWorker.register('service_worker.js', {scope: './'}).then(
75 function(swRegistration) { 97 function(swRegistration) {
76 sendResultToTest('ok - service worker registered'); 98 sendResultToTest('ok - service worker registered');
77 }, sendErrorToTest); 99 }, sendErrorToTest);
78 } 100 }
79 101
80 function unregisterServiceWorker() { 102 function unregisterServiceWorker() {
81 navigator.serviceWorker.getRegistration().then(function(swRegistration) { 103 navigator.serviceWorker.getRegistration().then(function(swRegistration) {
82 swRegistration.unregister().then(function(result) { 104 swRegistration.unregister().then(function(result) {
83 sendResultToTest('service worker unregistration status: ' + result); 105 sendResultToTest('service worker unregistration status: ' + result);
84 }) 106 })
85 }).catch(sendErrorToTest); 107 }).catch(sendErrorToTest);
86 } 108 }
87 109
110 function replaceServiceWorker() {
111 navigator.serviceWorker.register('service_worker_with_skipWaiting_claim.js', {
112 scope: './'
113 }).then(swRegistrationReady).then(() => {
114 sendResultToTest('ok - service worker replaced');
115 }).catch(sendErrorToTest);
116 }
117
88 function removeManifest() { 118 function removeManifest() {
89 var element = document.querySelector('link[rel="manifest"]'); 119 var element = document.querySelector('link[rel="manifest"]');
90 if (element) { 120 if (element) {
91 element.parentNode.removeChild(element); 121 element.parentNode.removeChild(element);
92 sendResultToTest('manifest removed'); 122 sendResultToTest('manifest removed');
93 } else { 123 } else {
94 sendResultToTest('unable to find manifest element'); 124 sendResultToTest('unable to find manifest element');
95 } 125 }
96 } 126 }
97 127
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 swRegistration.pushManager.getSubscription().then(function(pushSubscription) 218 swRegistration.pushManager.getSubscription().then(function(pushSubscription)
189 { 219 {
190 if (!pushSubscription) { 220 if (!pushSubscription) {
191 sendResultToTest('unsubscribe result: false'); 221 sendResultToTest('unsubscribe result: false');
192 return; 222 return;
193 } 223 }
194 pushSubscription.unsubscribe().then(function(result) { 224 pushSubscription.unsubscribe().then(function(result) {
195 sendResultToTest('unsubscribe result: ' + result); 225 sendResultToTest('unsubscribe result: ' + result);
196 }, function(error) { 226 }, function(error) {
197 sendResultToTest('unsubscribe error: ' + error.message); 227 sendResultToTest('unsubscribe error: ' + error.message);
198 }) 228 });
199 }) 229 })
200 }); 230 });
201 } 231 }
202 232
233 function storePushSubscription() {
234 navigator.serviceWorker.ready.then(swRegistration => {
235 swRegistration.pushManager.getSubscription().then(pushSubscription => {
236 window.storedPushSubscription = pushSubscription;
237 sendResultToTest('ok - stored');
238 }, sendErrorToTest);
239 }, sendErrorToTest);
240 }
241
242 function unsubscribeStoredPushSubscription() {
243 window.storedPushSubscription.unsubscribe().then(function(result) {
244 sendResultToTest('unsubscribe result: ' + result);
245 }, function(error) {
246 sendResultToTest('unsubscribe error: ' + error.message);
247 });
248 }
249
203 function hasSubscription() { 250 function hasSubscription() {
204 navigator.serviceWorker.ready.then(function(swRegistration) { 251 navigator.serviceWorker.ready.then(function(swRegistration) {
205 return swRegistration.pushManager.getSubscription(); 252 return swRegistration.pushManager.getSubscription();
206 }).then(function(subscription) { 253 }).then(function(subscription) {
207 sendResultToTest(subscription ? 'true - subscribed' 254 sendResultToTest(subscription ? 'true - subscribed'
208 : 'false - not subscribed'); 255 : 'false - not subscribed');
209 }).catch(sendErrorToTest); 256 }).catch(sendErrorToTest);
210 } 257 }
211 258
212 navigator.serviceWorker.addEventListener('message', function(event) { 259 navigator.serviceWorker.addEventListener('message', function(event) {
213 var message = JSON.parse(event.data); 260 var message = JSON.parse(event.data);
214 if (message.type == 'push') 261 if (message.type == 'push')
215 resultQueue.push(message.data); 262 resultQueue.push(message.data);
216 else 263 else
217 sendResultToTest(message.data); 264 sendResultToTest(message.data);
218 }, false); 265 }, false);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698