| <!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> | |
| var t = async_test(); | |
| onload = t.step_func(() => { | |
| var iframe = document.querySelector("iframe"); | |
| var documentBeforeNav = iframe.contentDocument; | |
| documentBeforeNav.onfullscreenchange = t.unreached_func('fullscreenchange event'); | |
| documentBeforeNav.onfullscreenerror = t.unreached_func('fullscreenerror event'); | |
| iframe.onload = t.step_func(() => { | |
| var p = documentBeforeNav.documentElement.requestFullscreen(); | |
| // If a promise was returned, it should already be rejected, so its reject | |
| // callback should be invoked before a second promise's callback. | |
| // This test does not fail if promises aren't implemented. | |
| if (p) { | |
| var rejected = false; | |
| p.catch(t.step_func(() => rejected = true)); | |
| Promise.resolve().then(t.step_func(() => assert_true(rejected))); | |
| } | |
| // Per spec the fullscreenerror event should be fired at the next animtion | |
| // 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. | |
| requestAnimationFrame(t.step_func(() => { | |
| step_timeout(t.step_func_done()); | |
| })); | |
| }); | |
| // Navigate the iframe | |
| window[0].location.href = '/common/blank.html'; | |
| }); | |
| </script> |