Commit 72336f11 authored by Donna Wu's avatar Donna Wu Committed by Commit Bot

Use device::mojom::UsbDeviceInfo in UsbDevicePermission.

Bug: 716628
Change-Id: I0eb098a88533effec8b67b499fe98f8b39b20fc3
Reviewed-on: https://chromium-review.googlesource.com/c/1420274
Commit-Queue: Donna Wu <donna.wu@intel.com>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#625114}
parent 22c1a986
......@@ -321,6 +321,7 @@ if (enable_extensions) {
"//crypto",
"//device/bluetooth",
"//device/usb",
"//device/usb/mojo",
"//device/usb/public/cpp",
"//device/usb/public/mojom",
"//extensions:extensions_resources",
......@@ -447,7 +448,8 @@ if (enable_extensions) {
"//components/crx_file",
"//components/version_info:version_info",
"//device/usb",
"//device/usb:test_support",
"//device/usb/mojo",
"//device/usb/public/cpp:test_support",
"//extensions:extensions_resources",
# TODO(brettw) these tests should not be including headers from browser.
......
......@@ -13,7 +13,7 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "device/usb/usb_descriptors.h"
#include "device/usb/mojo/type_converters.h"
#include "device/usb/usb_device.h"
#include "device/usb/usb_ids.h"
#include "extensions/common/extension.h"
......@@ -46,8 +46,21 @@ bool IsInterfaceClassPermissionAlowed(const Extension* extension) {
std::unique_ptr<UsbDevicePermission::CheckParam>
UsbDevicePermission::CheckParam::ForUsbDevice(const Extension* extension,
const device::UsbDevice* device) {
DCHECK(device);
auto device_info = device::mojom::UsbDeviceInfo::From(*device);
return CheckParam::ForUsbDeviceAndInterface(
extension, device, UsbDevicePermissionData::SPECIAL_VALUE_UNSPECIFIED);
extension, *device_info,
UsbDevicePermissionData::SPECIAL_VALUE_UNSPECIFIED);
}
// static
std::unique_ptr<UsbDevicePermission::CheckParam>
UsbDevicePermission::CheckParam::ForUsbDevice(
const Extension* extension,
const device::mojom::UsbDeviceInfo& device_info) {
return CheckParam::ForUsbDeviceAndInterface(
extension, device_info,
UsbDevicePermissionData::SPECIAL_VALUE_UNSPECIFIED);
}
// static
......@@ -66,22 +79,24 @@ UsbDevicePermission::CheckParam::ForDeviceWithAnyInterfaceClass(
std::unique_ptr<UsbDevicePermission::CheckParam>
UsbDevicePermission::CheckParam::ForUsbDeviceAndInterface(
const Extension* extension,
const device::UsbDevice* device,
const device::mojom::UsbDeviceInfo& device_info,
int interface_id) {
std::unique_ptr<std::set<int>> interface_classes(new std::set<int>());
// If device class is set, match interface class against it as well. This is
// to enable filtering devices by device-only class (for example, hubs), which
// might or might not have an interface with class set to device class value.
if (device->device_class())
interface_classes->insert(device->device_class());
if (device_info.class_code)
interface_classes->insert(device_info.class_code);
for (const auto& configuration : device->configurations()) {
for (const auto& interface : configuration.interfaces)
interface_classes->insert(interface.interface_class);
for (const auto& configuration : device_info.configurations) {
for (const auto& interface : configuration->interfaces) {
for (const auto& alternate : interface->alternates)
interface_classes->insert(alternate->class_code);
}
}
return std::make_unique<CheckParam>(
extension, device->vendor_id(), device->product_id(),
extension, device_info.vendor_id, device_info.product_id,
std::move(interface_classes), interface_id);
}
......
......@@ -9,7 +9,10 @@
#include <memory>
#include <set>
#include <string>
#include <vector>
#include "device/usb/public/mojom/device.mojom.h"
#include "extensions/common/permissions/api_permission.h"
#include "extensions/common/permissions/set_disjunction_permission.h"
#include "extensions/common/permissions/usb_device_permission_data.h"
......@@ -30,6 +33,9 @@ class UsbDevicePermission
static std::unique_ptr<CheckParam> ForUsbDevice(
const Extension* extension,
const device::UsbDevice* device);
static std::unique_ptr<CheckParam> ForUsbDevice(
const Extension* extension,
const device::mojom::UsbDeviceInfo& device_info);
// Creates check param that only checks vendor, product and interface ID
// permission properties. It will accept all interfaceClass properties. For
// example, created param would always accept {"intefaceClass": 3}
......@@ -50,7 +56,7 @@ class UsbDevicePermission
int interface_id);
static std::unique_ptr<CheckParam> ForUsbDeviceAndInterface(
const Extension* extension,
const device::UsbDevice* device,
const device::mojom::UsbDeviceInfo& device_info,
int interface_id);
static std::unique_ptr<CheckParam> ForHidDevice(const Extension* extension,
uint16_t vendor_id,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment