blob: 58add7843a0c9364989edf671a69d17b6b4aaf82 [file] [log] [blame]
juncaia7dd9442015-12-11 02:37:391// 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
juncaibf183dd2016-05-27 16:57:245#ifndef CHROME_BROWSER_USB_USB_CHOOSER_CONTROLLER_H_
6#define CHROME_BROWSER_USB_USB_CHOOSER_CONTROLLER_H_
juncaia7dd9442015-12-11 02:37:397
Donna Wuefa139a2018-11-02 13:41:358#include <string>
juncai830ffff72016-07-01 21:27:289#include <unordered_map>
juncai7d445832016-01-05 03:42:3710#include <utility>
juncaib6f22c8f2016-05-13 15:35:2911#include <vector>
juncai7d445832016-01-05 03:42:3712
juncaia7dd9442015-12-11 02:37:3913#include "base/macros.h"
14#include "base/memory/ref_counted.h"
15#include "base/memory/weak_ptr.h"
16#include "base/scoped_observer.h"
juncaibadc1daa2016-07-11 20:36:5417#include "chrome/browser/chooser_controller/chooser_controller.h"
Donna Wu3bc1f5e2018-09-26 15:44:1318#include "chrome/browser/usb/usb_chooser_context.h"
Donna Wu4dc9df32019-05-20 03:56:2119#include "services/device/public/mojom/usb_device.mojom.h"
Donna Wuc98e12a2018-08-16 07:24:0220#include "third_party/blink/public/mojom/usb/web_usb_service.mojom.h"
Reilly Grant392c6112019-04-23 19:12:1221#include "url/origin.h"
juncaia7dd9442015-12-11 02:37:3922
23namespace content {
24class RenderFrameHost;
Reilly Grant57e92f02018-04-07 00:12:5325class WebContents;
juncaia7dd9442015-12-11 02:37:3926}
27
juncaibf183dd2016-05-27 16:57:2428// UsbChooserController creates a chooser for WebUSB.
29// It is owned by ChooserBubbleDelegate.
30class UsbChooserController : public ChooserController,
Ovidio Henriquez8b39653b2019-01-18 18:56:5331 public UsbChooserContext::DeviceObserver {
juncaia7dd9442015-12-11 02:37:3932 public:
juncaibf183dd2016-05-27 16:57:2433 UsbChooserController(
juncaia7dd9442015-12-11 02:37:3934 content::RenderFrameHost* render_frame_host,
Reilly Grant7f162c92017-06-10 00:23:4735 std::vector<device::mojom::UsbDeviceFilterPtr> device_filters,
Donna Wuc98e12a2018-08-16 07:24:0236 blink::mojom::WebUsbService::GetPermissionCallback callback);
juncaibf183dd2016-05-27 16:57:2437 ~UsbChooserController() override;
juncaia7dd9442015-12-11 02:37:3938
juncaibf183dd2016-05-27 16:57:2439 // ChooserController:
juncai9c9d7512016-07-20 00:56:2340 base::string16 GetNoOptionsText() const override;
juncai3f5e3252016-07-13 05:21:1941 base::string16 GetOkButtonLabel() const override;
juncai7d445832016-01-05 03:42:3742 size_t NumOptions() const override;
juncai830ffff72016-07-01 21:27:2843 base::string16 GetOption(size_t index) const override;
juncai001f50f62016-09-29 05:15:1644 bool IsPaired(size_t index) const override;
juncai0f6d2792016-11-23 18:38:0745 void Select(const std::vector<size_t>& indices) override;
juncaia7dd9442015-12-11 02:37:3946 void Cancel() override;
47 void Close() override;
juncaibf183dd2016-05-27 16:57:2448 void OpenHelpCenterUrl() const override;
juncaia7dd9442015-12-11 02:37:3949
Ovidio Henriquez8b39653b2019-01-18 18:56:5350 // UsbChooserContext::DeviceObserver implementation:
Donna Wuc42ee16b2018-09-30 05:19:5151 void OnDeviceAdded(const device::mojom::UsbDeviceInfo& device_info) override;
52 void OnDeviceRemoved(
53 const device::mojom::UsbDeviceInfo& device_info) override;
Donna Wu3bc1f5e2018-09-26 15:44:1354 void OnDeviceManagerConnectionError() override;
juncaia7dd9442015-12-11 02:37:3955
juncaia7dd9442015-12-11 02:37:3956 private:
Donna Wu3bc1f5e2018-09-26 15:44:1357 void GotUsbDeviceList(std::vector<device::mojom::UsbDeviceInfoPtr> devices);
Donna Wu55acc8c2018-09-10 06:11:2658 bool DisplayDevice(const device::mojom::UsbDeviceInfo& device) const;
juncai09ab6142016-03-28 18:20:0359
Reilly Grant7f162c92017-06-10 00:23:4760 std::vector<device::mojom::UsbDeviceFilterPtr> filters_;
Donna Wuc98e12a2018-08-16 07:24:0261 blink::mojom::WebUsbService::GetPermissionCallback callback_;
Reilly Grant392c6112019-04-23 19:12:1262 url::Origin requesting_origin_;
63 url::Origin embedding_origin_;
reillygf50d8d32017-03-14 22:55:0064
Reilly Grant57e92f02018-04-07 00:12:5365 content::WebContents* const web_contents_;
reillygf50d8d32017-03-14 22:55:0066 base::WeakPtr<UsbChooserContext> chooser_context_;
Ovidio Henriquez8b39653b2019-01-18 18:56:5367 ScopedObserver<UsbChooserContext, UsbChooserContext::DeviceObserver>
68 observer_;
reillygf50d8d32017-03-14 22:55:0069
Donna Wuefa139a2018-11-02 13:41:3570 // Each pair is a (device guid, device name).
71 std::vector<std::pair<std::string, base::string16>> devices_;
juncai830ffff72016-07-01 21:27:2872 // Maps from device name to number of devices.
73 std::unordered_map<base::string16, int> device_name_map_;
Jeremy Roman495db682019-07-12 16:03:2474 base::WeakPtrFactory<UsbChooserController> weak_factory_{this};
juncaia7dd9442015-12-11 02:37:3975
juncaibf183dd2016-05-27 16:57:2476 DISALLOW_COPY_AND_ASSIGN(UsbChooserController);
juncaia7dd9442015-12-11 02:37:3977};
78
juncaibf183dd2016-05-27 16:57:2479#endif // CHROME_BROWSER_USB_USB_CHOOSER_CONTROLLER_H_