зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
fe0d0ce6ff
Коммит
f97bdf3822
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче