diff options
author | Matt A. Tobin <email@mattatobin.com> | 2020-04-17 05:01:17 -0400 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2020-04-17 05:01:17 -0400 |
commit | 0d362ca50335d964a78dbba7e7d32574ee67899a (patch) | |
tree | 8b5de5f34019b97ad0b3c155c270a810608cd775 /layout/base/RestyleManager.cpp | |
parent | de45820b64ab03768336c7242622ef9f499347cf (diff) | |
download | UXP-0d362ca50335d964a78dbba7e7d32574ee67899a.tar UXP-0d362ca50335d964a78dbba7e7d32574ee67899a.tar.gz UXP-0d362ca50335d964a78dbba7e7d32574ee67899a.tar.lz UXP-0d362ca50335d964a78dbba7e7d32574ee67899a.tar.xz UXP-0d362ca50335d964a78dbba7e7d32574ee67899a.zip |
Bug 1330843 - Allow JS to create NAC pseudo-elements
Tag #1375
Diffstat (limited to 'layout/base/RestyleManager.cpp')
-rw-r--r-- | layout/base/RestyleManager.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/layout/base/RestyleManager.cpp b/layout/base/RestyleManager.cpp index c3eeb8c71..16db4c18b 100644 --- a/layout/base/RestyleManager.cpp +++ b/layout/base/RestyleManager.cpp @@ -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(); } |