зеркало из https://github.com/mozilla/gecko-dev.git
Make nsICSSRule::Clone return the cloned value directly. (Bug 585137) r=bzbarsky a2.0=dbaron
This commit is contained in:
Родитель
ddf28f360f
Коммит
e48ff47578
|
@ -301,11 +301,8 @@ nsGenericHTMLElement::CopyInnerTo(nsGenericElement* aDst) const
|
|||
value->Type() == nsAttrValue::eCSSStyleRule) {
|
||||
// We can't just set this as a string, because that will fail
|
||||
// to reparse the string into style data until the node is
|
||||
// inserted into the document. Clone the HTMLValue instead.
|
||||
nsCOMPtr<nsICSSRule> ruleClone;
|
||||
rv = value->GetCSSStyleRuleValue()->Clone(*getter_AddRefs(ruleClone));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// inserted into the document. Clone the nsICSSRule instead.
|
||||
nsCOMPtr<nsICSSRule> ruleClone = value->GetCSSStyleRuleValue()->Clone();
|
||||
nsCOMPtr<nsICSSStyleRule> styleRule = do_QueryInterface(ruleClone);
|
||||
NS_ENSURE_TRUE(styleRule, NS_ERROR_UNEXPECTED);
|
||||
|
||||
|
|
|
@ -1939,10 +1939,8 @@ nsXULElement::EnsureLocalStyle()
|
|||
nsXULPrototypeAttribute *protoattr =
|
||||
FindPrototypeAttribute(kNameSpaceID_None, nsGkAtoms::style);
|
||||
if (protoattr && protoattr->mValue.Type() == nsAttrValue::eCSSStyleRule) {
|
||||
nsCOMPtr<nsICSSRule> ruleClone;
|
||||
nsresult rv = protoattr->mValue.GetCSSStyleRuleValue()->
|
||||
Clone(*getter_AddRefs(ruleClone));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsICSSRule> ruleClone =
|
||||
protoattr->mValue.GetCSSStyleRuleValue()->Clone();
|
||||
|
||||
nsString stringValue;
|
||||
protoattr->mValue.ToString(stringValue);
|
||||
|
@ -1951,7 +1949,8 @@ nsXULElement::EnsureLocalStyle()
|
|||
nsCOMPtr<nsICSSStyleRule> styleRule = do_QueryInterface(ruleClone);
|
||||
value.SetTo(styleRule, &stringValue);
|
||||
|
||||
rv = mAttrsAndChildren.SetAndTakeAttr(nsGkAtoms::style, value);
|
||||
nsresult rv =
|
||||
mAttrsAndChildren.SetAndTakeAttr(nsGkAtoms::style, value);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
}
|
||||
|
@ -2315,9 +2314,8 @@ nsresult nsXULElement::MakeHeavyweight()
|
|||
|
||||
// Style rules need to be cloned.
|
||||
if (protoattr->mValue.Type() == nsAttrValue::eCSSStyleRule) {
|
||||
nsCOMPtr<nsICSSRule> ruleClone;
|
||||
rv = protoattr->mValue.GetCSSStyleRuleValue()->Clone(*getter_AddRefs(ruleClone));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsICSSRule> ruleClone =
|
||||
protoattr->mValue.GetCSSStyleRuleValue()->Clone();
|
||||
|
||||
nsString stringValue;
|
||||
protoattr->mValue.ToString(stringValue);
|
||||
|
|
|
@ -206,7 +206,7 @@ public:
|
|||
|
||||
// nsICSSRule methods
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
|
||||
// nsIDOMCSSRule interface
|
||||
NS_DECL_NSIDOMCSSRULE
|
||||
|
@ -271,16 +271,11 @@ CSSCharsetRuleImpl::GetType() const
|
|||
return nsICSSRule::CHARSET_RULE;
|
||||
}
|
||||
|
||||
/* virtual */ nsresult
|
||||
CSSCharsetRuleImpl::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
CSSCharsetRuleImpl::Clone() const
|
||||
{
|
||||
CSSCharsetRuleImpl* clone = new CSSCharsetRuleImpl(*this);
|
||||
if (clone) {
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
}
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsICSSRule> clone = new CSSCharsetRuleImpl(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -381,7 +376,7 @@ public:
|
|||
|
||||
// nsICSSRule methods
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
|
||||
// nsICSSImportRule methods
|
||||
NS_IMETHOD SetURLSpec(const nsString& aURLSpec);
|
||||
|
@ -475,16 +470,11 @@ CSSImportRuleImpl::GetType() const
|
|||
return nsICSSRule::IMPORT_RULE;
|
||||
}
|
||||
|
||||
/* virtual */ nsresult
|
||||
CSSImportRuleImpl::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
CSSImportRuleImpl::Clone() const
|
||||
{
|
||||
CSSImportRuleImpl* clone = new CSSImportRuleImpl(*this);
|
||||
if (clone) {
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
}
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsICSSRule> clone = new CSSImportRuleImpl(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -644,12 +634,8 @@ nsCSSGroupRule::nsCSSGroupRule()
|
|||
static PRBool
|
||||
CloneRuleInto(nsICSSRule* aRule, void* aArray)
|
||||
{
|
||||
nsICSSRule* clone = nsnull;
|
||||
aRule->Clone(clone);
|
||||
if (clone) {
|
||||
nsCOMPtr<nsICSSRule> clone = aRule->Clone();
|
||||
static_cast<nsCOMArray<nsICSSRule>*>(aArray)->AppendObject(clone);
|
||||
NS_RELEASE(clone);
|
||||
}
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
|
@ -955,16 +941,11 @@ nsCSSMediaRule::GetType() const
|
|||
return nsICSSRule::MEDIA_RULE;
|
||||
}
|
||||
|
||||
/* virtual */ nsresult
|
||||
nsCSSMediaRule::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
nsCSSMediaRule::Clone() const
|
||||
{
|
||||
nsCSSMediaRule* clone = new nsCSSMediaRule(*this);
|
||||
if (clone) {
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
}
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsICSSRule> clone = new nsCSSMediaRule(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -1123,16 +1104,11 @@ nsCSSDocumentRule::GetType() const
|
|||
return nsICSSRule::DOCUMENT_RULE;
|
||||
}
|
||||
|
||||
/* virtual */ nsresult
|
||||
nsCSSDocumentRule::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
nsCSSDocumentRule::Clone() const
|
||||
{
|
||||
nsCSSDocumentRule* clone = new nsCSSDocumentRule(*this);
|
||||
if (clone) {
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
}
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsICSSRule> clone = new nsCSSDocumentRule(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
// nsIDOMCSSRule methods
|
||||
|
@ -1273,7 +1249,7 @@ public:
|
|||
|
||||
// nsICSSRule methods
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
|
||||
// nsICSSNameSpaceRule methods
|
||||
NS_IMETHOD GetPrefix(nsIAtom*& aPrefix) const;
|
||||
|
@ -1355,16 +1331,11 @@ CSSNameSpaceRuleImpl::GetType() const
|
|||
return nsICSSRule::NAMESPACE_RULE;
|
||||
}
|
||||
|
||||
/* virtual */ nsresult
|
||||
CSSNameSpaceRuleImpl::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
CSSNameSpaceRuleImpl::Clone() const
|
||||
{
|
||||
CSSNameSpaceRuleImpl* clone = new CSSNameSpaceRuleImpl(*this);
|
||||
if (clone) {
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
}
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsICSSRule> clone = new CSSNameSpaceRuleImpl(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -1787,16 +1758,11 @@ nsCSSFontFaceStyleDecl::GetParentRule(nsIDOMCSSRule** aParentRule)
|
|||
// nsCSSFontFaceRule
|
||||
//
|
||||
|
||||
/* virtual */ nsresult
|
||||
nsCSSFontFaceRule::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
nsCSSFontFaceRule::Clone() const
|
||||
{
|
||||
nsCSSFontFaceRule* clone = new nsCSSFontFaceRule(*this);
|
||||
if (clone) {
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
}
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsICSSRule> clone = new nsCSSFontFaceRule(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsCSSFontFaceRule, nsCSSRule)
|
||||
|
|
|
@ -131,7 +131,7 @@ public:
|
|||
// nsICSSRule methods
|
||||
virtual void SetStyleSheet(nsCSSStyleSheet* aSheet); //override nsCSSGroupRule
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
nsIDOMCSSRule* GetDOMRuleWeak(nsresult *aResult)
|
||||
{
|
||||
*aResult = NS_OK;
|
||||
|
@ -172,7 +172,7 @@ public:
|
|||
|
||||
// nsICSSRule methods
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
nsIDOMCSSRule* GetDOMRuleWeak(nsresult *aResult)
|
||||
{
|
||||
*aResult = NS_OK;
|
||||
|
@ -265,7 +265,7 @@ public:
|
|||
DECL_STYLE_RULE_INHERIT
|
||||
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
|
||||
// nsIDOMCSSRule interface
|
||||
NS_DECL_NSIDOMCSSRULE
|
||||
|
|
|
@ -1309,7 +1309,7 @@ public:
|
|||
virtual nsresult SetSelectorText(const nsAString& aSelectorText);
|
||||
|
||||
virtual PRInt32 GetType() const;
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const;
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const;
|
||||
|
||||
nsIDOMCSSRule* GetDOMRuleWeak(nsresult* aResult);
|
||||
|
||||
|
@ -1478,17 +1478,11 @@ CSSStyleRuleImpl::GetType() const
|
|||
return nsICSSRule::STYLE_RULE;
|
||||
}
|
||||
|
||||
/* virtual */ nsresult
|
||||
CSSStyleRuleImpl::Clone(nsICSSRule*& aClone) const
|
||||
/* virtual */ already_AddRefed<nsICSSRule>
|
||||
CSSStyleRuleImpl::Clone() const
|
||||
{
|
||||
CSSStyleRuleImpl* clone = new CSSStyleRuleImpl(*this);
|
||||
if (!clone || !clone->mDeclaration || (!clone->mSelector != !mSelector)) {
|
||||
delete clone;
|
||||
aClone = nsnull;
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
NS_ADDREF(aClone = clone);
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsICSSRule> clone = new CSSStyleRuleImpl(*this);
|
||||
return clone.forget();
|
||||
}
|
||||
|
||||
nsIDOMCSSRule*
|
||||
|
|
|
@ -789,12 +789,8 @@ static PRBool SetStyleSheetReference(nsICSSRule* aRule, void* aSheet)
|
|||
static PRBool
|
||||
CloneRuleInto(nsICSSRule* aRule, void* aArray)
|
||||
{
|
||||
nsICSSRule* clone = nsnull;
|
||||
aRule->Clone(clone);
|
||||
if (clone) {
|
||||
nsCOMPtr<nsICSSRule> clone = aRule->Clone();
|
||||
static_cast<nsCOMArray<nsICSSRule>*>(aArray)->AppendObject(clone);
|
||||
NS_RELEASE(clone);
|
||||
}
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -40,8 +40,8 @@
|
|||
* rules, such as @media rules
|
||||
*/
|
||||
|
||||
#ifndef nsICSSGroupRule_h___
|
||||
#define nsICSSGroupRule_h___
|
||||
#ifndef nsICSSGroupRule_h
|
||||
#define nsICSSGroupRule_h
|
||||
|
||||
#include "nsICSSRule.h"
|
||||
#include "nsCOMArray.h"
|
||||
|
@ -49,9 +49,9 @@
|
|||
class nsPresContext;
|
||||
class nsMediaQueryResultCacheKey;
|
||||
|
||||
// IID for the nsICSSGroupRule interface {388222c0-cb76-4a01-9988-8cd28e66690e}
|
||||
#define NS_ICSS_GROUP_RULE_IID \
|
||||
{0x388222c0, 0xcb76, 0x4a01, {0x99, 0x88, 0x8c, 0xd2, 0x8e, 0x66, 0x69, 0x0e}}
|
||||
{ 0xf1e3d96b, 0xe381, 0x4533, \
|
||||
{ 0xa6, 0x5e, 0xa5, 0x31, 0xba, 0xca, 0x93, 0x62 } }
|
||||
|
||||
|
||||
class nsICSSGroupRule : public nsICSSRule {
|
||||
|
@ -83,4 +83,4 @@ public:
|
|||
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSGroupRule, NS_ICSS_GROUP_RULE_IID)
|
||||
|
||||
#endif /* nsICSSGroupRule_h___ */
|
||||
#endif /* nsICSSGroupRule_h */
|
||||
|
|
|
@ -37,17 +37,17 @@
|
|||
|
||||
/* internal interface for CSS @import rules */
|
||||
|
||||
#ifndef nsICSSImportRule_h___
|
||||
#define nsICSSImportRule_h___
|
||||
#ifndef nsICSSImportRule_h
|
||||
#define nsICSSImportRule_h
|
||||
|
||||
#include "nsICSSRule.h"
|
||||
|
||||
class nsMediaList;
|
||||
class nsString;
|
||||
|
||||
// IID for the nsICSSImportRule interface {99118ef3-927d-43f0-a210-27482d75de2e}
|
||||
#define NS_ICSS_IMPORT_RULE_IID \
|
||||
{0x99118ef3, 0x927d, 0x43f0, {0xa2, 0x10, 0x27, 0x48, 0x2d, 0x75, 0xde, 0x2e}}
|
||||
{ 0x07bd9b80, 0x721e, 0x4566, \
|
||||
{ 0xb7, 0x90, 0xed, 0x25, 0x10, 0xed, 0x99, 0xde } }
|
||||
|
||||
|
||||
class nsICSSImportRule : public nsICSSRule {
|
||||
|
@ -69,4 +69,4 @@ nsresult
|
|||
NS_NewCSSImportRule(nsICSSImportRule** aInstancePtrResult,
|
||||
const nsString& aURLSpec, nsMediaList* aMedia);
|
||||
|
||||
#endif /* nsICSSImportRule_h___ */
|
||||
#endif /* nsICSSImportRule_h */
|
||||
|
|
|
@ -37,16 +37,16 @@
|
|||
|
||||
/* internal interface for CSS @namespace rules */
|
||||
|
||||
#ifndef nsICSSNameSpaceRule_h___
|
||||
#define nsICSSNameSpaceRule_h___
|
||||
#ifndef nsICSSNameSpaceRule_h
|
||||
#define nsICSSNameSpaceRule_h
|
||||
|
||||
#include "nsICSSRule.h"
|
||||
|
||||
class nsIAtom;
|
||||
|
||||
// IID for the nsICSSNameSpaceRule interface {ec064d33-a6f1-459c-8f31-8289eed877de}
|
||||
#define NS_ICSS_NAMESPACE_RULE_IID \
|
||||
{0xec064d33, 0xa6f1, 0x459c, {0x8f, 0x31, 0x82, 0x89, 0xee, 0xd8, 0x77, 0xde}}
|
||||
{ 0x9be32bb3, 0x5729, 0x4853, \
|
||||
{ 0x87, 0x29, 0x9b, 0x46, 0x69, 0xad, 0x82, 0x1b } }
|
||||
|
||||
|
||||
class nsICSSNameSpaceRule : public nsICSSRule {
|
||||
|
@ -66,4 +66,4 @@ nsresult
|
|||
NS_NewCSSNameSpaceRule(nsICSSNameSpaceRule** aInstancePtrResult,
|
||||
nsIAtom* aPrefix, const nsString& aURLSpec);
|
||||
|
||||
#endif /* nsICSSNameSpaceRule_h___ */
|
||||
#endif /* nsICSSNameSpaceRule_h */
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
|
||||
/* internal interface for all rule types in a CSS style sheet */
|
||||
|
||||
#ifndef nsICSSRule_h___
|
||||
#define nsICSSRule_h___
|
||||
#ifndef nsICSSRule_h
|
||||
#define nsICSSRule_h
|
||||
|
||||
#include "nsIStyleRule.h"
|
||||
#include "nsIDOMCSSRule.h"
|
||||
|
@ -48,10 +48,10 @@ class nsICSSGroupRule;
|
|||
class nsAString;
|
||||
template<class T> struct already_AddRefed;
|
||||
|
||||
// IID for the nsICSSRule interface {471d733e-c138-4a50-9e1a-d13cbb65b526}
|
||||
// IID for the nsICSSRule interface
|
||||
#define NS_ICSS_RULE_IID \
|
||||
{ 0x471d733e, 0xc138, 0x4a50, \
|
||||
{ 0x9e, 0x1a, 0xd1, 0x3c, 0xbb, 0x65, 0xb5, 0x26 } }
|
||||
{ 0x1f560b20, 0xa829, 0x4b99, \
|
||||
{ 0x87, 0xbd, 0x8c, 0x87, 0x95, 0x2b, 0x3b, 0xb6 } }
|
||||
|
||||
|
||||
// inheriting from nsIStyleRule is only for style rules, not other rule types
|
||||
|
@ -81,7 +81,10 @@ public:
|
|||
virtual void SetStyleSheet(nsCSSStyleSheet* aSheet) = 0;
|
||||
virtual void SetParentRule(nsICSSGroupRule* aRule) = 0;
|
||||
|
||||
virtual nsresult Clone(nsICSSRule*& aClone) const = 0;
|
||||
/**
|
||||
* Clones |this|. Never returns NULL.
|
||||
*/
|
||||
virtual already_AddRefed<nsICSSRule> Clone() const = 0;
|
||||
|
||||
// Note that this returns null for inline style rules since they aren't
|
||||
// supposed to have a DOM rule representation (and our code wouldn't work).
|
||||
|
@ -102,4 +105,4 @@ nsresult
|
|||
NS_NewCSSCharsetRule(nsICSSRule** aInstancePtrResult,
|
||||
const nsAString& aEncoding);
|
||||
|
||||
#endif /* nsICSSRule_h___ */
|
||||
#endif /* nsICSSRule_h */
|
||||
|
|
|
@ -292,10 +292,10 @@ private:
|
|||
nsCSSSelectorList& operator=(const nsCSSSelectorList& aCopy);
|
||||
};
|
||||
|
||||
// 0512253d-ff15-45e7-abe8-f086ddb56762
|
||||
// 97eb9881-55fb-462c-be1a-b6309d42f8d0
|
||||
#define NS_ICSS_STYLE_RULE_IID \
|
||||
{ 0x0512253d, 0xff15, 0x45e7, \
|
||||
{ 0xab, 0xe8, 0xf0, 0x86, 0xdd, 0xb5, 0x67, 0x62 } }
|
||||
{ 0x97eb9881, 0x55fb, 0x462c, \
|
||||
{ 0xbe, 0x1a, 0xb6, 0x30, 0x9d, 0x42, 0xf8, 0xd0 } }
|
||||
|
||||
class nsICSSStyleRule : public nsICSSRule {
|
||||
public:
|
||||
|
|
Загрузка…
Ссылка в новой задаче