mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Back out 92f2cf2f42b2 (bug 754592) for causing regression
This commit is contained in:
parent
d165dedcc9
commit
11234826b0
@ -185,7 +185,7 @@ DOMSVGStringList::InternalList()
|
||||
{
|
||||
if (mIsConditionalProcessingAttribute) {
|
||||
nsCOMPtr<DOMSVGTests> tests = do_QueryInterface(mElement);
|
||||
return *tests->GetOrCreateStringListAttribute(mAttrEnum);
|
||||
return tests->mStringListAttributes[mAttrEnum];
|
||||
}
|
||||
return mElement->GetStringListInfo().mStringLists[mAttrEnum];
|
||||
}
|
||||
|
@ -5,7 +5,6 @@
|
||||
|
||||
#include "DOMSVGTests.h"
|
||||
#include "DOMSVGStringList.h"
|
||||
#include "nsError.h" // For NS_PROPTABLE_PROP_OVERWRITTEN
|
||||
#include "nsSVGFeatures.h"
|
||||
#include "nsSVGSwitchElement.h"
|
||||
#include "nsCharSeparatedTokenizer.h"
|
||||
@ -24,13 +23,18 @@ nsIAtom** DOMSVGTests::sStringListNames[3] =
|
||||
&nsGkAtoms::systemLanguage,
|
||||
};
|
||||
|
||||
DOMSVGTests::DOMSVGTests()
|
||||
{
|
||||
mStringListAttributes[LANGUAGE].SetIsCommaSeparated(true);
|
||||
}
|
||||
|
||||
/* readonly attribute nsIDOMSVGStringList requiredFeatures; */
|
||||
NS_IMETHODIMP
|
||||
DOMSVGTests::GetRequiredFeatures(nsIDOMSVGStringList * *aRequiredFeatures)
|
||||
{
|
||||
nsCOMPtr<nsSVGElement> element = do_QueryInterface(this);
|
||||
*aRequiredFeatures = DOMSVGStringList::GetDOMWrapper(
|
||||
GetOrCreateStringListAttribute(FEATURES), element, true, FEATURES).get();
|
||||
&mStringListAttributes[FEATURES], element, true, FEATURES).get();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -40,7 +44,7 @@ DOMSVGTests::GetRequiredExtensions(nsIDOMSVGStringList * *aRequiredExtensions)
|
||||
{
|
||||
nsCOMPtr<nsSVGElement> element = do_QueryInterface(this);
|
||||
*aRequiredExtensions = DOMSVGStringList::GetDOMWrapper(
|
||||
GetOrCreateStringListAttribute(EXTENSIONS), element, true, EXTENSIONS).get();
|
||||
&mStringListAttributes[EXTENSIONS], element, true, EXTENSIONS).get();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -50,7 +54,7 @@ DOMSVGTests::GetSystemLanguage(nsIDOMSVGStringList * *aSystemLanguage)
|
||||
{
|
||||
nsCOMPtr<nsSVGElement> element = do_QueryInterface(this);
|
||||
*aSystemLanguage = DOMSVGStringList::GetDOMWrapper(
|
||||
GetOrCreateStringListAttribute(LANGUAGE), element, true, LANGUAGE).get();
|
||||
&mStringListAttributes[LANGUAGE], element, true, LANGUAGE).get();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -80,19 +84,15 @@ DOMSVGTests::GetBestLanguagePreferenceRank(const nsSubstring& aAcceptLangs) cons
|
||||
|
||||
int32_t lowestRank = -1;
|
||||
|
||||
const SVGStringList *languageStringList = GetStringListAttribute(LANGUAGE);
|
||||
if (!languageStringList) {
|
||||
return lowestRank;
|
||||
}
|
||||
for (uint32_t i = 0; i < languageStringList->Length(); i++) {
|
||||
for (uint32_t i = 0; i < mStringListAttributes[LANGUAGE].Length(); i++) {
|
||||
nsCharSeparatedTokenizer languageTokenizer(aAcceptLangs, ',');
|
||||
int32_t index = 0;
|
||||
while (languageTokenizer.hasMoreTokens()) {
|
||||
const nsSubstring &languageToken = languageTokenizer.nextToken();
|
||||
bool exactMatch = (languageToken == (*languageStringList)[i]);
|
||||
bool exactMatch = (languageToken == mStringListAttributes[LANGUAGE][i]);
|
||||
bool prefixOnlyMatch =
|
||||
!exactMatch &&
|
||||
nsStyleUtil::DashMatchCompare((*languageStringList)[i],
|
||||
nsStyleUtil::DashMatchCompare(mStringListAttributes[LANGUAGE][i],
|
||||
languageTokenizer.nextToken(),
|
||||
defaultComparator);
|
||||
if (index == 0 && exactMatch) {
|
||||
@ -115,16 +115,15 @@ bool
|
||||
DOMSVGTests::PassesConditionalProcessingTests(const nsString *aAcceptLangs) const
|
||||
{
|
||||
// Required Features
|
||||
const SVGStringList *featuresStringList = GetStringListAttribute(FEATURES);
|
||||
if (featuresStringList && featuresStringList->IsExplicitlySet()) {
|
||||
if (featuresStringList->IsEmpty()) {
|
||||
if (mStringListAttributes[FEATURES].IsExplicitlySet()) {
|
||||
if (mStringListAttributes[FEATURES].IsEmpty()) {
|
||||
return false;
|
||||
}
|
||||
nsCOMPtr<nsIContent> content(
|
||||
do_QueryInterface(const_cast<DOMSVGTests*>(this)));
|
||||
|
||||
for (uint32_t i = 0; i < featuresStringList->Length(); i++) {
|
||||
if (!nsSVGFeatures::HasFeature(content, (*featuresStringList)[i])) {
|
||||
for (uint32_t i = 0; i < mStringListAttributes[FEATURES].Length(); i++) {
|
||||
if (!nsSVGFeatures::HasFeature(content, mStringListAttributes[FEATURES][i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -137,13 +136,12 @@ DOMSVGTests::PassesConditionalProcessingTests(const nsString *aAcceptLangs) cons
|
||||
// go beyond the feature set defined in the SVG specification.
|
||||
// Each extension is identified by a URI reference.
|
||||
// For now, claim that mozilla's SVG implementation supports XHTML and MathML.
|
||||
const SVGStringList *extensionsStringList = GetStringListAttribute(EXTENSIONS);
|
||||
if (extensionsStringList && extensionsStringList->IsExplicitlySet()) {
|
||||
if (extensionsStringList->IsEmpty()) {
|
||||
if (mStringListAttributes[EXTENSIONS].IsExplicitlySet()) {
|
||||
if (mStringListAttributes[EXTENSIONS].IsEmpty()) {
|
||||
return false;
|
||||
}
|
||||
for (uint32_t i = 0; i < extensionsStringList->Length(); i++) {
|
||||
if (!nsSVGFeatures::HasExtension((*extensionsStringList)[i])) {
|
||||
for (uint32_t i = 0; i < mStringListAttributes[EXTENSIONS].Length(); i++) {
|
||||
if (!nsSVGFeatures::HasExtension(mStringListAttributes[EXTENSIONS][i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -160,9 +158,8 @@ DOMSVGTests::PassesConditionalProcessingTests(const nsString *aAcceptLangs) cons
|
||||
// or if one of the languages indicated by user preferences exactly equals a
|
||||
// prefix of one of the languages given in the value of this parameter such
|
||||
// that the first tag character following the prefix is "-".
|
||||
const SVGStringList *languageStringList = GetStringListAttribute(LANGUAGE);
|
||||
if (languageStringList && languageStringList->IsExplicitlySet()) {
|
||||
if (languageStringList->IsEmpty()) {
|
||||
if (mStringListAttributes[LANGUAGE].IsExplicitlySet()) {
|
||||
if (mStringListAttributes[LANGUAGE].IsEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -177,10 +174,10 @@ DOMSVGTests::PassesConditionalProcessingTests(const nsString *aAcceptLangs) cons
|
||||
|
||||
const nsDefaultStringComparator defaultComparator;
|
||||
|
||||
for (uint32_t i = 0; i < languageStringList->Length(); i++) {
|
||||
for (uint32_t i = 0; i < mStringListAttributes[LANGUAGE].Length(); i++) {
|
||||
nsCharSeparatedTokenizer languageTokenizer(acceptLangs, ',');
|
||||
while (languageTokenizer.hasMoreTokens()) {
|
||||
if (nsStyleUtil::DashMatchCompare((*languageStringList)[i],
|
||||
if (nsStyleUtil::DashMatchCompare(mStringListAttributes[LANGUAGE][i],
|
||||
languageTokenizer.nextToken(),
|
||||
defaultComparator)) {
|
||||
return true;
|
||||
@ -200,12 +197,9 @@ DOMSVGTests::ParseConditionalProcessingAttribute(nsIAtom* aAttribute,
|
||||
{
|
||||
for (uint32_t i = 0; i < ArrayLength(sStringListNames); i++) {
|
||||
if (aAttribute == *sStringListNames[i]) {
|
||||
SVGStringList *stringList = GetOrCreateStringListAttribute(i);
|
||||
if (stringList) {
|
||||
nsresult rv = stringList->SetValue(aValue);
|
||||
if (NS_FAILED(rv)) {
|
||||
stringList->Clear();
|
||||
}
|
||||
nsresult rv = mStringListAttributes[i].SetValue(aValue);
|
||||
if (NS_FAILED(rv)) {
|
||||
mStringListAttributes[i].Clear();
|
||||
}
|
||||
MaybeInvalidate();
|
||||
return true;
|
||||
@ -219,69 +213,13 @@ DOMSVGTests::UnsetAttr(const nsIAtom* aAttribute)
|
||||
{
|
||||
for (uint32_t i = 0; i < ArrayLength(sStringListNames); i++) {
|
||||
if (aAttribute == *sStringListNames[i]) {
|
||||
SVGStringList *stringList = GetStringListAttribute(i);
|
||||
if (stringList) {
|
||||
// don't destroy the property in case there are tear-offs
|
||||
// referring to it
|
||||
stringList->Clear();
|
||||
MaybeInvalidate();
|
||||
}
|
||||
mStringListAttributes[i].Clear();
|
||||
MaybeInvalidate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Callback function, for freeing uint64_t values stored in property table
|
||||
// when the element goes away
|
||||
static void
|
||||
ReleaseStringListPropertyValue(void* aObject, /* unused */
|
||||
nsIAtom* aPropertyName, /* unused */
|
||||
void* aPropertyValue,
|
||||
void* aData /* unused */)
|
||||
{
|
||||
SVGStringList* valPtr =
|
||||
static_cast<SVGStringList*>(aPropertyValue);
|
||||
delete valPtr;
|
||||
}
|
||||
|
||||
SVGStringList*
|
||||
DOMSVGTests::GetStringListAttribute(uint8_t aAttrEnum) const
|
||||
{
|
||||
nsIAtom *attrName = GetAttrName(aAttrEnum);
|
||||
const nsCOMPtr<nsSVGElement> element =
|
||||
do_QueryInterface(const_cast<DOMSVGTests*>(this));
|
||||
|
||||
return static_cast<SVGStringList*>(element->GetProperty(attrName));
|
||||
}
|
||||
|
||||
SVGStringList*
|
||||
DOMSVGTests::GetOrCreateStringListAttribute(uint8_t aAttrEnum) const
|
||||
{
|
||||
SVGStringList* stringListPtr = GetStringListAttribute(aAttrEnum);
|
||||
if (stringListPtr) {
|
||||
return stringListPtr;
|
||||
}
|
||||
nsIAtom *attrName = GetAttrName(aAttrEnum);
|
||||
const nsCOMPtr<nsSVGElement> element =
|
||||
do_QueryInterface(const_cast<DOMSVGTests*>(this));
|
||||
|
||||
stringListPtr = new SVGStringList();
|
||||
stringListPtr->SetIsCommaSeparated(aAttrEnum == LANGUAGE);
|
||||
nsresult rv = element->SetProperty(attrName,
|
||||
stringListPtr,
|
||||
ReleaseStringListPropertyValue,
|
||||
true);
|
||||
NS_ABORT_IF_FALSE(rv != NS_PROPTABLE_PROP_OVERWRITTEN,
|
||||
"Setting property value when it's already set...?");
|
||||
|
||||
if (NS_LIKELY(NS_SUCCEEDED(rv))) {
|
||||
return stringListPtr;
|
||||
}
|
||||
// property-insertion failed (e.g. OOM in property-table code)
|
||||
delete stringListPtr;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsIAtom*
|
||||
DOMSVGTests::GetAttrName(uint8_t aAttrEnum) const
|
||||
{
|
||||
@ -293,7 +231,7 @@ DOMSVGTests::GetAttrValue(uint8_t aAttrEnum, nsAttrValue& aValue) const
|
||||
{
|
||||
MOZ_ASSERT(aAttrEnum < ArrayLength(sStringListNames),
|
||||
"aAttrEnum out of range");
|
||||
aValue.SetTo(*GetOrCreateStringListAttribute(aAttrEnum), nullptr);
|
||||
aValue.SetTo(mStringListAttributes[aAttrEnum], nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -24,6 +24,7 @@ public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIDOMSVGTESTS
|
||||
|
||||
DOMSVGTests();
|
||||
virtual ~DOMSVGTests() {}
|
||||
|
||||
friend class mozilla::DOMSVGStringList;
|
||||
@ -79,14 +80,13 @@ public:
|
||||
void UnsetAttr(const nsIAtom* aAttribute);
|
||||
|
||||
nsIAtom* GetAttrName(uint8_t aAttrEnum) const;
|
||||
SVGStringList* GetStringListAttribute(uint8_t aAttrEnum) const;
|
||||
SVGStringList* GetOrCreateStringListAttribute(uint8_t aAttrEnum) const;
|
||||
void GetAttrValue(uint8_t aAttrEnum, nsAttrValue &aValue) const;
|
||||
|
||||
void MaybeInvalidate();
|
||||
|
||||
private:
|
||||
enum { FEATURES, EXTENSIONS, LANGUAGE };
|
||||
SVGStringList mStringListAttributes[3];
|
||||
static nsIAtom** sStringListNames[3];
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user