mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 801486 - Skip script elements in HTMLOptionElement.prototype.text; r=bz
This commit is contained in:
parent
8cf6014b49
commit
38df9b3843
@ -260,7 +260,19 @@ NS_IMETHODIMP
|
||||
nsHTMLOptionElement::GetText(nsAString& aText)
|
||||
{
|
||||
nsAutoString text;
|
||||
nsContentUtils::GetNodeTextContent(this, true, text);
|
||||
|
||||
nsIContent* child = nsINode::GetFirstChild();
|
||||
while (child) {
|
||||
if (child->NodeType() == nsIDOMNode::TEXT_NODE ||
|
||||
child->NodeType() == nsIDOMNode::CDATA_SECTION_NODE) {
|
||||
child->AppendTextTo(text);
|
||||
}
|
||||
if (child->IsHTML(nsGkAtoms::script) || child->IsSVG(nsGkAtoms::script)) {
|
||||
child = child->GetNextNonChildNode(this);
|
||||
} else {
|
||||
child = child->GetNextNode(this);
|
||||
}
|
||||
}
|
||||
|
||||
// XXX No CompressWhitespace for nsAString. Sad.
|
||||
text.CompressWhitespace(true, true);
|
||||
|
@ -12,5 +12,46 @@ test(function() {
|
||||
option.appendChild(document.createElement("font"))
|
||||
.appendChild(document.createTextNode(" font "));
|
||||
assert_equals(option.text, "font");
|
||||
});
|
||||
}, "option.text should recurse");
|
||||
test(function() {
|
||||
var option = document.createElement("option");
|
||||
option.appendChild(document.createTextNode(" before "));
|
||||
option.appendChild(document.createElement("script"))
|
||||
.appendChild(document.createTextNode(" script "));
|
||||
option.appendChild(document.createTextNode(" after "));
|
||||
assert_equals(option.text, "before after");
|
||||
}, "option.text should not recurse into HTML script elements");
|
||||
test(function() {
|
||||
var option = document.createElement("option");
|
||||
option.appendChild(document.createTextNode(" before "));
|
||||
option.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "script"))
|
||||
.appendChild(document.createTextNode(" script "));
|
||||
option.appendChild(document.createTextNode(" after "));
|
||||
assert_equals(option.text, "before after");
|
||||
}, "option.text should not recurse into SVG script elements");
|
||||
test(function() {
|
||||
var option = document.createElement("option");
|
||||
option.appendChild(document.createTextNode(" before "));
|
||||
option.appendChild(document.createElementNS("http://www.w3.org/1998/Math/MathML", "script"))
|
||||
.appendChild(document.createTextNode(" script "));
|
||||
option.appendChild(document.createTextNode(" after "));
|
||||
assert_equals(option.text, "before script after");
|
||||
}, "option.text should recurse into MathML script elements");
|
||||
test(function() {
|
||||
var option = document.createElement("option");
|
||||
option.appendChild(document.createTextNode(" before "));
|
||||
option.appendChild(document.createElementNS(null, "script"))
|
||||
.appendChild(document.createTextNode(" script "));
|
||||
option.appendChild(document.createTextNode(" after "));
|
||||
assert_equals(option.text, "before script after");
|
||||
}, "option.text should recurse into null script elements");
|
||||
test(function() {
|
||||
var option = document.createElement("option");
|
||||
var span = option.appendChild(document.createElement("span"));
|
||||
span.appendChild(document.createTextNode(" Some "));
|
||||
span.appendChild(document.createElement("script"))
|
||||
.appendChild(document.createTextNode(" script "));
|
||||
option.appendChild(document.createTextNode(" Text "));
|
||||
assert_equals(option.text, "Some Text");
|
||||
}, "option.text should work if a child of the option ends with a script");
|
||||
</script>
|
||||
|
Loading…
Reference in New Issue
Block a user