| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <title>ServiceWorkerGlobalScope: ExtendableMessageEvent</title> | 2 <title>ServiceWorkerGlobalScope: ExtendableMessageEvent</title> |
| 3 <script src='../../resources/testharness.js'></script> | 3 <script src='/resources/testharness.js'></script> |
| 4 <script src='../../resources/testharnessreport.js'></script> | 4 <script src='/resources/testharnessreport.js'></script> |
| 5 <script src='../resources/test-helpers.js'></script> | 5 <script src='../resources/test-helpers.sub.js'></script> |
| 6 <script src='./resources/extendable-message-event.js'></script> |
| 6 <script> | 7 <script> |
| 7 | |
| 8 promise_test(function(t) { | |
| 9 var script = 'resources/extendable-message-event-constructor-worker.js'; | |
| 10 var scope = 'resources/scope/extendable-message-event-constructor'; | |
| 11 var registration; | |
| 12 | |
| 13 return service_worker_unregister_and_register(t, script, scope) | |
| 14 .then(function(r) { | |
| 15 registration = r; | |
| 16 add_completion_callback(function() { registration.unregister(); }); | |
| 17 return wait_for_state(t, registration.installing, 'activated'); | |
| 18 }) | |
| 19 .then(function() { | |
| 20 var saw_message = new Promise(function(resolve) { | |
| 21 navigator.serviceWorker.onmessage = | |
| 22 function(event) { resolve(event.data); }; | |
| 23 }); | |
| 24 registration.active.postMessage(''); | |
| 25 return saw_message; | |
| 26 }) | |
| 27 .then(function(result) { | |
| 28 assert_equals(result, 'success'); | |
| 29 }); | |
| 30 }, 'Test the constructor for ExtendableMessageEvent'); | |
| 31 | |
| 32 promise_test(function(t) { | 8 promise_test(function(t) { |
| 33 var script = 'resources/extendable-message-event-worker.js'; | 9 var script = 'resources/extendable-message-event-worker.js'; |
| 34 var scope = 'resources/scope/extendable-message-event-from-toplevel'; | 10 var scope = 'resources/scope/extendable-message-event-from-toplevel'; |
| 35 var registration; | 11 var registration; |
| 36 | 12 |
| 37 return service_worker_unregister_and_register(t, script, scope) | 13 return service_worker_unregister_and_register(t, script, scope) |
| 38 .then(function(r) { | 14 .then(function(r) { |
| 39 registration = r; | 15 registration = r; |
| 40 add_completion_callback(function() { registration.unregister(); }); | 16 add_completion_callback(function() { registration.unregister(); }); |
| 41 return wait_for_state(t, registration.installing, 'activated'); | 17 return wait_for_state(t, registration.installing, 'activated'); |
| 42 }) | 18 }) |
| 43 .then(function() { | 19 .then(function() { |
| 44 var saw_message = new Promise(function(resolve) { | 20 var saw_message = new Promise(function(resolve) { |
| 45 navigator.serviceWorker.onmessage = | 21 navigator.serviceWorker.onmessage = |
| 46 function(event) { resolve(event.data); } | 22 function(event) { resolve(event.data); } |
| 47 }); | 23 }); |
| 48 var channel = new MessageChannel; | 24 var channel = new MessageChannel; |
| 49 registration.active.postMessage('', [channel.port1]); | 25 registration.active.postMessage('', [channel.port1]); |
| 50 return saw_message; | 26 return saw_message; |
| 51 }) | 27 }) |
| 52 .then(function(results) { | 28 .then(function(results) { |
| 53 var expected_results = [ | 29 var expected = { |
| 54 'Client message: [object ExtendableMessageEvent]', | 30 constructor: { name: 'ExtendableMessageEvent' }, |
| 55 ' event.origin: ' + location.origin, | 31 origin: location.origin, |
| 56 ' event.lastEventId: ', | 32 lastEventId: '', |
| 57 ' event.source: [object WindowClient]', | 33 source: { |
| 58 ' event.source.url: ' + location.href, | 34 constructor: { name: 'WindowClient' }, |
| 59 ' event.source.frameType: top-level', | 35 frameType: 'top-level', |
| 60 ' event.source.visibilityState: visible', | 36 url: location.href, |
| 61 ' event.source.focused: true', | 37 visibilityState: 'visible', |
| 62 ' event.ports: [object MessagePort]', | 38 focused: true |
| 63 ]; | 39 }, |
| 64 assert_array_equals(results, expected_results); | 40 ports: [ { constructor: { name: 'MessagePort' } } ] |
| 41 }; |
| 42 wptEME.assert_equals(results, expected); |
| 65 }); | 43 }); |
| 66 }, 'Post an extendable message from a top-level client'); | 44 }, 'Post an extendable message from a top-level client'); |
| 67 | 45 |
| 68 promise_test(function(t) { | 46 promise_test(function(t) { |
| 69 var script = 'resources/extendable-message-event-worker.js'; | 47 var script = 'resources/extendable-message-event-worker.js'; |
| 70 var scope = 'resources/scope/extendable-message-event-from-nested'; | 48 var scope = 'resources/scope/extendable-message-event-from-nested'; |
| 71 var frame; | 49 var frame; |
| 72 | 50 |
| 73 return service_worker_unregister_and_register(t, script, scope) | 51 return service_worker_unregister_and_register(t, script, scope) |
| 74 .then(function(registration) { | 52 .then(function(registration) { |
| 75 add_completion_callback(function() { registration.unregister(); }); | 53 add_completion_callback(function() { registration.unregister(); }); |
| 76 return wait_for_state(t, registration.installing, 'activated'); | 54 return wait_for_state(t, registration.installing, 'activated'); |
| 77 }) | 55 }) |
| 78 .then(function() { return with_iframe(scope); }) | 56 .then(function() { return with_iframe(scope); }) |
| 79 .then(function(f) { | 57 .then(function(f) { |
| 80 frame = f; | 58 frame = f; |
| 81 add_completion_callback(function() { frame.remove(); }); | 59 add_completion_callback(function() { frame.remove(); }); |
| 82 var saw_message = new Promise(function(resolve) { | 60 var saw_message = new Promise(function(resolve) { |
| 83 frame.contentWindow.navigator.serviceWorker.onmessage = | 61 frame.contentWindow.navigator.serviceWorker.onmessage = |
| 84 function(event) { resolve(event.data); } | 62 function(event) { resolve(event.data); } |
| 85 }); | 63 }); |
| 86 f.contentWindow.navigator.serviceWorker.controller.postMessage(''); | 64 f.contentWindow.navigator.serviceWorker.controller.postMessage(''); |
| 87 return saw_message; | 65 return saw_message; |
| 88 }) | 66 }) |
| 89 .then(function(results) { | 67 .then(function(results) { |
| 90 var expected_results = [ | 68 var expected = { |
| 91 'Client message: [object ExtendableMessageEvent]', | 69 constructor: { name: 'ExtendableMessageEvent' }, |
| 92 ' event.origin: ' + frame.contentWindow.location.origin, | 70 origin: location.origin, |
| 93 ' event.lastEventId: ', | 71 lastEventId: '', |
| 94 ' event.source: [object WindowClient]', | 72 source: { |
| 95 ' event.source.url: ' + frame.contentWindow.location.href, | 73 constructor: { name: 'WindowClient' }, |
| 96 ' event.source.frameType: nested', | 74 url: frame.contentWindow.location.href, |
| 97 ' event.source.visibilityState: visible', | 75 frameType: 'nested', |
| 98 ' event.source.focused: false', | 76 visibilityState: 'visible', |
| 99 ' event.ports: ', | 77 focused: false |
| 100 ]; | 78 }, |
| 101 assert_array_equals(results, expected_results); | 79 ports: [] |
| 80 }; |
| 81 wptEME.assert_equals(results, expected); |
| 102 }); | 82 }); |
| 103 }, 'Post an extendable message from a nested client'); | 83 }, 'Post an extendable message from a nested client'); |
| 104 | 84 |
| 105 promise_test(function(t) { | 85 promise_test(function(t) { |
| 106 var script = 'resources/extendable-message-event-loopback-worker.js'; | 86 var script = 'resources/extendable-message-event-loopback-worker.js'; |
| 107 var scope = 'resources/scope/extendable-message-event-loopback'; | 87 var scope = 'resources/scope/extendable-message-event-loopback'; |
| 108 var registration; | 88 var registration; |
| 109 | 89 |
| 110 return service_worker_unregister_and_register(t, script, scope) | 90 return service_worker_unregister_and_register(t, script, scope) |
| 111 .then(function(r) { | 91 .then(function(r) { |
| 112 registration = r; | 92 registration = r; |
| 113 add_completion_callback(function() { registration.unregister(); }); | 93 add_completion_callback(function() { registration.unregister(); }); |
| 114 return wait_for_state(t, registration.installing, 'activated'); | 94 return wait_for_state(t, registration.installing, 'activated'); |
| 115 }) | 95 }) |
| 116 .then(function() { | 96 .then(function() { |
| 117 var results = []; | 97 var results = []; |
| 118 var saw_message = new Promise(function(resolve) { | 98 var saw_message = new Promise(function(resolve) { |
| 119 navigator.serviceWorker.onmessage = function(event) { | 99 navigator.serviceWorker.onmessage = function(event) { |
| 120 switch (event.data.type) { | 100 switch (event.data.type) { |
| 121 case 'record': | 101 case 'record': |
| 122 Array.prototype.push.apply(results, event.data.results); | 102 results.push(event.data.results); |
| 123 break; | 103 break; |
| 124 case 'finish': | 104 case 'finish': |
| 125 resolve(results); | 105 resolve(results); |
| 126 break; | 106 break; |
| 127 } | 107 } |
| 128 }; | 108 }; |
| 129 }); | 109 }); |
| 130 registration.active.postMessage({type: 'start'}); | 110 registration.active.postMessage({type: 'start'}); |
| 131 return saw_message; | 111 return saw_message; |
| 132 }) | 112 }) |
| 133 .then(function(results) { | 113 .then(function(results) { |
| 134 var expected_results = [ | 114 assert_equals(results.length, 2); |
| 135 '1st loopback: [object ExtendableMessageEvent]', | 115 |
| 136 ' event.origin: ' + location.origin, | 116 var expected_trial_1 = { |
| 137 ' event.lastEventId: ', | 117 constructor: { name: 'ExtendableMessageEvent' }, |
| 138 ' event.source: [object ServiceWorker]', | 118 origin: location.origin, |
| 139 ' event.source.scriptURL: ' + normalizeURL(script), | 119 lastEventId: '', |
| 140 ' event.source.state: activated', | 120 source: { |
| 141 ' event.ports: ', | 121 constructor: { name: 'ServiceWorker' }, |
| 142 '2nd loopback: [object ExtendableMessageEvent]', | 122 scriptURL: normalizeURL(script), |
| 143 ' event.origin: ' + location.origin, | 123 state: 'activated' |
| 144 ' event.lastEventId: ', | 124 }, |
| 145 ' event.source: [object ServiceWorker]', | 125 ports: [] |
| 146 ' event.source.scriptURL: ' + normalizeURL(script), | 126 }; |
| 147 ' event.source.state: activated', | 127 assert_equals(results[0].trial, 1); |
| 148 ' event.ports: ', | 128 wptEME.assert_equals(results[0].event, expected_trial_1); |
| 149 ]; | 129 |
| 150 assert_array_equals(results, expected_results); | 130 var expected_trial_2 = { |
| 131 constructor: { name: 'ExtendableMessageEvent' }, |
| 132 origin: location.origin, |
| 133 lastEventId: '', |
| 134 source: { |
| 135 constructor: { name: 'ServiceWorker' }, |
| 136 scriptURL: normalizeURL(script), |
| 137 state: 'activated' |
| 138 }, |
| 139 ports: [], |
| 140 }; |
| 141 assert_equals(results[1].trial, 2); |
| 142 wptEME.assert_equals(results[1].event, expected_trial_2); |
| 151 }); | 143 }); |
| 152 }, 'Post loopback extendable messages'); | 144 }, 'Post loopback extendable messages'); |
| 153 | 145 |
| 154 promise_test(function(t) { | 146 promise_test(function(t) { |
| 155 var script1 = 'resources/extendable-message-event-ping-worker.js'; | 147 var script1 = 'resources/extendable-message-event-ping-worker.js'; |
| 156 var script2 = 'resources/extendable-message-event-pong-worker.js'; | 148 var script2 = 'resources/extendable-message-event-pong-worker.js'; |
| 157 var scope = 'resources/scope/extendable-message-event-pingpong'; | 149 var scope = 'resources/scope/extendable-message-event-pingpong'; |
| 158 var registration; | 150 var registration; |
| 159 | 151 |
| 160 return service_worker_unregister_and_register(t, script1, scope) | 152 return service_worker_unregister_and_register(t, script1, scope) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 173 }) | 165 }) |
| 174 .then(function(r) { | 166 .then(function(r) { |
| 175 return wait_for_state(t, r.installing, 'installed'); | 167 return wait_for_state(t, r.installing, 'installed'); |
| 176 }) | 168 }) |
| 177 .then(function() { | 169 .then(function() { |
| 178 var results = []; | 170 var results = []; |
| 179 var saw_message = new Promise(function(resolve) { | 171 var saw_message = new Promise(function(resolve) { |
| 180 navigator.serviceWorker.onmessage = function(event) { | 172 navigator.serviceWorker.onmessage = function(event) { |
| 181 switch (event.data.type) { | 173 switch (event.data.type) { |
| 182 case 'record': | 174 case 'record': |
| 183 Array.prototype.push.apply(results, event.data.results); | 175 results.push(event.data.results); |
| 184 break; | 176 break; |
| 185 case 'finish': | 177 case 'finish': |
| 186 resolve(results); | 178 resolve(results); |
| 187 break; | 179 break; |
| 188 } | 180 } |
| 189 }; | 181 }; |
| 190 }); | 182 }); |
| 191 registration.active.postMessage({type: 'start'}); | 183 registration.active.postMessage({type: 'start'}); |
| 192 return saw_message; | 184 return saw_message; |
| 193 }) | 185 }) |
| 194 .then(function(results) { | 186 .then(function(results) { |
| 195 var expected_results = [ | 187 assert_equals(results.length, 2); |
| 196 'Ping message: [object ExtendableMessageEvent]', | 188 |
| 197 ' event.origin: ' + location.origin, | 189 var expected_ping = { |
| 198 ' event.lastEventId: ', | 190 constructor: { name: 'ExtendableMessageEvent' }, |
| 199 ' event.source: [object ServiceWorker]', | 191 origin: location.origin, |
| 200 ' event.source.scriptURL: ' + normalizeURL(script1), | 192 lastEventId: '', |
| 201 ' event.source.state: activated', | 193 source: { |
| 202 ' event.ports: ', | 194 constructor: { name: 'ServiceWorker' }, |
| 203 'Pong message: [object ExtendableMessageEvent]', | 195 scriptURL: normalizeURL(script1), |
| 204 ' event.origin: ' + location.origin, | 196 state: 'activated' |
| 205 ' event.lastEventId: ', | 197 }, |
| 206 ' event.source: [object ServiceWorker]', | 198 ports: [] |
| 207 ' event.source.scriptURL: ' + normalizeURL(script2), | 199 }; |
| 208 ' event.source.state: installed', | 200 assert_equals(results[0].pingOrPong, 'ping'); |
| 209 ' event.ports: ', | 201 wptEME.assert_equals(results[0].event, expected_ping); |
| 210 ]; | 202 |
| 211 assert_array_equals(results, expected_results); | 203 var expected_pong = { |
| 204 constructor: { name: 'ExtendableMessageEvent' }, |
| 205 origin: location.origin, |
| 206 lastEventId: '', |
| 207 source: { |
| 208 constructor: { name: 'ServiceWorker' }, |
| 209 scriptURL: normalizeURL(script2), |
| 210 state: 'installed' |
| 211 }, |
| 212 ports: [] |
| 213 }; |
| 214 assert_equals(results[1].pingOrPong, 'pong'); |
| 215 wptEME.assert_equals(results[1].event, expected_pong); |
| 212 }); | 216 }); |
| 213 }, 'Post extendable messages among service workers'); | 217 }, 'Post extendable messages among service workers'); |
| 214 | |
| 215 </script> | 218 </script> |
| OLD | NEW |