diff --git a/accessible/android/ProxyAccessibleWrap.h b/accessible/android/ProxyAccessibleWrap.h index e04ddc6a529b..27a6dacfc075 100644 --- a/accessible/android/ProxyAccessibleWrap.h +++ b/accessible/android/ProxyAccessibleWrap.h @@ -93,21 +93,18 @@ class DocProxyAccessibleWrap : public ProxyAccessibleWrap { : ProxyAccessibleWrap(aProxy) { mGenericTypes |= eDocument; - if (auto parent = ParentDocument()) { - mID = AcquireID(); - parent->AddID(mID, this); - } else { - // top level + if (aProxy->IsTopLevel()) { mID = kNoID; + } else { + mID = AcquireID(); } } virtual void Shutdown() override { if (mID) { - auto parent = ParentDocument(); - if (parent) { - MOZ_ASSERT(mID != kNoID, "A non root accessible always has a parent"); - parent->RemoveID(mID); + auto doc = static_cast(Proxy()); + if (!doc->IsTopLevel()) { + MOZ_ASSERT(mID != kNoID, "A non root accessible must have an id"); ReleaseID(mID); } } diff --git a/accessible/android/RootAccessibleWrap.cpp b/accessible/android/RootAccessibleWrap.cpp index f474cbf8f567..e39d107777c3 100644 --- a/accessible/android/RootAccessibleWrap.cpp +++ b/accessible/android/RootAccessibleWrap.cpp @@ -69,7 +69,12 @@ AccessibleWrap* RootAccessibleWrap::FindAccessibleById( if (!child) { break; } - acc = FindAccessibleById(child, aID); + // A child document's id is not in its parent document's hash table. + if (child->VirtualViewID() == aID) { + acc = child; + } else { + acc = FindAccessibleById(child, aID); + } } return acc;