Bug 681229 - Sanitize the platform linebreaks to DOM linebreaks when pasting or drag-dropping text into text controls; r=roc

This commit is contained in:
Ehsan Akhgari 2011-09-15 15:32:42 -04:00
Родитель fe0d0ce6ff
Коммит f97bdf3822
4 изменённых файлов: 63 добавлений и 0 удалений

Просмотреть файл

@ -68,6 +68,7 @@
#include "nsISelectionPrivate.h"
#include "nsFrameSelection.h"
#include "nsEventDispatcher.h"
#include "nsContentUtils.h"
NS_IMETHODIMP nsPlaintextEditor::PrepareTransferable(nsITransferable **transferable)
{
@ -136,6 +137,10 @@ NS_IMETHODIMP nsPlaintextEditor::InsertTextFromTransferable(nsITransferable *aTr
nsAutoString stuffToPaste;
textDataObj->GetData(stuffToPaste);
NS_ASSERTION(stuffToPaste.Length() <= (len/2), "Invalid length!");
// Sanitize possible carriage returns in the string to be inserted
nsContentUtils::PlatformToDOMLineBreaks(stuffToPaste);
nsAutoEditBatch beginBatching(this);
rv = InsertTextAt(stuffToPaste, aDestinationNode, aDestOffset, aDoDeleteSelection);
}

Просмотреть файл

@ -63,6 +63,7 @@ _TEST_FILES = \
test_bug638596.html \
test_bug641466.html \
test_bug645914.html \
test_bug681229.html \
$(NULL)
# disables the key handling test on gtk2 because gtk2 overrides some key events

Просмотреть файл

@ -0,0 +1,51 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=681229
-->
<head>
<title>Test for Bug 681229</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=681229">Mozilla Bug 681229</a>
<p id="display"></p>
<div id="content">
<textarea spellcheck="false"></textarea>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 681229 **/
SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(function() {
var t = document.querySelector("textarea");
t.focus();
const kValue = "a\r\nb";
const kExpectedValue = (navigator.platform.indexOf("Win") == 0) ?
"a\nb" : kValue;
SimpleTest.waitForClipboard(kExpectedValue,
function() {
SpecialPowers.copyString(kValue);
},
function() {
synthesizeKey("V", {accelKey: true});
is(t.value, "a\nb", "The carriage return has been correctly sanitized");
SimpleTest.finish();
},
function() {
SimpleTest.finish();
}
);
});
</script>
</pre>
</body>
</html>

Просмотреть файл

@ -418,6 +418,12 @@ SpecialPowers.prototype = {
getDocumentURIObject: function(aDocument) {
return aDocument.documentURIObject;
},
copyString: function(str) {
Cc["@mozilla.org/widget/clipboardhelper;1"].
getService(Ci.nsIClipboardHelper).
copyString(str);
},
};
// Expose everything but internal APIs (starting with underscores) to