Support shadow DOM and same-origin iframes #79
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #78
This pull request enables the
ResizeObserver
polyfill to be used with targets inside the shadow roots and same origin iframes.The key implementation details:
Node.getRootNode()
and can be a main document, a shadow root, or a same-origin iframe document. The event listeners and mutation observers respect these root-node boundaries, hence each root has to be handled individually.ResizeObserverController
is split into two classes:GlobalResizeObserverController
(the global singleton used for all DOM roots) andResizeObserverController
(now used only for a single root). Most of the code inside theResizeObserverController
is completely unchanged - it simply uses the suppliedrootNode
instead of the globaldocument
andwindow
objects.IntersectionObserver
. It's not strictly necessary, but it helps to be notified when a node is moved between the roots. It's rather uncommon, but IMHO the cost of using a nativeIntersectionObserver
for this is relatively low.