Bug 1330843 - Allow JS to create NAC pseudo-elements

Tag #1375
This commit is contained in:
Matt A. Tobin 2020-04-17 05:01:17 -04:00 committed by Roy Tam
commit c37b4d0c63
8 changed files with 115 additions and 4 deletions

View file

@ -1062,6 +1062,25 @@ ElementForStyleContext(nsIContent* aParentContent,
return f->GetContent()->AsElement();
}
Element* frameElement = aFrame->GetContent()->AsElement();
if (frameElement->IsNativeAnonymous() &&
nsCSSPseudoElements::PseudoElementIsJSCreatedNAC(aPseudoType)) {
// NAC-implemented pseudos use the closest non-NAC element as their
// element to inherit from.
//
// FIXME(heycam): In theory we shouldn't need to limit this only to
// JS-created pseudo-implementing NAC, as all pseudo-implementing
// should use the closest non-native anonymous ancestor element as
// its originating element. But removing that part of the condition
// reveals some bugs in style resultion with display:contents and
// XBL. See bug 1345809.
Element* originatingElement =
nsContentUtils::GetClosestNonNativeAnonymousAncestor(frameElement);
if (originatingElement) {
return originatingElement;
}
}
if (aParentContent) {
return aParentContent->AsElement();
}