| 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 f45ae5638bf196a1ff974ec5fe3e490b3b72b2f6..fe6d535a1b3fa129cbfb8e8049565e350d79d16d 100644
|
| --- a/extensions/browser/api/device_permissions_prompt.cc
|
| +++ b/extensions/browser/api/device_permissions_prompt.cc
|
| @@ -28,10 +28,8 @@ namespace extensions {
|
| DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
|
| scoped_refptr<UsbDevice> device)
|
| : device(device) {
|
| - base::string16 manufacturer_string;
|
| - if (device->GetManufacturer(&manufacturer_string)) {
|
| - original_manufacturer_string = manufacturer_string;
|
| - } else {
|
| + base::string16 manufacturer_string = device->manufacturer_string();
|
| + if (manufacturer_string.empty()) {
|
| const char* vendor_name =
|
| device::UsbIds::GetVendorName(device->vendor_id());
|
| if (vendor_name) {
|
| @@ -44,10 +42,8 @@ DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
|
| }
|
| }
|
|
|
| - base::string16 product_string;
|
| - if (device->GetProduct(&product_string)) {
|
| - original_product_string = product_string;
|
| - } else {
|
| + base::string16 product_string = device->product_string();
|
| + if (product_string.empty()) {
|
| const char* product_name = device::UsbIds::GetProductName(
|
| device->vendor_id(), device->product_id());
|
| if (product_name) {
|
| @@ -60,10 +56,6 @@ DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
|
| }
|
| }
|
|
|
| - if (!device->GetSerialNumber(&serial_number)) {
|
| - serial_number.clear();
|
| - }
|
| -
|
| name = l10n_util::GetStringFUTF16(IDS_DEVICE_PERMISSIONS_DEVICE_NAME,
|
| product_string, manufacturer_string);
|
| }
|
| @@ -71,21 +63,19 @@ DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
|
| DevicePermissionsPrompt::Prompt::DeviceInfo::~DeviceInfo() {
|
| }
|
|
|
| -DevicePermissionsPrompt::Prompt::Prompt()
|
| - : extension_(nullptr),
|
| - browser_context_(nullptr),
|
| - multiple_(false),
|
| - observer_(nullptr),
|
| - usb_service_observer_(this) {
|
| +DevicePermissionsPrompt::Prompt::Prompt() : usb_service_observer_(this) {
|
| }
|
|
|
| void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) {
|
| observer_ = observer;
|
|
|
| if (observer_) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::DoDeviceQuery, this));
|
| + UsbService* service = device::DeviceClient::Get()->GetUsbService();
|
| + if (service && !usb_service_observer_.IsObserving(service)) {
|
| + service->GetDevices(base::Bind(
|
| + &DevicePermissionsPrompt::Prompt::OnDevicesEnumerated, this));
|
| + usb_service_observer_.Add(service);
|
| + }
|
| }
|
| }
|
|
|
| @@ -115,9 +105,7 @@ void DevicePermissionsPrompt::Prompt::GrantDevicePermission(
|
| DevicePermissionsManager::Get(browser_context_);
|
| if (permissions_manager) {
|
| const DeviceInfo& device = devices_[index];
|
| - permissions_manager->AllowUsbDevice(
|
| - extension_->id(), device.device, device.original_product_string,
|
| - device.original_manufacturer_string, device.serial_number);
|
| + permissions_manager->AllowUsbDevice(extension_->id(), device.device);
|
| }
|
| }
|
|
|
| @@ -129,82 +117,17 @@ void DevicePermissionsPrompt::Prompt::set_filters(
|
| DevicePermissionsPrompt::Prompt::~Prompt() {
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::DoDeviceQuery() {
|
| - UsbService* service = device::DeviceClient::Get()->GetUsbService();
|
| - if (!service) {
|
| +void DevicePermissionsPrompt::Prompt::OnDeviceAdded(
|
| + scoped_refptr<UsbDevice> device) {
|
| + if (!(filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_))) {
|
| return;
|
| }
|
|
|
| - std::vector<scoped_refptr<UsbDevice>> devices;
|
| - service->GetDevices(&devices);
|
| -
|
| - if (!usb_service_observer_.IsObserving(service)) {
|
| - usb_service_observer_.Add(service);
|
| - }
|
| -
|
| - std::vector<DeviceInfo>* device_info = new std::vector<DeviceInfo>();
|
| - base::Closure barrier = base::BarrierClosure(
|
| - devices.size(),
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::DeviceQueryComplete, this,
|
| - base::Owned(device_info)));
|
| -
|
| - for (const auto& device : devices) {
|
| - if (filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_)) {
|
| - device->CheckUsbAccess(
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::AppendCheckedUsbDevice,
|
| - this, device_info, device, barrier));
|
| - } else {
|
| - barrier.Run();
|
| - }
|
| - }
|
| -}
|
| -
|
| -void DevicePermissionsPrompt::Prompt::AppendCheckedUsbDevice(
|
| - std::vector<DeviceInfo>* device_info,
|
| - scoped_refptr<UsbDevice> device,
|
| - const base::Closure& callback,
|
| - bool allowed) {
|
| - if (allowed) {
|
| - device_info->push_back(DeviceInfo(device));
|
| - }
|
| - callback.Run();
|
| -}
|
| -
|
| -void DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice(
|
| - scoped_refptr<UsbDevice> device,
|
| - bool allowed) {
|
| - if (allowed) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::AddDevice, this,
|
| - DeviceInfo(device)));
|
| - }
|
| -}
|
| -
|
| -void DevicePermissionsPrompt::Prompt::DeviceQueryComplete(
|
| - std::vector<DeviceInfo>* device_info) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::SetDevices, this,
|
| - *device_info));
|
| -}
|
| -
|
| -void DevicePermissionsPrompt::Prompt::SetDevices(
|
| - const std::vector<DeviceInfo>& devices) {
|
| - devices_ = devices;
|
| - if (observer_) {
|
| - observer_->OnDevicesChanged();
|
| - }
|
| -}
|
| -
|
| -void DevicePermissionsPrompt::Prompt::AddDevice(const DeviceInfo& device) {
|
| - devices_.push_back(device);
|
| - if (observer_) {
|
| - observer_->OnDevicesChanged();
|
| - }
|
| + device->CheckUsbAccess(base::Bind(
|
| + &DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice, this, device));
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::RemoveDevice(
|
| +void DevicePermissionsPrompt::Prompt::OnDeviceRemoved(
|
| scoped_refptr<UsbDevice> device) {
|
| bool removed_entry = false;
|
| for (std::vector<DeviceInfo>::iterator it = devices_.begin();
|
| @@ -220,21 +143,25 @@ void DevicePermissionsPrompt::Prompt::RemoveDevice(
|
| }
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::OnDeviceAdded(
|
| - scoped_refptr<UsbDevice> device) {
|
| - if (!(filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_))) {
|
| - return;
|
| +void DevicePermissionsPrompt::Prompt::OnDevicesEnumerated(
|
| + const std::vector<scoped_refptr<UsbDevice>>& devices) {
|
| + for (const auto& device : devices) {
|
| + if (filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_)) {
|
| + device->CheckUsbAccess(base::Bind(
|
| + &DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice, this, device));
|
| + }
|
| }
|
| -
|
| - device->CheckUsbAccess(base::Bind(
|
| - &DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice, this, device));
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::OnDeviceRemoved(
|
| - scoped_refptr<UsbDevice> device) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::RemoveDevice, this, device));
|
| +void DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice(
|
| + scoped_refptr<UsbDevice> device,
|
| + bool allowed) {
|
| + if (allowed) {
|
| + devices_.push_back(DeviceInfo(device));
|
| + if (observer_) {
|
| + observer_->OnDevicesChanged();
|
| + }
|
| + }
|
| }
|
|
|
| DevicePermissionsPrompt::DevicePermissionsPrompt(
|
|
|