| <!DOCTYPE html> | |
| <title> | |
| Element#requestFullscreen() when the document is not the active document | |
| </title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <div id="log"></div> | |
| <iframe allowfullscreen></iframe> | |
| <script> | |
| promise_test(async (t) => { | |
| const iframe = document.querySelector("iframe"); | |
| const typeErrorConstructor = iframe.contentWindow.TypeError; | |
| const documentBeforeNav = iframe.contentDocument; | |
| documentBeforeNav.onfullscreenchange = t.unreached_func( | |
| "fullscreenchange event" | |
| ); | |
| documentBeforeNav.onfullscreenerror = t.unreached_func( | |
| "fullscreenerror event" | |
| ); | |
| await new Promise((r) => { | |
| iframe.src = "/common/blank.html"; | |
| iframe.onload = r; | |
| }); | |
| await promise_rejects_js( | |
| t, | |
| typeErrorConstructor, | |
| documentBeforeNav.documentElement.requestFullscreen() | |
| ); | |
| // Per spec the fullscreenerror event should be fired at the next animation | |
| // frame, but at least Gecko and WebKit will instead effectively do "queue a | |
| // task to fire ...". Use both rAF and setTimeout to fail even if the timing | |
| // of the (unexpected) event isn't as expected. | |
| await new Promise((resolve) => { | |
| requestAnimationFrame(() => { | |
| t.step_timeout(resolve); | |
| }); | |
| }); | |
| }); | |
| </script> |