summaryrefslogtreecommitdiff
path: root/dom
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-09-11 15:33:44 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-09-11 15:33:44 +0200
commita6d4e65dbfccc77c027bd827f3ea6be0e8df2838 (patch)
tree2762d493a9b8ad96268f5a5f60be86e9c9866293 /dom
parent9830cd079d8306abc223461190553af64b6fd0ca (diff)
downloaduxp-a6d4e65dbfccc77c027bd827f3ea6be0e8df2838.tar.gz
Bug 1466991 - Part 1: Factor out ShouldUseXBLScope.
Diffstat (limited to 'dom')
-rw-r--r--dom/base/nsIDocument.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/dom/base/nsIDocument.h b/dom/base/nsIDocument.h
index 7a73fae71f..e5d12ab8f6 100644
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -3439,13 +3439,29 @@ nsINode::OwnerDocAsNode() const
return OwnerDoc();
}
+// ShouldUseXBLScope is defined here as a template so that we can get the faster
+// version of IsInAnonymousSubtree if we're statically known to be an
+// nsIContent. we could try defining ShouldUseXBLScope separately on nsINode
+// and nsIContent, but then we couldn't put its nsINode implementation here
+// (because this header does not include nsIContent) and we can't put it in
+// nsIContent.h, because the definition of nsIContent::IsInAnonymousSubtree is
+// in nsIContentInlines.h. And then we get include hell from people trying to
+// call nsINode::GetParentObject but not including nsIContentInlines.h and with
+// no really good way to include it.
+template<typename T>
+inline bool ShouldUseXBLScope(const T* aNode)
+{
+ return aNode->IsInAnonymousSubtree() &&
+ !aNode->IsAnonymousContentInSVGUseSubtree();
+}
+
inline mozilla::dom::ParentObject
nsINode::GetParentObject() const
{
mozilla::dom::ParentObject p(OwnerDoc());
// Note that mUseXBLScope is a no-op for chrome, and other places where we
// don't use XBL scopes.
- p.mUseXBLScope = IsInAnonymousSubtree() && !IsAnonymousContentInSVGUseSubtree();
+ p.mUseXBLScope = ShouldUseXBLScope(this);
return p;
}