Make nsICSSRule::Clone return the cloned value directly. (Bug 585137) r=bzbarsky a2.0=dbaron

This commit is contained in:
Ms2ger 2010-08-15 11:19:34 -04:00
Родитель ddf28f360f
Коммит e48ff47578
11 изменённых файлов: 79 добавлений и 125 удалений

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

@ -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) {
static_cast<nsCOMArray<nsICSSRule>*>(aArray)->AppendObject(clone);
NS_RELEASE(clone);
}
nsCOMPtr<nsICSSRule> clone = aRule->Clone();
static_cast<nsCOMArray<nsICSSRule>*>(aArray)->AppendObject(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) {
static_cast<nsCOMArray<nsICSSRule>*>(aArray)->AppendObject(clone);
NS_RELEASE(clone);
}
nsCOMPtr<nsICSSRule> clone = aRule->Clone();
static_cast<nsCOMArray<nsICSSRule>*>(aArray)->AppendObject(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}}
#define NS_ICSS_GROUP_RULE_IID \
{ 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}}
#define NS_ICSS_IMPORT_RULE_IID \
{ 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}}
#define NS_ICSS_NAMESPACE_RULE_IID \
{ 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}
#define NS_ICSS_RULE_IID \
{ 0x471d733e, 0xc138, 0x4a50, \
{ 0x9e, 0x1a, 0xd1, 0x3c, 0xbb, 0x65, 0xb5, 0x26 } }
// IID for the nsICSSRule interface
#define NS_ICSS_RULE_IID \
{ 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: