blob: 08823654ee61b2788366dd6505594b24c21a2ca3 [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>Notifications: Reply reflection in the "notificationclick" event.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../serviceworker/resources/test-helpers.js"></script>
<script src="resources/test-helpers.js"></script>
</head>
<body>
<script>
// Tests that the reply property of the "notificationclick" event in the
// Service Worker accurately reflects the reply entered.
async_test(function(test) {
var scope = 'resources/scope/' + location.pathname;
var script = 'instrumentation-service-worker.js';
var port;
var options = {
actions: [{ action: 'actionName', title: 'ActionTitle', type: 'text' }]
};
testRunner.setPermission('notifications', 'granted', location.origin, location.origin);
getActiveServiceWorkerWithMessagePort(test, script, scope).then(function(info) {
port = info.port;
// (1) Tell the Service Worker to display a Web Notification.
return sendCommand(port, {
command: 'show',
title: scope,
options: options
});
}).then(function(data) {
// (2) Confirm that the service worker displayed the notification successfully.
assert_true(data.success, 'The notification must have been displayed.');
var expectedReplies = [];
// (3) Simulate some clicks on the notification, with and without replies.
// (3.1) Simulate a reply to the notification text action.
testRunner.simulateWebNotificationClick(scope, 0 /* action_index */, 'My reply.');
expectedReplies.push('My reply.');
// (3.2) Simulate an empty reply to the notification text action.
testRunner.simulateWebNotificationClick(scope, 0 /* action_index */, '');
expectedReplies.push('');
// (3.3) Simulate a click on the notification body (reply should be null).
testRunner.simulateWebNotificationClick(scope);
expectedReplies.push(null);
port.addEventListener('message', function(event) {
// (4) Listen for confirmation from the Service Worker that the
// notification has been clicked on. Make sure that the reply
// property set on the NotificationEvent object is as expected.
assert_equals(event.data.command, 'click', 'The notification was expected to be clicked.');
assert_equals(event.data.reply, expectedReplies.shift());
if (expectedReplies.length === 0)
test.done();
});
}).catch(unreached_rejection(test));
}, 'NotificationEvent reply property should reflect the reply that was entered');
</script>
</body>
</html>