| Index: chrome/browser/extensions/api/hid/hid_device_manager.cc
|
| diff --git a/chrome/browser/extensions/api/hid/hid_device_manager.cc b/chrome/browser/extensions/api/hid/hid_device_manager.cc
|
| index a8381b1c3255f35371f2533310a6facc246f77a0..45d82a6f87b425f7cfd18b2f9fc4d8c601ca4dbd 100644
|
| --- a/chrome/browser/extensions/api/hid/hid_device_manager.cc
|
| +++ b/chrome/browser/extensions/api/hid/hid_device_manager.cc
|
| @@ -11,6 +11,7 @@
|
| #include "device/hid/hid_service.h"
|
|
|
| using device::HidService;
|
| +using device::HidUsageAndPage;
|
|
|
| namespace extensions {
|
|
|
| @@ -44,7 +45,8 @@ scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
|
| device::HidDeviceInfo device_info;
|
| if (hid_service->GetDeviceInfo(device_id, &device_info)) {
|
| if (device_info.vendor_id == vendor_id &&
|
| - device_info.product_id == product_id) {
|
| + device_info.product_id == product_id &&
|
| + IsDeviceAccessible(device_info)) {
|
| api::hid::HidDeviceInfo api_device_info;
|
| api_device_info.device_id = resource_id;
|
| api_device_info.vendor_id = device_info.vendor_id;
|
| @@ -114,4 +116,48 @@ void HidDeviceManager::UpdateDevices() {
|
| resource_ids_.swap(new_resource_ids);
|
| }
|
|
|
| +// static
|
| +// TODO(rockot): Add some tests for this.
|
| +bool HidDeviceManager::IsDeviceAccessible(
|
| + const device::HidDeviceInfo& device_info) {
|
| + for (std::vector<device::HidUsageAndPage>::const_iterator iter =
|
| + device_info.usages.begin();
|
| + iter != device_info.usages.end(); ++iter) {
|
| + if (!IsUsageAccessible(*iter)) {
|
| + return false;
|
| + }
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +bool HidDeviceManager::IsUsageAccessible(
|
| + const HidUsageAndPage& usage_and_page) {
|
| + if (usage_and_page.usage_page == HidUsageAndPage::kPageKeyboard)
|
| + return false;
|
| +
|
| + if (usage_and_page.usage_page != HidUsageAndPage::kPageGenericDesktop)
|
| + return true;
|
| +
|
| + uint16_t usage = usage_and_page.usage;
|
| + if (usage == HidUsageAndPage::kGenericDesktopPointer ||
|
| + usage == HidUsageAndPage::kGenericDesktopMouse ||
|
| + usage == HidUsageAndPage::kGenericDesktopKeyboard ||
|
| + usage == HidUsageAndPage::kGenericDesktopKeypad) {
|
| + return false;
|
| + }
|
| +
|
| + if (usage >= HidUsageAndPage::kGenericDesktopSystemControl &&
|
| + usage <= HidUsageAndPage::kGenericDesktopSystemWarmRestart) {
|
| + return false;
|
| + }
|
| +
|
| + if (usage >= HidUsageAndPage::kGenericDesktopSystemDock &&
|
| + usage <= HidUsageAndPage::kGenericDesktopSystemDisplaySwap) {
|
| + return false;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| } // namespace extensions
|
|
|