| // Copyright 2022 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_USB_CHROME_USB_DELEGATE_H_ |
| #define CHROME_BROWSER_USB_CHROME_USB_DELEGATE_H_ |
| |
| #include "base/containers/span.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/usb_chooser.h" |
| #include "content/public/browser/usb_delegate.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/pending_remote.h" |
| #include "services/device/public/mojom/usb_device.mojom-forward.h" |
| #include "services/device/public/mojom/usb_enumeration_options.mojom-forward.h" |
| #include "services/device/public/mojom/usb_manager.mojom-forward.h" |
| #include "third_party/blink/public/mojom/usb/web_usb_service.mojom.h" |
| #include "url/origin.h" |
| |
| class ChromeUsbDelegate : public content::UsbDelegate { |
| public: |
| ChromeUsbDelegate(); |
| ChromeUsbDelegate(ChromeUsbDelegate&&) = delete; |
| ChromeUsbDelegate& operator=(ChromeUsbDelegate&) = delete; |
| ~ChromeUsbDelegate() override; |
| |
| // content::UsbDelegate: |
| void AdjustProtectedInterfaceClasses(content::RenderFrameHost& frame, |
| std::vector<uint8_t>& classes) override; |
| std::unique_ptr<content::UsbChooser> RunChooser( |
| content::RenderFrameHost& frame, |
| std::vector<device::mojom::UsbDeviceFilterPtr> filters, |
| blink::mojom::WebUsbService::GetPermissionCallback callback) override; |
| bool CanRequestDevicePermission(content::RenderFrameHost& frame) override; |
| void RevokeDevicePermissionWebInitiated( |
| content::RenderFrameHost& frame, |
| const device::mojom::UsbDeviceInfo& device) override; |
| const device::mojom::UsbDeviceInfo* GetDeviceInfo( |
| content::RenderFrameHost& frame, |
| const std::string& guid) override; |
| bool HasDevicePermission(content::RenderFrameHost& frame, |
| const device::mojom::UsbDeviceInfo& device) override; |
| void GetDevices( |
| content::RenderFrameHost& frame, |
| blink::mojom::WebUsbService::GetDevicesCallback callback) override; |
| void GetDevice( |
| content::RenderFrameHost& frame, |
| const std::string& guid, |
| base::span<const uint8_t> blocked_interface_classes, |
| mojo::PendingReceiver<device::mojom::UsbDevice> device_receiver, |
| mojo::PendingRemote<device::mojom::UsbDeviceClient> device_client) |
| override; |
| void AddObserver(content::RenderFrameHost& frame, |
| Observer* observer) override; |
| void RemoveObserver(Observer* observer) override; |
| |
| private: |
| class ContextObservation; |
| |
| base::flat_map<content::BrowserContext*, std::unique_ptr<ContextObservation>> |
| observations_; |
| }; |
| |
| #endif // CHROME_BROWSER_USB_CHROME_USB_DELEGATE_H_ |