| Index: chrome/browser/usb/web_usb_permission_provider.cc
|
| diff --git a/chrome/browser/usb/web_usb_permission_provider.cc b/chrome/browser/usb/web_usb_permission_provider.cc
|
| index 2c23d2e2cc2db87bff8ffb060d48642799ec7d0f..0c51fb7fd1ddd23f38f6ff97d4670badb41d4ecf 100644
|
| --- a/chrome/browser/usb/web_usb_permission_provider.cc
|
| +++ b/chrome/browser/usb/web_usb_permission_provider.cc
|
| @@ -8,6 +8,7 @@
|
| #include <utility>
|
|
|
| #include "base/command_line.h"
|
| +#include "base/stl_util.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/usb/usb_chooser_context.h"
|
| #include "chrome/browser/usb/usb_chooser_context_factory.h"
|
| @@ -16,16 +17,14 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/render_frame_host.h"
|
| #include "content/public/browser/web_contents.h"
|
| -#include "device/usb/public/interfaces/device.mojom.h"
|
| +#include "device/usb/usb_device.h"
|
| +#include "device/usb/webusb_descriptors.h"
|
|
|
| using content::WebContents;
|
| -using device::usb::WebUsbDescriptorSet;
|
| -using device::usb::WebUsbConfigurationSubsetPtr;
|
| -using device::usb::WebUsbFunctionSubsetPtr;
|
|
|
| namespace {
|
|
|
| -bool FindOriginInDescriptorSet(const WebUsbDescriptorSet* set,
|
| +bool FindOriginInDescriptorSet(const device::WebUsbAllowedOrigins* set,
|
| const GURL& origin,
|
| const uint8_t* configuration_value,
|
| const uint8_t* first_interface) {
|
| @@ -35,24 +34,19 @@ bool FindOriginInDescriptorSet(const WebUsbDescriptorSet* set,
|
|
|
| if (!set)
|
| return false;
|
| - for (size_t i = 0; i < set->origins.size(); ++i)
|
| - if (origin.spec() == set->origins[i])
|
| - return true;
|
| - for (size_t i = 0; i < set->configurations.size(); ++i) {
|
| - const WebUsbConfigurationSubsetPtr& config = set->configurations[i];
|
| + if (ContainsValue(set->origins, origin))
|
| + return true;
|
| + for (const auto& configuration : set->configurations) {
|
| if (configuration_value &&
|
| - *configuration_value != config->configuration_value)
|
| + *configuration_value != configuration.configuration_value)
|
| continue;
|
| - for (size_t j = 0; i < config->origins.size(); ++j)
|
| - if (origin.spec() == config->origins[j])
|
| - return true;
|
| - for (size_t j = 0; j < config->functions.size(); ++j) {
|
| - const WebUsbFunctionSubsetPtr& function = config->functions[j];
|
| - if (first_interface && *first_interface != function->first_interface)
|
| + if (ContainsValue(configuration.origins, origin))
|
| + return true;
|
| + for (const auto& function : configuration.functions) {
|
| + if (first_interface && *first_interface != function.first_interface)
|
| continue;
|
| - for (size_t k = 0; k < function->origins.size(); ++k)
|
| - if (origin.spec() == function->origins[k])
|
| - return true;
|
| + if (ContainsValue(function.origins, origin))
|
| + return true;
|
| }
|
| }
|
| return false;
|
| @@ -75,7 +69,7 @@ WebUSBPermissionProvider::GetWeakPtr() {
|
| }
|
|
|
| bool WebUSBPermissionProvider::HasDevicePermission(
|
| - const device::usb::DeviceInfo& device_info) const {
|
| + scoped_refptr<const device::UsbDevice> device) const {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| WebContents* web_contents =
|
| WebContents::FromRenderFrameHost(render_frame_host_);
|
| @@ -88,18 +82,18 @@ bool WebUSBPermissionProvider::HasDevicePermission(
|
| UsbChooserContext* chooser_context =
|
| UsbChooserContextFactory::GetForProfile(profile);
|
|
|
| - return FindOriginInDescriptorSet(device_info.webusb_allowed_origins.get(),
|
| + return FindOriginInDescriptorSet(device->webusb_allowed_origins(),
|
| requesting_origin, nullptr, nullptr) &&
|
| chooser_context->HasDevicePermission(requesting_origin,
|
| - embedding_origin, device_info);
|
| + embedding_origin, device);
|
| }
|
|
|
| bool WebUSBPermissionProvider::HasConfigurationPermission(
|
| uint8_t requested_configuration_value,
|
| - const device::usb::DeviceInfo& device_info) const {
|
| + scoped_refptr<const device::UsbDevice> device) const {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| return FindOriginInDescriptorSet(
|
| - device_info.webusb_allowed_origins.get(),
|
| + device->webusb_allowed_origins(),
|
| render_frame_host_->GetLastCommittedURL().GetOrigin(),
|
| &requested_configuration_value, nullptr);
|
| }
|
| @@ -107,10 +101,10 @@ bool WebUSBPermissionProvider::HasConfigurationPermission(
|
| bool WebUSBPermissionProvider::HasFunctionPermission(
|
| uint8_t requested_function,
|
| uint8_t configuration_value,
|
| - const device::usb::DeviceInfo& device_info) const {
|
| + scoped_refptr<const device::UsbDevice> device) const {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| return FindOriginInDescriptorSet(
|
| - device_info.webusb_allowed_origins.get(),
|
| + device->webusb_allowed_origins(),
|
| render_frame_host_->GetLastCommittedURL().GetOrigin(),
|
| &configuration_value, &requested_function);
|
| }
|
|
|