Index: device/hid/hid_connection_linux.cc |
diff --git a/device/hid/hid_connection_linux.cc b/device/hid/hid_connection_linux.cc |
index 936c7b1bd23fe95a13c2fd29453fe2119ab59089..204d41d47554ee0ea9cadc1eefe470aa334a5d4f 100644 |
--- a/device/hid/hid_connection_linux.cc |
+++ b/device/hid/hid_connection_linux.cc |
@@ -64,8 +64,20 @@ HidConnectionLinux::HidConnectionLinux(HidDeviceInfo device_info, |
base::File device_file(base::FilePath(dev_node), flags); |
if (!device_file.IsValid()) { |
- LOG(ERROR) << device_file.error_details(); |
- return; |
+ base::File::Error file_error = device_file.error_details(); |
+ |
+ if (file_error == base::File::FILE_ERROR_ACCESS_DENIED) { |
+ flags = base::File::FLAG_OPEN | base::File::FLAG_READ; |
+ |
+ base::File device_file(base::FilePath(dev_node), flags); |
+ if (!device_file.IsValid()) { |
+ LOG(ERROR) << device_file.error_details(); |
+ return; |
+ } |
+ } else { |
+ LOG(ERROR) << file_error; |
+ return; |
+ } |
} |
if (fcntl(device_file.GetPlatformFile(), F_SETFL, |
fcntl(device_file.GetPlatformFile(), F_GETFL) | O_NONBLOCK)) { |