зеркало из https://github.com/mozilla/gecko-dev.git
bug 1184217 - make CheckDocTree check the entire document tree not just the subtree r=davidb
This commit is contained in:
Родитель
2d0ba23745
Коммит
971e419e21
|
@ -439,22 +439,6 @@ DocAccessibleParent::Destroy()
|
||||||
GetAccService()->RemoteDocShutdown(this);
|
GetAccService()->RemoteDocShutdown(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
DocAccessibleParent::CheckDocTree() 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()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
xpcAccessibleGeneric*
|
xpcAccessibleGeneric*
|
||||||
DocAccessibleParent::GetXPCAccessible(ProxyAccessible* aProxy)
|
DocAccessibleParent::GetXPCAccessible(ProxyAccessible* aProxy)
|
||||||
{
|
{
|
||||||
|
@ -464,6 +448,42 @@ DocAccessibleParent::GetXPCAccessible(ProxyAccessible* aProxy)
|
||||||
return doc->GetXPCAccessible(aProxy);
|
return doc->GetXPCAccessible(aProxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
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]->CheckDocTreeInternal()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const DocAccessibleParent*
|
||||||
|
DocAccessibleParent::CheckTopDoc() const
|
||||||
|
{
|
||||||
|
const DocAccessibleParent* doc = this;
|
||||||
|
while (doc->ParentDoc()) {
|
||||||
|
doc = doc->ParentDoc();
|
||||||
|
}
|
||||||
|
|
||||||
|
MOZ_DIAGNOSTIC_ASSERT(doc->mTopLevel);
|
||||||
|
MOZ_DIAGNOSTIC_ASSERT(DocManager::TopLevelRemoteDocs()->Contains(doc));
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
DocAccessibleParent::CheckDocTree() const
|
||||||
|
{
|
||||||
|
return CheckTopDoc()->CheckDocTreeInternal();
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(XP_WIN)
|
#if defined(XP_WIN)
|
||||||
/**
|
/**
|
||||||
* @param aCOMProxy COM Proxy to the document in the content process.
|
* @param aCOMProxy COM Proxy to the document in the content process.
|
||||||
|
|
|
@ -87,9 +87,12 @@ public:
|
||||||
void Destroy();
|
void Destroy();
|
||||||
virtual void ActorDestroy(ActorDestroyReason aWhy) override
|
virtual void ActorDestroy(ActorDestroyReason aWhy) override
|
||||||
{
|
{
|
||||||
|
if (mShutdown) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
MOZ_DIAGNOSTIC_ASSERT(CheckDocTree());
|
||||||
if (!mShutdown)
|
Destroy();
|
||||||
Destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -177,8 +180,10 @@ private:
|
||||||
uint32_t AddSubtree(ProxyAccessible* aParent,
|
uint32_t AddSubtree(ProxyAccessible* aParent,
|
||||||
const nsTArray<AccessibleData>& aNewTree, uint32_t aIdx,
|
const nsTArray<AccessibleData>& aNewTree, uint32_t aIdx,
|
||||||
uint32_t aIdxInParent);
|
uint32_t aIdxInParent);
|
||||||
MOZ_MUST_USE bool CheckDocTree() const;
|
|
||||||
xpcAccessibleGeneric* GetXPCAccessible(ProxyAccessible* aProxy);
|
xpcAccessibleGeneric* GetXPCAccessible(ProxyAccessible* aProxy);
|
||||||
|
MOZ_MUST_USE bool CheckDocTree() const;
|
||||||
|
MOZ_MUST_USE bool CheckDocTreeInternal() const;
|
||||||
|
const DocAccessibleParent* CheckTopDoc() const;
|
||||||
|
|
||||||
nsTArray<DocAccessibleParent*> mChildDocs;
|
nsTArray<DocAccessibleParent*> mChildDocs;
|
||||||
DocAccessibleParent* mParentDoc;
|
DocAccessibleParent* mParentDoc;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче