1<!DOCTYPE html>
2<title>Test Picture-in-Picture window</title>
3<script src="/resources/testharness.js"></script>
4<script src="/resources/testharnessreport.js"></script>
5<script src="/resources/testdriver.js"></script>
6<script src="/resources/testdriver-vendor.js"></script>
7<script src="resources/picture-in-picture-helpers.js"></script>
8<body></body>
9<script>
10promise_test(async t => {
11 const video = await loadVideo();
12 return requestPictureInPictureWithTrustedClick(video)
13 .then(pipWindow => {
14 assert_not_equals(pipWindow.width, 0);
15 assert_not_equals(pipWindow.height, 0);
16 });
17}, 'Picture-in-Picture window dimensions are set after entering Picture-in-Picture');
18
19promise_test(async t => {
20 const video1 = await loadVideo();
21 const video2 = await loadVideo();
22 return requestPictureInPictureWithTrustedClick(video1)
23 .then(pipWindow1 => {
24 return requestPictureInPictureWithTrustedClick(video2)
25 .then(pipWindow2 => {
26 assert_equals(pipWindow1.width, 0);
27 assert_equals(pipWindow1.height, 0);
28 assert_not_equals(pipWindow2.width, 0);
29 assert_not_equals(pipWindow2.height, 0);
30 });
31 });
32}, 'Picture-in-Picture window dimensions are set to 0 after entering ' +
33 'Picture-in-Picture for another video');
34
35promise_test(async t => {
36 const video = await loadVideo();
37
38 video.addEventListener('leavepictureinpicture', t.step_func_done(event => {
39 assert_unreached('leavepictureinpicture event should not fire.')
40 }));
41
42 let enterCounts = 0;
43 video.addEventListener('enterpictureinpicture', event => {
44 enterCounts++;
45 });
46
47 return requestPictureInPictureWithTrustedClick(video)
48 .then(pipWindow1 => {
49 pipWindow1.onresize = function foo() {};
50 return requestPictureInPictureWithTrustedClick(video)
51 .then(pipWindow2 => {
52 assert_equals(pipWindow1, pipWindow2);
53 assert_equals(pipWindow1.width, pipWindow2.width);
54 assert_equals(pipWindow1.height, pipWindow2.height);
55 assert_equals(pipWindow1.onresize, pipWindow2.onresize);
56 assert_equals(enterCounts, 1);
57 });
58 });
59}, 'Picture-in-Picture window is unchanged after entering ' +
60 'Picture-in-Picture for video already in Picture-in-Picture');
61
62promise_test(async t => {
63 const video = await loadVideo();
64
65 return requestPictureInPictureWithTrustedClick(video)
66 .then(pipWindow => {
67 return document.exitPictureInPicture()
68 .then(() => {
69 assert_equals(pipWindow.width, 0);
70 assert_equals(pipWindow.height, 0);
71 });
72 });
73}, 'Picture-in-Picture window dimensions are set to 0 after exiting Picture-in-Picture');
74
75promise_test(async t => {
76 const video = await loadVideo();
77 let thePipWindow;
78
79 video.addEventListener('leavepictureinpicture', t.step_func_done(event => {
80 assert_equals(thePipWindow.width, 0);
81 assert_equals(thePipWindow.height, 0);
82 }));
83
84 return requestPictureInPictureWithTrustedClick(video)
85 .then(pipWindow => {
86 thePipWindow = pipWindow;
87 video.disablePictureInPicture = true;
88 });
89}, 'Picture-in-Picture window dimensions are set to 0 if ' +
90 'disablePictureInPicture becomes true');
91</script>