Commit 8dbc7656 authored by James Teh's avatar James Teh
Browse files

Bug 1821448: Improve handling of reentry in...

Bug 1821448: Improve handling of reentry in MsaaAccessible::VisitDocAccessibleParentDescendantsAtTopLevelInContentProcess. r=nlapre, a=dsmith

Differential Revision: https://phabricator.services.mozilla.com/D173652
parent 1caec12a
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -674,10 +674,16 @@ static bool VisitDocAccessibleParentDescendantsAtTopLevelInContentProcess(
    dom::BrowserParent* aBrowser, Callback aCallback) {
  // We can't use BrowserBridgeParent::VisitAllDescendants because it doesn't
  // provide a way to stop the search.
  const auto& bridges = aBrowser->ManagedPBrowserBridgeParent();
  return std::all_of(bridges.cbegin(), bridges.cend(), [&](const auto& key) {
    auto* bridge = static_cast<dom::BrowserBridgeParent*>(key);
    dom::BrowserParent* childBrowser = bridge->GetBrowserParent();
  const auto& rawBridges = aBrowser->ManagedPBrowserBridgeParent();
  nsTArray<RefPtr<dom::BrowserBridgeParent>> bridges(rawBridges.Count());
  for (const auto bridge : rawBridges) {
    bridges.AppendElement(static_cast<dom::BrowserBridgeParent*>(bridge));
  }
  return std::all_of(bridges.cbegin(), bridges.cend(), [&](const auto& bridge) {
    RefPtr<dom::BrowserParent> childBrowser = bridge->GetBrowserParent();
    if (!childBrowser) {
      return true;
    }
    DocAccessibleParent* childDocAcc = childBrowser->GetTopLevelDocAccessible();
    if (!childDocAcc || childDocAcc->IsShutdown()) {
      return true;