blob: febd80f93a49a1a237444bb16ec83f302eb9f8b9 [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"
juncaia7dd9442015-12-11 02:37:3917#include "device/usb/usb_service.h"
Donna Wuc98e12a2018-08-16 07:24:0218#include "third_party/blink/public/mojom/usb/web_usb_service.mojom.h"
reillygf50d8d32017-03-14 22:55:0019#include "url/gurl.h"
juncaia7dd9442015-12-11 02:37:3920
21namespace content {
22class RenderFrameHost;
Reilly Grant57e92f02018-04-07 00:12:5323class WebContents;
juncaia7dd9442015-12-11 02:37:3924}
25
26namespace device {
27class UsbDevice;
juncaia7dd9442015-12-11 02:37:3928}
29
reillygf50d8d32017-03-14 22:55:0030class UsbChooserContext;
31
juncaibf183dd2016-05-27 16:57:2432// UsbChooserController creates a chooser for WebUSB.
33// It is owned by ChooserBubbleDelegate.
34class UsbChooserController : public ChooserController,
35 public device::UsbService::Observer {
juncaia7dd9442015-12-11 02:37:3936 public:
juncaibf183dd2016-05-27 16:57:2437 UsbChooserController(
juncaia7dd9442015-12-11 02:37:3938 content::RenderFrameHost* render_frame_host,
Reilly Grant7f162c92017-06-10 00:23:4739 std::vector<device::mojom::UsbDeviceFilterPtr> device_filters,
Donna Wuc98e12a2018-08-16 07:24:0240 blink::mojom::WebUsbService::GetPermissionCallback callback);
juncaibf183dd2016-05-27 16:57:2441 ~UsbChooserController() override;
juncaia7dd9442015-12-11 02:37:3942
juncaibf183dd2016-05-27 16:57:2443 // ChooserController:
juncai9c9d7512016-07-20 00:56:2344 base::string16 GetNoOptionsText() const override;
juncai3f5e3252016-07-13 05:21:1945 base::string16 GetOkButtonLabel() const override;
juncai7d445832016-01-05 03:42:3746 size_t NumOptions() const override;
juncai830ffff72016-07-01 21:27:2847 base::string16 GetOption(size_t index) const override;
juncai001f50f62016-09-29 05:15:1648 bool IsPaired(size_t index) const override;
juncai0f6d2792016-11-23 18:38:0749 void Select(const std::vector<size_t>& indices) override;
juncaia7dd9442015-12-11 02:37:3950 void Cancel() override;
51 void Close() override;
juncaibf183dd2016-05-27 16:57:2452 void OpenHelpCenterUrl() const override;
juncaia7dd9442015-12-11 02:37:3953
54 // device::UsbService::Observer:
55 void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override;
56 void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device) override;
57
juncaia7dd9442015-12-11 02:37:3958 private:
juncai09ab6142016-03-28 18:20:0359 void GotUsbDeviceList(
60 const std::vector<scoped_refptr<device::UsbDevice>>& devices);
reillyg344e0fd2016-03-30 21:36:0561 bool DisplayDevice(scoped_refptr<device::UsbDevice> device) const;
juncai09ab6142016-03-28 18:20:0362
Reilly Grant7f162c92017-06-10 00:23:4763 std::vector<device::mojom::UsbDeviceFilterPtr> filters_;
Donna Wuc98e12a2018-08-16 07:24:0264 blink::mojom::WebUsbService::GetPermissionCallback callback_;
reillygf50d8d32017-03-14 22:55:0065 GURL requesting_origin_;
66 GURL embedding_origin_;
reillygf50d8d32017-03-14 22:55:0067
Reilly Grant57e92f02018-04-07 00:12:5368 content::WebContents* const web_contents_;
reillygf50d8d32017-03-14 22:55:0069 base::WeakPtr<UsbChooserContext> chooser_context_;
juncaia7dd9442015-12-11 02:37:3970 ScopedObserver<device::UsbService, device::UsbService::Observer>
71 usb_service_observer_;
reillygf50d8d32017-03-14 22:55:0072
juncai7d445832016-01-05 03:42:3773 // Each pair is a (device, device name).
74 std::vector<std::pair<scoped_refptr<device::UsbDevice>, base::string16>>
75 devices_;
juncai830ffff72016-07-01 21:27:2876 // Maps from device name to number of devices.
77 std::unordered_map<base::string16, int> device_name_map_;
juncaibf183dd2016-05-27 16:57:2478 base::WeakPtrFactory<UsbChooserController> weak_factory_;
juncaia7dd9442015-12-11 02:37:3979
juncaibf183dd2016-05-27 16:57:2480 DISALLOW_COPY_AND_ASSIGN(UsbChooserController);
juncaia7dd9442015-12-11 02:37:3981};
82
juncaibf183dd2016-05-27 16:57:2483#endif // CHROME_BROWSER_USB_USB_CHOOSER_CONTROLLER_H_