remove disconnected autoPopovers during topMostPopoverAncestor algo #99
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.
Prior to this change, a popover removed from the document would still be in the autoPopovers set, and subsequently
topMostPopverAncestor
would return disconnected elements, causingcloseAllPopovers
to hit an infinite loop:hidePopover
is calledcloseAllPopovers
is calledtopMostPopoverAncestor
is called and returns disconnected element.hidePopover(topMost)
is called but returns false, as the element is disconnected.topMostPopoverAncestor
is called, but it returns the same element. Repeat step 4, infinite loop.This commit alters
topMostAutoPopover
to check if the element is disconnected, and remove it from the set if so, only returning the first connected element.hidePopover
is calledcloseAllPopovers
is calledtopMostPopoverAncestor
is called, the first element is disconnected, so it skips and returns the first connected element.hidePopover(topMost)
is called and returns true.Steps to test/reproduce
Please explain how to best reproduce the issue and/or test the changes locally (including the pages/URLs/views/states to review).
I've added a new test file "edge-cases.spec". This includes a test which fails on the current build (times out due to the browser hanging), but passes with the changes.
Show me
Provide screenshots/animated gifs/videos if necessary.
Special thanks to @hmaurer for giving me an easy repro to this one!