<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true AsyncClipboardAPIEnabled=true DOMPasteAllowed=false JavaScriptCanAccessClipboard=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>
        <script src="./resources/async-clipboard-helpers.js"></script>
        <style>
            button, iframe {
                width: 100%;
                height: 150px;
                display: block;
            }
        </style>
    </head>
    <script>
        jsTestIsAsync = true;
        shouldCheckString = true;

        async function runTest() {
            description("This test verifies that navigator.clipboard.readText causes DOM paste UI to appear, if the text was written using platform API. To run the test manually, copy text from elsewhere on the system, and then click 'Paste'; DOM paste UI should appear when clicking 'Paste', and pasting should allow the page to read the text that was copied.");

            paste = document.getElementById("paste");
            paste.addEventListener("click", async () => {
                try {
                    clipboardText = await navigator.clipboard.readText();
                    testPassed("Read text from clipboard using navigator.clipboard.readText.");
                    if (shouldCheckString)
                        shouldBeEqualToString("clipboardText", "This text was written by the platform.");
                } catch (exception) {
                    testFailed(`Failed to read with exception: ${exception.name}`);
                } finally {
                    paste.remove();
                    finishJSTest();
                }
            });

            if (!window.testRunner) {
                shouldCheckString = false;
                return;
            }

            await UIHelper.copyText("This text was written by the platform.");
            await triggerProgrammaticPaste(paste);
        }

        addEventListener("load", runTest);
    </script>
    <body>
        <button id="paste">Paste</button>
        <p id="description"></p>
        <p id="console"></p>
    </body>
</html>
