| <!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> |