diff --git a/mozilla/content/base/src/nsDocumentViewer.cpp b/mozilla/content/base/src/nsDocumentViewer.cpp index 84c7f2c4cf8..7abf96689d0 100644 --- a/mozilla/content/base/src/nsDocumentViewer.cpp +++ b/mozilla/content/base/src/nsDocumentViewer.cpp @@ -1251,10 +1251,10 @@ NS_IMETHODIMP DocumentViewerImpl::SetUAStyleSheet(nsIStyleSheet* aUAStyleSheet) { NS_ASSERTION(aUAStyleSheet, "unexpected null pointer"); - if (aUAStyleSheet) { - nsCOMPtr sheet(do_QueryInterface(aUAStyleSheet)); + nsCOMPtr sheet(do_QueryInterface(aUAStyleSheet)); + if (sheet) { nsCOMPtr newSheet; - sheet->Clone(*getter_AddRefs(newSheet)); + sheet->Clone(nsnull, nsnull, nsnull, nsnull, getter_AddRefs(newSheet)); mUAStyleSheet = newSheet; } return NS_OK; diff --git a/mozilla/content/html/style/public/nsICSSStyleSheet.h b/mozilla/content/html/style/public/nsICSSStyleSheet.h index 6aa406a8ae2..a14b8608be3 100644 --- a/mozilla/content/html/style/public/nsICSSStyleSheet.h +++ b/mozilla/content/html/style/public/nsICSSStyleSheet.h @@ -87,7 +87,11 @@ public: // set default namespace for sheet (may be overridden by @namespace) NS_IMETHOD SetDefaultNameSpaceID(PRInt32 aDefaultNameSpaceID) = 0; - NS_IMETHOD Clone(nsICSSStyleSheet*& aClone) const = 0; + NS_IMETHOD Clone(nsICSSStyleSheet* aCloneParent, + nsICSSImportRule* aCloneOwnerRule, + nsIDocument* aCloneDocument, + nsIDOMNode* aCloneOwningNode, + nsICSSStyleSheet** aClone) const = 0; NS_IMETHOD IsModified(PRBool* aModified) const = 0; // returns the mDirty status of the sheet NS_IMETHOD SetModified(PRBool aModified) = 0; diff --git a/mozilla/content/html/style/src/nsCSSLoader.cpp b/mozilla/content/html/style/src/nsCSSLoader.cpp index 3a91e928b00..3c2bd3e45fe 100644 --- a/mozilla/content/html/style/src/nsCSSLoader.cpp +++ b/mozilla/content/html/style/src/nsCSSLoader.cpp @@ -981,7 +981,7 @@ CSSLoaderImpl::CreateSheet(nsIURI* aURI, sheet->GetComplete(complete); if (!modified || !complete) { // Proceed on failures; at worst we'll try to create one below - sheet->Clone(*aSheet); + sheet->Clone(nsnull, nsnull, nsnull, nsnull, aSheet); NS_ASSERTION(complete || aSheetState != eSheetComplete, "Sheet thinks it's not complete while we think it is"); } diff --git a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp index 501f5608066..5fecf9be641 100644 --- a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp @@ -845,7 +845,11 @@ public: NS_IMETHOD GetNameSpace(nsINameSpace*& aNameSpace) const; NS_IMETHOD SetDefaultNameSpaceID(PRInt32 aDefaultNameSpaceID); - NS_IMETHOD Clone(nsICSSStyleSheet*& aClone) const; + NS_IMETHOD Clone(nsICSSStyleSheet* aCloneParent, + nsICSSImportRule* aCloneOwnerRule, + nsIDocument* aCloneDocument, + nsIDOMNode* aCloneOwningNode, + nsICSSStyleSheet** aClone) const; NS_IMETHOD IsModified(PRBool* aSheetModified) const; NS_IMETHOD SetModified(PRBool aModified); @@ -864,7 +868,13 @@ public: // nsIDOMCSSStyleSheet interface NS_DECL_NSIDOMCSSSTYLESHEET -private: +private: + CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy, + nsICSSStyleSheet* aParentToUse, + nsICSSImportRule* aOwnerRuleToUse, + nsIDocument* aDocumentToUse, + nsIDOMNode* aOwningNodeToUse); + // These are not supported and are not implemented! CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy); CSSStyleSheetImpl& operator=(const CSSStyleSheetImpl& aCopy); @@ -1603,19 +1613,23 @@ CSSStyleSheetImpl::CSSStyleSheetImpl() mInner = new CSSStyleSheetInner(this); } -CSSStyleSheetImpl::CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy) +CSSStyleSheetImpl::CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy, + nsICSSStyleSheet* aParentToUse, + nsICSSImportRule* aOwnerRuleToUse, + nsIDocument* aDocumentToUse, + nsIDOMNode* aOwningNodeToUse) : nsICSSStyleSheet(), mRefCnt(0), mTitle(aCopy.mTitle), mMedia(nsnull), mFirstChild(nsnull), mNext(nsnull), - mParent(aCopy.mParent), - mOwnerRule(aCopy.mOwnerRule), + mParent(aParentToUse), + mOwnerRule(aOwnerRuleToUse), mImportsCollection(nsnull), // re-created lazily mRuleCollection(nsnull), // re-created lazily - mDocument(aCopy.mDocument), - mOwningNode(aCopy.mOwningNode), + mDocument(aDocumentToUse), + mOwningNode(aOwningNodeToUse), mDisabled(aCopy.mDisabled), mDirty(PR_FALSE), mInner(aCopy.mInner), @@ -1641,7 +1655,10 @@ CSSStyleSheetImpl::CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy) CSSStyleSheetImpl* otherChild = aCopy.mFirstChild; CSSStyleSheetImpl** ourSlot = &mFirstChild; do { - CSSStyleSheetImpl* child = new CSSStyleSheetImpl(*otherChild); + // XXX This is wrong; we should be keeping @import rules and + // sheets in sync! + CSSStyleSheetImpl* child = new CSSStyleSheetImpl(*otherChild, this, + nsnull, nsnull, nsnull); if (child) { NS_ADDREF(child); (*ourSlot) = child; @@ -2239,13 +2256,21 @@ CSSStyleSheetImpl::EnsureUniqueInner(void) } NS_IMETHODIMP -CSSStyleSheetImpl::Clone(nsICSSStyleSheet*& aClone) const +CSSStyleSheetImpl::Clone(nsICSSStyleSheet* aCloneParent, + nsICSSImportRule* aCloneOwnerRule, + nsIDocument* aCloneDocument, + nsIDOMNode* aCloneOwningNode, + nsICSSStyleSheet** aClone) const { - // XXX no, really need to clone - CSSStyleSheetImpl* clone = new CSSStyleSheetImpl(*this); + NS_PRECONDITION(aClone, "Null out param!"); + CSSStyleSheetImpl* clone = new CSSStyleSheetImpl(*this, + aCloneParent, + aCloneOwnerRule, + aCloneDocument, + aCloneOwningNode); if (clone) { - aClone = (nsICSSStyleSheet*)clone; - NS_ADDREF(aClone); + *aClone = NS_STATIC_CAST(nsICSSStyleSheet*, clone); + NS_ADDREF(*aClone); } return NS_OK; } diff --git a/mozilla/layout/base/nsDocumentViewer.cpp b/mozilla/layout/base/nsDocumentViewer.cpp index 84c7f2c4cf8..7abf96689d0 100644 --- a/mozilla/layout/base/nsDocumentViewer.cpp +++ b/mozilla/layout/base/nsDocumentViewer.cpp @@ -1251,10 +1251,10 @@ NS_IMETHODIMP DocumentViewerImpl::SetUAStyleSheet(nsIStyleSheet* aUAStyleSheet) { NS_ASSERTION(aUAStyleSheet, "unexpected null pointer"); - if (aUAStyleSheet) { - nsCOMPtr sheet(do_QueryInterface(aUAStyleSheet)); + nsCOMPtr sheet(do_QueryInterface(aUAStyleSheet)); + if (sheet) { nsCOMPtr newSheet; - sheet->Clone(*getter_AddRefs(newSheet)); + sheet->Clone(nsnull, nsnull, nsnull, nsnull, getter_AddRefs(newSheet)); mUAStyleSheet = newSheet; } return NS_OK; diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp index 3a91e928b00..3c2bd3e45fe 100644 --- a/mozilla/layout/style/nsCSSLoader.cpp +++ b/mozilla/layout/style/nsCSSLoader.cpp @@ -981,7 +981,7 @@ CSSLoaderImpl::CreateSheet(nsIURI* aURI, sheet->GetComplete(complete); if (!modified || !complete) { // Proceed on failures; at worst we'll try to create one below - sheet->Clone(*aSheet); + sheet->Clone(nsnull, nsnull, nsnull, nsnull, aSheet); NS_ASSERTION(complete || aSheetState != eSheetComplete, "Sheet thinks it's not complete while we think it is"); } diff --git a/mozilla/layout/style/nsCSSStyleSheet.cpp b/mozilla/layout/style/nsCSSStyleSheet.cpp index 501f5608066..5fecf9be641 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsCSSStyleSheet.cpp @@ -845,7 +845,11 @@ public: NS_IMETHOD GetNameSpace(nsINameSpace*& aNameSpace) const; NS_IMETHOD SetDefaultNameSpaceID(PRInt32 aDefaultNameSpaceID); - NS_IMETHOD Clone(nsICSSStyleSheet*& aClone) const; + NS_IMETHOD Clone(nsICSSStyleSheet* aCloneParent, + nsICSSImportRule* aCloneOwnerRule, + nsIDocument* aCloneDocument, + nsIDOMNode* aCloneOwningNode, + nsICSSStyleSheet** aClone) const; NS_IMETHOD IsModified(PRBool* aSheetModified) const; NS_IMETHOD SetModified(PRBool aModified); @@ -864,7 +868,13 @@ public: // nsIDOMCSSStyleSheet interface NS_DECL_NSIDOMCSSSTYLESHEET -private: +private: + CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy, + nsICSSStyleSheet* aParentToUse, + nsICSSImportRule* aOwnerRuleToUse, + nsIDocument* aDocumentToUse, + nsIDOMNode* aOwningNodeToUse); + // These are not supported and are not implemented! CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy); CSSStyleSheetImpl& operator=(const CSSStyleSheetImpl& aCopy); @@ -1603,19 +1613,23 @@ CSSStyleSheetImpl::CSSStyleSheetImpl() mInner = new CSSStyleSheetInner(this); } -CSSStyleSheetImpl::CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy) +CSSStyleSheetImpl::CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy, + nsICSSStyleSheet* aParentToUse, + nsICSSImportRule* aOwnerRuleToUse, + nsIDocument* aDocumentToUse, + nsIDOMNode* aOwningNodeToUse) : nsICSSStyleSheet(), mRefCnt(0), mTitle(aCopy.mTitle), mMedia(nsnull), mFirstChild(nsnull), mNext(nsnull), - mParent(aCopy.mParent), - mOwnerRule(aCopy.mOwnerRule), + mParent(aParentToUse), + mOwnerRule(aOwnerRuleToUse), mImportsCollection(nsnull), // re-created lazily mRuleCollection(nsnull), // re-created lazily - mDocument(aCopy.mDocument), - mOwningNode(aCopy.mOwningNode), + mDocument(aDocumentToUse), + mOwningNode(aOwningNodeToUse), mDisabled(aCopy.mDisabled), mDirty(PR_FALSE), mInner(aCopy.mInner), @@ -1641,7 +1655,10 @@ CSSStyleSheetImpl::CSSStyleSheetImpl(const CSSStyleSheetImpl& aCopy) CSSStyleSheetImpl* otherChild = aCopy.mFirstChild; CSSStyleSheetImpl** ourSlot = &mFirstChild; do { - CSSStyleSheetImpl* child = new CSSStyleSheetImpl(*otherChild); + // XXX This is wrong; we should be keeping @import rules and + // sheets in sync! + CSSStyleSheetImpl* child = new CSSStyleSheetImpl(*otherChild, this, + nsnull, nsnull, nsnull); if (child) { NS_ADDREF(child); (*ourSlot) = child; @@ -2239,13 +2256,21 @@ CSSStyleSheetImpl::EnsureUniqueInner(void) } NS_IMETHODIMP -CSSStyleSheetImpl::Clone(nsICSSStyleSheet*& aClone) const +CSSStyleSheetImpl::Clone(nsICSSStyleSheet* aCloneParent, + nsICSSImportRule* aCloneOwnerRule, + nsIDocument* aCloneDocument, + nsIDOMNode* aCloneOwningNode, + nsICSSStyleSheet** aClone) const { - // XXX no, really need to clone - CSSStyleSheetImpl* clone = new CSSStyleSheetImpl(*this); + NS_PRECONDITION(aClone, "Null out param!"); + CSSStyleSheetImpl* clone = new CSSStyleSheetImpl(*this, + aCloneParent, + aCloneOwnerRule, + aCloneDocument, + aCloneOwningNode); if (clone) { - aClone = (nsICSSStyleSheet*)clone; - NS_ADDREF(aClone); + *aClone = NS_STATIC_CAST(nsICSSStyleSheet*, clone); + NS_ADDREF(*aClone); } return NS_OK; } diff --git a/mozilla/layout/style/nsICSSStyleSheet.h b/mozilla/layout/style/nsICSSStyleSheet.h index 6aa406a8ae2..a14b8608be3 100644 --- a/mozilla/layout/style/nsICSSStyleSheet.h +++ b/mozilla/layout/style/nsICSSStyleSheet.h @@ -87,7 +87,11 @@ public: // set default namespace for sheet (may be overridden by @namespace) NS_IMETHOD SetDefaultNameSpaceID(PRInt32 aDefaultNameSpaceID) = 0; - NS_IMETHOD Clone(nsICSSStyleSheet*& aClone) const = 0; + NS_IMETHOD Clone(nsICSSStyleSheet* aCloneParent, + nsICSSImportRule* aCloneOwnerRule, + nsIDocument* aCloneDocument, + nsIDOMNode* aCloneOwningNode, + nsICSSStyleSheet** aClone) const = 0; NS_IMETHOD IsModified(PRBool* aModified) const = 0; // returns the mDirty status of the sheet NS_IMETHOD SetModified(PRBool aModified) = 0;