diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp index 02cf6acb6720..42c6a3d7c2c3 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp @@ -15029,14 +15029,17 @@ void Document::HandleEscKey() { } } // Not all dialogs exist in the top layer, so despite already iterating - // through all top layer elements we also need to iterate over non-modal - // dialogs, as they may have a specified `closedby` value which may allow them - // to be closed via Escape key. - for (RefPtr dialog : Reversed(mOpenDialogs)) { + // through all top layer elements we also need to check open dialogs that are + // _not_ open via the top-layer (showModal). + // The top-most dialog in mOpenDialogs may need to be closed. + if (RefPtr dialog = + mOpenDialogs.SafeLastElement(nullptr)) { if (dialog->GetClosedBy() != HTMLDialogElement::ClosedBy::None) { + MOZ_ASSERT(StaticPrefs::dom_dialog_light_dismiss_enabled(), + "Light Dismiss must have been enabled for GetClosedBy() " + "returns != ClosedBy::None"); const mozilla::dom::Optional returnValue; dialog->RequestClose(returnValue); - return; } } } diff --git a/testing/web-platform/meta/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-show-stacked.html.ini b/testing/web-platform/meta/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-show-stacked.html.ini new file mode 100644 index 000000000000..9a51e2aed4e4 --- /dev/null +++ b/testing/web-platform/meta/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-show-stacked.html.ini @@ -0,0 +1 @@ +prefs: [dom.closewatcher.enabled: true, dom.dialog.light-dismiss.enabled: true] diff --git a/testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-show-stacked.html b/testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-show-stacked.html new file mode 100644 index 000000000000..30021a79be3b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/interactive-elements/the-dialog-element/dialog-closedby-show-stacked.html @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + +