diff options
Diffstat (limited to 'chrome/browser/usb/web_usb_permission_provider.cc')
-rw-r--r-- | chrome/browser/usb/web_usb_permission_provider.cc | 72 |
1 files changed, 28 insertions, 44 deletions
diff --git a/chrome/browser/usb/web_usb_permission_provider.cc b/chrome/browser/usb/web_usb_permission_provider.cc index a037432..3e27881 100644 --- a/chrome/browser/usb/web_usb_permission_provider.cc +++ b/chrome/browser/usb/web_usb_permission_provider.cc @@ -13,7 +13,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" -#include "device/core/device_client.h" +#include "device/usb/public/interfaces/device.mojom.h" using content::WebContents; using device::usb::WebUsbDescriptorSet; @@ -28,31 +28,26 @@ bool FindOriginInDescriptorSet(const WebUsbDescriptorSet* set, const uint8_t* interface_number) { if (!set) return false; - for (size_t i = 0; i < set->origins.size(); ++i) { + 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 device::usb::WebUsbConfigurationSubsetPtr& config = - set->configurations[i]; + const WebUsbConfigurationSubsetPtr& config = set->configurations[i]; if (configuration_value && *configuration_value != config->configuration_value) continue; - for (size_t j = 0; i < config->origins.size(); ++j) { + 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 device::usb::WebUsbFunctionSubsetPtr& function = - config->functions[j]; + const WebUsbFunctionSubsetPtr& function = config->functions[j]; // TODO(reillyg): Implement support for Interface Association Descriptors // so that this check will match associated interfaces. if (interface_number && *interface_number != function->first_interface) continue; - for (size_t k = 0; k < function->origins.size(); ++k) { + for (size_t k = 0; k < function->origins.size(); ++k) if (origin.spec() == function->origins[k]) return true; - } } } return false; @@ -62,16 +57,20 @@ bool FindOriginInDescriptorSet(const WebUsbDescriptorSet* set, WebUSBPermissionProvider::WebUSBPermissionProvider( content::RenderFrameHost* render_frame_host) - : render_frame_host_(render_frame_host) { + : render_frame_host_(render_frame_host), weak_factory_(this) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK(render_frame_host_); } WebUSBPermissionProvider::~WebUSBPermissionProvider() {} -void WebUSBPermissionProvider::HasDevicePermission( - mojo::Array<device::usb::DeviceInfoPtr> requested_devices, - const HasDevicePermissionCallback& callback) { +base::WeakPtr<device::usb::PermissionProvider> +WebUSBPermissionProvider::GetWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + +bool WebUSBPermissionProvider::HasDevicePermission( + const device::usb::DeviceInfo& device_info) const { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); WebContents* web_contents = WebContents::FromRenderFrameHost(render_frame_host_); @@ -84,44 +83,29 @@ void WebUSBPermissionProvider::HasDevicePermission( UsbChooserContext* chooser_context = UsbChooserContextFactory::GetForProfile(profile); - mojo::Array<mojo::String> allowed_guids; - for (size_t i = 0; i < requested_devices.size(); ++i) { - const device::usb::DeviceInfo& device = *requested_devices[i]; - if (FindOriginInDescriptorSet(device.webusb_allowed_origins.get(), - requesting_origin, nullptr, nullptr) && - chooser_context->HasDevicePermission(requesting_origin, - embedding_origin, device)) { - allowed_guids.push_back(device.guid); - } - } - callback.Run(std::move(allowed_guids)); + return FindOriginInDescriptorSet(device_info.webusb_allowed_origins.get(), + requesting_origin, nullptr, nullptr) && + chooser_context->HasDevicePermission(requesting_origin, + embedding_origin, device_info); } -void WebUSBPermissionProvider::HasConfigurationPermission( +bool WebUSBPermissionProvider::HasConfigurationPermission( uint8_t requested_configuration_value, - device::usb::DeviceInfoPtr device, - const HasInterfacePermissionCallback& callback) { + const device::usb::DeviceInfo& device_info) const { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - callback.Run(FindOriginInDescriptorSet( - device->webusb_allowed_origins.get(), + return FindOriginInDescriptorSet( + device_info.webusb_allowed_origins.get(), render_frame_host_->GetLastCommittedURL().GetOrigin(), - &requested_configuration_value, nullptr)); + &requested_configuration_value, nullptr); } -void WebUSBPermissionProvider::HasInterfacePermission( +bool WebUSBPermissionProvider::HasInterfacePermission( uint8_t requested_interface, uint8_t configuration_value, - device::usb::DeviceInfoPtr device, - const HasInterfacePermissionCallback& callback) { + const device::usb::DeviceInfo& device_info) const { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - callback.Run(FindOriginInDescriptorSet( - device->webusb_allowed_origins.get(), + return FindOriginInDescriptorSet( + device_info.webusb_allowed_origins.get(), render_frame_host_->GetLastCommittedURL().GetOrigin(), - &configuration_value, &requested_interface)); -} - -void WebUSBPermissionProvider::Bind( - mojo::InterfaceRequest<device::usb::PermissionProvider> request) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - bindings_.AddBinding(this, std::move(request)); + &configuration_value, &requested_interface); } |