Commit e456877e authored by David Bokan's avatar David Bokan Committed by Chromium LUCI CQ

Convert DevicePermissionsPrompt to OnceCallback

DevicePermissionsPrompt::AskForUsbDevices receives a reply in the given
callback. This callback is stored a UsbDevicePermissionsPrompt object
but cleared after being invoked so it can only ever be invoked once.

Bug: 1152268
Change-Id: Ic867e6907129496f7e46dbe8c799c8e97f02ad5e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2601069Reviewed-by: default avatarKaran Bhatia <karandeepb@chromium.org>
Commit-Queue: David Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840282}
parent 056ec4bb
......@@ -71,10 +71,10 @@ class UsbDevicePermissionsPrompt : public DevicePermissionsPrompt::Prompt,
content::BrowserContext* context,
bool multiple,
std::vector<UsbDeviceFilterPtr> filters,
const DevicePermissionsPrompt::UsbDevicesCallback& callback)
DevicePermissionsPrompt::UsbDevicesCallback callback)
: Prompt(extension, context, multiple),
filters_(std::move(filters)),
callback_(callback),
callback_(std::move(callback)),
manager_observer_(this) {}
private:
......@@ -111,8 +111,7 @@ class UsbDevicePermissionsPrompt : public DevicePermissionsPrompt::Prompt,
}
}
DCHECK(multiple() || devices.size() <= 1);
callback_.Run(std::move(devices));
callback_.Reset();
std::move(callback_).Run(std::move(devices));
}
// extensions::UsbDeviceManager::Observer implementation
......@@ -369,9 +368,9 @@ void DevicePermissionsPrompt::AskForUsbDevices(
content::BrowserContext* context,
bool multiple,
std::vector<UsbDeviceFilterPtr> filters,
const UsbDevicesCallback& callback) {
UsbDevicesCallback callback) {
prompt_ = base::MakeRefCounted<UsbDevicePermissionsPrompt>(
extension, context, multiple, std::move(filters), callback);
extension, context, multiple, std::move(filters), std::move(callback));
ShowDialog();
}
......
......@@ -37,7 +37,7 @@ class Extension;
class DevicePermissionsPrompt {
public:
using UsbDevicesCallback =
base::Callback<void(std::vector<device::mojom::UsbDeviceInfoPtr>)>;
base::OnceCallback<void(std::vector<device::mojom::UsbDeviceInfoPtr>)>;
using HidDevicesCallback =
base::OnceCallback<void(std::vector<device::mojom::HidDeviceInfoPtr>)>;
......@@ -130,7 +130,7 @@ class DevicePermissionsPrompt {
content::BrowserContext* context,
bool multiple,
std::vector<device::mojom::UsbDeviceFilterPtr> filters,
const UsbDevicesCallback& callback);
UsbDevicesCallback callback);
void AskForHidDevices(const Extension* extension,
content::BrowserContext* context,
......
......@@ -757,7 +757,8 @@ ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() {
prompt_->AskForUsbDevices(
extension(), browser_context(), multiple, std::move(filters),
base::Bind(&UsbGetUserSelectedDevicesFunction::OnDevicesChosen, this));
base::BindOnce(&UsbGetUserSelectedDevicesFunction::OnDevicesChosen,
this));
return RespondLater();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment