зеркало из https://github.com/mozilla/pjs.git
Bug 686941: Make nsIDocument::mCachedRootElement a weak pointer. r=smaug
This commit is contained in:
Родитель
6e64d7840e
Коммит
b1c864d9e4
|
@ -527,13 +527,8 @@ public:
|
|||
/**
|
||||
* Return the root element for this document.
|
||||
*/
|
||||
Element *GetRootElement() const
|
||||
{
|
||||
return (mCachedRootElement &&
|
||||
mCachedRootElement->GetNodeParent() == this) ?
|
||||
reinterpret_cast<Element*>(mCachedRootElement.get()) :
|
||||
GetRootElementInternal();
|
||||
}
|
||||
Element *GetRootElement() const;
|
||||
|
||||
protected:
|
||||
virtual Element *GetRootElementInternal() const = 0;
|
||||
|
||||
|
@ -1644,9 +1639,7 @@ protected:
|
|||
nsIDocument* mParentDocument;
|
||||
|
||||
// A reference to the element last returned from GetRootElement().
|
||||
// This should be an Element, but that would force us to pull in
|
||||
// Element.h and therefore nsIContent.h.
|
||||
nsCOMPtr<nsINode> mCachedRootElement;
|
||||
mozilla::dom::Element* mCachedRootElement;
|
||||
|
||||
// We'd like these to be nsRefPtrs, but that'd require us to include
|
||||
// additional headers that we don't want to expose.
|
||||
|
|
|
@ -1825,7 +1825,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsDocument)
|
|||
}
|
||||
|
||||
// Traverse all nsIDocument pointer members.
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mCachedRootElement)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSecurityInfo)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDisplayDocument)
|
||||
|
||||
|
@ -1906,7 +1905,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDocument)
|
|||
tmp->mFirstChild = nsnull;
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mXPathEvaluatorTearoff)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mCachedRootElement)
|
||||
tmp->mCachedRootElement = nsnull; // Avoid a dangling pointer
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mDisplayDocument)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mFirstBaseNodeWithHref)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mDOMImplementation)
|
||||
|
@ -3396,6 +3395,13 @@ nsDocument::NodeName(nsAString& aNodeName)
|
|||
aNodeName.AssignLiteral("#document");
|
||||
}
|
||||
|
||||
Element*
|
||||
nsIDocument::GetRootElement() const
|
||||
{
|
||||
return (mCachedRootElement && mCachedRootElement->GetNodeParent() == this) ?
|
||||
mCachedRootElement : GetRootElementInternal();
|
||||
}
|
||||
|
||||
Element*
|
||||
nsDocument::GetRootElementInternal() const
|
||||
{
|
||||
|
@ -3405,7 +3411,7 @@ nsDocument::GetRootElementInternal() const
|
|||
for (i = mChildren.ChildCount(); i > 0; --i) {
|
||||
nsIContent* child = mChildren.ChildAt(i - 1);
|
||||
if (child->IsElement()) {
|
||||
const_cast<nsDocument*>(this)->mCachedRootElement = child;
|
||||
const_cast<nsDocument*>(this)->mCachedRootElement = child->AsElement();
|
||||
return child->AsElement();
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче