A chain of pseudo-elements up to two levels deep. This is used to represent cases
where a pseudo-element has its own child pseudo element (for instance
.div::after::marker). If both Self::primary and Self::secondary are None,
then this chain represents the element itself. Not all combinations of pseudo-elements
are possible and we may not be able to calculate a style for all
PseudoElementChains.
A wrapper so that layout can access only the methods that it should have access to. Layout must
only ever see these and must never see instances of LayoutDom.
FIXME(mrobinson): Send + Sync is required here for Layout 2020, but eventually it
should stop sending LayoutNodes to other threads and rely on ThreadSafeLayoutNode
or some other mechanism to ensure thread safety.
A thread-safe version of LayoutNode, used during flow construction. This type of layout
node does not allow any parents or siblings of nodes to be accessed, to avoid races.