summaryrefslogtreecommitdiffstats
path: root/device
diff options
context:
space:
mode:
authorreillyg <reillyg@chromium.org>2015-05-05 12:35:55 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-05 19:36:43 +0000
commit7adf217e66275bd3ed37757aa40e311cdca19837 (patch)
tree7c4e7f87639209be9dc14a7914454aee5c8f6512 /device
parent09c74490237aeefe5f41c1cad07a7d1e2b384590 (diff)
downloadchromium_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.cc11
-rw-r--r--device/hid/hid_service.h8
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>>&)>