<!DOCTYPE html><!-- webkit-test-runner [ ModernMediaControlsEnabled=false ] -->
<html>
    <head>
        <script src="../media-file.js"></script>
        <script src="controls-test-helpers.js"></script>
        <script>
            var maxAttemptsToTestPlaceholderVisibility = 10;
            var attemptsToTestPlaceholderVisibility = 0;

            if (window.internals)
                window.internals.settings.setAllowsPictureInPictureMediaPlayback(true);

            const tester = new ControlsTest("../content/test", "canplaythrough")
                .whenReady(runTestsWithVideo)
                .start();

            function runTestsWithVideo()
            {
                tester.startNewSection("Test the picture-in-picture button with valid video");

                internals.setMediaElementRestrictions(tester.media, "NoRestrictions");
                tester.resetEventTrigger("webkitpresentationmodechanged")
                    .whenReady(presentationModeDidChange)
                    .media.webkitSetPresentationMode("picture-in-picture");
            }

            function presentationModeDidChange()
            {
                tester.test("Should be in pip mode")
                    .value(tester.media.webkitPresentationMode)
                    .isEqualTo("picture-in-picture");

                tester.media.removeEventListener("webkitpresentationmodechanged", tester, false);

                pollPIPPlaceholderVisibilityChange();
            }

            function pollPIPPlaceholderVisibilityChange()
            {
                // Intentionally using internals.shadowRoot instead of tester.stateForControlsElement()
                // since the latter has the side effect of ensuring the shadow root and hence injecting
                // the media controls script. The bug we are testing here is caused by the media controls
                // script not being injected early enough.
                var shadowRoot = internals.shadowRoot(tester.media);
                var placeholder = shadowRoot ? shadowRoot.querySelector("div[pseudo='-webkit-media-controls-wireless-playback-status']") : null;
                if (!placeholder || placeholder.className.indexOf("hidden") >= 0) {
                    if (attemptsToTestPlaceholderVisibility > maxAttemptsToTestPlaceholderVisibility) {
                        tester.logFailure("Inline placeholder did not become visible after video enters picture-in-picture.");
                        tester.end();
                        return;
                    }

                    // Use 33 to match PlaceholderPollingDelay in mediaControlsApple.js.
                    setTimeout(pollPIPPlaceholderVisibilityChange, 33);
                    attemptsToTestPlaceholderVisibility++;
                    return;
                }

                tester.test("Inline placeholder should be visible at this point")
                    .value(placeholder.className)
                    .doesNotContain("hidden");

                tester.test("Inline placeholder should have the 'picture-in-picture' class")
                    .value(placeholder.className)
                    .contains("picture-in-picture");

                tester.media.webkitSetPresentationMode("inline");

                tester.end();
            }
        </script>
    </head>
    <body>
        <p>This tests the picture-in-picture placeholder when the video has no controls.</p>
        <p>This test only runs in DRT!</p>
        <video></video>
    </body>
</html>
