OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <title>Service Worker: postMessage</title> | 2 <title>Service Worker: postMessage</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.js"></script> |
6 <script> | 6 <script> |
7 | 7 |
8 promise_test(t => { | 8 promise_test(t => { |
9 var script = 'resources/postmessage-worker.js'; | 9 var script = 'resources/postmessage-worker.js'; |
10 var scope = 'resources/blank.html'; | 10 var scope = 'resources/blank.html'; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 .then(() => { | 45 .then(() => { |
46 assert_equals(worker.state, 'redundant'); | 46 assert_equals(worker.state, 'redundant'); |
47 assert_throws( | 47 assert_throws( |
48 {name:'InvalidStateError'}, | 48 {name:'InvalidStateError'}, |
49 function() { worker.postMessage(''); }, | 49 function() { worker.postMessage(''); }, |
50 'Calling postMessage on a redundant ServiceWorker should ' + | 50 'Calling postMessage on a redundant ServiceWorker should ' + |
51 'throw InvalidStateError.'); | 51 'throw InvalidStateError.'); |
52 }); | 52 }); |
53 }, 'postMessage to a ServiceWorker (and back via MessagePort)'); | 53 }, 'postMessage to a ServiceWorker (and back via MessagePort)'); |
54 | 54 |
| 55 promise_test(t => { |
| 56 var script = 'resources/postmessage-transferables-worker.js'; |
| 57 var scope = 'resources/blank.html'; |
| 58 var sw = navigator.serviceWorker; |
| 59 |
| 60 var message = 'Hello, world!'; |
| 61 var text_encoder = new TextEncoder; |
| 62 var text_decoder = new TextDecoder; |
| 63 |
| 64 return service_worker_unregister_and_register(t, script, scope) |
| 65 .then(r => { |
| 66 add_completion_callback(() => r.unregister()); |
| 67 |
| 68 var ab = text_encoder.encode(message); |
| 69 assert_equals(ab.byteLength, message.length); |
| 70 r.installing.postMessage(ab, [ab.buffer]); |
| 71 assert_equals(text_decoder.decode(ab), ''); |
| 72 assert_equals(ab.byteLength, 0); |
| 73 |
| 74 return new Promise(resolve => { sw.onmessage = resolve; }); |
| 75 }) |
| 76 .then(e => { |
| 77 // Verify the integrity of the transferred array buffer. |
| 78 assert_equals(e.data.content, message); |
| 79 assert_equals(e.data.byteLength, message.length); |
| 80 return new Promise(resolve => { sw.onmessage = resolve; }); |
| 81 }) |
| 82 .then(e => { |
| 83 // Verify the integrity of the array buffer sent back from |
| 84 // ServiceWorker via Client.postMessage. |
| 85 assert_equals(text_decoder.decode(e.data), message); |
| 86 assert_equals(e.data.byteLength, message.length); |
| 87 return new Promise(resolve => { sw.onmessage = resolve; }); |
| 88 }) |
| 89 .then(e => { |
| 90 // Verify that the array buffer on ServiceWorker is neutered. |
| 91 assert_equals(e.data.content, ''); |
| 92 assert_equals(e.data.byteLength, 0); |
| 93 }); |
| 94 }, 'postMessage a transferable ArrayBuffer between ServiceWorker and Client'); |
| 95 |
| 96 promise_test(t => { |
| 97 var script = 'resources/postmessage-transferables-worker.js'; |
| 98 var scope = 'resources/blank.html'; |
| 99 var message = 'Hello, world!'; |
| 100 var text_encoder = new TextEncoder; |
| 101 var text_decoder = new TextDecoder; |
| 102 var port; |
| 103 |
| 104 return service_worker_unregister_and_register(t, script, scope) |
| 105 .then(r => { |
| 106 add_completion_callback(() => r.unregister()); |
| 107 |
| 108 var channel = new MessageChannel; |
| 109 port = channel.port1; |
| 110 r.installing.postMessage(undefined, [channel.port2]); |
| 111 |
| 112 var ab = text_encoder.encode(message); |
| 113 assert_equals(ab.byteLength, message.length); |
| 114 port.postMessage(ab, [ab.buffer]); |
| 115 assert_equals(text_decoder.decode(ab), ''); |
| 116 assert_equals(ab.byteLength, 0); |
| 117 |
| 118 return new Promise(resolve => { port.onmessage = resolve; }); |
| 119 }) |
| 120 .then(e => { |
| 121 // Verify the integrity of the transferred array buffer. |
| 122 assert_equals(e.data.content, message); |
| 123 assert_equals(e.data.byteLength, message.length); |
| 124 return new Promise(resolve => { port.onmessage = resolve; }); |
| 125 }) |
| 126 .then(e => { |
| 127 // Verify the integrity of the array buffer sent back from |
| 128 // ServiceWorker via Client.postMessage. |
| 129 assert_equals(text_decoder.decode(e.data), message); |
| 130 assert_equals(e.data.byteLength, message.length); |
| 131 return new Promise(resolve => { port.onmessage = resolve; }); |
| 132 }) |
| 133 .then(e => { |
| 134 // Verify that the array buffer on ServiceWorker is neutered. |
| 135 assert_equals(e.data.content, ''); |
| 136 assert_equals(e.data.byteLength, 0); |
| 137 }); |
| 138 }, 'postMessage a transferable ArrayBuffer between ServiceWorker and Client' + |
| 139 ' over MessagePort'); |
| 140 |
55 </script> | 141 </script> |
OLD | NEW |