Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: extensions/browser/api/device_permissions_prompt.h

Issue 633793002: Prompt for granting permission to access USB devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename UsbDevicesChosen -> OnUsbDevicesChosen. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/api/DEPS ('k') | extensions/browser/api/device_permissions_prompt.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « extensions/browser/api/DEPS ('k') | extensions/browser/api/device_permissions_prompt.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698