diff options
author | reillyg <reillyg@chromium.org> | 2015-05-05 12:35:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-05 19:36:43 +0000 |
commit | 7adf217e66275bd3ed37757aa40e311cdca19837 (patch) | |
tree | 7c4e7f87639209be9dc14a7914454aee5c8f6512 /device | |
parent | 09c74490237aeefe5f41c1cad07a7d1e2b384590 (diff) | |
download | chromium_src-7adf217e66275bd3ed37757aa40e311cdca19837.zip chromium_src-7adf217e66275bd3ed37757aa40e311cdca19837.tar.gz chromium_src-7adf217e66275bd3ed37757aa40e311cdca19837.tar.bz2 |
Add HID support to DevicePermissionsManager and DevicePermissionsPrompt.
This patch lays down the backend support necessary for the HID device
picker API. The DevicePermissionsManager can now manage HID device
permissions (both ephemeral devices that will be forgotten when they are
disconnected and persistent devices that are written to the prefs file).
The DevicePermissionsPrompt gains support for enumerating HID devices.
BUG=457899
Review URL: https://codereview.chromium.org/1123633002
Cr-Commit-Position: refs/heads/master@{#328379}
Diffstat (limited to 'device')
-rw-r--r-- | device/hid/hid_service.cc | 11 | ||||
-rw-r--r-- | device/hid/hid_service.h | 8 |
2 files changed, 18 insertions, 1 deletions
diff --git a/device/hid/hid_service.cc b/device/hid/hid_service.cc index fc50a41..1993999 100644 --- a/device/hid/hid_service.cc +++ b/device/hid/hid_service.cc @@ -34,6 +34,10 @@ void HidService::Observer::OnDeviceRemoved( scoped_refptr<HidDeviceInfo> device_info) { } +void HidService::Observer::OnDeviceRemovedCleanup( + scoped_refptr<HidDeviceInfo> device_info) { +} + HidService* HidService::GetInstance( scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) { if (g_service == NULL) { @@ -124,10 +128,15 @@ void HidService::RemoveDevice(const HidDeviceId& device_id) { if (it != devices_.end()) { HID_LOG(USER) << "HID device removed: deviceId='" << device_id << "'"; + scoped_refptr<HidDeviceInfo> device = it->second; if (enumeration_ready_) { - FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceRemoved(it->second)); + FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceRemoved(device)); } devices_.erase(it); + if (enumeration_ready_) { + FOR_EACH_OBSERVER(Observer, observer_list_, + OnDeviceRemovedCleanup(device)); + } } } diff --git a/device/hid/hid_service.h b/device/hid/hid_service.h index 6d6ef2b..4a4d3ad 100644 --- a/device/hid/hid_service.h +++ b/device/hid/hid_service.h @@ -27,7 +27,15 @@ class HidService { class Observer { public: virtual void OnDeviceAdded(scoped_refptr<HidDeviceInfo> info); + // Notifies all observers that a device is being removed, called before + // removing the device from HidService. Observers should not depend on the + // order in which they are notified of the OnDeviceRemove event. virtual void OnDeviceRemoved(scoped_refptr<HidDeviceInfo> info); + // Notifies all observers again, after having first notified all observers + // with OnDeviceRemoved and removed the device from internal structures. + // Each observer must not depend on any other observers' awareness of the + // device as they could be cleaned up in any order. + virtual void OnDeviceRemovedCleanup(scoped_refptr<HidDeviceInfo> info); }; typedef base::Callback<void(const std::vector<scoped_refptr<HidDeviceInfo>>&)> |