blob: 82a820a56c2af5d9bb8cb6edd880cd6f29235db4 [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
juncai830ffff72016-07-01 21:27:288#include <unordered_map>
juncai7d445832016-01-05 03:42:379#include <utility>
juncaib6f22c8f2016-05-13 15:35:2910#include <vector>
juncai7d445832016-01-05 03:42:3711
juncaia7dd9442015-12-11 02:37:3912#include "base/macros.h"
13#include "base/memory/ref_counted.h"
14#include "base/memory/weak_ptr.h"
15#include "base/scoped_observer.h"
juncaibadc1daa2016-07-11 20:36:5416#include "chrome/browser/chooser_controller/chooser_controller.h"
Donna Wu55acc8c2018-09-10 06:11:2617#include "device/usb/public/mojom/device.mojom.h"
juncaia7dd9442015-12-11 02:37:3918#include "device/usb/usb_service.h"
Donna Wuc98e12a2018-08-16 07:24:0219#include "third_party/blink/public/mojom/usb/web_usb_service.mojom.h"
reillygf50d8d32017-03-14 22:55:0020#include "url/gurl.h"
juncaia7dd9442015-12-11 02:37:3921
22namespace content {
23class RenderFrameHost;
Reilly Grant57e92f02018-04-07 00:12:5324class WebContents;
juncaia7dd9442015-12-11 02:37:3925}
26
27namespace device {
28class UsbDevice;
juncaia7dd9442015-12-11 02:37:3929}
30
reillygf50d8d32017-03-14 22:55:0031class UsbChooserContext;
32
juncaibf183dd2016-05-27 16:57:2433// UsbChooserController creates a chooser for WebUSB.
34// It is owned by ChooserBubbleDelegate.
35class UsbChooserController : public ChooserController,
36 public device::UsbService::Observer {
juncaia7dd9442015-12-11 02:37:3937 public:
juncaibf183dd2016-05-27 16:57:2438 UsbChooserController(
juncaia7dd9442015-12-11 02:37:3939 content::RenderFrameHost* render_frame_host,
Reilly Grant7f162c92017-06-10 00:23:4740 std::vector<device::mojom::UsbDeviceFilterPtr> device_filters,
Donna Wuc98e12a2018-08-16 07:24:0241 blink::mojom::WebUsbService::GetPermissionCallback callback);
juncaibf183dd2016-05-27 16:57:2442 ~UsbChooserController() override;
juncaia7dd9442015-12-11 02:37:3943
juncaibf183dd2016-05-27 16:57:2444 // ChooserController:
juncai9c9d7512016-07-20 00:56:2345 base::string16 GetNoOptionsText() const override;
juncai3f5e3252016-07-13 05:21:1946 base::string16 GetOkButtonLabel() const override;
juncai7d445832016-01-05 03:42:3747 size_t NumOptions() const override;
juncai830ffff72016-07-01 21:27:2848 base::string16 GetOption(size_t index) const override;
juncai001f50f62016-09-29 05:15:1649 bool IsPaired(size_t index) const override;
juncai0f6d2792016-11-23 18:38:0750 void Select(const std::vector<size_t>& indices) override;
juncaia7dd9442015-12-11 02:37:3951 void Cancel() override;
52 void Close() override;
juncaibf183dd2016-05-27 16:57:2453 void OpenHelpCenterUrl() const override;
juncaia7dd9442015-12-11 02:37:3954
55 // device::UsbService::Observer:
56 void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override;
57 void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device) override;
58
juncaia7dd9442015-12-11 02:37:3959 private:
juncai09ab6142016-03-28 18:20:0360 void GotUsbDeviceList(
61 const std::vector<scoped_refptr<device::UsbDevice>>& devices);
Donna Wu55acc8c2018-09-10 06:11:2662 bool DisplayDevice(const device::mojom::UsbDeviceInfo& device) const;
juncai09ab6142016-03-28 18:20:0363
Reilly Grant7f162c92017-06-10 00:23:4764 std::vector<device::mojom::UsbDeviceFilterPtr> filters_;
Donna Wuc98e12a2018-08-16 07:24:0265 blink::mojom::WebUsbService::GetPermissionCallback callback_;
reillygf50d8d32017-03-14 22:55:0066 GURL requesting_origin_;
67 GURL embedding_origin_;
reillygf50d8d32017-03-14 22:55:0068
Reilly Grant57e92f02018-04-07 00:12:5369 content::WebContents* const web_contents_;
reillygf50d8d32017-03-14 22:55:0070 base::WeakPtr<UsbChooserContext> chooser_context_;
juncaia7dd9442015-12-11 02:37:3971 ScopedObserver<device::UsbService, device::UsbService::Observer>
72 usb_service_observer_;
reillygf50d8d32017-03-14 22:55:0073
juncai7d445832016-01-05 03:42:3774 // Each pair is a (device, device name).
Donna Wu55acc8c2018-09-10 06:11:2675 std::vector<std::pair<device::mojom::UsbDeviceInfoPtr, base::string16>>
juncai7d445832016-01-05 03:42:3776 devices_;
juncai830ffff72016-07-01 21:27:2877 // Maps from device name to number of devices.
78 std::unordered_map<base::string16, int> device_name_map_;
juncaibf183dd2016-05-27 16:57:2479 base::WeakPtrFactory<UsbChooserController> weak_factory_;
juncaia7dd9442015-12-11 02:37:3980
juncaibf183dd2016-05-27 16:57:2481 DISALLOW_COPY_AND_ASSIGN(UsbChooserController);
juncaia7dd9442015-12-11 02:37:3982};
83
juncaibf183dd2016-05-27 16:57:2484#endif // CHROME_BROWSER_USB_USB_CHOOSER_CONTROLLER_H_