Index: extensions/browser/api/device_permissions_manager.h |
diff --git a/extensions/browser/api/device_permissions_manager.h b/extensions/browser/api/device_permissions_manager.h |
index 159cd7b3244b90d1cb9ea819374ea7f6c98140f2..7d3a500998772ce59728e8d857317a9f3bdb0d5d 100644 |
--- a/extensions/browser/api/device_permissions_manager.h |
+++ b/extensions/browser/api/device_permissions_manager.h |
@@ -40,13 +40,7 @@ namespace extensions { |
class DevicePermissionEntry |
: public base::RefCountedThreadSafe<DevicePermissionEntry> { |
public: |
- // TODO(reillyg): This function should be able to take only the |
- // device::UsbDevice and read the strings from there. This is not yet possible |
- // as the device can not be accessed from the UI thread. crbug.com/427985 |
- DevicePermissionEntry(scoped_refptr<device::UsbDevice> device, |
- const base::string16& serial_number, |
- const base::string16& manufacturer_string, |
- const base::string16& product_string); |
+ DevicePermissionEntry(scoped_refptr<device::UsbDevice> device); |
DevicePermissionEntry(uint16_t vendor_id, |
uint16_t product_id, |
const base::string16& serial_number, |
@@ -98,7 +92,7 @@ class DevicePermissionEntry |
base::Time last_used_; |
}; |
-// Stores a copy of device permissions associated with a particular extension. |
+// Stores device permissions associated with a particular extension. |
class DevicePermissions { |
public: |
virtual ~DevicePermissions(); |
@@ -108,8 +102,7 @@ class DevicePermissions { |
// to call device->GetSerialNumber() which may not be possible on the |
// current thread. |
scoped_refptr<DevicePermissionEntry> FindEntry( |
- scoped_refptr<device::UsbDevice> device, |
- const base::string16& serial_number) const; |
+ scoped_refptr<device::UsbDevice> device) const; |
const std::set<scoped_refptr<DevicePermissionEntry>>& entries() const { |
return entries_; |
@@ -121,9 +114,6 @@ class DevicePermissions { |
// Reads permissions out of ExtensionPrefs. |
DevicePermissions(content::BrowserContext* context, |
const std::string& extension_id); |
- // Does a shallow copy, duplicating the device lists so that the resulting |
- // object can be used from a different thread. |
- DevicePermissions(const DevicePermissions* original); |
std::set<scoped_refptr<DevicePermissionEntry>> entries_; |
std::map<scoped_refptr<device::UsbDevice>, |
@@ -135,28 +125,21 @@ class DevicePermissions { |
// Manages saved device permissions for all extensions. |
class DevicePermissionsManager : public KeyedService, |
public base::NonThreadSafe, |
- public ProcessManagerObserver { |
+ public ProcessManagerObserver, |
+ public device::UsbService::Observer { |
public: |
static DevicePermissionsManager* Get(content::BrowserContext* context); |
- // Returns a copy of the DevicePermissions object for a given extension that |
- // can be used by any thread. |
- scoped_ptr<DevicePermissions> GetForExtension( |
- const std::string& extension_id); |
+ // The DevicePermissions object for a given extension. |
+ DevicePermissions* GetForExtension(const std::string& extension_id); |
// Equivalent to calling GetForExtension and extracting the permission string |
// for each entry. |
std::vector<base::string16> GetPermissionMessageStrings( |
const std::string& extension_id) const; |
- // TODO(reillyg): AllowUsbDevice should only take the extension ID and |
- // device, with the strings read from the device. This isn't possible now as |
- // the device can not be accessed from the UI thread yet. crbug.com/427985 |
void AllowUsbDevice(const std::string& extension_id, |
- scoped_refptr<device::UsbDevice> device, |
- const base::string16& serial_number, |
- const base::string16& manufacturer_string, |
- const base::string16& product_string); |
+ scoped_refptr<device::UsbDevice> device); |
// Updates the "last used" timestamp on the given device entry and writes it |
// out to ExtensionPrefs. |
@@ -171,7 +154,6 @@ class DevicePermissionsManager : public KeyedService, |
void Clear(const std::string& extension_id); |
private: |
- class FileThreadHelper; |
friend class DevicePermissionsManagerFactory; |
FRIEND_TEST_ALL_PREFIXES(DevicePermissionsManagerTest, SuspendExtension); |
@@ -179,20 +161,20 @@ class DevicePermissionsManager : public KeyedService, |
DevicePermissionsManager(content::BrowserContext* context); |
~DevicePermissionsManager() override; |
- DevicePermissions* Get(const std::string& extension_id) const; |
- DevicePermissions* GetOrInsert(const std::string& extension_id); |
- void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device); |
+ DevicePermissions* GetInternal(const std::string& extension_id) const; |
// ProcessManagerObserver implementation |
void OnBackgroundHostClose(const std::string& extension_id) override; |
+ // UsbService::Observer implementation |
+ void OnDeviceRemovedCleanup(scoped_refptr<device::UsbDevice> device) override; |
+ |
content::BrowserContext* context_; |
std::map<std::string, DevicePermissions*> extension_id_to_device_permissions_; |
ScopedObserver<ProcessManager, ProcessManagerObserver> |
process_manager_observer_; |
- FileThreadHelper* helper_; |
- |
- base::WeakPtrFactory<DevicePermissionsManager> weak_factory_; |
+ ScopedObserver<device::UsbService, device::UsbService::Observer> |
+ usb_service_observer_; |
DISALLOW_COPY_AND_ASSIGN(DevicePermissionsManager); |
}; |