| Index: LayoutTests/http/tests/serviceworker/resources/notificationclick-can-openwindow.js
|
| diff --git a/LayoutTests/http/tests/serviceworker/resources/notificationclick-can-openwindow.js b/LayoutTests/http/tests/serviceworker/resources/notificationclick-can-openwindow.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e310f27643cddd9bafacd155a7834ab3c2d665db
|
| --- /dev/null
|
| +++ b/LayoutTests/http/tests/serviceworker/resources/notificationclick-can-openwindow.js
|
| @@ -0,0 +1,146 @@
|
| +var client = null;
|
| +
|
| +function initializeClient() {
|
| + return self.clients.getAll().then(function(clients) {
|
| + client = clients[0];
|
| + });
|
| +}
|
| +
|
| +function afterWindowFocus() {
|
| + var title = 'afterWindowFocus';
|
| + registration.showNotification(title).then(function() {
|
| + client.postMessage({type: 'click', title: title});
|
| + });
|
| +
|
| + var handler = function (e) {
|
| + e.waitUntil(client.focus().then(function() {
|
| + clients.openWindow().catch(function() {
|
| + client.postMessage('openWindow() failed because a window was focused before');
|
| + client.postMessage('quit');
|
| + });
|
| + }));
|
| + self.removeEventListener('notificationclick', handler);
|
| + };
|
| +
|
| + self.addEventListener('notificationclick', handler);
|
| +}
|
| +
|
| +function testTimeout() {
|
| + var title = 'testTimeout';
|
| + registration.showNotification(title).then(function() {
|
| + client.postMessage({type: 'click', title: title});
|
| + });
|
| +
|
| + var p = new Promise(function(resolve) {
|
| + setTimeout(function() {
|
| + resolve();
|
| + }, 2000);
|
| + });
|
| +
|
| + var handler = function (e) {
|
| + e.waitUntil(p.then(function() {
|
| + return clients.openWindow('/foo.html').catch(function() {
|
| + client.postMessage('openWindow() failed after timeout');
|
| + afterWindowFocus();
|
| + });
|
| + }));
|
| + self.removeEventListener('notificationclick', handler);
|
| + };
|
| +
|
| + self.addEventListener('notificationclick', handler);
|
| +}
|
| +
|
| +function testWithSWNotificationClick3() {
|
| + var title = 'testWithSWNotificationClick3';
|
| + registration.showNotification(title).then(function() {
|
| + client.postMessage({type: 'click', title: title});
|
| + });
|
| +
|
| + var handler = function (e) {
|
| + e.waitUntil(self.clients.getAll().then(function() {
|
| + return clients.openWindow('/foo.html').then(function() {
|
| + client.postMessage('openWindow() in notificationclick\'s waitUntil suceeded');
|
| + return clients.openWindow('/foo.html');
|
| + }).catch(function() {
|
| + client.postMessage('openWindow() called twice failed');
|
| + testTimeout();
|
| + });
|
| + }));
|
| + self.removeEventListener('notificationclick', handler);
|
| + };
|
| +
|
| + self.addEventListener('notificationclick', handler);
|
| +}
|
| +
|
| +function testWithSWNotificationClick2() {
|
| + var title = 'testWithSWNotificationClick2';
|
| + registration.showNotification(title).then(function() {
|
| + client.postMessage({type: 'click', title: title});
|
| + });
|
| +
|
| + var handler = function (e) {
|
| + self.clients.getAll().then(function() {
|
| + clients.openWindow('/foo.html').catch(function() {
|
| + client.postMessage('openWindow() in notificationclick outside of waitUntil not in stack failed');
|
| + }).then(testWithSWNotificationClick3);
|
| + });
|
| + self.removeEventListener('notificationclick', handler);
|
| + };
|
| +
|
| + self.addEventListener('notificationclick', handler);
|
| +}
|
| +
|
| +function testWithSWNotificationClick1() {
|
| + var title = 'testWithSWNotificationClick1';
|
| + registration.showNotification(title).then(function() {
|
| + client.postMessage({type: 'click', title: title});
|
| + });
|
| +
|
| + var handler = function(e) {
|
| + clients.openWindow('/foo.html').then(function() {
|
| + client.postMessage('openWindow() in notificationclick outside of waitUntil but in stack succeeded');
|
| + }).then(testWithSWNotificationClick2);
|
| + self.removeEventListener('notificationclick', handler);
|
| + };
|
| +
|
| + self.addEventListener('notificationclick', handler);
|
| +}
|
| +
|
| +function testWithNotificationClick() {
|
| + var notification = new Notification('My Notification');
|
| + notification.addEventListener('show', function() {
|
| + client.postMessage({type: 'click', title: 'My Notification'});
|
| + });
|
| +
|
| + notification.addEventListener('click', function() {
|
| + clients.openWindow('/foo.html').then(function() {
|
| + client.postMessage('openWindow() in Notification click event succeeded');
|
| + }).then(function() {
|
| + clients.openWindow('/foo.html').catch(function() {
|
| + client.postMessage('openWindow() called twice failed');
|
| + notification.close();
|
| + testWithSWNotificationClick1();
|
| + });
|
| + });
|
| + });
|
| +
|
| + notification.addEventListener('error', function() {
|
| + client.postMessage('failed');
|
| + client.postMessage('quit');
|
| + });
|
| +}
|
| +
|
| +function testWithNoClick() {
|
| + clients.openWindow('/foo.html').catch(function() {
|
| + client.postMessage('openWindow() outside of a Notification click event failed');
|
| + testWithNotificationClick();
|
| + });
|
| +}
|
| +
|
| +self.onmessage = function(e) {
|
| + switch(e.data) {
|
| + case "start":
|
| + initializeClient().then(testWithNoClick);
|
| + break;
|
| + }
|
| +}
|
|
|