Index: extensions/browser/api/device_permissions_manager.h |
diff --git a/extensions/browser/api/device_permissions_manager.h b/extensions/browser/api/device_permissions_manager.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..49d6397f54a8b14daa5aa763972ea3be4060882b |
--- /dev/null |
+++ b/extensions/browser/api/device_permissions_manager.h |
@@ -0,0 +1,146 @@ |
+// 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_DEVICE_PERMISSION_MANAGER_H_ |
+#define EXTENSIONS_DEVICE_PERMISSION_MANAGER_H_ |
+ |
+#include <map> |
+#include <set> |
+#include <vector> |
+ |
+#include "base/macros.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/strings/string16.h" |
+#include "base/threading/thread_checker.h" |
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h" |
+#include "components/keyed_service/core/keyed_service.h" |
+#include "content/public/browser/notification_observer.h" |
+#include "content/public/browser/notification_registrar.h" |
+#include "device/usb/usb_device.h" |
+ |
+template <typename T> |
+struct DefaultSingletonTraits; |
+ |
+namespace base { |
+class Value; |
+} |
+ |
+namespace content { |
+class BrowserContext; |
+} |
+ |
+namespace device { |
+class UsbDevice; |
+} |
+ |
+namespace extensions { |
+ |
+struct DevicePermissionEntry { |
+ DevicePermissionEntry(uint16_t vendor_id, |
+ uint16_t product_id, |
+ const base::string16& serial_number); |
+ |
+ base::Value* ToValue() const; |
+ |
+ // The vendor ID of this device. |
+ uint16_t vendor_id; |
+ |
+ // The product ID of this device. |
+ uint16_t product_id; |
+ |
+ // The serial number (possibly alphanumeric) of this device. |
+ base::string16 serial_number; |
+}; |
+ |
+class DevicePermissions { |
scheib
2014/09/29 15:30:53
http://google-styleguide.googlecode.com/svn/trunk/
|
+ public: |
+ virtual ~DevicePermissions(); |
+ |
+ bool CheckUsbDevice(scoped_refptr<device::UsbDevice> device) const; |
+ |
+ private: |
+ friend class DevicePermissionsManager; |
+ |
+ DevicePermissions(content::BrowserContext* context, |
+ const std::string& extension_id); |
+ DevicePermissions( |
+ const std::vector<DevicePermissionEntry>& permission_entries, |
+ const std::set<scoped_refptr<device::UsbDevice>>& ephemeral_devices); |
+ |
+ std::vector<DevicePermissionEntry>& permission_entries(); |
+ std::set<scoped_refptr<device::UsbDevice>>& ephemeral_devices(); |
+ |
+ std::vector<DevicePermissionEntry> permission_entries_; |
+ std::set<scoped_refptr<device::UsbDevice>> ephemeral_devices_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DevicePermissions); |
+}; |
+ |
+class DevicePermissionsManager : public KeyedService, |
+ public base::NonThreadSafe, |
+ public content::NotificationObserver, |
+ public device::UsbDevice::Observer { |
+ public: |
+ static DevicePermissionsManager* Get(content::BrowserContext* context); |
+ |
+ scoped_ptr<DevicePermissions> GetForExtension( |
+ const std::string& extension_id); |
+ |
+ std::vector<base::string16> GetPermissionMessageStrings( |
+ const std::string& extension_id); |
+ |
+ void AllowUsbDevice(const std::string& extension_id, |
+ scoped_refptr<device::UsbDevice> device, |
+ const base::string16& serial_number); |
+ |
+ void Clear(const std::string& extension_id); |
+ |
+ private: |
+ friend class DevicePermissionsManagerFactory; |
+ |
+ DevicePermissionsManager(content::BrowserContext* context); |
+ virtual ~DevicePermissionsManager(); |
+ |
+ DevicePermissions* Get(const std::string& extension_id) const; |
+ DevicePermissions* GetOrInsert(const std::string& extension_id); |
+ |
+ // content::NotificationObserver. |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) OVERRIDE; |
+ |
+ // device::UsbDevice::Observer |
+ virtual void OnDisconnect(scoped_refptr<device::UsbDevice> device) OVERRIDE; |
+ |
+ content::BrowserContext* context_; |
+ std::map<std::string, DevicePermissions*> extension_id_to_device_permissions_; |
+ content::NotificationRegistrar registrar_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DevicePermissionsManager); |
+}; |
+ |
+class DevicePermissionsManagerFactory |
+ : public BrowserContextKeyedServiceFactory { |
+ public: |
+ static DevicePermissionsManager* GetForBrowserContext( |
+ content::BrowserContext* context); |
+ static DevicePermissionsManagerFactory* GetInstance(); |
+ |
+ private: |
+ friend struct DefaultSingletonTraits<DevicePermissionsManagerFactory>; |
+ |
+ DevicePermissionsManagerFactory(); |
+ virtual ~DevicePermissionsManagerFactory(); |
+ |
+ // BrowserContextKeyedServiceFactory |
+ virtual KeyedService* BuildServiceInstanceFor( |
+ content::BrowserContext* context) const OVERRIDE; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DevicePermissionsManagerFactory); |
+}; |
+ |
+} // namespace extensions |
+ |
+#endif // EXTENSIONS_DEVICE_PERMISSION_MANAGER_H_ |