From 627b46141c81397c45ef5615e36e73c871857bc5 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 12:33:15 +0200 Subject: [PATCH] fix: iteration issues in hid `RevokeEphemeralDevicePermission` (#42902) fix: iteration issues in hid RevokeEphemeralDevicePermission Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr --- shell/browser/hid/hid_chooser_context.cc | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/shell/browser/hid/hid_chooser_context.cc b/shell/browser/hid/hid_chooser_context.cc index 7f1f9a28ad48..fa0d02562ab0 100644 --- a/shell/browser/hid/hid_chooser_context.cc +++ b/shell/browser/hid/hid_chooser_context.cc @@ -12,6 +12,7 @@ #include "base/command_line.h" #include "base/containers/contains.h" +#include "base/containers/map_util.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -149,21 +150,18 @@ void HidChooserContext::RevokeEphemeralDevicePermission( const url::Origin& origin, const device::mojom::HidDeviceInfo& device) { auto it = ephemeral_devices_.find(origin); - if (it != ephemeral_devices_.end()) { - std::set& devices = it->second; - for (auto guid = devices.begin(); guid != devices.end();) { - DCHECK(base::Contains(devices_, *guid)); + if (it == ephemeral_devices_.end()) + return; - if (devices_[*guid]->physical_device_id != device.physical_device_id) { - ++guid; - continue; - } + std::set& device_guids = it->second; + std::erase_if(device_guids, [&](const auto& guid) { + auto* device_ptr = base::FindPtrOrNull(devices_, guid); + return device_ptr && + device_ptr->physical_device_id == device.physical_device_id; + }); - guid = devices.erase(guid); - if (devices.empty()) - ephemeral_devices_.erase(it); - } - } + if (device_guids.empty()) + ephemeral_devices_.erase(it); } bool HidChooserContext::HasDevicePermission(