Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Unified Diff: extensions/browser/api/device_permissions_prompt.cc

Issue 839453002: Update the device permissions prompt when the device list changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/api/device_permissions_prompt.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 8ae677664155e5e399de34eb3085a12d1cfe0ce2..afb895cd642490596df8e226c8f8c4ef25c512a2 100644
--- a/extensions/browser/api/device_permissions_prompt.cc
+++ b/extensions/browser/api/device_permissions_prompt.cc
@@ -17,23 +17,53 @@
#include "extensions/strings/grit/extensions_strings.h"
#include "ui/base/l10n/l10n_util.h"
-namespace extensions {
-
using device::UsbDevice;
using device::UsbDeviceFilter;
using device::UsbService;
+namespace extensions {
+
DevicePermissionsPrompt::Prompt::DeviceInfo::DeviceInfo(
- scoped_refptr<UsbDevice> device,
- const base::string16& name,
- const base::string16& product_string,
- const base::string16& manufacturer_string,
- const base::string16& serial_number)
- : device(device),
- name(name),
- product_string(product_string),
- manufacturer_string(manufacturer_string),
- serial_number(serial_number) {
+ scoped_refptr<UsbDevice> device)
+ : device(device) {
+ base::string16 manufacturer_string;
+ if (device->GetManufacturer(&manufacturer_string)) {
+ original_manufacturer_string = manufacturer_string;
+ } else {
+ const char* vendor_name =
+ device::UsbIds::GetVendorName(device->vendor_id());
+ if (vendor_name) {
+ manufacturer_string = base::UTF8ToUTF16(vendor_name);
+ } else {
+ base::string16 vendor_id =
+ base::ASCIIToUTF16(base::StringPrintf("0x%04x", device->vendor_id()));
+ manufacturer_string =
+ l10n_util::GetStringFUTF16(IDS_DEVICE_UNKNOWN_VENDOR, vendor_id);
+ }
+ }
+
+ base::string16 product_string;
+ if (device->GetProduct(&product_string)) {
+ original_product_string = product_string;
+ } else {
+ const char* product_name = device::UsbIds::GetProductName(
+ device->vendor_id(), device->product_id());
+ if (product_name) {
+ product_string = base::UTF8ToUTF16(product_name);
+ } else {
+ base::string16 product_id = base::ASCIIToUTF16(
+ base::StringPrintf("0x%04x", device->product_id()));
+ product_string =
+ l10n_util::GetStringFUTF16(IDS_DEVICE_UNKNOWN_PRODUCT, product_id);
+ }
+ }
+
+ if (!device->GetSerialNumber(&serial_number)) {
+ serial_number.clear();
+ }
+
+ name = l10n_util::GetStringFUTF16(IDS_DEVICE_PERMISSIONS_DEVICE_NAME,
+ product_string, manufacturer_string);
}
DevicePermissionsPrompt::Prompt::DeviceInfo::~DeviceInfo() {
@@ -43,16 +73,18 @@ DevicePermissionsPrompt::Prompt::Prompt()
: extension_(nullptr),
browser_context_(nullptr),
multiple_(false),
- observer_(nullptr) {
+ observer_(nullptr),
+ usb_service_observer_(this) {
}
void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) {
observer_ = observer;
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&DevicePermissionsPrompt::Prompt::DoDeviceQuery, this));
+ if (observer_) {
+ content::BrowserThread::PostTask(
+ content::BrowserThread::FILE, FROM_HERE,
+ base::Bind(&DevicePermissionsPrompt::Prompt::DoDeviceQuery, this));
+ }
}
base::string16 DevicePermissionsPrompt::Prompt::GetHeading() const {
@@ -81,11 +113,9 @@ void DevicePermissionsPrompt::Prompt::GrantDevicePermission(
DevicePermissionsManager::Get(browser_context_);
if (permissions_manager) {
const DeviceInfo& device = devices_[index];
- permissions_manager->AllowUsbDevice(extension_->id(),
- device.device,
- device.product_string,
- device.manufacturer_string,
- device.serial_number);
+ permissions_manager->AllowUsbDevice(
+ extension_->id(), device.device, device.original_product_string,
+ device.original_manufacturer_string, device.serial_number);
}
}
@@ -112,53 +142,11 @@ void DevicePermissionsPrompt::Prompt::DoDeviceQuery() {
continue;
}
- base::string16 manufacturer_string;
- base::string16 original_manufacturer_string;
- if (device->GetManufacturer(&original_manufacturer_string)) {
- manufacturer_string = original_manufacturer_string;
- } else {
- const char* vendor_name =
- device::UsbIds::GetVendorName(device->vendor_id());
- if (vendor_name) {
- manufacturer_string = base::UTF8ToUTF16(vendor_name);
- } else {
- base::string16 vendor_id = base::ASCIIToUTF16(
- base::StringPrintf("0x%04x", device->vendor_id()));
- manufacturer_string =
- l10n_util::GetStringFUTF16(IDS_DEVICE_UNKNOWN_VENDOR, vendor_id);
- }
- }
-
- base::string16 product_string;
- base::string16 original_product_string;
- if (device->GetProduct(&original_product_string)) {
- product_string = original_product_string;
- } else {
- const char* product_name = device::UsbIds::GetProductName(
- device->vendor_id(), device->product_id());
- if (product_name) {
- product_string = base::UTF8ToUTF16(product_name);
- } else {
- base::string16 product_id = base::ASCIIToUTF16(
- base::StringPrintf("0x%04x", device->product_id()));
- product_string =
- l10n_util::GetStringFUTF16(IDS_DEVICE_UNKNOWN_PRODUCT, product_id);
- }
- }
-
- base::string16 serial_number;
- if (!device->GetSerialNumber(&serial_number)) {
- serial_number.clear();
- }
+ device_info.push_back(DeviceInfo(device));
+ }
- device_info.push_back(DeviceInfo(
- device,
- l10n_util::GetStringFUTF16(IDS_DEVICE_PERMISSIONS_DEVICE_NAME,
- product_string,
- manufacturer_string),
- original_product_string,
- original_manufacturer_string,
- serial_number));
+ if (!usb_service_observer_.IsObserving(service)) {
+ usb_service_observer_.Add(service);
}
content::BrowserThread::PostTask(
@@ -176,6 +164,48 @@ void DevicePermissionsPrompt::Prompt::SetDevices(
}
}
+void DevicePermissionsPrompt::Prompt::AddDevice(const DeviceInfo& device) {
+ devices_.push_back(device);
+ if (observer_) {
+ observer_->OnDevicesChanged();
+ }
+}
+
+void DevicePermissionsPrompt::Prompt::RemoveDevice(
+ scoped_refptr<UsbDevice> device) {
+ bool removed_entry = false;
+ for (std::vector<DeviceInfo>::iterator it = devices_.begin();
+ it != devices_.end(); ++it) {
+ if (it->device == device) {
+ devices_.erase(it);
+ removed_entry = true;
+ break;
+ }
+ }
+ if (observer_ && removed_entry) {
+ observer_->OnDevicesChanged();
+ }
+}
+
+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) {
« no previous file with comments | « extensions/browser/api/device_permissions_prompt.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698