<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>

description("This test checks that JavaScript programs can execute copy and paste commands, but only during a user gesture.");

// Override the test runner default befavior of allowing all keyboard access, and act more like
// a browser.
if (window.testRunner)
    window.testRunner.setJavaScriptCanAccessClipboard(false);

function clearSelectionContainer()
{
    var container = document.getElementById('container');
    if (container)
        container.remove();
}

function resetSelectionContainer()
{
    clearSelectionContainer();

    var container = document.createElement("div");
    container.id = "container";

    var nonEditableParagraph = document.createElement("p");
    nonEditableParagraph.id = "nonEditableParagraph";
    nonEditableParagraph.appendChild(document.createTextNode("x"));
    container.appendChild(nonEditableParagraph);

    var editableParagraph = document.createElement("p");
    editableParagraph.id = "editableParagraph";
    editableParagraph.appendChild(document.createTextNode("x"));
    editableParagraph.setAttribute("contentEditable", "true");
    container.appendChild(editableParagraph);

    var editablePlainTextParagraph = document.createElement("p");
    editablePlainTextParagraph.id = "editablePlainTextParagraph";
    editablePlainTextParagraph.appendChild(document.createTextNode("x"));
    editablePlainTextParagraph.setAttribute("contentEditable", "plaintext-only");
    container.appendChild(editablePlainTextParagraph);

    document.body.appendChild(container);
}

function makeSelection(elementId, selectionStart, selectionEnd)
{
    resetSelectionContainer();

    var selection = window.getSelection();
    selection.removeAllRanges();

    var element = document.getElementById(elementId);

    var range = document.createRange();
    range.setStart(element.firstChild, selectionStart);
    range.setEnd(element.firstChild, selectionEnd);
    selection.addRange(range);
}

var eventSeen = {
    "copy": false,
    "cut": false,
    "beforecopy": false,
    "beforecut": false
}

function resetSeenFlags()
{
    eventSeen.copy = false;
    eventSeen.cut = false;
    eventSeen.beforecopy = false;
    eventSeen.beforecut = false;
}

document.body.oncopy = function(event)
{
    eventSeen["copy"] = true;
}

document.body.oncut = function()
{
    eventSeen["cut"] = true;
}

document.body.onbeforecopy = function()
{
    eventSeen["beforecopy"] = true;
}

document.body.onbeforecut = function()
{
    eventSeen["beforecut"] = true;
}

function test(command, enabledExpected, supportedExpected, executedExpected)
{
    resetSeenFlags();
    shouldBe("document.queryCommandEnabled('" + command +"')", "" + enabledExpected);
    shouldBeFalse("eventSeen['" + command +"']");

    resetSeenFlags();
    shouldBe("document.queryCommandSupported('" + command +"')", "" + supportedExpected);
    shouldBeFalse("eventSeen['" + command +"']");

    resetSeenFlags();
    shouldBe("document.execCommand('" + command +"')", "" + executedExpected);
    shouldBe("eventSeen['" + command +"']", "" + executedExpected);
}

function header(msg)
{
    debug("");
    debug(msg);
}

var buttonForCopy = document.createElement("button");
buttonForCopy.id = "copyButton";
buttonForCopy.textContent = "Copy";
buttonForCopy.onclick = function()
{
    header("Testing copying an editableParagraph range in a user gesture.")
    makeSelection("editableParagraph", 0, 1);
    test("copy", true, true, true);

    header("Testing copying an editableParagraph caret in a user gesture.")
    makeSelection("editableParagraph", 0, 0);
    test("copy", false, true, true);

    header("Testing copying an non-editable range in a user gesture.")
    makeSelection("nonEditableParagraph", 0, 1);
    test("copy", true, true, true);

    header("Testing copying an non-editable caret in a user gesture.")
    makeSelection("nonEditableParagraph", 0, 0);
    test("copy", false, true, true);

    header("Testing copying an editable plaint-text range in a user gesture.")
    makeSelection("editablePlainTextParagraph", 0, 1);
    test("copy", true, true, true);

    header("Testing copying an editable plaint-text caret in a user gesture.")
    makeSelection("editablePlainTextParagraph", 0, 0);
    test("copy", false, true, true);

    header("Testing copying when there is no selection in a user gesture.")
    window.getSelection().removeAllRanges();
    test("copy", false, true, true);

    clearSelectionContainer();
}
document.body.appendChild(buttonForCopy);

var buttonForCut = document.createElement("button");
buttonForCut.id = "cutButton";
buttonForCut.textContent = "Cut";
buttonForCut.onclick = function()
{
    header("Testing cutting an editableParagraph range in a user gesture.")
    makeSelection("editableParagraph", 0, 1);
    test("cut", true, true, true);

    header("Testing cutting an editableParagraph caret in a user gesture.")
    makeSelection("editableParagraph", 0, 0);
    test("cut", false, true, true);

    header("Testing cutting an non-editable range in a user gesture.")
    makeSelection("nonEditableParagraph", 0, 1);
    test("cut", false, true, true);

    header("Testing cutting an non-editable caret in a user gesture.")
    makeSelection("nonEditableParagraph", 0, 0);
    test("cut", false, true, true);

    header("Testing cutting an editable plaint-text range in a user gesture.")
    makeSelection("editablePlainTextParagraph", 0, 1);
    test("cut", true, true, true);

    header("Testing cutting an editable plaint-text caret in a user gesture.")
    makeSelection("editablePlainTextParagraph", 0, 0);
    test("cut", false, true, true);

    header("Testing cutting when there is no selection in a user gesture.")
    window.getSelection().removeAllRanges();
    test("cut", false, true, true);

    clearSelectionContainer();
}
document.body.appendChild(buttonForCut);

// First test copy/cut without user gestures.
header("Testing copying an editableParagraph range without a user gesture.")
makeSelection("editableParagraph", 0, 1);
test("copy", false, true, false);

header("Testing copying an editableParagraph caret without a user gesture.")
makeSelection("editableParagraph", 0, 0);
test("copy", false, true, false);

header("Testing copying an non-editable range without a user gesture.")
makeSelection("nonEditableParagraph", 0, 1);
test("copy", false, true, false);

header("Testing copying an non-editable caret without a user gesture.")
makeSelection("nonEditableParagraph", 0, 0);
test("copy", false, true, false);

header("Testing copying an editable plaint-text range without a user gesture.")
makeSelection("editablePlainTextParagraph", 0, 1);
test("copy", false, true, false);

header("Testing copying an editable plaint-text caret without a user gesture.")
makeSelection("editablePlainTextParagraph", 0, 0);
test("copy", false, true, false);

header("Testing copying when there is no selection without a user gesture.")
window.getSelection().removeAllRanges();
test("copy", false, true, false);

clearSelectionContainer();

header("Testing cutting an editableParagraph range without a user gesture.")
makeSelection("editableParagraph", 0, 1);
test("cut", false, true, false);

header("Testing cutting an editableParagraph caret without a user gesture.")
makeSelection("editableParagraph", 0, 0);
test("cut", false, true, false);

header("Testing cutting an non-editable range without a user gesture.")
makeSelection("nonEditableParagraph", 0, 1);
test("cut", false, true, false);

header("Testing cutting an non-editable caret without a user gesture.")
makeSelection("nonEditableParagraph", 0, 0);
test("cut", false, true, false);

header("Testing cutting an editable plaint-text range without a user gesture.")
makeSelection("editablePlainTextParagraph", 0, 1);
test("cut", false, true, false);

header("Testing cutting an editable plaint-text caret without a user gesture.")
makeSelection("editablePlainTextParagraph", 0, 0);
test("cut", false, true, false);

header("Testing cutting when there is no selection without a user gesture.")
window.getSelection().removeAllRanges();
test("cut", false, true, false);

clearSelectionContainer();

// Then test copy/cut with user gestures.
if (window.testRunner) {
    function clickButton(button)
    {
        eventSender.mouseMoveTo(button.offsetLeft + button.offsetWidth / 2, button.offsetTop + button.offsetHeight / 2);
        eventSender.mouseDown();
        eventSender.mouseUp();
    }

    clickButton(buttonForCopy);
    clickButton(buttonForCut);

    buttonForCopy.remove();
    buttonForCut.remove();
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
