From bcbc1d2b9f8d93c954da1823ae35d96425da1796 Mon Sep 17 00:00:00 2001 From: Kent Tamura Date: Tue, 5 Oct 2021 16:42:49 -0700 Subject: [PATCH] SELECT: Fix deselection behavior on leaving the "multiple" mode If - the SELECT switched from the "multiple" mode, - it had two or more selected OPTIONs, and - last_on_change_option_ was the first selected OPTION, we missed to deselect OPTIONs other than the first one due to the fast path of DeselectItemsWithoutValidation(). This CL clears last_on_change_option_ before calling DeselectItemsWithoutValidation(). Bug: 1245443 Change-Id: Ib9cc4a4770d99ed6782edc73fd8ff1fcb3d8738b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3205138 Auto-Submit: Kent Tamura Reviewed-by: Aleks Totic Commit-Queue: Kent Tamura Cr-Commit-Position: refs/heads/main@{#928412} --- .../forms/the-select-element/select-multiple.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/html/semantics/forms/the-select-element/select-multiple.html b/html/semantics/forms/the-select-element/select-multiple.html index c744144527bf147..e348064151a6ae2 100644 --- a/html/semantics/forms/the-select-element/select-multiple.html +++ b/html/semantics/forms/the-select-element/select-multiple.html @@ -33,4 +33,16 @@ assert_true(select.options[1].selected, "second option should be selected."); }, "multiple selected options exist, one set from script"); + +// crbug.com/1245443 +test(() => { + let select = document.createElement("select"); + select.length = 4; + let o1 = select.options.item(1); + select.multiple = true; + select.selectedIndex = 2; + o1.selected = true; + select.multiple = false; + assert_equals(select.selectedOptions.length, 1); +}, "Removing multiple attribute reduces the number of selected OPTIONs to 1");