controlled-iframe-postMessage.https.html (2622B)
1 <html> 2 <head> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="resources/test-helpers.sub.js"></script> 7 </head> 8 <body> 9 <script> 10 promise_test(async (test) => { 11 const registration = await navigator.serviceWorker.register("postMessage-client-worker.js", { scope : 'resources' }); 12 activeWorker = registration.active; 13 if (activeWorker) 14 return; 15 16 activeWorker = registration.installing; 17 await new Promise(resolve => { 18 activeWorker.addEventListener('statechange', () => { 19 if (activeWorker.state === "activated") 20 resolve(); 21 }); 22 }); 23 }, "Register service worker"); 24 25 function with_iframe(test, url) { 26 return new Promise(function(resolve, reject) { 27 test.step_timeout(() => reject("with_iframe timed out"), 2000); 28 var frame = document.createElement('iframe'); 29 frame.className = 'test-iframe'; 30 frame.src = url; 31 frame.onload = function() { resolve(frame); }; 32 document.body.appendChild(frame); 33 }); 34 } 35 36 promise_test(async (test) => { 37 const frame = await with_iframe(test, 'resources/controlled-frame-postMessage.html'); 38 let counter = 0; 39 while (counter++ < 100 && frame.contentWindow.messageData == undefined) 40 await new Promise(resolve => test.step_timeout(resolve, 50)); 41 assert_equals(frame.contentWindow.messageData, 0); 42 frame.remove(); 43 }, "Verify frame gets early messages if setting synchronously message event listener"); 44 45 promise_test(async (test) => { 46 const frame = await with_iframe(test, 'resources/controlled-frame-postMessage.html?repeatMessages'); 47 let counter = 0; 48 while (counter++ < 100 && frame.contentWindow.messageData == undefined) 49 await new Promise(resolve => test.step_timeout(resolve, 50)); 50 assert_not_equals(frame.contentWindow.messageData, 0); 51 frame.remove(); 52 }, "Verify frame does not get all messages if not setting event listener early"); 53 54 promise_test(async (test) => { 55 const frame = await with_iframe(test, 'resources/controlled-frame-postMessage.html?repeatMessages&listener'); 56 let counter = 0; 57 while (counter++ < 100 && frame.contentWindow.messageData.length < 5) 58 await new Promise(resolve => test.step_timeout(resolve, 50)); 59 60 assert_less_than(counter, 100); 61 data = frame.contentWindow.messageData; 62 for (let cptr = 1; cptr < data.length; cptr++) 63 assert_true(data[cptr - 1] < data[cptr]); 64 frame.remove(); 65 }, "Verify frame does get messages in order"); 66 </script> 67 </body> 68 </html>