diff options
Diffstat (limited to 'dom/tests/mochitest/general/test_paste_selection.html')
-rw-r--r-- | dom/tests/mochitest/general/test_paste_selection.html | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/dom/tests/mochitest/general/test_paste_selection.html b/dom/tests/mochitest/general/test_paste_selection.html new file mode 100644 index 0000000000..b39915d165 --- /dev/null +++ b/dom/tests/mochitest/general/test_paste_selection.html @@ -0,0 +1,122 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for middle-click to paste selection with paste events</title> + <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script src="/tests/SimpleTest/EventUtils.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<p id="display"></p> +<input id="copy-area" value="CLIPBOARD"> +<input id="paste-selection-area" value="" onpaste="pastedSelection(event)"> +<input id="paste-global-area" value="" onpaste="pastedGlobal(event)"> + +<script> + +var supportsSelectionClipboard = SpecialPowers.supportsSelectionClipboard(); + +function checkSelectionClipboardText(count) +{ + if ((!supportsSelectionClipboard || + SpecialPowers.getClipboardData("text/plain", SpecialPowers.Ci.nsIClipboard.kSelectionClipboard) == "COPY TEXT") && + SpecialPowers.getClipboardData("text/plain", SpecialPowers.Ci.nsIClipboard.kGlobalClipboard) == "CLIPBOARD") { + pasteArea(); + return; + } + + if (count > 10) { + ok(false, "could not set clipboards"); + pasteArea(); + SimpleTest.finish(); + return; + } + + setTimeout(checkSelectionClipboardText, 5, count + 1); +} + +function selectArea() +{ + var copyArea = document.getElementById("copy-area"); + copyArea.focus(); + copyArea.select(); + synthesizeKey("x", { accelKey: true }); + + if (supportsSelectionClipboard) { + var clipboardHelper = SpecialPowers.Cc["@mozilla.org/widget/clipboardhelper;1"] + .getService(SpecialPowers.Ci.nsIClipboardHelper); + clipboardHelper.copyStringToClipboard("COPY TEXT", + SpecialPowers.Ci.nsIClipboard.kSelectionClipboard); + } + + setTimeout(checkSelectionClipboardText, 50, 0); +} + +var selectionPasted = false; +var globalPasted = false; + +function pasteArea() +{ + var pasteArea = document.getElementById("paste-selection-area"); + var pasteAreaRect = pasteArea.getBoundingClientRect(); + var pasteAreaCenterX = pasteAreaRect.left + pasteAreaRect.width/2; + var pasteAreaCenterY = pasteAreaRect.top + pasteAreaRect.height/2; + var util = SpecialPowers.getDOMWindowUtils(window); + + pasteArea.focus(); + util.sendMouseEventToWindow("mousedown", pasteAreaCenterX, pasteAreaCenterY, 1, 1, 0, true); + util.sendMouseEventToWindow("mouseup", pasteAreaCenterX, pasteAreaCenterY, 1, 1, 0, true); + + var usesMouseButtonPaste = SpecialPowers.getBoolPref("middlemouse.paste"); + if (usesMouseButtonPaste) { + // The data transfer should contain the selection data when the selection clipboard is supported, + // not the global clipboard data. + var expectedText = supportsSelectionClipboard ? "COPY TEXT" : "CLIPBOARD"; + is(document.getElementById("paste-selection-area").value, expectedText, "In pasteArea(): data pasted properly from selection"); + ok(selectionPasted, "selection event fired"); + } + else { + is(pasteArea.value, "", "data not pasted when middle click not supported"); + } + + var pasteArea = document.getElementById("paste-global-area"); + pasteArea.focus(); + synthesizeKey("v", { accelKey: true }); + + ok(globalPasted, "global event fired"); + is(document.getElementById("paste-global-area").value, "CLIPBOARD", "data pasted properly from global clipboard"); + SimpleTest.finish(); +} + +function pastedSelection(event) +{ + ok(SpecialPowers.getBoolPref("middlemouse.paste"), "paste on middle click is valid"); + + // Mac and Windows shouldn't get here as the middle mouse preference is false by default + ok(!navigator.platform.includes("Mac") && !navigator.platform.includes("Win"), "middle click enabled on right platforms"); + + var expectedText = supportsSelectionClipboard ? "COPY TEXT" : "CLIPBOARD"; + is(event.clipboardData.getData("text/plain"), expectedText, "In pastedSelection(): data pasted properly from selection"); + + selectionPasted = true; +} + +function pastedGlobal(event) +{ + // The data transfer should contain the global data. + is(event.clipboardData.getData("text/plain"), "CLIPBOARD", "data correct in global clipboard data transfer"); + globalPasted = true; +} + +SimpleTest.waitForExplicitFinish(); +SimpleTest.requestFlakyTimeout("untriaged"); +SimpleTest.waitForFocus(function() { + SpecialPowers.pushPrefEnv({"set": [["general.autoScroll", false]]}, selectArea); +}); +</script> + +</pre> +</body> +</html> + |