- diff --git a/accessible/ipc/DocAccessibleParent.cpp b/accessible/ipc/DocAccessibleParent.cpp
- index a847c36..61e3db8 100644
- --- a/accessible/ipc/DocAccessibleParent.cpp
- +++ b/accessible/ipc/DocAccessibleParent.cpp
- @@ -266,14 +266,14 @@ DocAccessibleParent::Destroy()
- }
- bool
- -DocAccessibleParent::CheckDocTree() const
- +DocAccessibleParent::CheckDocTreeInternal() const
- {
- size_t childDocs = mChildDocs.Length();
- for (size_t i = 0; i < childDocs; i++) {
- if (!mChildDocs[i] || mChildDocs[i]->mParentDoc != this)
- return false;
- - if (!mChildDocs[i]->CheckDocTree()) {
- + if (!mChildDocs[i]->CheckDocTreeInternal()) {
- return false;
- }
- }
- @@ -281,5 +281,19 @@ DocAccessibleParent::CheckDocTree() const
- return true;
- }
- +bool
- +DocAccessibleParent::CheckDocTree() const
- +{
- + const DocAccessibleParent* doc = this;
- + while (doc->ParentDoc()) {
- + doc = doc->ParentDoc();
- + }
- +
- + if (!doc->mTopLevel) {
- + return false;
- + }
- +
- + return doc->CheckDocTreeInternal();
- +}
- } // a11y
- } // mozilla
- diff --git a/accessible/ipc/DocAccessibleParent.h b/accessible/ipc/DocAccessibleParent.h
- index f9e6cc5..0b80d4d 100644
- --- a/accessible/ipc/DocAccessibleParent.h
- +++ b/accessible/ipc/DocAccessibleParent.h
- @@ -72,8 +72,10 @@ public:
- void Destroy();
- virtual void ActorDestroy(ActorDestroyReason aWhy) override
- {
- + if (mShutdown)
- + return;
- +
- MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
- - if (!mShutdown)
- Destroy();
- }
- @@ -152,6 +154,7 @@ private:
- const nsTArray<AccessibleData>& aNewTree, uint32_t aIdx,
- uint32_t aIdxInParent);
- MOZ_WARN_UNUSED_RESULT bool CheckDocTree() const;
- + MOZ_WARN_UNUSED_RESULT bool CheckDocTreeInternal() const;
- nsTArray<DocAccessibleParent*> mChildDocs;
- DocAccessibleParent* mParentDoc;