| Index: third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
|
| diff --git a/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..160483a3e8900ff50a1e25156bd930ba71fbdb58
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/http/tests/notifications/resources/notification-data-reflection-test.js
|
| @@ -0,0 +1,70 @@
|
| +// Tests that the notification available after the given operation is executed
|
| +// accurately reflects the data attributes of several types with which the
|
| +// notification was created in the document.
|
| +function runNotificationDataReflectionTest(test, notificationOperation) {
|
| + var scope = 'resources/scope/' + location.pathname,
|
| + script = 'resources/instrumentation-service-worker.js';
|
| +
|
| + // Set notification's data of several types to a structured clone of options's data.
|
| + var notificationDataList = new Array(
|
| + true, // Check Boolean type
|
| + 1024, // Check Number type
|
| + Number.NaN, // Check Number.NaN type
|
| + 'any data', // Check String type
|
| + null, // Check null
|
| + new Array('Saab', 'Volvo', 'BMW'), // Check Array type
|
| + { first: 'first', second: 'second' } // Check object
|
| + );
|
| +
|
| + PermissionsHelper.setPermission('notifications', 'granted').then(function() {
|
| + getActiveServiceWorkerWithMessagePort(test, script, scope).then(function(workerInfo) {
|
| + // (1) Tell the Service Worker to display a Web Notification.
|
| + var assertNotificationDataReflects = function(pos) {
|
| + workerInfo.port.postMessage({
|
| + command: 'show',
|
| +
|
| + title: scope,
|
| + options: {
|
| + title: scope,
|
| + tag: pos,
|
| + data: notificationDataList[pos]
|
| + }
|
| + });
|
| + };
|
| +
|
| + workerInfo.port.addEventListener('message', function(event) {
|
| + if (typeof event.data != 'object' || !event.data.command) {
|
| + assert_unreached('Invalid message from the Service Worker.');
|
| + return;
|
| + }
|
| +
|
| + // (2) Listen for confirmation from the Service Worker that the
|
| + // notification's display promise has been resolved.
|
| + if (event.data.command == 'show') {
|
| + assert_true(event.data.success, 'The notification must have been displayed.');
|
| + notificationOperation.run(scope);
|
| + return;
|
| + }
|
| +
|
| + // (3) Listen for confirmation from the Service Worker that the
|
| + // notification has been closed. Make sure that all properties
|
| + // set on the Notification object are as expected.
|
| + assert_equals(event.data.command, notificationOperation.name, 'Notification was expected to receive different operation');
|
| +
|
| + var pos = event.data.notification.tag;
|
| +
|
| + if (typeof notificationDataList[pos] === 'object' && notificationDataList[pos] !== null)
|
| + assert_object_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.');
|
| + else
|
| + assert_equals(event.data.notification.data, notificationDataList[pos], 'The data field must be the same.');
|
| +
|
| + if (++pos < notificationDataList.length)
|
| + assertNotificationDataReflects(pos);
|
| + else
|
| + test.done();
|
| + });
|
| +
|
| + assertNotificationDataReflects(0);
|
| + }).catch(unreached_rejection(test));
|
| + });
|
| +}
|
|
|