Open Bug 1687713 Opened 4 years ago Updated 4 years ago

Telling focus to enter subtree in browser.xhtml when you've used `dialog.showModal` loops forever

Categories

(Core :: DOM: UI Events & Focus Handling, defect, P3)

Desktop
macOS
defect

Tracking

()

Tracking Status
firefox86 --- affected

People

(Reporter: Gijs, Unassigned)

References

Details

Attachments

(1 file)

FocusNavigation moz_log looks something like this (excerpt):

[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable popupgroup:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 0
[Parent 5863: Main Thread]: D/FocusNavigation GetNextTabbable: html
[Parent 5863: Main Thread]: D/FocusNavigation   tabindex: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable html:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable body:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable popupset:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbaritem:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable spacer:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable tabs:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable arrowscrollbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbartabstop:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbaritem:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarspring:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbaritem:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbartabstop:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable moz-input-box:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable input:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable #text:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable input:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable br:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable #text:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbartabstop:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbartabstop:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarspring:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable stack:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbaritem:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable stack:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbartabstop:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable label:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbaritem:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable label:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable toolbarbutton:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable image:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable _moz_generated_content_after:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable _moz_generated_content_after:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable #text:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable tabbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable tabpanels:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable notificationbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable stack:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable splitter:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable notificationbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable stack:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable stack:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable dialog:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollcorner:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable dialog:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollcorner:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable dialog:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollcorner:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable dialog:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollbar:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable slider:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable thumb:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable scrollcorner:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable label:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable splitter:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable hbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable notificationbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable stack:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable browser:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable #text:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable vbox:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable div:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1
[Parent 5863: Main Thread]: D/FocusNavigation Next Tabbable popupgroup:
[Parent 5863: Main Thread]: D/FocusNavigation   with tabindex: -1 expected: 1

and then it repeats, with expected: 0 instead of 1, and then again, with 1 instead of 0, etc. etc. ad infinitum.

STR:

  1. apply attached patch
  2. open web console (accel-shift-k / cmd-opt-k)
  3. run alert('hi')

ER:
no infinite loop

AR:
infinite loop. :-(

This is tripped by https://searchfox.org/mozilla-central/rev/2c06b16a0c15ae340a0532e319cbf89ef9d21b68/toolkit/content/widgets/dialog.js#269 .
I suspect this is because there's nowhere in the doc to put focus, but that shouldn't infinite loop, it should no-op or error or something else reasonable.

See Also: → 1685313

Feel free to change Priority/Severity if not appropriate.

Severity: -- → S3
Priority: -- → P3

It appears that the patches I put up on bug 1685313 when I thought I was done (and wasn't seeing this issue in manual testing), together with patches to adapt tests for the new dialogs, also trip this bug, so fixing this is going to block landing the patches on bug 1685313 . I'm happy to help fix this but am not sure where to start...

Blocks: 1685313
See Also: 1685313

When ShowModal() is called, we run the dialog focusing steps here https://searchfox.org/mozilla-central/source/dom/html/HTMLDialogElement.cpp#122, basically it tries to focus somewhere in the dialog, and move the focus to the body if nothing is focusable. I think this is a good place to start? I think we might need some special handling for chrome documents.

Gijs I can take a look at this if you don't have cycles.

The log above suggests that this would be a bug in nsFocusManager::DetermineElementToMoveFocus or nsFocusManager::GetNextTabbableContent. Unfortunately this code was changed significantly when handling shadow elements so I'm not familiar with much of it anymore.

It looks based on https://searchfox.org/mozilla-central/rev/bd92b9b4a3c2ff022e830c1358968a84e6e69c95/dom/base/nsFocusManager.cpp#3521-3524 that we set mayFocusRoot to true to indicate we should be allowed to focus the root, to avoid infinite loops. But in my case, forDocumentNavigation is false, and so we never enter the block above there, as it specifies:

      if (forDocumentNavigation && (forward || mayFocusRoot || popupFrame)) {
        Element* root = GetRootForFocus(piWindow, doc, true, true);
        return FocusFirst(root, aNextContent);
      }

Visually, when this issue happens, the entire parent window is greyed out but there is no visible dialog. I think either none of the content of the HTML dialog element I added is visible (and thus focusable) at that point, or it's been removed and the dialog is in the process of being closed, when the call to focus something fires.

Either way, there isn't anything focusable in the doc, and I don't think the code here copes with that...

But in my case, forDocumentNavigation is false, and so we never enter the block above there, as it specifies:

      if (forDocumentNavigation && (forward || mayFocusRoot || popupFrame)) {
        Element* root = GetRootForFocus(piWindow, doc, true, true);
        return FocusFirst(root, aNextContent);
      }

That's correct. This part of the code iterates between different documents. The check above only matters when focus-switching between documents (F6 key). For normal tab navigation, we want to loop back around into the starting document again and continue until the specific starting element is reached again.

We should be bailing out when 'aOriginalStartContent' is reached in GetNextTabbableContent, and aOriginalStartContent should be returned. Then, we should be returning here: https://searchfox.org/mozilla-central/rev/bd92b9b4a3c2ff022e830c1358968a84e6e69c95/dom/base/nsFocusManager.cpp#3404 without setting aNextContent.

(In reply to Neil Deakin from comment #6)

But in my case, forDocumentNavigation is false, and so we never enter the block above there, as it specifies:

      if (forDocumentNavigation && (forward || mayFocusRoot || popupFrame)) {
        Element* root = GetRootForFocus(piWindow, doc, true, true);
        return FocusFirst(root, aNextContent);
      }

That's correct. This part of the code iterates between different documents. The check above only matters when focus-switching between documents (F6 key). For normal tab navigation, we want to loop back around into the starting document again and continue until the specific starting element is reached again.

We should be bailing out when 'aOriginalStartContent' is reached in GetNextTabbableContent, and aOriginalStartContent should be returned. Then, we should be returning here: https://searchfox.org/mozilla-central/rev/bd92b9b4a3c2ff022e830c1358968a84e6e69c95/dom/base/nsFocusManager.cpp#3404 without setting aNextContent.

This doesn't happen, because nextFocus is null. Is that expected?

Flags: needinfo?(enndeakin)

A null value means that the end of the document was reached. The next block of code iterates to the next document in the frame hierarchy and loops back around again. This should continue until the starting content is reached again, at which point that starting content is returned again.

It is a bit of an odd setup, and perhaps could be more specific in specifying that the returned value has looped.

Flags: needinfo?(enndeakin)

(In reply to Neil Deakin from comment #8)

A null value means that the end of the document was reached. The next block of code iterates to the next document in the frame hierarchy and loops back around again. This should continue until the starting content is reached again, at which point that starting content is returned again.

So I'm confused, because AFAICT the starting content is in the dialog which is in a frame. Then we don't find focusable content there, so we move up to the parent document (browser.xhtml). We don't find focusable content there either, but startContent gets set to the root of the parent document, and then we just keep going through that loop, and every time GetNextTabbableContent returns null. I don't see where/how we would re-recurse into the inner document. When we're in the parent document, we never encounter the starting content, because it's not in the same document. Does that make sense? Perhaps I'm missing something?

Flags: needinfo?(enndeakin)

I spent some time debugging this and it looks like we start tab navigation from a <dialog> element inside a frame that is not visible. When looping around and continuing to iterate looking for the next item to focus, we never return to the dialog or to its frame, since it isn't visible or focusable. So we iterate forever because we never find the starting point again.

So a basic fix might be, when a non-focusable item is the starting point, iterate up the tree looking for the first ancestor frame element that is visible/focusable and use that as the starting point.

Flags: needinfo?(enndeakin)

I ended up working around this in bug 1685313 by changing the focus code in dialog.js to stop using advanceFocusIntoSubtree, but instead call Services.focus.moveFocus, also passing the flag not to traverse into parents.

(In reply to Neil Deakin from comment #10)

So a basic fix might be, when a non-focusable item is the starting point, iterate up the tree looking for the first ancestor frame element that is visible/focusable and use that as the starting point.

I would be happy to provide a patch for this but tbh I am not really sure where to start...

You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: