<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true experimental:AsyncClipboardAPIEnabled=true domPasteAllowed=false ] -->
<html>
    <meta charset="utf8">
    <head>
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
        <script src="../../resources/js-test.js"></script>
        <script src="../../resources/ui-helper.js"></script>
        <style>
            button {
                width: 300px;
                padding: 1em;
            }

            input {
                display: block;
                font-size: 40px;
                width: 300px;
            }
        </style>
    </head>
    <script>
        jsTestIsAsync = true;
        doneWritingText = false;
        doneReadingText = false;

        description("This test verifies that the clipboard is accessible while performing a paste from native UI. To manually run the test, click the 'Copy' button above, and then paste in the text field below using native UI (e.g. menu item or cmd+V on macOS, and the callout menu on iOS). The text 'The quick brown fox jumped over the lazy dog.' should be read via the clipboard API, without triggering an additional DOM paste menu.");

        async function runTest() {
            const copyButton = document.querySelector("button");
            const field = document.querySelector("input")

            copyButton.addEventListener("click", async () => {
                await navigator.clipboard.writeText("The quick brown fox jumped over the lazy dog.");
                doneWritingText = true;
            });

            field.addEventListener("paste", async event => {
                event.preventDefault();
                testPassed(`Read text: '${await navigator.clipboard.readText()}'`);
                doneReadingText = true;
            });

            if (!window.testRunner)
                return;

            await UIHelper.activateElement(copyButton);
            await new Promise(resolve => shouldBecomeEqual("doneWritingText", "true", resolve));
            await UIHelper.activateElementAndWaitForInputSession(field);
            await UIHelper.paste();
            await new Promise(resolve => shouldBecomeEqual("doneReadingText", "true", resolve));

            field.blur();
            await UIHelper.waitForKeyboardToHide();
            finishJSTest();
        }

        addEventListener("load", runTest);
    </script>
    <body>
        <button>Copy</button>
        <input>
    </body>
</html>
