OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <title>Document#exitFullscreen() vs. Element#requestFullscreen()</title> | 2 <title>Document#exitFullscreen() vs. Element#requestFullscreen()</title> |
3 <script src="../../resources/testharness.js"></script> | 3 <script src="../../resources/testharness.js"></script> |
4 <script src="../../resources/testharnessreport.js"></script> | 4 <script src="../../resources/testharnessreport.js"></script> |
5 <script src="../trusted-click.js"></script> | 5 <script src="../trusted-click.js"></script> |
6 <div id="log"></div> | 6 <div id="log"></div> |
7 <div id="parent"><div></div></div> | 7 <div id="parent"><div><div></div></div></div> |
8 <script> | 8 <script> |
9 // Adapted from https://github.com/w3c/web-platform-tests/pull/4250 | 9 // Adapted from https://github.com/w3c/web-platform-tests/pull/4250 |
10 // TODO(foolip): Remove this test when the above is imported and passing. | 10 // TODO(foolip): Remove this test when the above is imported and passing. |
11 async_test(t => { | 11 async_test(t => { |
12 const parent = document.getElementById("parent"); | 12 const parent = document.getElementById("parent"); |
| 13 const child = parent.firstChild; |
| 14 const grandChild = child.firstChild; |
13 | 15 |
14 document.onfullscreenchange = t.step_func(() => { | 16 document.onfullscreenchange = t.step_func(() => { |
15 // We are now in fullscreen, so exiting requires a resize but requesting | 17 // We are now in fullscreen, so exiting requires a resize but requesting |
16 // does not. | 18 // does not. |
17 assert_equals(document.fullscreenElement, parent, "fullscreenElement after f
ullscreenchange event"); | 19 assert_equals(document.fullscreenElement, parent, "fullscreenElement after f
ullscreenchange event"); |
18 | 20 |
19 trusted_click(t.step_func(() => { | 21 trusted_click(t.step_func(() => { |
20 // Request fullscreen on another element, to avoid any synchronous | 22 // Request fullscreen on another element, to avoid any synchronous |
21 // short-circuiting on document.fullscreenElement.requestFullscreen(), | 23 // short-circuiting on document.fullscreenElement.requestFullscreen(), |
22 // which used to be in the spec. Also request both before and after the | 24 // which used to be in the spec. Also request both before and after the |
23 // exit. Both requests should be silently ignored due to the exit. | 25 // exit. Both requests synchronously enqueue animation frame tasks. They |
| 26 // may run after exiting, but still before the animation frame task for |
| 27 // the exit, and so both will succeed, and there will be 3 |
| 28 // fullscreenchange events, but not matching the order of the calls. |
24 | 29 |
25 let fullscreenchanges = 0; | 30 let i = 0; |
26 document.onfullscreenchange = t.step_func((event) => { | 31 const expected = [child, grandChild, null]; |
27 assert_equals(document.fullscreenElement, child); | 32 document.onfullscreenchange = t.step_func(() => { |
28 fullscreenchanges++; | 33 assert_equals(document.fullscreenElement, expected[i], "fullscreenElemen
t when i=" + i); |
29 if (fullscreenchanges == 3) | 34 i++; |
| 35 if (i == 3) |
30 t.done(); | 36 t.done(); |
31 }); | 37 }); |
32 | 38 |
33 const child = parent.firstChild; | |
34 child.requestFullscreen(); | 39 child.requestFullscreen(); |
35 assert_equals(document.fullscreenElement, child, "fullscreenElement after
first requestFullscreen()"); | 40 assert_equals(document.fullscreenElement, parent, "fullscreenElement after
first requestFullscreen()"); |
36 document.exitFullscreen(); | 41 document.exitFullscreen(); |
37 assert_equals(document.fullscreenElement, parent, "fullscreenElement after
exitFullscreen()"); | 42 assert_equals(document.fullscreenElement, parent, "fullscreenElement after
exitFullscreen()"); |
38 child.requestFullscreen(); | 43 grandChild.requestFullscreen(); |
39 assert_equals(document.fullscreenElement, child, "fullscreenElement after
second requestFullscreen()"); | 44 assert_equals(document.fullscreenElement, parent, "fullscreenElement after
second requestFullscreen()"); |
40 }), parent); | 45 }), parent); |
41 }); | 46 }); |
42 document.onfullscreenerror = t.unreached_func("fullscreenerror event"); | 47 document.onfullscreenerror = t.unreached_func("fullscreenerror event"); |
43 | 48 |
44 trusted_request(parent); | 49 trusted_request(parent); |
45 }); | 50 }); |
46 </script> | 51 </script> |
OLD | NEW |