summaryrefslogtreecommitdiffstats
path: root/chrome/browser/usb/web_usb_permission_provider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/usb/web_usb_permission_provider.cc')
-rw-r--r--chrome/browser/usb/web_usb_permission_provider.cc72
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);
}