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

Unified Diff: chrome/browser/extensions/api/hid/hid_device_manager.cc

Issue 258733002: Block some HID devices from chrome.hid. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test TODO Created 6 years, 8 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 | « chrome/browser/extensions/api/hid/hid_device_manager.h ('k') | device/hid/hid_usage_and_page.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « chrome/browser/extensions/api/hid/hid_device_manager.h ('k') | device/hid/hid_usage_and_page.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698