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 selection shared between script and layout. This selection is managed by the DOM
node that maintains it, and can be modified from script. Once modified, layout is
expected to reflect the new selection visual on the next display list update.
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.