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

Side by Side Diff: device/usb/usb_device_impl.cc

Issue 1034333002: Check USB device path access when prompting users to select a device. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move MockPermissionBrokerClient into its own header. Created 5 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 unified diff | Download patch
« no previous file with comments | « device/usb/usb_device_impl.h ('k') | extensions/browser/api/device_permissions_prompt.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/usb/usb_device_impl.h" 5 #include "device/usb/usb_device_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "base/thread_task_runner_handle.h" 15 #include "base/thread_task_runner_handle.h"
16 #include "components/device_event_log/device_event_log.h" 16 #include "components/device_event_log/device_event_log.h"
17 #include "device/usb/usb_context.h" 17 #include "device/usb/usb_context.h"
18 #include "device/usb/usb_descriptors.h" 18 #include "device/usb/usb_descriptors.h"
19 #include "device/usb/usb_device_handle_impl.h" 19 #include "device/usb/usb_device_handle_impl.h"
20 #include "device/usb/usb_error.h" 20 #include "device/usb/usb_error.h"
21 #include "third_party/libusb/src/libusb/libusb.h" 21 #include "third_party/libusb/src/libusb/libusb.h"
22 22
23 #if defined(OS_CHROMEOS) 23 #if defined(OS_CHROMEOS)
24 #include "base/sys_info.h"
25 #include "chromeos/dbus/dbus_thread_manager.h" 24 #include "chromeos/dbus/dbus_thread_manager.h"
26 #include "chromeos/dbus/permission_broker_client.h" 25 #include "chromeos/dbus/permission_broker_client.h"
27 #endif // defined(OS_CHROMEOS) 26 #endif // defined(OS_CHROMEOS)
28 27
29 #if defined(USE_UDEV) 28 #if defined(USE_UDEV)
30 #include "device/udev_linux/scoped_udev.h" 29 #include "device/udev_linux/scoped_udev.h"
31 #endif // defined(USE_UDEV) 30 #endif // defined(USE_UDEV)
32 31
33 namespace device { 32 namespace device {
34 33
35 namespace { 34 namespace {
36 35
37 #if defined(OS_CHROMEOS) 36 #if defined(OS_CHROMEOS)
38 void OnRequestUsbAccessReplied( 37
38 void PostResultOnTaskRunner(
39 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 39 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
40 const base::Callback<void(bool success)>& callback, 40 const base::Callback<void(bool success)>& callback,
41 bool success) { 41 bool success) {
42 task_runner->PostTask(FROM_HERE, base::Bind(callback, success)); 42 task_runner->PostTask(FROM_HERE, base::Bind(callback, success));
43 } 43 }
44
44 #endif // defined(OS_CHROMEOS) 45 #endif // defined(OS_CHROMEOS)
45 46
46 UsbEndpointDirection GetDirection( 47 UsbEndpointDirection GetDirection(
47 const libusb_endpoint_descriptor* descriptor) { 48 const libusb_endpoint_descriptor* descriptor) {
48 switch (descriptor->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) { 49 switch (descriptor->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) {
49 case LIBUSB_ENDPOINT_IN: 50 case LIBUSB_ENDPOINT_IN:
50 return USB_DIRECTION_INBOUND; 51 return USB_DIRECTION_INBOUND;
51 case LIBUSB_ENDPOINT_OUT: 52 case LIBUSB_ENDPOINT_OUT:
52 return USB_DIRECTION_OUTBOUND; 53 return USB_DIRECTION_OUTBOUND;
53 default: 54 default:
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 #endif 173 #endif
173 } 174 }
174 175
175 UsbDeviceImpl::~UsbDeviceImpl() { 176 UsbDeviceImpl::~UsbDeviceImpl() {
176 // The destructor must be safe to call from any thread. 177 // The destructor must be safe to call from any thread.
177 libusb_unref_device(platform_device_); 178 libusb_unref_device(platform_device_);
178 } 179 }
179 180
180 #if defined(OS_CHROMEOS) 181 #if defined(OS_CHROMEOS)
181 182
182 void UsbDeviceImpl::RequestUsbAccess( 183 void UsbDeviceImpl::CheckUsbAccess(const ResultCallback& callback) {
183 int interface_id,
184 const base::Callback<void(bool success)>& callback) {
185 DCHECK(thread_checker_.CalledOnValidThread()); 184 DCHECK(thread_checker_.CalledOnValidThread());
186 185
187 // ChromeOS builds on non-ChromeOS machines (dev) should not attempt to 186 chromeos::PermissionBrokerClient* client =
188 // use permission broker. 187 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
189 if (base::SysInfo::IsRunningOnChromeOS()) { 188 DCHECK(client) << "Could not get permission broker client.";
190 chromeos::PermissionBrokerClient* client =
191 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
192 DCHECK(client) << "Could not get permission broker client.";
193 if (!client) {
194 callback.Run(false);
195 return;
196 }
197 189
198 ui_task_runner_->PostTask( 190 ui_task_runner_->PostTask(
199 FROM_HERE, 191 FROM_HERE,
200 base::Bind(&chromeos::PermissionBrokerClient::RequestPathAccess, 192 base::Bind(&chromeos::PermissionBrokerClient::CheckPathAccess,
201 base::Unretained(client), 193 base::Unretained(client), devnode_,
202 devnode_, 194 base::Bind(&PostResultOnTaskRunner,
203 interface_id, 195 base::ThreadTaskRunnerHandle::Get(), callback)));
204 base::Bind(&OnRequestUsbAccessReplied, 196 }
205 base::ThreadTaskRunnerHandle::Get(), 197
206 callback))); 198 void UsbDeviceImpl::RequestUsbAccess(int interface_id,
207 } else { 199 const ResultCallback& callback) {
208 // Not really running on Chrome OS, declare success. 200 DCHECK(thread_checker_.CalledOnValidThread());
209 callback.Run(true); 201
210 } 202 chromeos::PermissionBrokerClient* client =
203 chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
204 DCHECK(client) << "Could not get permission broker client.";
205
206 ui_task_runner_->PostTask(
207 FROM_HERE,
208 base::Bind(&chromeos::PermissionBrokerClient::RequestPathAccess,
209 base::Unretained(client), devnode_, interface_id,
210 base::Bind(&PostResultOnTaskRunner,
211 base::ThreadTaskRunnerHandle::Get(), callback)));
211 } 212 }
212 213
213 #endif 214 #endif
214 215
215 scoped_refptr<UsbDeviceHandle> UsbDeviceImpl::Open() { 216 scoped_refptr<UsbDeviceHandle> UsbDeviceImpl::Open() {
216 DCHECK(thread_checker_.CalledOnValidThread()); 217 DCHECK(thread_checker_.CalledOnValidThread());
217 PlatformUsbDeviceHandle handle; 218 PlatformUsbDeviceHandle handle;
218 const int rv = libusb_open(platform_device_, &handle); 219 const int rv = libusb_open(platform_device_, &handle);
219 if (LIBUSB_SUCCESS == rv) { 220 if (LIBUSB_SUCCESS == rv) {
220 scoped_refptr<UsbDeviceHandleImpl> device_handle = 221 scoped_refptr<UsbDeviceHandleImpl> device_handle =
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 } else { 390 } else {
390 USB_LOG(EVENT) 391 USB_LOG(EVENT)
391 << "Failed to read device descriptor to cache string descriptors: " 392 << "Failed to read device descriptor to cache string descriptors: "
392 << ConvertPlatformUsbErrorToString(rv); 393 << ConvertPlatformUsbErrorToString(rv);
393 } 394 }
394 strings_cached_ = true; 395 strings_cached_ = true;
395 } 396 }
396 #endif // !defined(USE_UDEV) 397 #endif // !defined(USE_UDEV)
397 398
398 } // namespace device 399 } // namespace device
OLDNEW
« no previous file with comments | « device/usb/usb_device_impl.h ('k') | extensions/browser/api/device_permissions_prompt.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698