OLD | NEW |
1 <!doctype html> | 1 <!doctype html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <title>Notifications: Property reflection in the "notificationclick" event a
nd SWR.getNotifications().</title> | 4 <title>Notifications: Property reflection in the "notificationclick" event a
nd SWR.getNotifications().</title> |
5 <script src="../resources/testharness.js"></script> | 5 <script src="../resources/testharness.js"></script> |
6 <script src="../resources/testharnessreport.js"></script> | 6 <script src="../resources/testharnessreport.js"></script> |
7 <script src="../serviceworker/resources/test-helpers.js"></script> | 7 <script src="../serviceworker/resources/test-helpers.js"></script> |
8 <script src="resources/test-helpers.js"></script> | 8 <script src="resources/test-helpers.js"></script> |
9 </head> | 9 </head> |
10 <body> | 10 <body> |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 { property: 'foobar', | 45 { property: 'foobar', |
46 string: '\uDFFF\u0000\uDBFF', | 46 string: '\uDFFF\u0000\uDBFF', |
47 scalar: true }, | 47 scalar: true }, |
48 12.15 | 48 12.15 |
49 ], | 49 ], |
50 actions: [] | 50 actions: [] |
51 }; | 51 }; |
52 // Deliberately add more actions than are supported. | 52 // Deliberately add more actions than are supported. |
53 for (var i = 0; i < 2 * Notification.maxActions; i++) { | 53 for (var i = 0; i < 2 * Notification.maxActions; i++) { |
54 options.actions.push({ | 54 options.actions.push({ |
55 action: "a" + i, | 55 action: 'a' + i, |
56 title: "Action " + i | 56 title: 'Action ' + i, |
| 57 icon: 'https://example/action_icon_' + i + '.png' |
57 }); | 58 }); |
58 } | 59 } |
59 | 60 |
60 testRunner.setPermission('notifications', 'granted', location.origin,
location.origin); | 61 if (window.testRunner) { |
| 62 testRunner.setPermission('notifications', 'granted', location.orig
in, location.origin); |
| 63 } |
61 getActiveServiceWorkerWithMessagePort(test, script, scope).then(functi
on(workerInfo) { | 64 getActiveServiceWorkerWithMessagePort(test, script, scope).then(functi
on(workerInfo) { |
62 // (1) Tell the Service Worker to display a Web Notification. | 65 // (1) Tell the Service Worker to display a Web Notification. |
63 workerInfo.port.postMessage({ | 66 workerInfo.port.postMessage({ |
64 command: 'show', | 67 command: 'show', |
65 | 68 |
66 title: scope, | 69 title: scope, |
67 options: options | 70 options: options |
68 }); | 71 }); |
69 | 72 |
70 // Now limit actions to the number that we expect to be reflected
on notifications. | 73 // Now limit actions to the number that we expect to be reflected
on notifications. |
71 options.actions = options.actions.slice(0, Notification.maxActions
); | 74 options.actions = options.actions.slice(0, Notification.maxActions
); |
72 | 75 |
73 workerInfo.port.addEventListener('message', function(event) { | 76 workerInfo.port.addEventListener('message', function(event) { |
74 if (typeof event.data != 'object' || !event.data.command) { | 77 if (typeof event.data != 'object' || !event.data.command) { |
75 assert_unreached('Invalid message from the Service Worker.
'); | 78 assert_unreached('Invalid message from the Service Worker.
'); |
76 return; | 79 return; |
77 } | 80 } |
78 | 81 |
79 // (2) Listen for confirmation from the Service Worker that th
e | 82 // (2) Listen for confirmation from the Service Worker that th
e |
80 // notification's display promise has been resolved. | 83 // notification's display promise has been resolved. |
81 if (event.data.command == 'show') { | 84 if (event.data.command == 'show') { |
82 assert_true(event.data.success, 'The notification must hav
e been displayed.'); | 85 assert_true(event.data.success, 'The notification must hav
e been displayed.'); |
83 testRunner.simulateWebNotificationClick(scope, -1 /* actio
n_index */); | 86 if (window.testRunner) { |
| 87 testRunner.simulateWebNotificationClick(scope, -1 /* a
ction_index */); |
| 88 } |
84 return; | 89 return; |
85 } | 90 } |
86 | 91 |
87 // (3) Listen for confirmation from the Service Worker that th
e | 92 // (3) Listen for confirmation from the Service Worker that th
e |
88 // notification has been clicked on. Make sure that all proper
ties | 93 // notification has been clicked on. Make sure that all proper
ties |
89 // set on the cloned Notification object are as expected. | 94 // set on the cloned Notification object are as expected. |
90 assert_equals(event.data.command, 'click', 'The notification w
as expected to be clicked.'); | 95 assert_equals(event.data.command, 'click', 'The notification w
as expected to be clicked.'); |
91 assert_object_is_superset(event.data.notification, options, 'T
he Notification object properties must be the same in notificationclick events.'
); | 96 assert_object_is_superset(event.data.notification, options, 'T
he Notification object properties must be the same in notificationclick events.'
); |
92 | 97 |
93 // (4) Check that the properties are also set correctly on the | 98 // (4) Check that the properties are also set correctly on the |
94 // non-cloned Notification object from getNotifications. | 99 // non-cloned Notification object from getNotifications. |
95 workerInfo.registration.getNotifications().then(function(notif
ications) { | 100 workerInfo.registration.getNotifications().then(function(notif
ications) { |
96 assert_equals(notifications.length, 1); | 101 assert_equals(notifications.length, 1); |
97 assert_object_is_superset(notifications[0], options, 'The
Notification object properties must be the same in getNotifications.'); | 102 assert_object_is_superset(notifications[0], options, 'The
Notification object properties must be the same in getNotifications.'); |
98 | 103 |
99 notifications[0].actions.foo = "bar"; | 104 notifications[0].actions.foo = 'bar'; |
100 notifications[0].actions.push({ title: "Foo" }); | 105 notifications[0].actions.push({ title: 'Foo' }); |
101 if (notifications[0].actions.length) { | 106 if (notifications[0].actions.length) { |
102 notifications[0].actions[0].title = "Changed"; | 107 notifications[0].actions[0].title = 'Changed'; |
103 notifications[0].actions[0].foo = "bar"; | 108 notifications[0].actions[0].foo = 'bar'; |
104 } | 109 } |
105 assert_object_equals(notifications[0].actions, options.act
ions, 'The actions field should be immutable.'); | 110 assert_object_equals(notifications[0].actions, options.act
ions, 'The actions field should be immutable.'); |
106 | 111 |
107 // TODO(johnme): This should pass before shipping Notifica
tion.actions; this is blocked on https://crbug.com/515920. | 112 // TODO(johnme): This should pass before shipping Notifica
tion.actions; this is blocked on https://crbug.com/515920. |
108 //assert_equals(notifications[0].actions, notifications[0]
.actions, 'The actions field should === itself.'); | 113 //assert_equals(notifications[0].actions, notifications[0]
.actions, 'The actions field should === itself.'); |
109 | 114 |
110 test.done(); | 115 test.done(); |
111 }); | 116 }); |
112 }); | 117 }); |
113 }).catch(unreached_rejection(test)); | 118 }).catch(unreached_rejection(test)); |
114 | 119 |
115 }, 'Clicking on a notification displayed by a Service Worker the notificat
ionclick event.'); | 120 }, 'Clicking on a notification displayed by a Service Worker the notificat
ionclick event.'); |
116 </script> | 121 </script> |
117 </body> | 122 </body> |
118 </html> | 123 </html> |
OLD | NEW |