Fix a focus recursion crash with multiple modalboxes on screen.

Review Request #13856 — Created May 14, 2024 and submitted

Information

Djblets
release-5.x

Reviewers

Back in 2020, I did some work to add accessibility to modalBox, which
involved also ensuring that keyboard input remained restricted to the
box.

This ended up causing crashes when there were multiple boxes on the
screen. Any focus within the latest modalbox would cause a previous
modalbox to steal focus, which would cause the latest to steal focus
back, and so on until the browser crashed the attempt.

This was only noticeable if you had the JavaScript console open, but is
clearly not ideal.

This change updates the behavior to only attempt to steal for the latest
modalbox. Focus management is now performed in a central function, which
only exists once and only while there's a modalbox on screen. An array
of modalboxes is used to track the stack of modalboxes.

Tested the Discard Review modalbox within the Review Dialog modalbox on
both Chrome and Firefox. Verified that focus behavior continued to work,
and that the modalboxes no longer triggered recursion errors during
focus changes or dialog closes.

Summary ID
Fix a focus recursion crash with multiple modalboxes on screen.
Back in 2020, I did some work to add accessibility to `modalBox`, which involved also ensuring that keyboard input remained restricted to the box. This ended up causing crashes when there were multiple boxes on the screen. Any focus within the latest modalbox would cause a previous modalbox to steal focus, which would cause the latest to steal focus back, and so on until the browser crashed the attempt. This was only noticeable if you had the JavaScript console open, but is clearly not ideal. This change updates the behavior to only attempt to steal for the latest modalbox. Focus management is now performed in a central function, which only exists once and only while there's a modalbox on screen. An array of modalboxes is used to track the stack of modalboxes.
45cb93dab593b2579cd23b9801ec94348704bc47
david
  1. Ship It!
  2. 
      
maubin
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-5.x (5f7eb1c)