| Index: extensions/browser/api/device_permissions_prompt.cc
|
| diff --git a/extensions/browser/api/device_permissions_prompt.cc b/extensions/browser/api/device_permissions_prompt.cc
|
| index fe6d535a1b3fa129cbfb8e8049565e350d79d16d..09751b36cc84fe14e1814a71352d745fe9cbfa04 100644
|
| --- a/extensions/browser/api/device_permissions_prompt.cc
|
| +++ b/extensions/browser/api/device_permissions_prompt.cc
|
| @@ -25,6 +25,9 @@ using device::UsbService;
|
|
|
| namespace extensions {
|
|
|
| +DevicePermissionsPrompt::Delegate::~Delegate() {
|
| +}
|
| +
|
| DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
|
| scoped_refptr<UsbDevice> device)
|
| : device(device) {
|
| @@ -63,7 +66,16 @@ DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
|
| DevicePermissionsPrompt::Prompt::DeviceInfo::~DeviceInfo() {
|
| }
|
|
|
| -DevicePermissionsPrompt::Prompt::Prompt() : usb_service_observer_(this) {
|
| +DevicePermissionsPrompt::Prompt::Observer::~Observer() {
|
| +}
|
| +
|
| +DevicePermissionsPrompt::Prompt::Prompt(Delegate* delegate,
|
| + const Extension* extension,
|
| + content::BrowserContext* context)
|
| + : extension_(extension),
|
| + browser_context_(context),
|
| + delegate_(delegate),
|
| + usb_service_observer_(this) {
|
| }
|
|
|
| void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) {
|
| @@ -92,21 +104,36 @@ base::string16 DevicePermissionsPrompt::Prompt::GetPromptMessage() const {
|
| base::UTF8ToUTF16(extension_->name()));
|
| }
|
|
|
| -scoped_refptr<UsbDevice> DevicePermissionsPrompt::Prompt::GetDevice(
|
| +base::string16 DevicePermissionsPrompt::Prompt::GetDeviceName(
|
| size_t index) const {
|
| DCHECK_LT(index, devices_.size());
|
| - return devices_[index].device;
|
| + return devices_[index].name;
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::GrantDevicePermission(
|
| +base::string16 DevicePermissionsPrompt::Prompt::GetDeviceSerialNumber(
|
| size_t index) const {
|
| DCHECK_LT(index, devices_.size());
|
| + return devices_[index].device->serial_number();
|
| +}
|
| +
|
| +void DevicePermissionsPrompt::Prompt::GrantDevicePermission(size_t index) {
|
| + DCHECK_LT(index, devices_.size());
|
| + devices_[index].granted = true;
|
| +}
|
| +
|
| +void DevicePermissionsPrompt::Prompt::Dismissed() {
|
| DevicePermissionsManager* permissions_manager =
|
| DevicePermissionsManager::Get(browser_context_);
|
| - if (permissions_manager) {
|
| - const DeviceInfo& device = devices_[index];
|
| - permissions_manager->AllowUsbDevice(extension_->id(), device.device);
|
| + std::vector<scoped_refptr<UsbDevice>> devices;
|
| + for (const DeviceInfo& device : devices_) {
|
| + if (device.granted) {
|
| + devices.push_back(device.device);
|
| + if (permissions_manager) {
|
| + permissions_manager->AllowUsbDevice(extension_->id(), device.device);
|
| + }
|
| + }
|
| }
|
| + delegate_->OnUsbDevicesChosen(devices);
|
| }
|
|
|
| void DevicePermissionsPrompt::Prompt::set_filters(
|
| @@ -166,7 +193,7 @@ void DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice(
|
|
|
| DevicePermissionsPrompt::DevicePermissionsPrompt(
|
| content::WebContents* web_contents)
|
| - : web_contents_(web_contents), delegate_(nullptr) {
|
| + : web_contents_(web_contents) {
|
| }
|
|
|
| DevicePermissionsPrompt::~DevicePermissionsPrompt() {
|
| @@ -178,12 +205,9 @@ void DevicePermissionsPrompt::AskForUsbDevices(
|
| content::BrowserContext* context,
|
| bool multiple,
|
| const std::vector<UsbDeviceFilter>& filters) {
|
| - prompt_ = new Prompt();
|
| - prompt_->set_extension(extension);
|
| - prompt_->set_browser_context(context);
|
| + prompt_ = new Prompt(delegate, extension, context);
|
| prompt_->set_multiple(multiple);
|
| prompt_->set_filters(filters);
|
| - delegate_ = delegate;
|
|
|
| ShowDialog();
|
| }
|
|
|