OLD | NEW |
---|---|
1 importScripts('/resources/testharness-helpers.js'); | 1 importScripts('/resources/testharness-helpers.js'); |
2 | 2 |
3 // Copies the serializable attributes of |notification|. | |
4 function serializeNotification(notification) { | |
johnme
2015/04/09 10:29:50
Optional nit: cloneNotification?
Peter Beverloo
2015/04/17 13:03:17
It doesn't clone the notification (cloning would i
johnme
2015/04/17 16:29:25
Yeah, but after serializing it to a string, it the
| |
5 return JSON.parse(stringifyDOMObject(notification)); | |
6 } | |
7 | |
3 // Allows a document to exercise the Notifications API within a service worker b y sending commands. | 8 // Allows a document to exercise the Notifications API within a service worker b y sending commands. |
4 var messagePort = null; | 9 var messagePort = null; |
5 | 10 |
6 addEventListener('message', function(workerEvent) { | 11 addEventListener('message', function(workerEvent) { |
7 messagePort = workerEvent.data; | 12 messagePort = workerEvent.data; |
8 | 13 |
9 // Listen to incoming commands on the message port. | 14 // Listen to incoming commands on the message port. |
10 messagePort.onmessage = function(event) { | 15 messagePort.onmessage = function(event) { |
11 if (typeof event.data != 'object' || !event.data.command) | 16 if (typeof event.data != 'object' || !event.data.command) |
12 return; | 17 return; |
13 | 18 |
14 switch (event.data.command) { | 19 switch (event.data.command) { |
15 case 'permission': | 20 case 'permission': |
16 messagePort.postMessage({ command: event.data.command, | 21 messagePort.postMessage({ command: event.data.command, |
17 value: Notification.permission }); | 22 value: Notification.permission }); |
18 break; | 23 break; |
19 | 24 |
20 case 'show': | 25 case 'show': |
21 registration.showNotification(event.data.title, event.data.optio ns).then(function() { | 26 registration.showNotification(event.data.title, event.data.optio ns).then(function() { |
22 messagePort.postMessage({ command: event.data.command, | 27 messagePort.postMessage({ command: event.data.command, |
23 success: true }); | 28 success: true }); |
24 }, function(error) { | 29 }, function(error) { |
25 messagePort.postMessage({ command: event.data.command, | 30 messagePort.postMessage({ command: event.data.command, |
26 success: false, | 31 success: false, |
27 message: error.message }); | 32 message: error.message }); |
28 }); | 33 }); |
29 break; | 34 break; |
30 | 35 |
36 case 'get': | |
37 var filter = {}; | |
38 if (typeof (event.data.filter) !== 'undefined') | |
39 filter = event.data.filter; | |
40 | |
41 registration.getNotifications(filter).then(function(notification s) { | |
42 var serializedNotifications = []; | |
43 for (var notification of notifications) | |
44 serializedNotifications.push(serializeNotification(notif ication)); | |
45 | |
46 messagePort.postMessage({ command: event.data.command, | |
47 success: true, | |
48 notifications: serializedNotificat ions }); | |
49 }, function(error) { | |
50 messagePort.postMessage({ command: event.data.command, | |
51 success: false, | |
52 message: error.message }); | |
53 }); | |
54 break; | |
55 | |
31 default: | 56 default: |
32 messagePort.postMessage({ command: 'error', message: 'Invalid co mmand: ' + event.data.command }); | 57 messagePort.postMessage({ command: 'error', message: 'Invalid co mmand: ' + event.data.command }); |
33 break; | 58 break; |
34 } | 59 } |
35 }; | 60 }; |
36 | 61 |
37 // Notify the controller that the worker is now available. | 62 // Notify the controller that the worker is now available. |
38 messagePort.postMessage('ready'); | 63 messagePort.postMessage('ready'); |
39 }); | 64 }); |
40 | 65 |
41 addEventListener('notificationclick', function(event) { | 66 addEventListener('notificationclick', function(event) { |
42 // Copies the serializable attributes of the Notification instance on |event |. | 67 var notificationCopy = serializeNotification(event.notification); |
43 var notificationCopy = JSON.parse(stringifyDOMObject(event.notification)); | |
44 | 68 |
45 // Notifications containing "ACTION:CLOSE" in their message will be closed | 69 // Notifications containing "ACTION:CLOSE" in their message will be closed |
46 // immediately by the Service Worker. | 70 // immediately by the Service Worker. |
47 if (event.notification.body.indexOf('ACTION:CLOSE') != -1) | 71 if (event.notification.body.indexOf('ACTION:CLOSE') != -1) |
48 event.notification.close(); | 72 event.notification.close(); |
49 | 73 |
50 // Notifications containing "ACTION:OPENWINDOW" in their message will attemp t | 74 // Notifications containing "ACTION:OPENWINDOW" in their message will attemp t |
51 // to open a new window for an example URL. | 75 // to open a new window for an example URL. |
52 if (event.notification.body.indexOf('ACTION:OPENWINDOW') != -1) | 76 if (event.notification.body.indexOf('ACTION:OPENWINDOW') != -1) |
53 event.waitUntil(clients.openWindow('https://example.com/')); | 77 event.waitUntil(clients.openWindow('https://example.com/')); |
54 | 78 |
55 messagePort.postMessage({ command: 'click', | 79 messagePort.postMessage({ command: 'click', |
56 notification: notificationCopy }); | 80 notification: notificationCopy }); |
57 }); | 81 }); |
OLD | NEW |