Bug 1360488 - Part 1: stylo: Add ServoCSSParsingEnvironment and pass this instead of URLExtraData
It was inconsistent with gecko side and also we needed to pass nsCompatibility enum along with URLExtraData.
MozReview-Commit-ID: 2ceutBfqBrg
--- a/layout/style/ServoPageRule.cpp
+++ b/layout/style/ServoPageRule.cpp
@@ -91,20 +91,20 @@ void
ServoPageRuleDeclaration::GetCSSParsingEnvironment(
CSSParsingEnvironment& aCSSParseEnv)
{
MOZ_ASSERT_UNREACHABLE("GetCSSParsingEnvironment "
"shouldn't be calling for a Servo rule");
GetCSSParsingEnvironmentForRule(Rule(), aCSSParseEnv);
}
-URLExtraData*
-ServoPageRuleDeclaration::GetURLData() const
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+ServoPageRuleDeclaration::GetServoCSSParsingEnvironment() const
{
- return GetURLDataForRule(Rule());
+ return GetServoCSSParsingEnvironmentForRule(Rule());
}
// -- ServoPageRule --------------------------------------------------
ServoPageRule::ServoPageRule(RefPtr<RawServoPageRule> aRawRule)
: CSSPageRule(0, 0)
, mRawRule(Move(aRawRule))
, mDecls(Servo_PageRule_GetStyle(mRawRule).Consume())
--- a/layout/style/ServoPageRule.h
+++ b/layout/style/ServoPageRule.h
@@ -27,17 +27,17 @@ public:
NS_IMETHOD GetParentRule(nsIDOMCSSRule** aParent) final;
nsINode* GetParentObject() final;
protected:
DeclarationBlock* GetCSSDeclaration(Operation aOperation) final;
nsresult SetCSSDeclaration(DeclarationBlock* aDecl) final;
nsIDocument* DocToUpdate() final;
void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) final;
- URLExtraData* GetURLData() const final;
+ nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
private:
// For accessing the constructor.
friend class ServoPageRule;
explicit ServoPageRuleDeclaration(
already_AddRefed<RawServoDeclarationBlock> aDecls);
~ServoPageRuleDeclaration();
--- a/layout/style/ServoStyleRule.cpp
+++ b/layout/style/ServoStyleRule.cpp
@@ -96,20 +96,20 @@ void
ServoStyleRuleDeclaration::GetCSSParsingEnvironment(
CSSParsingEnvironment& aCSSParseEnv)
{
MOZ_ASSERT_UNREACHABLE("GetCSSParsingEnvironment "
"shouldn't be calling for a Servo rule");
GetCSSParsingEnvironmentForRule(Rule(), aCSSParseEnv);
}
-URLExtraData*
-ServoStyleRuleDeclaration::GetURLData() const
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+ServoStyleRuleDeclaration::GetServoCSSParsingEnvironment() const
{
- return GetURLDataForRule(Rule());
+ return GetServoCSSParsingEnvironmentForRule(Rule());
}
// -- ServoStyleRule --------------------------------------------------
ServoStyleRule::ServoStyleRule(already_AddRefed<RawServoStyleRule> aRawRule)
: BindingStyleRule(0, 0)
, mRawRule(aRawRule)
, mDecls(Servo_StyleRule_GetStyle(mRawRule).Consume())
--- a/layout/style/ServoStyleRule.h
+++ b/layout/style/ServoStyleRule.h
@@ -28,17 +28,17 @@ public:
NS_IMETHOD GetParentRule(nsIDOMCSSRule** aParent) final;
nsINode* GetParentObject() final;
protected:
DeclarationBlock* GetCSSDeclaration(Operation aOperation) final;
nsresult SetCSSDeclaration(DeclarationBlock* aDecl) final;
nsIDocument* DocToUpdate() final;
void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) final;
- URLExtraData* GetURLData() const final;
+ ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
private:
// For accessing the constructor.
friend class ServoStyleRule;
explicit ServoStyleRuleDeclaration(
already_AddRefed<RawServoDeclarationBlock> aDecls);
~ServoStyleRuleDeclaration();
--- a/layout/style/StyleRule.cpp
+++ b/layout/style/StyleRule.cpp
@@ -1057,17 +1057,17 @@ protected:
public:
explicit DOMCSSDeclarationImpl(css::StyleRule *aRule);
NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
virtual DeclarationBlock* GetCSSDeclaration(Operation aOperation) override;
virtual nsresult SetCSSDeclaration(DeclarationBlock* aDecl) override;
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
- URLExtraData* GetURLData() const final;
+ nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
virtual nsIDocument* DocToUpdate() override;
// Override |AddRef| and |Release| for being owned by StyleRule. Also, we
// need to forward QI for cycle collection things to StyleRule.
NS_DECL_ISUPPORTS_INHERITED
virtual nsINode *GetParentObject() override
{
@@ -1116,21 +1116,20 @@ DOMCSSDeclarationImpl::GetCSSDeclaration
}
void
DOMCSSDeclarationImpl::GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv)
{
GetCSSParsingEnvironmentForRule(mRule, aCSSParseEnv);
}
-URLExtraData*
-DOMCSSDeclarationImpl::GetURLData() const
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+DOMCSSDeclarationImpl::GetServoCSSParsingEnvironment() const
{
- MOZ_ASSERT_UNREACHABLE("GetURLData shouldn't be calling on a Gecko rule");
- return GetURLDataForRule(mRule);
+ MOZ_CRASH("GetURLData shouldn't be calling on a Gecko rule");
}
NS_IMETHODIMP
DOMCSSDeclarationImpl::GetParentRule(nsIDOMCSSRule **aParent)
{
NS_ENSURE_ARG_POINTER(aParent);
NS_IF_ADDREF(*aParent = mRule);
--- a/layout/style/nsCSSRules.cpp
+++ b/layout/style/nsCSSRules.cpp
@@ -1621,21 +1621,20 @@ nsCSSKeyframeStyleDeclaration::GetCSSDec
}
void
nsCSSKeyframeStyleDeclaration::GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv)
{
GetCSSParsingEnvironmentForRule(mRule, aCSSParseEnv);
}
-URLExtraData*
-nsCSSKeyframeStyleDeclaration::GetURLData() const
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+nsCSSKeyframeStyleDeclaration::GetServoCSSParsingEnvironment() const
{
- MOZ_ASSERT_UNREACHABLE("GetURLData shouldn't be calling on a Gecko rule");
- return GetURLDataForRule(mRule);
+ MOZ_CRASH("GetURLData shouldn't be calling on a Gecko rule");
}
NS_IMETHODIMP
nsCSSKeyframeStyleDeclaration::GetParentRule(nsIDOMCSSRule **aParent)
{
NS_ENSURE_ARG_POINTER(aParent);
NS_IF_ADDREF(*aParent = mRule);
@@ -2138,21 +2137,20 @@ nsCSSPageStyleDeclaration::GetCSSDeclara
}
void
nsCSSPageStyleDeclaration::GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv)
{
GetCSSParsingEnvironmentForRule(mRule, aCSSParseEnv);
}
-URLExtraData*
-nsCSSPageStyleDeclaration::GetURLData() const
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+nsCSSPageStyleDeclaration::GetServoCSSParsingEnvironment() const
{
- MOZ_ASSERT_UNREACHABLE("GetURLData shouldn't be calling on a Gecko rule");
- return GetURLDataForRule(mRule);
+ MOZ_CRASH("GetURLData shouldn't be calling on a Gecko rule");
}
NS_IMETHODIMP
nsCSSPageStyleDeclaration::GetParentRule(nsIDOMCSSRule** aParent)
{
NS_ENSURE_ARG_POINTER(aParent);
NS_IF_ADDREF(*aParent = mRule);
--- a/layout/style/nsCSSRules.h
+++ b/layout/style/nsCSSRules.h
@@ -243,17 +243,17 @@ class nsCSSKeyframeStyleDeclaration fina
public:
explicit nsCSSKeyframeStyleDeclaration(nsCSSKeyframeRule *aRule);
NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
void DropReference() { mRule = nullptr; }
virtual mozilla::DeclarationBlock* GetCSSDeclaration(Operation aOperation) override;
virtual nsresult SetCSSDeclaration(mozilla::DeclarationBlock* aDecl) override;
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
- mozilla::URLExtraData* GetURLData() const final;
+ nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
virtual nsIDocument* DocToUpdate() override;
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSKeyframeStyleDeclaration,
nsICSSDeclaration)
virtual nsINode* GetParentObject() override;
@@ -384,17 +384,17 @@ class nsCSSPageStyleDeclaration final :
public:
explicit nsCSSPageStyleDeclaration(nsCSSPageRule *aRule);
NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
void DropReference() { mRule = nullptr; }
virtual mozilla::DeclarationBlock* GetCSSDeclaration(Operation aOperation) override;
virtual nsresult SetCSSDeclaration(mozilla::DeclarationBlock* aDecl) override;
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
- mozilla::URLExtraData* GetURLData() const final;
+ nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
virtual nsIDocument* DocToUpdate() override;
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsCSSPageStyleDeclaration,
nsICSSDeclaration)
virtual nsINode *GetParentObject() override;
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -710,21 +710,20 @@ nsComputedDOMStyle::DocToUpdate()
void
nsComputedDOMStyle::GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv)
{
NS_RUNTIMEABORT("called nsComputedDOMStyle::GetCSSParsingEnvironment");
// Just in case NS_RUNTIMEABORT ever stops killing us for some reason
aCSSParseEnv.mPrincipal = nullptr;
}
-URLExtraData*
-nsComputedDOMStyle::GetURLData() const
-{
- NS_RUNTIMEABORT("called nsComputedDOMStyle::GetURLData");
- return nullptr;
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+nsComputedDOMStyle::GetServoCSSParsingEnvironment() const
+{
+ MOZ_CRASH("called nsComputedDOMStyle::GetServoCSSParsingEnvironment");
}
void
nsComputedDOMStyle::ClearStyleContext()
{
if (mResolvedStyleContext) {
mResolvedStyleContext = false;
mContent->RemoveMutationObserver(this);
--- a/layout/style/nsComputedDOMStyle.h
+++ b/layout/style/nsComputedDOMStyle.h
@@ -121,17 +121,17 @@ public:
// nsDOMCSSDeclaration abstract methods which should never be called
// on a nsComputedDOMStyle object, but must be defined to avoid
// compile errors.
virtual mozilla::DeclarationBlock* GetCSSDeclaration(Operation) override;
virtual nsresult SetCSSDeclaration(mozilla::DeclarationBlock*) override;
virtual nsIDocument* DocToUpdate() override;
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
- mozilla::URLExtraData* GetURLData() const final;
+ nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
static already_AddRefed<nsROCSSPrimitiveValue>
MatrixToCSSValue(const mozilla::gfx::Matrix4x4& aMatrix);
static void RegisterPrefChangeCallbacks();
static void UnregisterPrefChangeCallbacks();
// nsIMutationObserver
--- a/layout/style/nsDOMCSSAttrDeclaration.cpp
+++ b/layout/style/nsDOMCSSAttrDeclaration.cpp
@@ -168,20 +168,22 @@ nsDOMCSSAttributeDeclaration::GetCSSPars
nsIDocument* doc = mElement->OwnerDoc();
aCSSParseEnv.mSheetURI = doc->GetDocumentURI();
aCSSParseEnv.mBaseURI = mElement->GetBaseURIForStyleAttr();
aCSSParseEnv.mPrincipal = mElement->NodePrincipal();
aCSSParseEnv.mCSSLoader = doc->CSSLoader();
}
-URLExtraData*
-nsDOMCSSAttributeDeclaration::GetURLData() const
+nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+nsDOMCSSAttributeDeclaration::GetServoCSSParsingEnvironment() const
{
- return mElement->GetURLDataForStyleAttr();
+ ServoCSSParsingEnvironment parsingEnv(mElement->GetURLDataForStyleAttr(),
+ mElement->OwnerDoc()->GetCompatibilityMode());
+ return parsingEnv;
}
NS_IMETHODIMP
nsDOMCSSAttributeDeclaration::GetParentRule(nsIDOMCSSRule **aParent)
{
NS_ENSURE_ARG_POINTER(aParent);
*aParent = nullptr;
--- a/layout/style/nsDOMCSSAttrDeclaration.h
+++ b/layout/style/nsDOMCSSAttrDeclaration.h
@@ -27,17 +27,17 @@ public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsDOMCSSAttributeDeclaration,
nsICSSDeclaration)
// If GetCSSDeclaration returns non-null, then the decl it returns
// is owned by our current style rule.
virtual mozilla::DeclarationBlock* GetCSSDeclaration(Operation aOperation) override;
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) override;
- mozilla::URLExtraData* GetURLData() const final;
+ nsDOMCSSDeclaration::ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const final;
NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent) override;
virtual nsINode* GetParentObject() override;
NS_IMETHOD SetPropertyValue(const nsCSSPropertyID aPropID,
const nsAString& aValue) override;
protected:
--- a/layout/style/nsDOMCSSDeclaration.cpp
+++ b/layout/style/nsDOMCSSDeclaration.cpp
@@ -111,47 +111,44 @@ nsDOMCSSDeclaration::SetCssText(const ns
{
// We don't need to *do* anything with the old declaration, but we need
// to ensure that it exists, or else SetCSSDeclaration may crash.
DeclarationBlock* olddecl = GetCSSDeclaration(eOperation_Modify);
if (!olddecl) {
return NS_ERROR_NOT_AVAILABLE;
}
- CSSParsingEnvironment env;
- URLExtraData* urlData = nullptr;
- if (olddecl->IsGecko()) {
- GetCSSParsingEnvironment(env);
- if (!env.mPrincipal) {
- return NS_ERROR_NOT_AVAILABLE;
- }
- } else {
- urlData = GetURLData();
- if (!urlData) {
- return NS_ERROR_NOT_AVAILABLE;
- }
- }
-
// For nsDOMCSSAttributeDeclaration, SetCSSDeclaration will lead to
// Attribute setting code, which leads in turn to BeginUpdate. We
// need to start the update now so that the old rule doesn't get used
// between when we mutate the declaration and when we set the new
// rule (see stack in bug 209575).
mozAutoDocConditionalContentUpdateBatch autoUpdate(DocToUpdate(), true);
RefPtr<DeclarationBlock> newdecl;
if (olddecl->IsServo()) {
- newdecl = ServoDeclarationBlock::FromCssText(aCssText, urlData);
+ ServoCSSParsingEnvironment servoEnv = GetServoCSSParsingEnvironment();
+ if (!servoEnv.mUrlExtraData) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ newdecl = ServoDeclarationBlock::FromCssText(aCssText, servoEnv.mUrlExtraData);
} else {
+ CSSParsingEnvironment geckoEnv;
+ GetCSSParsingEnvironment(geckoEnv);
+ if (!geckoEnv.mPrincipal) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
RefPtr<css::Declaration> decl(new css::Declaration());
decl->InitializeEmpty();
- nsCSSParser cssParser(env.mCSSLoader);
+ nsCSSParser cssParser(geckoEnv.mCSSLoader);
bool changed;
- nsresult result = cssParser.ParseDeclarations(aCssText, env.mSheetURI,
- env.mBaseURI, env.mPrincipal,
+ nsresult result = cssParser.ParseDeclarations(aCssText, geckoEnv.mSheetURI,
+ geckoEnv.mBaseURI, geckoEnv.mPrincipal,
decl, &changed);
if (NS_FAILED(result) || !changed) {
return result;
}
newdecl = decl.forget();
}
return SetCSSDeclaration(newdecl);
@@ -277,62 +274,67 @@ nsDOMCSSDeclaration::GetCSSParsingEnviro
nsIDocument* document = sheet->GetAssociatedDocument();
aCSSParseEnv.mSheetURI = sheet->GetSheetURI();
aCSSParseEnv.mBaseURI = sheet->GetBaseURI();
aCSSParseEnv.mPrincipal = sheet->Principal();
aCSSParseEnv.mCSSLoader = document ? document->CSSLoader() : nullptr;
}
-/* static */ URLExtraData*
-nsDOMCSSDeclaration::GetURLDataForRule(const css::Rule* aRule)
+/* static */ nsDOMCSSDeclaration::ServoCSSParsingEnvironment
+nsDOMCSSDeclaration::GetServoCSSParsingEnvironmentForRule(const css::Rule* aRule)
{
- if (StyleSheet* sheet = aRule ? aRule->GetStyleSheet() : nullptr) {
- return sheet->AsServo()->URLData();
+ StyleSheet* sheet = aRule ? aRule->GetStyleSheet() : nullptr;
+ if (!sheet) {
+ return ServoCSSParsingEnvironment(nullptr, eCompatibility_FullStandards);
}
- return nullptr;
+
+ if (nsIDocument* document = aRule->GetDocument()) {
+ return ServoCSSParsingEnvironment(sheet->AsServo()->URLData(),
+ document->GetCompatibilityMode());
+ } else {
+ return ServoCSSParsingEnvironment(sheet->AsServo()->URLData(),
+ eCompatibility_FullStandards);
+ }
}
template<typename GeckoFunc, typename ServoFunc>
nsresult
nsDOMCSSDeclaration::ModifyDeclaration(GeckoFunc aGeckoFunc,
ServoFunc aServoFunc)
{
DeclarationBlock* olddecl = GetCSSDeclaration(eOperation_Modify);
if (!olddecl) {
return NS_ERROR_NOT_AVAILABLE;
}
- CSSParsingEnvironment env;
- URLExtraData* urlData = nullptr;
- if (olddecl->IsGecko()) {
- GetCSSParsingEnvironment(env);
- if (!env.mPrincipal) {
- return NS_ERROR_NOT_AVAILABLE;
- }
- } else {
- urlData = GetURLData();
- if (!urlData) {
- return NS_ERROR_NOT_AVAILABLE;
- }
- }
-
// For nsDOMCSSAttributeDeclaration, SetCSSDeclaration will lead to
// Attribute setting code, which leads in turn to BeginUpdate. We
// need to start the update now so that the old rule doesn't get used
// between when we mutate the declaration and when we set the new
// rule (see stack in bug 209575).
mozAutoDocConditionalContentUpdateBatch autoUpdate(DocToUpdate(), true);
RefPtr<DeclarationBlock> decl = olddecl->EnsureMutable();
bool changed;
if (decl->IsGecko()) {
- aGeckoFunc(decl->AsGecko(), env, &changed);
+ CSSParsingEnvironment geckoEnv;
+ GetCSSParsingEnvironment(geckoEnv);
+ if (!geckoEnv.mPrincipal) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ aGeckoFunc(decl->AsGecko(), geckoEnv, &changed);
} else {
- changed = aServoFunc(decl->AsServo(), urlData);
+ ServoCSSParsingEnvironment servoEnv = GetServoCSSParsingEnvironment();
+ if (!servoEnv.mUrlExtraData) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ changed = aServoFunc(decl->AsServo(), servoEnv.mUrlExtraData);
}
if (!changed) {
// Parsing failed -- but we don't throw an exception for that.
return NS_OK;
}
return SetCSSDeclaration(decl);
}
--- a/layout/style/nsDOMCSSDeclaration.h
+++ b/layout/style/nsDOMCSSDeclaration.h
@@ -141,32 +141,44 @@ protected:
nsIPrincipal* MOZ_UNSAFE_REF("user of CSSParsingEnviroment must hold an owning "
"reference; reference counting here has unacceptable "
"performance overhead (see bug 649163)") mPrincipal;
mozilla::css::Loader* MOZ_UNSAFE_REF("user of CSSParsingEnviroment must hold an owning "
"reference; reference counting here has unacceptable "
"performance overhead (see bug 649163)") mCSSLoader;
};
+ // Information neded to parse a declaration for Servo side.
+ struct MOZ_STACK_CLASS ServoCSSParsingEnvironment {
+ mozilla::URLExtraData* mUrlExtraData;
+ nsCompatibility mCompatMode;
+
+ ServoCSSParsingEnvironment(mozilla::URLExtraData* aUrlData, nsCompatibility aCompatMode)
+ : mUrlExtraData(aUrlData), mCompatMode(aCompatMode) {}
+ };
+
// On failure, mPrincipal should be set to null in aCSSParseEnv.
// If mPrincipal is null, the other members may not be set to
// anything meaningful.
virtual void GetCSSParsingEnvironment(CSSParsingEnvironment& aCSSParseEnv) = 0;
+ // mUrlExtraData returns URL data for parsing url values in
+ // CSS. Returns nullptr on failure. If mUrlExtraData is nullptr,
+ // mCompatMode may not be set to anything meaningful.
+ virtual ServoCSSParsingEnvironment GetServoCSSParsingEnvironment() const = 0;
+
// An implementation for GetCSSParsingEnvironment for callers wrapping
// an css::Rule.
static void GetCSSParsingEnvironmentForRule(mozilla::css::Rule* aRule,
CSSParsingEnvironment& aCSSParseEnv);
- // An implementation for GetURLData for callers wrapping a css::Rule.
- static mozilla::URLExtraData* GetURLDataForRule(const mozilla::css::Rule* aRule);
-
- // Returns URL data for parsing url values in CSS.
- // Returns nullptr on failure.
- virtual mozilla::URLExtraData* GetURLData() const = 0;
+ // An implementation for GetServoCSSParsingEnvironment for callers wrapping
+ // an css::Rule.
+ static ServoCSSParsingEnvironment
+ GetServoCSSParsingEnvironmentForRule(const mozilla::css::Rule* aRule);
nsresult ParsePropertyValue(const nsCSSPropertyID aPropID,
const nsAString& aPropValue,
bool aIsImportant);
nsresult ParseCustomPropertyValue(const nsAString& aPropertyName,
const nsAString& aPropValue,
bool aIsImportant);