chromium/third_party/blink/web_tests/media/remoteplayback/prompt-twice-throws.html

<!DOCTYPE html>
<html>
    <head>
        <title>Test that calling prompt() before the promise returned by the previous call is resolved throws an exception</title>
        <script src="../../resources/testharness.js"></script>
        <script src="../../resources/testharnessreport.js"></script>
        <script src="util.js"></script>
    </head>
    <body>
        <button id="button">Click me</button>
        <script>
            // WPT: this test can't be moved to WPT because of its usage of:
            // - user gesture;
            // - internals.mediaPlayerRemoteRouteAvailabilityChanged
            // - internals.runtimeFlags

            function clickOnElem(e) {
                eventSender.mouseMoveTo(
                    e.offsetLeft + e.offsetWidth / 2,
                    e.offsetTop + e.offsetHeight / 2);
                eventSender.mouseDown();
                eventSender.mouseUp();
            }

            async_test(function(test)
            {
                // So that prompt() doesn't throw NotSupportedError.
                enableRemotePlaybackBackendForTest(test);

                var v = document.createElement('video');
                v.src = '../content/test.ogv';
                document.body.appendChild(v);

                var btn = document.getElementById('button');
                btn.onclick = function() {
                    internals.mediaPlayerRemoteRouteAvailabilityChanged(v, true);

                    v.remote.prompt().then(
                        test.step_func(function() {}),
                        test.step_func(function() {}));

                    v.remote.prompt().then(
                        test.unreached_func(),
                        test.step_func_done(function(e) {
                            assert_equals(e.name, 'OperationError');
                            assert_equals(e.message, 'Failed to execute \'prompt\' on \'RemotePlayback\': A prompt is already being shown for this media element.');
                        }));
                    btn.onclick = null;
                }

                clickOnElem(btn);
            }, 'Test that calling prompt() before the promise returned by the previous call is resolved throws an exception.');
        </script>
    </body>
</html>