diff --git a/accessible/base/nsAccessibilityService.cpp b/accessible/base/nsAccessibilityService.cpp index af67977eee79..076e3a8af926 100644 --- a/accessible/base/nsAccessibilityService.cpp +++ b/accessible/base/nsAccessibilityService.cpp @@ -1395,14 +1395,19 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame, table = aContext->Parent(); if (table) { - nsIContent* parentContent = aContent->GetParent(); - nsIFrame* parentFrame = parentContent->GetPrimaryFrame(); - if (!parentFrame->IsTableWrapperFrame()) { - parentContent = parentContent->GetParent(); + nsIContent* parentContent = aContent->GetParentOrHostNode()->AsContent(); + nsIFrame* parentFrame = nullptr; + if (parentContent) { parentFrame = parentContent->GetPrimaryFrame(); + if (!parentFrame || !parentFrame->IsTableWrapperFrame()) { + parentContent = parentContent->GetParentOrHostNode()->AsContent(); + if (parentContent) { + parentFrame = parentContent->GetPrimaryFrame(); + } + } } - if (parentFrame->IsTableWrapperFrame() && + if (parentFrame && parentFrame->IsTableWrapperFrame() && table->GetContent() == parentContent) { newAcc = new HTMLTableRowAccessible(aContent, document); } diff --git a/accessible/tests/mochitest/elm/test_shadowroot_subframe.html b/accessible/tests/mochitest/elm/test_shadowroot_subframe.html index 3a48d4879757..fe158f2cf458 100644 --- a/accessible/tests/mochitest/elm/test_shadowroot_subframe.html +++ b/accessible/tests/mochitest/elm/test_shadowroot_subframe.html @@ -24,6 +24,16 @@ ], }); + // Shadow root boundary between table and row + testElm("table", { + role: ROLE_TABLE, + children: [ + { + role: ROLE_ROW, + }, + ], + }); + SimpleTest.finish(); } @@ -33,6 +43,8 @@
+
+