<!DOCTYPE html>
<html>

<body>
    <input id="field" onfocus=handleFocus() value="helloworld" onbeforeinput=handleBeforeInput(event)></div>
    <script src="../../resources/dump-as-markup.js"></script>
    <script>
        Markup.description(`To manually test this, copy any text and try to paste into the input field. The value of the input should not change.`);

        var allowPaste = false;
        (function() {
            if (!window.internals || !window.eventSender || !window.testRunner)
                return;

            internals.settings.setInputEventsEnabled(true);
            document.querySelector("input").focus();
        })();

        function handleBeforeInput(event)
        {
            if (allowPaste)
                return;

            if (event.inputType == "insertFromPaste")
                event.preventDefault();
        }

        function handleFocus()
        {
            document.querySelector("input").select();

            Markup.dump("field", "initial value");

            testRunner.execCommand("Cut");
            Markup.dump("field", "after the cut");

            testRunner.execCommand("Paste");
            Markup.dump("field", "after prevented paste");

            allowPaste = true;
            testRunner.execCommand("Paste");
            Markup.dump("field", "after allowed paste");
        }
    </script>
</body>

</html>
