blob: dee8323dc07af3305e869b9f0e19a91d9285799c [file] [log] [blame]
reillyg17b8a58c2015-09-09 20:58:551// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_USB_WEB_USB_PERMISSION_PROVIDER_H_
6#define CHROME_BROWSER_USB_WEB_USB_PERMISSION_PROVIDER_H_
7
avi664c07b2015-12-26 02:18:318#include <stdint.h>
9
reillygd6d8ce132016-03-04 23:29:4110#include "base/memory/weak_ptr.h"
11#include "device/usb/mojo/permission_provider.h"
reillyg17b8a58c2015-09-09 20:58:5512
13namespace content {
14class RenderFrameHost;
15}
16
reillyg3ff45322015-10-23 21:16:2517// This implementation of the permission provider interface enforces the rules
18// of the WebUSB permission model. Devices are checked for WebUSB descriptors
19// granting access to the render frame's current origin as well as permission
20// granted by the user through a device chooser UI.
reillyg17b8a58c2015-09-09 20:58:5521class WebUSBPermissionProvider : public device::usb::PermissionProvider {
22 public:
reillyg3ff45322015-10-23 21:16:2523 explicit WebUSBPermissionProvider(
24 content::RenderFrameHost* render_frame_host);
reillyg17b8a58c2015-09-09 20:58:5525 ~WebUSBPermissionProvider() override;
26
reillygd6d8ce132016-03-04 23:29:4127 base::WeakPtr<PermissionProvider> GetWeakPtr();
28
reillyg17b8a58c2015-09-09 20:58:5529 // device::usb::PermissionProvider implementation.
reillygd6d8ce132016-03-04 23:29:4130 bool HasDevicePermission(
reillygf1cce2f82016-04-12 01:33:4731 scoped_refptr<const device::UsbDevice> device) const override;
reillygd6d8ce132016-03-04 23:29:4132 bool HasConfigurationPermission(
reillyg83746f462015-09-29 21:30:0033 uint8_t requested_configuration,
reillygf1cce2f82016-04-12 01:33:4734 scoped_refptr<const device::UsbDevice> device) const override;
reillyg1f45f772016-04-02 02:46:5535 bool HasFunctionPermission(
36 uint8_t requested_function,
reillyg83746f462015-09-29 21:30:0037 uint8_t configuration_value,
reillygf1cce2f82016-04-12 01:33:4738 scoped_refptr<const device::UsbDevice> device) const override;
reillyg3e1eacc32016-04-08 18:52:4639 void IncrementConnectionCount() override;
40 void DecrementConnectionCount() override;
reillyg17b8a58c2015-09-09 20:58:5541
reillyg3ff45322015-10-23 21:16:2542 private:
reillyg17b8a58c2015-09-09 20:58:5543 content::RenderFrameHost* const render_frame_host_;
reillygd6d8ce132016-03-04 23:29:4144 base::WeakPtrFactory<PermissionProvider> weak_factory_;
reillyg17b8a58c2015-09-09 20:58:5545};
46
47#endif // CHROME_BROWSER_USB_WEB_USB_PERMISSION_PROVIDER_H_