Bug 1208951 - Part 4: Add an nsCSSParser entry point to parse a single longhand property and return an nsCSSValue. r=birtles

It is a slight hassle for code to have to create a Declaration object to
pass in to nsCSSParser::ParseProperty when all it wants is the resulting
single nsCSSValue, if parsing a longhand property.  Declaration is also
inaccessible outside layout/style/.
This commit is contained in:
Cameron McCormack 2015-10-22 19:22:37 +11:00
Родитель 9b05852073
Коммит d970ebb2b7
2 изменённых файлов: 56 добавлений и 0 удалений

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

@ -168,6 +168,12 @@ public:
bool* aChanged,
bool aIsImportant,
bool aIsSVGMode);
void ParseLonghandProperty(const nsCSSProperty aPropID,
const nsAString& aPropValue,
nsIURI* aSheetURL,
nsIURI* aBaseURL,
nsIPrincipal* aSheetPrincipal,
nsCSSValue& aValue);
void ParseMediaList(const nsSubstring& aBuffer,
nsIURI* aURL, // for error reporting
@ -1756,6 +1762,33 @@ CSSParserImpl::ParseRule(const nsAString& aRule,
return rv;
}
void
CSSParserImpl::ParseLonghandProperty(const nsCSSProperty aPropID,
const nsAString& aPropValue,
nsIURI* aSheetURL,
nsIURI* aBaseURL,
nsIPrincipal* aSheetPrincipal,
nsCSSValue& aValue)
{
MOZ_ASSERT(aPropID < eCSSProperty_COUNT_no_shorthands,
"ParseLonghandProperty must only take a longhand property");
Declaration declaration;
declaration.InitializeEmpty();
bool changed;
ParseProperty(aPropID, aPropValue, aSheetURL, aBaseURL, aSheetPrincipal,
&declaration, &changed,
/* aIsImportant */ false,
/* aIsSVGMode */ false);
if (changed) {
aValue = *declaration.GetNormalBlock()->ValueFor(aPropID);
} else {
aValue.Reset();
}
}
void
CSSParserImpl::ParseProperty(const nsCSSProperty aPropID,
const nsAString& aPropValue,
@ -16096,6 +16129,19 @@ nsCSSParser::ParseProperty(const nsCSSProperty aPropID,
aIsImportant, aIsSVGMode);
}
void
nsCSSParser::ParseLonghandProperty(const nsCSSProperty aPropID,
const nsAString& aPropValue,
nsIURI* aSheetURI,
nsIURI* aBaseURI,
nsIPrincipal* aSheetPrincipal,
nsCSSValue& aResult)
{
static_cast<CSSParserImpl*>(mImpl)->
ParseLonghandProperty(aPropID, aPropValue, aSheetURI, aBaseURI,
aSheetPrincipal, aResult);
}
void
nsCSSParser::ParseVariable(const nsAString& aVariableName,
const nsAString& aPropValue,

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

@ -135,6 +135,16 @@ public:
bool aIsImportant,
bool aIsSVGMode = false);
// Same as ParseProperty but returns an nsCSSValue in aResult
// rather than storing the property in a Declaration. aPropID
// must be a longhand property.
void ParseLonghandProperty(const nsCSSProperty aPropID,
const nsAString& aPropValue,
nsIURI* aSheetURL,
nsIURI* aBaseURL,
nsIPrincipal* aSheetPrincipal,
nsCSSValue& aResult);
// The same as ParseProperty but for a variable.
void ParseVariable(const nsAString& aVariableName,
const nsAString& aPropValue,