Change some nsIStyleSheet methods from returning AddRef-ed to un-AddRef-ed pointers, and some other cleanup. (Bug 239008) r=dbaron

This commit is contained in:
Craig Topper 2010-05-17 21:00:39 -07:00
Родитель bce6e63ce7
Коммит 94829365f8
10 изменённых файлов: 73 добавлений и 154 удалений

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

@ -2014,7 +2014,7 @@ nsDocument::ResetStylesheetsToURI(nsIURI* aURI)
// is probably the right thing to do.
// Now reset our inline style and attribute sheets.
nsresult rv;
nsresult rv = NS_OK;
nsStyleSet::sheetType attrSheetType = GetAttrSheetType();
if (mAttrStyleSheet) {
// Remove this sheet from all style sets
@ -2022,11 +2022,11 @@ nsDocument::ResetStylesheetsToURI(nsIURI* aURI)
if (shell) {
shell->StyleSet()->RemoveStyleSheet(attrSheetType, mAttrStyleSheet);
}
rv = mAttrStyleSheet->Reset(aURI);
mAttrStyleSheet->Reset(aURI);
} else {
rv = NS_NewHTMLStyleSheet(getter_AddRefs(mAttrStyleSheet), aURI, this);
NS_ENSURE_SUCCESS(rv, rv);
}
NS_ENSURE_SUCCESS(rv, rv);
// Don't use AddStyleSheet, since it'll put the sheet into style
// sets in the document level, which is not desirable here.
@ -2039,13 +2039,13 @@ nsDocument::ResetStylesheetsToURI(nsIURI* aURI)
shell->StyleSet()->
RemoveStyleSheet(nsStyleSet::eStyleAttrSheet, mStyleAttrStyleSheet);
}
rv = mStyleAttrStyleSheet->Reset(aURI);
mStyleAttrStyleSheet->Reset(aURI);
} else {
mStyleAttrStyleSheet = new nsHTMLCSSStyleSheet();
NS_ENSURE_TRUE(mStyleAttrStyleSheet, NS_ERROR_OUT_OF_MEMORY);
rv = mStyleAttrStyleSheet->Init(aURI, this);
NS_ENSURE_SUCCESS(rv, rv);
}
NS_ENSURE_SUCCESS(rv, rv);
// The loop over style sets below will handle putting this sheet
// into style sets as needed.

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

@ -42,15 +42,13 @@
#include "nsCSSStyleSheet.h"
nsCSSRule::nsCSSRule(void)
: mRefCnt(0),
mSheet(nsnull),
: mSheet(nsnull),
mParentRule(nsnull)
{
}
nsCSSRule::nsCSSRule(const nsCSSRule& aCopy)
: mRefCnt(0),
mSheet(aCopy.mSheet),
: mSheet(aCopy.mSheet),
mParentRule(aCopy.mParentRule)
{
}

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

@ -1082,8 +1082,8 @@ DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aSheetURI,
if (mRule) {
mRule->GetStyleSheet(*getter_AddRefs(sheet));
if (sheet) {
*aSheetURI = sheet->GetSheetURI().get();
*aBaseURI = sheet->GetBaseURI().get();
NS_IF_ADDREF(*aSheetURI = sheet->GetSheetURI());
NS_IF_ADDREF(*aBaseURI = sheet->GetBaseURI());
nsRefPtr<nsCSSStyleSheet> cssSheet(do_QueryObject(sheet));
if (cssSheet) {

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

@ -970,9 +970,7 @@ nsCSSStyleSheetInner::CreateNamespaceMap()
//
nsCSSStyleSheet::nsCSSStyleSheet()
: mRefCnt(0),
mTitle(),
mMedia(nsnull),
: mTitle(),
mParent(nsnull),
mOwnerRule(nsnull),
mRuleCollection(nsnull),
@ -991,9 +989,7 @@ nsCSSStyleSheet::nsCSSStyleSheet(const nsCSSStyleSheet& aCopy,
nsICSSImportRule* aOwnerRuleToUse,
nsIDocument* aDocumentToUse,
nsIDOMNode* aOwningNodeToUse)
: mRefCnt(0),
mTitle(aCopy.mTitle),
mMedia(nsnull),
: mTitle(aCopy.mTitle),
mParent(aParentToUse),
mOwnerRule(aOwnerRuleToUse),
mRuleCollection(nsnull), // re-created lazily
@ -1124,26 +1120,16 @@ nsCSSStyleSheet::SetPrincipal(nsIPrincipal* aPrincipal)
}
}
nsIPrincipal*
nsCSSStyleSheet::Principal() const
{
return mInner->mPrincipal;
}
/* virtual */ already_AddRefed<nsIURI>
/* virtual */ nsIURI*
nsCSSStyleSheet::GetSheetURI() const
{
nsIURI* sheetURI = mInner->mSheetURI;
NS_IF_ADDREF(sheetURI);
return sheetURI;
return mInner->mSheetURI;
}
/* virtual */ already_AddRefed<nsIURI>
/* virtual */ nsIURI*
nsCSSStyleSheet::GetBaseURI() const
{
nsIURI* baseURI = mInner->mBaseURI;
NS_IF_ADDREF(baseURI);
return baseURI;
return mInner->mBaseURI;
}
/* virtual */ void
@ -1216,17 +1202,15 @@ nsCSSStyleSheet::SetComplete()
}
}
/* virtual */ already_AddRefed<nsIStyleSheet>
/* virtual */ nsIStyleSheet*
nsCSSStyleSheet::GetParentSheet() const
{
NS_IF_ADDREF(mParent);
return mParent;
}
/* virtual */ already_AddRefed<nsIDocument>
/* virtual */ nsIDocument*
nsCSSStyleSheet::GetOwningDocument() const
{
NS_IF_ADDREF(mDocument);
return mDocument;
}
@ -1245,13 +1229,6 @@ nsCSSStyleSheet::SetOwningDocument(nsIDocument* aDocument)
}
}
already_AddRefed<nsICSSImportRule>
nsCSSStyleSheet::GetOwnerRule() const
{
NS_IF_ADDREF(mOwnerRule);
return mOwnerRule;
}
void
nsCSSStyleSheet::AppendStyleSheet(nsCSSStyleSheet* aSheet)
{
@ -1380,12 +1357,6 @@ nsCSSStyleSheet::GetStyleRuleAt(PRInt32 aIndex, nsICSSRule*& aRule) const
return NS_ERROR_ILLEGAL_VALUE;
}
nsXMLNameSpaceMap*
nsCSSStyleSheet::GetNameSpaceMap() const
{
return mInner->mNameSpaceMap;
}
PRInt32
nsCSSStyleSheet::StyleSheetCount() const
{
@ -1403,7 +1374,7 @@ nsCSSStyleSheet::StyleSheetCount() const
return count;
}
already_AddRefed<nsCSSStyleSheet>
nsCSSStyleSheet*
nsCSSStyleSheet::GetStyleSheetAt(PRInt32 aIndex) const
{
// XXX Ughh...an O(n^2) method for doing iteration. Again, we hope
@ -1415,7 +1386,6 @@ nsCSSStyleSheet::GetStyleSheetAt(PRInt32 aIndex) const
child = child->mNext;
}
NS_IF_ADDREF(child);
return child;
}
@ -1655,7 +1625,7 @@ nsCSSStyleSheet::GetHref(nsAString& aHref)
return NS_OK;
}
void
/* virtual */ void
nsCSSStyleSheet::GetTitle(nsString& aTitle) const
{
aTitle = mTitle;

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

@ -119,10 +119,10 @@ class CSSRuleListImpl;
struct ChildSheetListBuilder;
// CID for the nsCSSStyleSheet class
// 55f243d9-d985-490c-9eea-095c7fa35cf4
// ca926f30-2a7e-477e-8467-803fb32af20a
#define NS_CSS_STYLE_SHEET_IMPL_CID \
{ 0x55f243d9, 0xd985, 0x490c, \
{ 0x9e, 0xea, 0x09, 0x5c, 0x7f, 0xa3, 0x5c, 0xf4 } }
{ 0xca926f30, 0x2a7e, 0x477e, \
{ 0x84, 0x67, 0x80, 0x3f, 0xb3, 0x2a, 0xf2, 0x0a } }
class NS_FINAL_CLASS nsCSSStyleSheet : public nsIStyleSheet,
@ -137,8 +137,8 @@ public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CSS_STYLE_SHEET_IMPL_CID)
// nsIStyleSheet interface
virtual already_AddRefed<nsIURI> GetSheetURI() const;
virtual already_AddRefed<nsIURI> GetBaseURI() const;
virtual nsIURI* GetSheetURI() const;
virtual nsIURI* GetBaseURI() const;
virtual void GetTitle(nsString& aTitle) const;
virtual void GetType(nsString& aType) const;
virtual PRBool HasRules() const;
@ -146,8 +146,8 @@ public:
virtual void SetEnabled(PRBool aEnabled);
virtual PRBool IsComplete() const;
virtual void SetComplete();
virtual already_AddRefed<nsIStyleSheet> GetParentSheet() const; // may be null
virtual already_AddRefed<nsIDocument> GetOwningDocument() const; // may be null
virtual nsIStyleSheet* GetParentSheet() const; // may be null
virtual nsIDocument* GetOwningDocument() const; // may be null
virtual void SetOwningDocument(nsIDocument* aDocument);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@ -169,7 +169,7 @@ public:
nsresult ReplaceRuleInGroup(nsICSSGroupRule* aGroup, nsICSSRule* aOld, nsICSSRule* aNew);
PRInt32 StyleSheetCount() const;
already_AddRefed<nsCSSStyleSheet> GetStyleSheetAt(PRInt32 aIndex) const;
nsCSSStyleSheet* GetStyleSheetAt(PRInt32 aIndex) const;
/**
* SetURIs must be called on all sheets before parsing into them.
@ -186,16 +186,16 @@ public:
void SetPrincipal(nsIPrincipal* aPrincipal);
// Principal() never returns a null pointer.
nsIPrincipal* Principal() const;
nsIPrincipal* Principal() const { return mInner->mPrincipal; }
void SetTitle(const nsAString& aTitle) { mTitle = aTitle; }
void SetMedia(nsMediaList* aMedia);
void SetOwningNode(nsIDOMNode* aOwningNode) { mOwningNode = aOwningNode; /* Not ref counted */ }
void SetOwnerRule(nsICSSImportRule* aOwnerRule) { mOwnerRule = aOwnerRule; /* Not ref counted */ }
already_AddRefed<nsICSSImportRule> GetOwnerRule() const;
nsICSSImportRule* GetOwnerRule() const { return mOwnerRule; }
nsXMLNameSpaceMap* GetNameSpaceMap() const;
nsXMLNameSpaceMap* GetNameSpaceMap() const { return mInner->mNameSpaceMap; }
already_AddRefed<nsCSSStyleSheet> Clone(nsCSSStyleSheet* aCloneParent,
nsICSSImportRule* aCloneOwnerRule,

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

@ -60,17 +60,10 @@
using namespace mozilla::dom;
nsHTMLCSSStyleSheet::nsHTMLCSSStyleSheet()
: mRefCnt(0),
mURL(nsnull),
mDocument(nsnull)
: mDocument(nsnull)
{
}
nsHTMLCSSStyleSheet::~nsHTMLCSSStyleSheet()
{
NS_RELEASE(mURL);
}
NS_IMPL_ISUPPORTS2(nsHTMLCSSStyleSheet,
nsIStyleSheet,
nsIStyleRuleProcessor)
@ -140,7 +133,6 @@ nsHTMLCSSStyleSheet::Init(nsIURI* aURL, nsIDocument* aDocument)
mDocument = aDocument; // not refcounted!
mURL = aURL;
NS_ADDREF(mURL);
return NS_OK;
}
@ -179,27 +171,21 @@ nsHTMLCSSStyleSheet::MediumFeaturesChanged(nsPresContext* aPresContext,
}
nsresult
void
nsHTMLCSSStyleSheet::Reset(nsIURI* aURL)
{
NS_IF_RELEASE(mURL);
mURL = aURL;
NS_ADDREF(mURL);
return NS_OK;
}
/* virtual */ already_AddRefed<nsIURI>
/* virtual */ nsIURI*
nsHTMLCSSStyleSheet::GetSheetURI() const
{
NS_IF_ADDREF(mURL);
return mURL;
}
/* virtual */ already_AddRefed<nsIURI>
/* virtual */ nsIURI*
nsHTMLCSSStyleSheet::GetBaseURI() const
{
NS_IF_ADDREF(mURL);
return mURL;
}
@ -245,16 +231,15 @@ nsHTMLCSSStyleSheet::SetComplete()
}
// style sheet owner info
/* virtual */ already_AddRefed<nsIStyleSheet>
/* virtual */ nsIStyleSheet*
nsHTMLCSSStyleSheet::GetParentSheet() const
{
return nsnull;
}
/* virtual */ already_AddRefed<nsIDocument>
/* virtual */ nsIDocument*
nsHTMLCSSStyleSheet::GetOwningDocument() const
{
NS_IF_ADDREF(mDocument);
return mDocument;
}

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

@ -53,11 +53,11 @@ public:
NS_DECL_ISUPPORTS
nsresult Init(nsIURI* aURL, nsIDocument* aDocument);
nsresult Reset(nsIURI* aURL);
void Reset(nsIURI* aURL);
// nsIStyleSheet
virtual already_AddRefed<nsIURI> GetSheetURI() const;
virtual already_AddRefed<nsIURI> GetBaseURI() const;
virtual nsIURI* GetSheetURI() const;
virtual nsIURI* GetBaseURI() const;
virtual void GetTitle(nsString& aTitle) const;
virtual void GetType(nsString& aType) const;
virtual PRBool HasRules() const;
@ -65,8 +65,8 @@ public:
virtual void SetEnabled(PRBool aEnabled);
virtual PRBool IsComplete() const;
virtual void SetComplete();
virtual already_AddRefed<nsIStyleSheet> GetParentSheet() const; // will be null
virtual already_AddRefed<nsIDocument> GetOwningDocument() const;
virtual nsIStyleSheet* GetParentSheet() const; // will be null
virtual nsIDocument* GetOwningDocument() const;
virtual void SetOwningDocument(nsIDocument* aDocument);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@ -92,11 +92,8 @@ private:
nsHTMLCSSStyleSheet& operator=(const nsHTMLCSSStyleSheet& aCopy);
protected:
virtual ~nsHTMLCSSStyleSheet();
protected:
nsIURI* mURL;
nsIDocument* mDocument;
nsCOMPtr<nsIURI> mURL;
nsIDocument* mDocument;
};
#endif /* !defined(nsHTMLCSSStyleSheet_h_) */

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

@ -176,12 +176,7 @@ static PLDHashTableOps MappedAttrTable_Ops = {
// -----------------------------------------------------------
nsHTMLStyleSheet::nsHTMLStyleSheet(void)
: mURL(nsnull),
mDocument(nsnull),
mLinkRule(nsnull),
mVisitedRule(nsnull),
mActiveRule(nsnull),
mDocumentColorRule(nsnull)
: mDocument(nsnull)
{
mMappedAttrTable.ops = nsnull;
}
@ -192,20 +187,11 @@ nsHTMLStyleSheet::Init()
mTableTHRule = new TableTHRule();
if (!mTableTHRule)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(mTableTHRule);
return NS_OK;
}
nsHTMLStyleSheet::~nsHTMLStyleSheet()
{
NS_IF_RELEASE(mURL);
NS_IF_RELEASE(mLinkRule);
NS_IF_RELEASE(mVisitedRule);
NS_IF_RELEASE(mActiveRule);
NS_IF_RELEASE(mDocumentColorRule);
NS_IF_RELEASE(mTableTHRule);
if (mMappedAttrTable.ops)
PL_DHashTableFinish(&mMappedAttrTable);
}
@ -271,10 +257,8 @@ nsHTMLStyleSheet::RulesMatching(ElementRuleProcessorData* aData)
&bodyColor);
if (NS_SUCCEEDED(rv) &&
(!mDocumentColorRule || bodyColor != mDocumentColorRule->mColor)) {
NS_IF_RELEASE(mDocumentColorRule);
mDocumentColorRule = new HTMLColorRule();
if (mDocumentColorRule) {
NS_ADDREF(mDocumentColorRule);
mDocumentColorRule->mColor = bodyColor;
}
}
@ -374,17 +358,15 @@ nsHTMLStyleSheet::RulesMatching(XULTreeRuleProcessorData* aData)
#endif
// nsIStyleSheet api
/* virtual */ already_AddRefed<nsIURI>
/* virtual */ nsIURI*
nsHTMLStyleSheet::GetSheetURI() const
{
NS_IF_ADDREF(mURL);
return mURL;
}
/* virtual */ already_AddRefed<nsIURI>
/* virtual */ nsIURI*
nsHTMLStyleSheet::GetBaseURI() const
{
NS_IF_ADDREF(mURL);
return mURL;
}
@ -428,16 +410,15 @@ nsHTMLStyleSheet::SetComplete()
{
}
/* virtual */ already_AddRefed<nsIStyleSheet>
/* virtual */ nsIStyleSheet*
nsHTMLStyleSheet::GetParentSheet() const
{
return nsnull;
}
/* virtual */ already_AddRefed<nsIDocument>
/* virtual */ nsIDocument*
nsHTMLStyleSheet::GetOwningDocument() const
{
NS_IF_ADDREF(mDocument);
return mDocument;
}
@ -459,28 +440,23 @@ nsHTMLStyleSheet::Init(nsIURI* aURL, nsIDocument* aDocument)
mDocument = aDocument; // not refcounted!
mURL = aURL;
NS_ADDREF(mURL);
return NS_OK;
}
nsresult
void
nsHTMLStyleSheet::Reset(nsIURI* aURL)
{
NS_IF_RELEASE(mURL);
mURL = aURL;
NS_ADDREF(mURL);
NS_IF_RELEASE(mLinkRule);
NS_IF_RELEASE(mVisitedRule);
NS_IF_RELEASE(mActiveRule);
NS_IF_RELEASE(mDocumentColorRule);
mLinkRule = nsnull;
mVisitedRule = nsnull;
mActiveRule = nsnull;
mDocumentColorRule = nsnull;
if (mMappedAttrTable.ops) {
PL_DHashTableFinish(&mMappedAttrTable);
mMappedAttrTable.ops = nsnull;
}
return NS_OK;
}
nsresult
@ -489,13 +465,11 @@ nsHTMLStyleSheet::SetLinkColor(nscolor aColor)
if (mLinkRule) {
if (mLinkRule->mColor == aColor)
return NS_OK;
NS_RELEASE(mLinkRule);
}
mLinkRule = new HTMLColorRule();
if (!mLinkRule)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(mLinkRule);
mLinkRule->mColor = aColor;
return NS_OK;
@ -508,13 +482,11 @@ nsHTMLStyleSheet::SetActiveLinkColor(nscolor aColor)
if (mActiveRule) {
if (mActiveRule->mColor == aColor)
return NS_OK;
NS_RELEASE(mActiveRule);
}
mActiveRule = new HTMLColorRule();
if (!mActiveRule)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(mActiveRule);
mActiveRule->mColor = aColor;
return NS_OK;
@ -526,13 +498,11 @@ nsHTMLStyleSheet::SetVisitedLinkColor(nscolor aColor)
if (mVisitedRule) {
if (mVisitedRule->mColor == aColor)
return NS_OK;
NS_RELEASE(mVisitedRule);
}
mVisitedRule = new HTMLColorRule();
if (!mVisitedRule)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(mVisitedRule);
mVisitedRule->mColor = aColor;
return NS_OK;

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

@ -61,8 +61,8 @@ public:
NS_DECL_ISUPPORTS
// nsIStyleSheet api
virtual already_AddRefed<nsIURI> GetSheetURI() const;
virtual already_AddRefed<nsIURI> GetBaseURI() const;
virtual nsIURI* GetSheetURI() const;
virtual nsIURI* GetBaseURI() const;
virtual void GetTitle(nsString& aTitle) const;
virtual void GetType(nsString& aType) const;
virtual PRBool HasRules() const;
@ -70,8 +70,8 @@ public:
virtual void SetEnabled(PRBool aEnabled);
virtual PRBool IsComplete() const;
virtual void SetComplete();
virtual already_AddRefed<nsIStyleSheet> GetParentSheet() const; // will be null
virtual already_AddRefed<nsIDocument> GetOwningDocument() const;
virtual nsIStyleSheet* GetParentSheet() const; // will be null
virtual nsIDocument* GetOwningDocument() const;
virtual void SetOwningDocument(nsIDocument* aDocumemt);
#ifdef DEBUG
virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
@ -92,7 +92,7 @@ public:
PRBool* aRulesChanged);
nsresult Init(nsIURI* aURL, nsIDocument* aDocument);
nsresult Reset(nsIURI* aURL);
void Reset(nsIURI* aURL);
nsresult SetLinkColor(nscolor aColor);
nsresult SetActiveLinkColor(nscolor aColor);
nsresult SetVisitedLinkColor(nscolor aColor);
@ -153,15 +153,15 @@ private:
NS_IMETHOD MapRuleInfoInto(nsRuleData* aRuleData);
};
nsIURI* mURL;
nsIDocument* mDocument;
HTMLColorRule* mLinkRule;
HTMLColorRule* mVisitedRule;
HTMLColorRule* mActiveRule;
HTMLColorRule* mDocumentColorRule;
TableTHRule* mTableTHRule;
nsCOMPtr<nsIURI> mURL;
nsIDocument* mDocument;
nsRefPtr<HTMLColorRule> mLinkRule;
nsRefPtr<HTMLColorRule> mVisitedRule;
nsRefPtr<HTMLColorRule> mActiveRule;
nsRefPtr<HTMLColorRule> mDocumentColorRule;
nsRefPtr<TableTHRule> mTableTHRule;
PLDHashTable mMappedAttrTable;
PLDHashTable mMappedAttrTable;
};
// XXX convenience method. Calls Initialize() automatically.

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

@ -49,13 +49,12 @@
class nsString;
class nsIURI;
class nsIDocument;
template<class T> struct already_AddRefed;
// IID for the nsIStyleSheet interface
// 5de8de51-1f82-4e3d-9544-9a5bb07b4400
// 3eb34a60-04bd-41d9-9f60-882694e61c38
#define NS_ISTYLE_SHEET_IID \
{ 0x5de8de51, 0x1f82, 0x4e3d, \
{ 0x95, 0x44, 0x9a, 0x5b, 0xb0, 0x7b, 0x44, 0x00 } }
{ 0x3eb34a60, 0x04bd, 0x41d9, \
{ 0x9f, 0x60, 0x88, 0x26, 0x94, 0xe6, 0x1c, 0x38 } }
/**
* A style sheet is a thing associated with a document that has style
@ -70,8 +69,8 @@ public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISTYLE_SHEET_IID)
// basic style sheet data
virtual already_AddRefed<nsIURI> GetSheetURI() const = 0;
virtual already_AddRefed<nsIURI> GetBaseURI() const = 0;
virtual nsIURI* GetSheetURI() const = 0;
virtual nsIURI* GetBaseURI() const = 0;
virtual void GetTitle(nsString& aTitle) const = 0;
virtual void GetType(nsString& aType) const = 0;
virtual PRBool HasRules() const = 0;
@ -103,8 +102,8 @@ public:
virtual void SetComplete() = 0;
// style sheet owner info
virtual already_AddRefed<nsIStyleSheet> GetParentSheet() const = 0; // may be null
virtual already_AddRefed<nsIDocument> GetOwningDocument() const = 0; // may be null
virtual nsIStyleSheet* GetParentSheet() const = 0; // may be null
virtual nsIDocument* GetOwningDocument() const = 0; // may be null
virtual void SetOwningDocument(nsIDocument* aDocument) = 0;
#ifdef DEBUG