diff options
Diffstat (limited to 'chrome/browser/usb/usb_chooser_bubble_controller.h')
-rw-r--r-- | chrome/browser/usb/usb_chooser_bubble_controller.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/chrome/browser/usb/usb_chooser_bubble_controller.h b/chrome/browser/usb/usb_chooser_bubble_controller.h new file mode 100644 index 0000000..6de8fb0 --- /dev/null +++ b/chrome/browser/usb/usb_chooser_bubble_controller.h @@ -0,0 +1,72 @@ +// Copyright 2015 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_USB_CHOOSER_BUBBLE_CONTROLLER_H_ +#define CHROME_BROWSER_USB_USB_CHOOSER_BUBBLE_CONTROLLER_H_ + +#include <utility> + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" +#include "base/scoped_observer.h" +#include "chrome/browser/ui/website_settings/chooser_bubble_controller.h" +#include "components/bubble/bubble_reference.h" +#include "components/webusb/public/interfaces/webusb_permission_bubble.mojom.h" +#include "device/usb/usb_service.h" +#include "mojo/public/cpp/bindings/array.h" + +namespace content { +class RenderFrameHost; +} + +namespace device { +class UsbDevice; +class UsbDeviceFilter; +} + +// UsbChooserBubbleController creates a chooser bubble for WebUsb. +class UsbChooserBubbleController : public ChooserBubbleController, + public device::UsbService::Observer { + public: + UsbChooserBubbleController( + content::RenderFrameHost* owner, + mojo::Array<device::usb::DeviceFilterPtr> device_filters, + content::RenderFrameHost* render_frame_host, + const webusb::WebUsbPermissionBubble::GetPermissionCallback& callback); + ~UsbChooserBubbleController() override; + + // ChooserBubbleController: + size_t NumOptions() const override; + const base::string16& GetOption(size_t index) const override; + void Select(size_t index) override; + void Cancel() override; + void Close() override; + GURL GetHelpCenterUrl() const override; + + // device::UsbService::Observer: + void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override; + void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device) override; + + void GotUsbDeviceList( + const std::vector<scoped_refptr<device::UsbDevice>>& devices); + + void set_bubble_reference(BubbleReference bubble_reference); + + private: + content::RenderFrameHost* const render_frame_host_; + webusb::WebUsbPermissionBubble::GetPermissionCallback callback_; + ScopedObserver<device::UsbService, device::UsbService::Observer> + usb_service_observer_; + std::vector<device::UsbDeviceFilter> filters_; + // Each pair is a (device, device name). + std::vector<std::pair<scoped_refptr<device::UsbDevice>, base::string16>> + devices_; + BubbleReference bubble_reference_; + base::WeakPtrFactory<UsbChooserBubbleController> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(UsbChooserBubbleController); +}; + +#endif // CHROME_BROWSER_USB_USB_CHOOSER_BUBBLE_CONTROLLER_H_ |