mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 820902. nsAttrValue::Equals should do ASCII-case-insensitive compares when it's doing case-insensitive compares. r=sicking
This commit is contained in:
parent
5b648d8c35
commit
7cbdd79ac6
@ -463,6 +463,7 @@ public:
|
||||
virtual bool GetAttr(int32_t aNameSpaceID, nsIAtom* aName,
|
||||
nsAString& aResult) const;
|
||||
virtual bool HasAttr(int32_t aNameSpaceID, nsIAtom* aName) const;
|
||||
// aCaseSensitive == eIgnoreCaase means ASCII case-insensitive matching.
|
||||
virtual bool AttrValueIs(int32_t aNameSpaceID, nsIAtom* aName,
|
||||
const nsAString& aValue,
|
||||
nsCaseTreatment aCaseSensitive) const;
|
||||
|
@ -1066,7 +1066,7 @@ nsAttrValue::Equals(const nsAString& aValue,
|
||||
nsDependentString dep(static_cast<PRUnichar*>(str->Data()),
|
||||
str->StorageSize()/sizeof(PRUnichar) - 1);
|
||||
return aCaseSensitive == eCaseMatters ? aValue.Equals(dep) :
|
||||
aValue.Equals(dep, nsCaseInsensitiveStringComparator());
|
||||
nsContentUtils::EqualsIgnoreASCIICase(aValue, dep);
|
||||
}
|
||||
return aValue.IsEmpty();
|
||||
}
|
||||
@ -1074,8 +1074,9 @@ nsAttrValue::Equals(const nsAString& aValue,
|
||||
if (aCaseSensitive == eCaseMatters) {
|
||||
return static_cast<nsIAtom*>(GetPtr())->Equals(aValue);
|
||||
}
|
||||
return nsDependentAtomString(static_cast<nsIAtom*>(GetPtr())).
|
||||
Equals(aValue, nsCaseInsensitiveStringComparator());
|
||||
return nsContentUtils::EqualsIgnoreASCIICase(
|
||||
nsDependentAtomString(static_cast<nsIAtom*>(GetPtr())),
|
||||
aValue);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1083,7 +1084,7 @@ nsAttrValue::Equals(const nsAString& aValue,
|
||||
nsAutoString val;
|
||||
ToString(val);
|
||||
return aCaseSensitive == eCaseMatters ? val.Equals(aValue) :
|
||||
val.Equals(aValue, nsCaseInsensitiveStringComparator());
|
||||
nsContentUtils::EqualsIgnoreASCIICase(val, aValue);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -200,6 +200,7 @@ public:
|
||||
|
||||
uint32_t HashValue() const;
|
||||
bool Equals(const nsAttrValue& aOther) const;
|
||||
// aCaseSensitive == eIgnoreCase means ASCII case-insenstive matching
|
||||
bool Equals(const nsAString& aValue, nsCaseTreatment aCaseSensitive) const;
|
||||
bool Equals(nsIAtom* aValue, nsCaseTreatment aCaseSensitive) const;
|
||||
|
||||
|
@ -7945,12 +7945,13 @@ nsDocument::FindImageMap(const nsAString& aUseMapValue)
|
||||
}
|
||||
|
||||
uint32_t i, n = mImageMaps->Length(true);
|
||||
nsString name;
|
||||
for (i = 0; i < n; ++i) {
|
||||
nsIContent* map = mImageMaps->Item(i);
|
||||
if (map->AttrValueIs(kNameSpaceID_None, nsGkAtoms::id, mapName,
|
||||
eCaseMatters) ||
|
||||
map->AttrValueIs(kNameSpaceID_None, nsGkAtoms::name, mapName,
|
||||
eIgnoreCase)) {
|
||||
(map->GetAttr(kNameSpaceID_None, nsGkAtoms::name, name) &&
|
||||
mapName.Equals(name, nsCaseInsensitiveStringComparator()))) {
|
||||
return map->AsElement();
|
||||
}
|
||||
}
|
||||
|
@ -1298,8 +1298,11 @@ GetAccessModifierMask(nsISupports* aDocShell)
|
||||
static bool
|
||||
IsAccessKeyTarget(nsIContent* aContent, nsIFrame* aFrame, nsAString& aKey)
|
||||
{
|
||||
if (!aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::accesskey, aKey,
|
||||
eIgnoreCase))
|
||||
// Use GetAttr because we want Unicode case=insensitive matching
|
||||
// XXXbz shouldn't this be case-sensitive, per spec?
|
||||
nsString contentKey;
|
||||
if (!aContent->GetAttr(kNameSpaceID_None, nsGkAtoms::accesskey, contentKey) ||
|
||||
!contentKey.Equals(aKey, nsCaseInsensitiveStringComparator()))
|
||||
return false;
|
||||
|
||||
nsCOMPtr<nsIDOMXULDocument> xulDoc =
|
||||
|
@ -298,8 +298,10 @@ nsHTMLEditor::IsSimpleModifiableNode(nsIContent* aContent,
|
||||
nsCOMPtr<nsIAtom> atom = do_GetAtom(*aAttribute);
|
||||
MOZ_ASSERT(atom);
|
||||
|
||||
nsString attrValue;
|
||||
if (element->IsHTML(aProperty) && IsOnlyAttribute(element, *aAttribute) &&
|
||||
element->AttrValueIs(kNameSpaceID_None, atom, *aValue, eIgnoreCase)) {
|
||||
element->GetAttr(kNameSpaceID_None, atom, attrValue) &&
|
||||
attrValue.Equals(*aValue, nsCaseInsensitiveStringComparator())) {
|
||||
// This is not quite correct, because it excludes cases like
|
||||
// <font face=000> being the same as <font face=#000000>.
|
||||
// Property-specific handling is needed (bug 760211).
|
||||
|
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style type="text/css">
|
||||
.ascii > span {
|
||||
background-color: yellow;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="ascii"><span lang="paSSfield-killroyß">case-sensitive</span></div>
|
||||
<div class="ascii"><span lang="passfield-killroyß">lowercase</span></div>
|
||||
<div class="ascii"><span lang="PASSFIELD-KILLROYß">uppercase</span></div>
|
||||
<div class="nonascii"><span lang="paſſfield-killroyß">small long s (C)</span></div>
|
||||
<div class="nonascii"><span lang="passfield-Killroyß">kelvin sign (C)</span></div>
|
||||
<div class="nonascii"><span lang="paßfield-killroyß">small sharp s (F)</span></div>
|
||||
<div class="nonascii"><span lang="paẞfield-killroyß">capital sharp s (F)</span></div>
|
||||
<div class="nonascii"><span lang="passfield-killroyẞ">capital sharp s (S)</span></div>
|
||||
<div class="nonascii"><span lang="passfield-killroyß">fi ligature (U+fb01) (F)</span></div>
|
||||
<div class="nonascii"><span lang="passfıeld-killroyß"> dotless i (T)</span></div>
|
||||
<div class="nonascii"><span lang="passfİeld-killroyß">dotted I (T)</span></div>
|
||||
|
||||
</body>
|
||||
</html>
|
26
layout/reftests/css-selectors/attr-case-insensitive-1.html
Normal file
26
layout/reftests/css-selectors/attr-case-insensitive-1.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style type="text/css">
|
||||
span[lang="paSSfield-killroyß"] {
|
||||
background-color: yellow;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="ascii"><span lang="paSSfield-killroyß">case-sensitive</span></div>
|
||||
<div class="ascii"><span lang="passfield-killroyß">lowercase</span></div>
|
||||
<div class="ascii"><span lang="PASSFIELD-KILLROYß">uppercase</span></div>
|
||||
<div class="nonascii"><span lang="paſſfield-killroyß">small long s (C)</span></div>
|
||||
<div class="nonascii"><span lang="passfield-Killroyß">kelvin sign (C)</span></div>
|
||||
<div class="nonascii"><span lang="paßfield-killroyß">small sharp s (F)</span></div>
|
||||
<div class="nonascii"><span lang="paẞfield-killroyß">capital sharp s (F)</span></div>
|
||||
<div class="nonascii"><span lang="passfield-killroyẞ">capital sharp s (S)</span></div>
|
||||
<div class="nonascii"><span lang="passfield-killroyß">fi ligature (U+fb01) (F)</span></div>
|
||||
<div class="nonascii"><span lang="passfıeld-killroyß"> dotless i (T)</span></div>
|
||||
<div class="nonascii"><span lang="passfİeld-killroyß">dotted I (T)</span></div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1 +1,2 @@
|
||||
== state-dependent-in-any.html state-dependent-in-any-ref.html
|
||||
== attr-case-insensitive-1.html attr-case-insensitive-1-ref.html
|
||||
|
Loading…
Reference in New Issue
Block a user