Bug 561640 - <input> and <textarea> should not suffer from being too long if dirty value flag is true. r=smaug a2.0=blocking

This commit is contained in:
Mounir Lamouri 2010-08-18 20:29:20 +02:00
Родитель 15a6867bff
Коммит fa8b923883
4 изменённых файлов: 73 добавлений и 1 удалений

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

@ -2963,7 +2963,10 @@ nsHTMLInputElement::VisitGroup(nsIRadioVisitor* aVisitor, PRBool aFlushContent)
PRBool PRBool
nsHTMLInputElement::IsTooLong() nsHTMLInputElement::IsTooLong()
{ {
// TODO: return PR_FALSE if dirty value flag is TRUE, see bug 549475. if (!GET_BOOLBIT(mBitField, BF_VALUE_CHANGED)) {
return PR_FALSE;
}
PRInt32 maxLength = -1; PRInt32 maxLength = -1;
PRInt32 textLength = -1; PRInt32 textLength = -1;

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

@ -1049,6 +1049,10 @@ nsHTMLTextAreaElement::CopyInnerTo(nsGenericElement* aDest) const
PRBool PRBool
nsHTMLTextAreaElement::IsTooLong() nsHTMLTextAreaElement::IsTooLong()
{ {
if (!mValueChanged) {
return PR_FALSE;
}
PRInt32 maxLength = -1; PRInt32 maxLength = -1;
PRInt32 textLength = -1; PRInt32 textLength = -1;

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

@ -193,6 +193,7 @@ _TEST_FILES = \
test_bug585508.html \ test_bug585508.html \
test_bug345624-1.html \ test_bug345624-1.html \
test_bug345624-2.html \ test_bug345624-2.html \
test_bug561640.html \
$(NULL) $(NULL)
libs:: $(_TEST_FILES) libs:: $(_TEST_FILES)

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

@ -0,0 +1,64 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=561640
-->
<head>
<title>Test for Bug 561640</title>
<script type="application/javascript" src="/MochiKit/packed.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.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=561640">Mozilla Bug 561640</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 561640 **/
var elements = [ 'input', 'textarea' ];
var content = document.getElementById('content');
function checkValid(elmt)
{
ok(!elmt.validity.tooLong, "element should not be too long");
}
function checkInvalid(elmt)
{
ok(elmt.validity.tooLong, "element should be too long");
}
for each (var elmtName in elements) {
var elmt = document.createElement(elmtName);
content.appendChild(elmt);
if (elmtName == 'textarea') {
elmt.textContent = 'foo';
} else {
elmt.setAttribute('value', 'foo');
}
elmt.maxLength = 2;
checkValid(elmt);
elmt.value = 'a';
checkValid(elmt);
if (elmtName == 'textarea') {
elmt.textContent = 'f';
} else {
elmt.setAttribute('value', 'f');
}
elmt.value = 'bar';
checkInvalid(elmt);
content.removeChild(elmt);
}
</script>
</pre>
</body>
</html>