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, ...@@ -71,10 +71,10 @@ class UsbDevicePermissionsPrompt : public DevicePermissionsPrompt::Prompt,
content::BrowserContext* context, content::BrowserContext* context,
bool multiple, bool multiple,
std::vector<UsbDeviceFilterPtr> filters, std::vector<UsbDeviceFilterPtr> filters,
const DevicePermissionsPrompt::UsbDevicesCallback& callback) DevicePermissionsPrompt::UsbDevicesCallback callback)
: Prompt(extension, context, multiple), : Prompt(extension, context, multiple),
filters_(std::move(filters)), filters_(std::move(filters)),
callback_(callback), callback_(std::move(callback)),
manager_observer_(this) {} manager_observer_(this) {}
private: private:
...@@ -111,8 +111,7 @@ class UsbDevicePermissionsPrompt : public DevicePermissionsPrompt::Prompt, ...@@ -111,8 +111,7 @@ class UsbDevicePermissionsPrompt : public DevicePermissionsPrompt::Prompt,
} }
} }
DCHECK(multiple() || devices.size() <= 1); DCHECK(multiple() || devices.size() <= 1);
callback_.Run(std::move(devices)); std::move(callback_).Run(std::move(devices));
callback_.Reset();
} }
// extensions::UsbDeviceManager::Observer implementation // extensions::UsbDeviceManager::Observer implementation
...@@ -369,9 +368,9 @@ void DevicePermissionsPrompt::AskForUsbDevices( ...@@ -369,9 +368,9 @@ void DevicePermissionsPrompt::AskForUsbDevices(
content::BrowserContext* context, content::BrowserContext* context,
bool multiple, bool multiple,
std::vector<UsbDeviceFilterPtr> filters, std::vector<UsbDeviceFilterPtr> filters,
const UsbDevicesCallback& callback) { UsbDevicesCallback callback) {
prompt_ = base::MakeRefCounted<UsbDevicePermissionsPrompt>( prompt_ = base::MakeRefCounted<UsbDevicePermissionsPrompt>(
extension, context, multiple, std::move(filters), callback); extension, context, multiple, std::move(filters), std::move(callback));
ShowDialog(); ShowDialog();
} }
......
...@@ -37,7 +37,7 @@ class Extension; ...@@ -37,7 +37,7 @@ class Extension;
class DevicePermissionsPrompt { class DevicePermissionsPrompt {
public: public:
using UsbDevicesCallback = using UsbDevicesCallback =
base::Callback<void(std::vector<device::mojom::UsbDeviceInfoPtr>)>; base::OnceCallback<void(std::vector<device::mojom::UsbDeviceInfoPtr>)>;
using HidDevicesCallback = using HidDevicesCallback =
base::OnceCallback<void(std::vector<device::mojom::HidDeviceInfoPtr>)>; base::OnceCallback<void(std::vector<device::mojom::HidDeviceInfoPtr>)>;
...@@ -130,7 +130,7 @@ class DevicePermissionsPrompt { ...@@ -130,7 +130,7 @@ class DevicePermissionsPrompt {
content::BrowserContext* context, content::BrowserContext* context,
bool multiple, bool multiple,
std::vector<device::mojom::UsbDeviceFilterPtr> filters, std::vector<device::mojom::UsbDeviceFilterPtr> filters,
const UsbDevicesCallback& callback); UsbDevicesCallback callback);
void AskForHidDevices(const Extension* extension, void AskForHidDevices(const Extension* extension,
content::BrowserContext* context, content::BrowserContext* context,
......
...@@ -757,7 +757,8 @@ ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() { ...@@ -757,7 +757,8 @@ ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() {
prompt_->AskForUsbDevices( prompt_->AskForUsbDevices(
extension(), browser_context(), multiple, std::move(filters), extension(), browser_context(), multiple, std::move(filters),
base::Bind(&UsbGetUserSelectedDevicesFunction::OnDevicesChosen, this)); base::BindOnce(&UsbGetUserSelectedDevicesFunction::OnDevicesChosen,
this));
return RespondLater(); 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