diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index 2cc378296cfb..7fe9e245f1c9 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -1498,13 +1498,19 @@ nsDocument::nsDocument(const char* aContentType) } } -static PLDHashOperator -ClearAllBoxObjects(nsIContent* aKey, nsPIBoxObject* aBoxObject, void* aUserArg) +void +nsDocument::ClearAllBoxObjects() { - if (aBoxObject) { - aBoxObject->Clear(); + if (mBoxObjectTable) { + for (auto iter = mBoxObjectTable->Iter(); !iter.Done(); iter.Next()) { + nsPIBoxObject* boxObject = iter.UserData(); + if (boxObject) { + boxObject->Clear(); + } + } + delete mBoxObjectTable; + mBoxObjectTable = nullptr; } - return PL_DHASH_NEXT; } nsIDocument::~nsIDocument() @@ -1653,10 +1659,7 @@ nsDocument::~nsDocument() delete mHeaderData; - if (mBoxObjectTable) { - mBoxObjectTable->EnumerateRead(ClearAllBoxObjects, nullptr); - delete mBoxObjectTable; - } + ClearAllBoxObjects(); mPendingTitleChangeEvent.Revoke(); @@ -1981,12 +1984,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDocument) NS_IMPL_CYCLE_COLLECTION_UNLINK(mPreloadingImages) - - if (tmp->mBoxObjectTable) { - tmp->mBoxObjectTable->EnumerateRead(ClearAllBoxObjects, nullptr); - delete tmp->mBoxObjectTable; - tmp->mBoxObjectTable = nullptr; - } + tmp->ClearAllBoxObjects(); if (tmp->mListenerManager) { tmp->mListenerManager->Disconnect(); diff --git a/dom/base/nsDocument.h b/dom/base/nsDocument.h index 0f20cb6e2a53..9eb1fe177ba7 100644 --- a/dom/base/nsDocument.h +++ b/dom/base/nsDocument.h @@ -1767,6 +1767,8 @@ private: // requestAnimationFrame, if it's OK to do so. void MaybeRescheduleAnimationFrameNotifications(); + void ClearAllBoxObjects(); + // Returns true if the scheme for the url for this document is "about" bool IsAboutPage();