summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api/usb/usb_api.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/api/usb/usb_api.cc')
-rw-r--r--chrome/browser/extensions/api/usb/usb_api.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/chrome/browser/extensions/api/usb/usb_api.cc b/chrome/browser/extensions/api/usb/usb_api.cc
index 9fa26cf..1b2d7b6 100644
--- a/chrome/browser/extensions/api/usb/usb_api.cc
+++ b/chrome/browser/extensions/api/usb/usb_api.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/usb/usb_service.h"
#include "chrome/browser/usb/usb_service_factory.h"
#include "chrome/common/extensions/api/usb.h"
+#include "chrome/common/extensions/permissions/usb_device_permission.h"
namespace BulkTransfer = extensions::api::usb::BulkTransfer;
namespace ClaimInterface = extensions::api::usb::ClaimInterface;
@@ -68,6 +69,8 @@ static const char* kErrorConvertRecipient = "Invalid transfer recipient.";
static const char* kErrorConvertRequestType = "Invalid request type.";
static const char* kErrorMalformedParameters = "Error parsing parameters.";
static const char* kErrorNoDevice = "No such device.";
+static const char* kErrorPermissionDenied =
+ "Permission to access device was denied";
static UsbDevice* device_for_test_ = NULL;
@@ -298,6 +301,15 @@ void UsbFindDevicesFunction::AsyncWorkStart() {
return;
}
+ UsbDevicePermission::CheckParam param(
+ parameters_->vendor_id, parameters_->product_id);
+ if (!GetExtension()->CheckAPIPermissionWithParam(
+ APIPermission::kUsbDevice, &param)) {
+ LOG(WARNING) << "Insufficient permissions to access device.";
+ CompleteWithError(kErrorPermissionDenied);
+ return;
+ }
+
UsbService* const service = UsbServiceFactory::GetInstance()->GetForProfile(
profile());
if (!service) {