| 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 afb895cd642490596df8e226c8f8c4ef25c512a2..ecbadfc60754d87d6e798db84df51d4f7602f979 100644
|
| --- a/extensions/browser/api/device_permissions_prompt.cc
|
| +++ b/extensions/browser/api/device_permissions_prompt.cc
|
| @@ -26,10 +26,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) {
|
| @@ -42,10 +40,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) {
|
| @@ -58,10 +54,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);
|
| }
|
| @@ -81,9 +73,34 @@ void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) {
|
| observer_ = observer;
|
|
|
| if (observer_) {
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::FILE, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::DoDeviceQuery, this));
|
| + UsbService* service = device::DeviceClient::Get()->GetUsbService();
|
| + if (!service) {
|
| + return;
|
| + }
|
| +
|
| + service->GetDevices(base::Bind(
|
| + &DevicePermissionsPrompt::Prompt::OnDevicesEnumerated, this));
|
| +
|
| + if (!usb_service_observer_.IsObserving(service)) {
|
| + usb_service_observer_.Add(service);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void DevicePermissionsPrompt::Prompt::OnDevicesEnumerated(
|
| + const std::vector<scoped_refptr<UsbDevice>>& devices) {
|
| + std::vector<DeviceInfo> device_info;
|
| + for (const auto& device : devices) {
|
| + if (!(filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_))) {
|
| + continue;
|
| + }
|
| +
|
| + device_info.push_back(DeviceInfo(device));
|
| + }
|
| + devices_.swap(device_info);
|
| +
|
| + if (observer_) {
|
| + observer_->OnDevicesChanged();
|
| }
|
| }
|
|
|
| @@ -113,9 +130,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);
|
| }
|
| }
|
|
|
| @@ -127,51 +142,19 @@ 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);
|
| -
|
| - std::vector<DeviceInfo> device_info;
|
| - for (const auto& device : devices) {
|
| - if (!(filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_))) {
|
| - continue;
|
| - }
|
| -
|
| - device_info.push_back(DeviceInfo(device));
|
| - }
|
| -
|
| - if (!usb_service_observer_.IsObserving(service)) {
|
| - usb_service_observer_.Add(service);
|
| - }
|
| -
|
| - content::BrowserThread::PostTask(
|
| - content::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);
|
| + devices_.push_back(DeviceInfo(device));
|
| if (observer_) {
|
| observer_->OnDevicesChanged();
|
| }
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::RemoveDevice(
|
| +void DevicePermissionsPrompt::Prompt::OnDeviceRemoved(
|
| scoped_refptr<UsbDevice> device) {
|
| bool removed_entry = false;
|
| for (std::vector<DeviceInfo>::iterator it = devices_.begin();
|
| @@ -187,25 +170,6 @@ void DevicePermissionsPrompt::Prompt::RemoveDevice(
|
| }
|
| }
|
|
|
| -void DevicePermissionsPrompt::Prompt::OnDeviceAdded(
|
| - scoped_refptr<UsbDevice> device) {
|
| - if (!(filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_))) {
|
| - return;
|
| - }
|
| -
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::AddDevice, this,
|
| - DeviceInfo(device)));
|
| -}
|
| -
|
| -void DevicePermissionsPrompt::Prompt::OnDeviceRemoved(
|
| - scoped_refptr<UsbDevice> device) {
|
| - content::BrowserThread::PostTask(
|
| - content::BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&DevicePermissionsPrompt::Prompt::RemoveDevice, this, device));
|
| -}
|
| -
|
| DevicePermissionsPrompt::DevicePermissionsPrompt(
|
| content::WebContents* web_contents)
|
| : web_contents_(web_contents), delegate_(nullptr) {
|
|
|