Issue #2765 - Part 2: Create a helper function for resolving the non-NAC style context of a given NAC

This commit is contained in:
Francis Dominic Fajardo 2025-06-26 21:01:56 +08:00 committed by roytam1
commit b2c435a189
2 changed files with 34 additions and 0 deletions

View file

@ -9337,3 +9337,28 @@ nsLayoutUtils::ComputeGeometryBox(nsIFrame* aFrame,
return r;
}
/* static */ nsStyleContext*
nsLayoutUtils::GetNonAnonymousStyleContext(nsIFrame* aFrame)
{
nsIContent* node = aFrame->GetContent();
MOZ_ASSERT(node, "No content for the given frame?");
while (node && node->IsInNativeAnonymousSubtree()) {
node = node->GetParent();
}
MOZ_ASSERT(node, "Native anonymous element with no originating node?");
if (nsIFrame* primaryFrame = node->GetPrimaryFrame()) {
return primaryFrame->StyleContext();
}
// If the element doesn't have primary frame, get the computed style
// from the element directly.
nsPresContext* pc = aFrame->PresContext();
MOZ_ASSERT(node == pc->Document()->GetRootElement(),
"Root element is the only case for this fallback "
"path to be triggered");
RefPtr<nsStyleContext> styleContext =
pc->StyleSet()->ResolveStyleFor(node->AsElement(), nullptr);
// Dropping the strong reference is fine because the style should be
// held strongly by the element.
return styleContext.get();
}

View file

@ -2878,6 +2878,15 @@ public:
return ResolveToLength<true>(aGap, aPercentageBasis);
}
/**
* Returns the style context associated with the nearest non-native-anonymous
* ancestor of the given frame.
*
* @param aFrame The frame associated with native anonymous content.
* @return The resolved style context of the nearest non-anonymous DOM ancestor.
*/
static nsStyleContext* GetNonAnonymousStyleContext(nsIFrame* aFrame);
private:
static uint32_t sFontSizeInflationEmPerLine;
static uint32_t sFontSizeInflationMinTwips;