| Index: extensions/browser/api/device_permissions_prompt.h
|
| diff --git a/extensions/browser/api/device_permissions_prompt.h b/extensions/browser/api/device_permissions_prompt.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d96e7678488f613990e358932f14a618133761b1
|
| --- /dev/null
|
| +++ b/extensions/browser/api/device_permissions_prompt.h
|
| @@ -0,0 +1,157 @@
|
| +// Copyright 2014 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 EXTENSIONS_BROWSER_DEVICE_PERMISSIONS_PROMPT_H_
|
| +#define EXTENSIONS_BROWSER_DEVICE_PERMISSIONS_PROMPT_H_
|
| +
|
| +#include <vector>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/logging.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/strings/string16.h"
|
| +
|
| +namespace content {
|
| +class BrowserContext;
|
| +class WebContents;
|
| +}
|
| +
|
| +namespace device {
|
| +class UsbDevice;
|
| +class UsbDeviceFilter;
|
| +}
|
| +
|
| +namespace extensions {
|
| +
|
| +class Extension;
|
| +
|
| +// Platform-independent interface for displaing a UI for choosing devices
|
| +// (similar to choosing files).
|
| +class DevicePermissionsPrompt {
|
| + public:
|
| + // Context information available to the UI implementation.
|
| + class Prompt : public base::RefCountedThreadSafe<Prompt> {
|
| + public:
|
| + // Displayed properties of a device.
|
| + struct DeviceInfo {
|
| + DeviceInfo(scoped_refptr<device::UsbDevice> device,
|
| + const base::string16& name,
|
| + const base::string16& serial_number,
|
| + const base::string16& tooltip);
|
| + ~DeviceInfo();
|
| +
|
| + scoped_refptr<device::UsbDevice> device;
|
| + base::string16 name;
|
| + base::string16 serial_number;
|
| + base::string16 tooltip;
|
| + };
|
| +
|
| + // Since the set of devices can change while the UI is visible an
|
| + // implementation should register an observer.
|
| + class Observer {
|
| + public:
|
| + virtual void OnDevicesChanged() = 0;
|
| + };
|
| +
|
| + Prompt();
|
| +
|
| + // Only one observer may be registered at a time.
|
| + void SetObserver(Observer* observer);
|
| +
|
| + base::string16 GetHeading() const;
|
| + base::string16 GetPromptMessage() const;
|
| + size_t GetDeviceCount() const { return devices_.size(); }
|
| + scoped_refptr<device::UsbDevice> GetDevice(size_t index) const;
|
| + base::string16 GetDeviceName(size_t index) const {
|
| + DCHECK_LT(index, devices_.size());
|
| + return devices_[index].name;
|
| + }
|
| + base::string16 GetDeviceSerialNumber(size_t index) const {
|
| + DCHECK_LT(index, devices_.size());
|
| + return devices_[index].serial_number;
|
| + }
|
| + base::string16 GetDeviceTooltip(size_t index) const {
|
| + DCHECK_LT(index, devices_.size());
|
| + return devices_[index].tooltip;
|
| + }
|
| +
|
| + // Notifies the DevicePermissionsManager for the current extension that
|
| + // access to the device at the given index is now granted.
|
| + void GrantDevicePermission(size_t index) const;
|
| +
|
| + const extensions::Extension* extension() const { return extension_; }
|
| + void set_extension(const extensions::Extension* extension) {
|
| + extension_ = extension;
|
| + }
|
| +
|
| + void set_browser_context(content::BrowserContext* context) {
|
| + browser_context_ = context;
|
| + }
|
| +
|
| + bool multiple() const { return multiple_; }
|
| + void set_multiple(bool multiple) { multiple_ = multiple; }
|
| +
|
| + const std::vector<device::UsbDeviceFilter>& filters() const {
|
| + return filters_;
|
| + }
|
| + void set_filters(const std::vector<device::UsbDeviceFilter>& filters);
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<Prompt>;
|
| +
|
| + virtual ~Prompt();
|
| +
|
| + // Querying for devices must be done asynchronously on the FILE thread.
|
| + void DoDeviceQuery();
|
| + void SetDevices(const std::vector<DeviceInfo>& devices);
|
| +
|
| + const extensions::Extension* extension_;
|
| + content::BrowserContext* browser_context_;
|
| + bool multiple_;
|
| + std::vector<device::UsbDeviceFilter> filters_;
|
| + std::vector<DeviceInfo> devices_;
|
| + Observer* observer_;
|
| + };
|
| +
|
| + class Delegate {
|
| + public:
|
| + // Called with the list of selected USB devices.
|
| + virtual void OnUsbDevicesChosen(
|
| + const std::vector<scoped_refptr<device::UsbDevice>>& devices) = 0;
|
| +
|
| + protected:
|
| + virtual ~Delegate() {}
|
| + };
|
| +
|
| + typedef base::Callback<void(content::WebContents*,
|
| + DevicePermissionsPrompt::Delegate*,
|
| + scoped_refptr<DevicePermissionsPrompt::Prompt>)>
|
| + ShowDialogCallback;
|
| +
|
| + static ShowDialogCallback GetDefaultShowDialogCallback();
|
| +
|
| + DevicePermissionsPrompt(content::WebContents* web_contents);
|
| + virtual ~DevicePermissionsPrompt();
|
| +
|
| + virtual void AskForUsbDevices(
|
| + Delegate* delegate,
|
| + const Extension* extension,
|
| + content::BrowserContext* context,
|
| + bool multiple,
|
| + const std::vector<device::UsbDeviceFilter>& filters);
|
| +
|
| + private:
|
| + // Parent web contents of the device permissions UI dialog.
|
| + content::WebContents* web_contents_;
|
| +
|
| + // The delegate called after the UI has been dismissed.
|
| + Delegate* delegate_;
|
| +
|
| + // Parameters available to the UI implementation.
|
| + scoped_refptr<Prompt> prompt_;
|
| +};
|
| +
|
| +} // namespace extensions
|
| +
|
| +#endif // EXTENSIONS_BROWSER_API_DEVICE_PERMISSIONS_PROMPT_H_
|
|
|