summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dom/base/ChildIterator.cpp83
-rw-r--r--dom/base/ShadowRoot.cpp27
-rw-r--r--dom/base/nsContentUtils.cpp13
-rw-r--r--dom/base/nsContentUtils.h12
-rw-r--r--layout/base/RestyleManager.cpp4
-rw-r--r--layout/base/nsCSSFrameConstructor.cpp2
-rw-r--r--layout/base/nsFrameManager.cpp2
7 files changed, 27 insertions, 116 deletions
diff --git a/dom/base/ChildIterator.cpp b/dom/base/ChildIterator.cpp
index 7d3375fef..19156aff7 100644
--- a/dom/base/ChildIterator.cpp
+++ b/dom/base/ChildIterator.cpp
@@ -17,48 +17,6 @@
namespace mozilla {
namespace dom {
-class MatchedNodes {
-public:
- explicit MatchedNodes()
- : mIsContentElement(false), mChildrenElement(nullptr) {}
- explicit MatchedNodes(XBLChildrenElement* aInsertionPoint)
- : mIsContentElement(false), mChildrenElement(aInsertionPoint) {}
-
- uint32_t Length() const
- {
- return mChildrenElement ? mChildrenElement->InsertedChildrenLength() : 0;
- }
-
- nsIContent* operator[](int32_t aIndex) const
- {
- return mChildrenElement ? mChildrenElement->InsertedChild(aIndex) : nullptr;
- }
-
- bool IsEmpty() const
- {
- return mChildrenElement && !mChildrenElement->HasInsertedChildren();
- }
-protected:
- // Leftover from Shadow DOM v0.
- bool mIsContentElement;
- union {
- XBLChildrenElement* mChildrenElement;
- };
-};
-
-static inline MatchedNodes
-GetMatchedNodesForPoint(nsIContent* aContent)
-{
- if (aContent->NodeInfo()->Equals(nsGkAtoms::children, kNameSpaceID_XBL)) {
- // XBL case
- return MatchedNodes(static_cast<XBLChildrenElement*>(aContent));
- }
-
- return MatchedNodes();
- // Web components case
- // XXX handle <slot> element?
-}
-
ExplicitChildIterator::ExplicitChildIterator(const nsIContent* aParent,
bool aStartAtBeginning)
: mParent(aParent),
@@ -88,16 +46,18 @@ ExplicitChildIterator::GetNextChild()
return mChild;
}
- MatchedNodes assignedChildren = GetMatchedNodesForPoint(mChild);
- if (mIndexInInserted < assignedChildren.Length()) {
- return assignedChildren[mIndexInInserted++];
+ MOZ_ASSERT(mChild->IsActiveChildrenElement());
+ auto* childrenElement =
+ static_cast<XBLChildrenElement*>(mChild);
+ if (mIndexInInserted < childrenElement->InsertedChildrenLength()) {
+ return childrenElement->InsertedChild(mIndexInInserted++);
}
mIndexInInserted = 0;
mChild = mChild->GetNextSibling();
} else if (mDefaultChild) {
// If we're already in default content, check if there are more nodes there
MOZ_ASSERT(mChild);
- MOZ_ASSERT(nsContentUtils::IsContentInsertionPoint(mChild));
+ MOZ_ASSERT(mChild->IsActiveChildrenElement());
mDefaultChild = mDefaultChild->GetNextSibling();
if (mDefaultChild) {
@@ -128,15 +88,16 @@ ExplicitChildIterator::GetNextChild()
// Iterate until we find a non-insertion point, or an insertion point with
// content.
while (mChild) {
- if (nsContentUtils::IsContentInsertionPoint(mChild)) {
+ if (mChild->IsActiveChildrenElement()) {
// If the current child being iterated is a content insertion point
// then the iterator needs to return the nodes distributed into
// the content insertion point.
- MatchedNodes assignedChildren = GetMatchedNodesForPoint(mChild);
- if (!assignedChildren.IsEmpty()) {
+ auto* childrenElement =
+ static_cast<XBLChildrenElement*>(mChild);
+ if (childrenElement->HasInsertedChildren()) {
// Iterate through elements projected on insertion point.
mIndexInInserted = 1;
- return assignedChildren[0];
+ return childrenElement->InsertedChild(0);
}
// Insertion points inside fallback/default content
@@ -204,7 +165,7 @@ ExplicitChildIterator::Seek(const nsIContent* aChildToFind)
mIndexInInserted = 0;
mDefaultChild = nullptr;
mIsFirst = false;
- MOZ_ASSERT(!nsContentUtils::IsContentInsertionPoint(mChild));
+ MOZ_ASSERT(!mChild->IsActiveChildrenElement());
return true;
}
@@ -227,8 +188,9 @@ ExplicitChildIterator::Get() const
}
if (mIndexInInserted) {
- MatchedNodes assignedChildren = GetMatchedNodesForPoint(mChild);
- return assignedChildren[mIndexInInserted - 1];
+ MOZ_ASSERT(mChild->IsActiveChildrenElement());
+ auto* childrenElement = static_cast<XBLChildrenElement*>(mChild);
+ return childrenElement->InsertedChild(mIndexInInserted - 1);
}
return mDefaultChild ? mDefaultChild : mChild;
@@ -255,9 +217,10 @@ ExplicitChildIterator::GetPreviousChild()
// NB: mIndexInInserted points one past the last returned child so we need
// to look *two* indices back in order to return the previous child.
- MatchedNodes assignedChildren = GetMatchedNodesForPoint(mChild);
+ MOZ_ASSERT(mChild->IsActiveChildrenElement());
+ auto* childrenElement = static_cast<XBLChildrenElement*>(mChild);
if (--mIndexInInserted) {
- return assignedChildren[mIndexInInserted - 1];
+ return childrenElement->InsertedChild(mIndexInInserted - 1);
}
mChild = mChild->GetPreviousSibling();
} else if (mDefaultChild) {
@@ -291,14 +254,14 @@ ExplicitChildIterator::GetPreviousChild()
// Iterate until we find a non-insertion point, or an insertion point with
// content.
while (mChild) {
- if (nsContentUtils::IsContentInsertionPoint(mChild)) {
+ if (mChild->IsActiveChildrenElement()) {
// If the current child being iterated is a content insertion point
// then the iterator needs to return the nodes distributed into
// the content insertion point.
- MatchedNodes assignedChildren = GetMatchedNodesForPoint(mChild);
- if (!assignedChildren.IsEmpty()) {
- mIndexInInserted = assignedChildren.Length();
- return assignedChildren[mIndexInInserted - 1];
+ auto* childrenElement = static_cast<XBLChildrenElement*>(mChild);
+ if (childrenElement->HasInsertedChildren()) {
+ mIndexInInserted = childrenElement->InsertedChildrenLength();
+ return childrenElement->InsertedChild(mIndexInInserted - 1);
}
mDefaultChild = mChild->GetLastChild();
diff --git a/dom/base/ShadowRoot.cpp b/dom/base/ShadowRoot.cpp
index 12f35c197..f241dfcd5 100644
--- a/dom/base/ShadowRoot.cpp
+++ b/dom/base/ShadowRoot.cpp
@@ -533,33 +533,6 @@ ShadowRoot::StyleSheets()
return mStyleSheetList;
}
-/**
- * Returns whether the web components pool population algorithm
- * on the host would contain |aContent|. This function ignores
- * insertion points in the pool, thus should only be used to
- * test nodes that have not yet been distributed.
- */
-bool
-ShadowRoot::IsPooledNode(nsIContent* aContent) const
-{
- if (nsContentUtils::IsContentInsertionPoint(aContent)) {
- // Insertion points never end up in the pool.
- return false;
- }
-
- auto* host = GetHost();
- auto* container = aContent->GetParent();
- if (container == host && !aContent->IsRootOfAnonymousSubtree()) {
- // Children of the host will end up in the pool. We check to ensure
- // that the content is in the same anonymous tree as the container
- // because anonymous content may report its container as the host
- // but it may not be in the host's child list.
- return true;
- }
-
- return false;
-}
-
void
ShadowRoot::AttributeChanged(nsIDocument* aDocument,
Element* aElement,
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
index fa34063df..d28b34f3d 100644
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -7017,19 +7017,6 @@ nsContentUtils::GetHTMLEditor(nsPresContext* aPresContext)
return editor;
}
-bool
-nsContentUtils::IsContentInsertionPoint(nsIContent* aContent)
-{
- // Check if the content is a XBL insertion point.
- if (aContent->IsActiveChildrenElement()) {
- return true;
- }
-
- // Check if the content is a web components content insertion point.
- // XXX handle <slot>?
- return false;
-}
-
// static
bool
nsContentUtils::HasDistributedChildren(nsIContent* aContent)
diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h
index fe076f0dc..b58b0e0e3 100644
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -2415,18 +2415,6 @@ public:
static mozilla::LogModule* DOMDumpLog();
/**
- * Returns whether a content is an insertion point for XBL
- * bindings or web components ShadowRoot. In web components,
- * this corresponds to a <content> element that participates
- * in node distribution. In XBL this corresponds to an
- * <xbl:children> element in anonymous content.
- *
- * @param aContent The content to test for being an insertion point.
- */
- static bool IsContentInsertionPoint(nsIContent* aContent);
-
-
- /**
* Returns whether the children of the provided content are
* nodes that are distributed to Shadow DOM insertion points.
*/
diff --git a/layout/base/RestyleManager.cpp b/layout/base/RestyleManager.cpp
index 6520fe1f6..5c599e1ef 100644
--- a/layout/base/RestyleManager.cpp
+++ b/layout/base/RestyleManager.cpp
@@ -3489,7 +3489,7 @@ ElementRestyler::RestyleUndisplayedNodes(nsRestyleHint aChildRestyleHint,
// not have a frame and would not otherwise be pushed as an ancestor.
nsIContent* parent = undisplayed->mContent->GetParent();
TreeMatchContext::AutoAncestorPusher insertionPointPusher(mTreeMatchContext);
- if (parent && nsContentUtils::IsContentInsertionPoint(parent)) {
+ if (parent && parent->IsActiveChildrenElement()) {
insertionPointPusher.PushAncestorAndStyleScope(parent);
}
@@ -3715,7 +3715,7 @@ ElementRestyler::RestyleContentChildren(nsIFrame* aParent,
// nsPageFrame that does not have a content.
nsIContent* parent = child->GetContent() ? child->GetContent()->GetParent() : nullptr;
TreeMatchContext::AutoAncestorPusher insertionPointPusher(mTreeMatchContext);
- if (parent && nsContentUtils::IsContentInsertionPoint(parent)) {
+ if (parent && parent->IsActiveChildrenElement()) {
insertionPointPusher.PushAncestorAndStyleScope(parent);
}
diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp
index c7312dafb..fc458b5eb 100644
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -3821,7 +3821,7 @@ nsCSSFrameConstructor::ConstructFrameFromItemInternal(FrameConstructionItem& aIt
// AutoDisplayContentsAncestorPusher above.)
TreeMatchContext::AutoAncestorPusher
insertionPointPusher(aState.mTreeMatchContext);
- if (adcp.IsEmpty() && parent && nsContentUtils::IsContentInsertionPoint(parent)) {
+ if (adcp.IsEmpty() && parent && parent->IsActiveChildrenElement()) {
if (aState.mTreeMatchContext.mAncestorFilter.HasFilter()) {
insertionPointPusher.PushAncestorAndStyleScope(parent);
} else {
diff --git a/layout/base/nsFrameManager.cpp b/layout/base/nsFrameManager.cpp
index ce5c60bbc..be8cd7147 100644
--- a/layout/base/nsFrameManager.cpp
+++ b/layout/base/nsFrameManager.cpp
@@ -611,7 +611,7 @@ nsFrameManagerBase::UndisplayedMap::GetApplicableParent(nsIContent* aParent)
// be a <xbl:children> element) but the parent in the frame tree would be the
// insertion parent (parent of the <xbl:children> element). Here the children
// elements are normalized to the insertion parent to correct for the mismatch.
- if (aParent && nsContentUtils::IsContentInsertionPoint(aParent)) {
+ if (aParent && aParent->IsActiveChildrenElement()) {
return aParent->GetParent();
}