no-leak-on-detached-use.https.html (1275B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 </head> 7 <body> 8 <script> 9 function waitForMessage(data) { 10 return new Promise( 11 resolve => { 12 window.addEventListener('message', e => { 13 if (e.data == data) { 14 resolve(); 15 } 16 }, {once: true}); 17 }); 18 } 19 20 promise_test(async t => { 21 const w = window.open('resources/window-postmessage-open-close.html'); 22 await waitForMessage('opened'); 23 24 const nav = w.navigator; 25 let result = nav.getBattery(); 26 assert_equals(typeof result, 'object'); 27 assert_equals(result.constructor, w.Promise); 28 29 w.close(); 30 await waitForMessage('closed'); 31 result = nav.getBattery(); 32 assert_equals(result, undefined); 33 }, 'navigator.getBattery() does not operate on a closed window'); 34 35 promise_test(async t => { 36 const iframe = document.createElement('iframe'); 37 iframe.srcdoc = '<html></html>'; 38 document.body.appendChild(iframe); 39 40 const frameNav = iframe.contentWindow.navigator; 41 document.body.removeChild(iframe); 42 43 const battery = await frameNav.getBattery(); 44 assert_equals(battery, undefined); 45 }, 'navigator.getBattery() on a detached frame does not leak or crash'); 46 </script> 47 </body> 48 </html>