Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(435)

Side by Side Diff: LayoutTests/http/tests/serviceworker/chromium/resources/notificationclick-can-openwindow.js

Issue 879403005: [ServiceWorker] Tests for Clients.openWindow(). (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@window_interaction_tests
Patch Set: cleanup and add test helper Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 var client = null; 1 // This helper will setup a small test framework that will use TESTS and run
2 // them iteratively and call self.postMessage('quit') when done.
3 // This helper also exposes |client|, |postMessage()|, |runNextTestOrQuit()|,
4 // |synthesizeNotificationClick()| and |initialize()|.
5 importScripts('sw-test-helpers.js');
2 6
3 function initialize() {
4 return self.clients.getAll().then(function(clients) {
5 client = clients[0];
6 });
7 }
8
9 function synthesizeNotificationClick() {
10 var promise = new Promise(function(resolve) {
11 var title = "fake notification";
12 registration.showNotification(title).then(function() {
13 client.postMessage({type: 'click', title: title});
14 });
15
16 var handler = function(e) {
17 resolve(e);
18 e.notification.close();
19 self.removeEventListener('notificationclick', handler);
20 };
21
22 self.addEventListener('notificationclick', handler);
23 });
24
25 return promise;
26 }
27
28 var currentTest = -1;
29 var TESTS = [ 7 var TESTS = [
30 function testWithNoNotificationClick() { 8 function testWithNoNotificationClick() {
31 clients.openWindow('/foo.html').catch(function() { 9 clients.openWindow('/foo.html').catch(function() {
32 client.postMessage('openWindow() outside of a notificationclick even t failed'); 10 self.postMessage('openWindow() outside of a notificationclick event failed');
33 }).then(runNextTestOrQuit); 11 }).then(runNextTestOrQuit);
34 }, 12 },
35 13
36 function testInStackOutOfWaitUntil() { 14 function testInStackOutOfWaitUntil() {
37 synthesizeNotificationClick().then(function() { 15 synthesizeNotificationClick().then(function() {
38 clients.openWindow('/foo.html').then(function() { 16 clients.openWindow('/foo.html').then(function() {
39 client.postMessage('openWindow() in notificationclick outside of waitUntil but in stack succeeded'); 17 self.postMessage('openWindow() in notificationclick outside of w aitUntil but in stack succeeded');
40 }).then(runNextTestOrQuit); 18 }).then(runNextTestOrQuit);
41 }); 19 });
42 }, 20 },
43 21
44 function testOutOfStackOutOfWaitUntil() { 22 function testOutOfStackOutOfWaitUntil() {
45 synthesizeNotificationClick().then(function() { 23 synthesizeNotificationClick().then(function() {
46 self.clients.getAll().then(function() { 24 self.clients.getAll().then(function() {
47 clients.openWindow('/foo.html').catch(function() { 25 clients.openWindow('/foo.html').catch(function() {
48 client.postMessage('openWindow() in notificationclick outsid e of waitUntil not in stack failed'); 26 self.postMessage('openWindow() in notificationclick outside of waitUntil not in stack failed');
49 }).then(runNextTestOrQuit); 27 }).then(runNextTestOrQuit);
50 }); 28 });
51 }); 29 });
52 }, 30 },
53 31
54 function testInWaitUntilAsyncAndDoubleCall() { 32 function testInWaitUntilAsyncAndDoubleCall() {
55 synthesizeNotificationClick().then(function(e) { 33 synthesizeNotificationClick().then(function(e) {
56 e.waitUntil(self.clients.getAll().then(function() { 34 e.waitUntil(self.clients.getAll().then(function() {
57 return clients.openWindow('/foo.html').then(function() { 35 return clients.openWindow('/foo.html').then(function() {
58 client.postMessage('openWindow() in notificationclick\'s wai tUntil suceeded'); 36 self.postMessage('openWindow() in notificationclick\'s waitU ntil suceeded');
59 }).then(runNextTestOrQuit); 37 }).then(runNextTestOrQuit);
60 })); 38 }));
61 }); 39 });
62 }, 40 },
63 41
64 function testDoubleCallInWaitUntilAsync() { 42 function testDoubleCallInWaitUntilAsync() {
65 synthesizeNotificationClick().then(function(e) { 43 synthesizeNotificationClick().then(function(e) {
66 e.waitUntil(self.clients.getAll().then(function() { 44 e.waitUntil(self.clients.getAll().then(function() {
67 return clients.openWindow('/foo.html').then(function() { 45 return clients.openWindow('/foo.html').then(function() {
68 return clients.openWindow('/foo.html'); 46 return clients.openWindow('/foo.html');
69 }).catch(function() { 47 }).catch(function() {
70 client.postMessage('openWindow() called twice failed'); 48 self.postMessage('openWindow() called twice failed');
71 }).then(runNextTestOrQuit); 49 }).then(runNextTestOrQuit);
72 })); 50 }));
73 }); 51 });
74 }, 52 },
75 53
76 54
77 function testWaitUntilTimeout() { 55 function testWaitUntilTimeout() {
78 var p = new Promise(function(resolve) { 56 var p = new Promise(function(resolve) {
79 setTimeout(function() { 57 setTimeout(function() {
80 resolve(); 58 resolve();
81 }, 2000); 59 }, 2000);
82 }); 60 });
83 61
84 synthesizeNotificationClick().then(function(e) { 62 synthesizeNotificationClick().then(function(e) {
85 e.waitUntil(p.then(function() { 63 e.waitUntil(p.then(function() {
86 return clients.openWindow('/foo.html').catch(function() { 64 return clients.openWindow('/foo.html').catch(function() {
87 client.postMessage('openWindow() failed after timeout'); 65 self.postMessage('openWindow() failed after timeout');
88 }).then(runNextTestOrQuit); 66 }).then(runNextTestOrQuit);
89 })); 67 }));
90 }); 68 });
91 }, 69 },
92 70
93 function testFocusWindowOpenWindowCombo() { 71 function testFocusWindowOpenWindowCombo() {
94 synthesizeNotificationClick().then(function(e) { 72 synthesizeNotificationClick().then(function(e) {
95 e.waitUntil(client.focus().then(function() { 73 e.waitUntil(client.focus().then(function() {
96 clients.openWindow().catch(function() { 74 clients.openWindow().catch(function() {
97 client.postMessage('openWindow() failed because a window was focused before'); 75 self.postMessage('openWindow() failed because a window was f ocused before');
98 }).then(runNextTestOrQuit); 76 }).then(runNextTestOrQuit);
99 })); 77 }));
100 }); 78 });
101 }, 79 },
102 ]; 80 ];
103 81
104 function runNextTestOrQuit() {
105 ++currentTest;
106 if (currentTest >= TESTS.length) {
107 client.postMessage('quit');
108 return;
109 }
110 TESTS[currentTest]();
111 }
112
113 self.onmessage = function(e) { 82 self.onmessage = function(e) {
114 if (e.data == "start") { 83 if (e.data == "start") {
115 initialize().then(runNextTestOrQuit); 84 initialize().then(runNextTestOrQuit);
116 } else { 85 } else {
117 initialize().then(function() { 86 initialize().then(function() {
118 client.postMessage('received unexpected message'); 87 self.postMessage('received unexpected message');
119 client.postMessage('quit'); 88 self.postMessage('quit');
120 }); 89 });
121 } 90 }
122 } 91 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698