summaryrefslogtreecommitdiffstats
path: root/layout/base/RestyleManager.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2020-04-17 05:01:17 -0400
committerMatt A. Tobin <email@mattatobin.com>2020-04-17 05:01:17 -0400
commit0d362ca50335d964a78dbba7e7d32574ee67899a (patch)
tree8b5de5f34019b97ad0b3c155c270a810608cd775 /layout/base/RestyleManager.cpp
parentde45820b64ab03768336c7242622ef9f499347cf (diff)
downloadUXP-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.cpp19
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();
}