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