OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 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 | |
5 #ifndef EXTENSIONS_DEVICE_PERMISSION_MANAGER_H_ | |
6 #define EXTENSIONS_DEVICE_PERMISSION_MANAGER_H_ | |
7 | |
8 #include <map> | |
9 #include <set> | |
10 #include <vector> | |
11 | |
12 #include "base/macros.h" | |
13 #include "base/memory/ref_counted.h" | |
14 #include "base/memory/scoped_ptr.h" | |
15 #include "base/strings/string16.h" | |
16 #include "base/threading/thread_checker.h" | |
17 #include "components/keyed_service/content/browser_context_keyed_service_factory .h" | |
18 #include "components/keyed_service/core/keyed_service.h" | |
19 #include "content/public/browser/notification_observer.h" | |
20 #include "content/public/browser/notification_registrar.h" | |
21 #include "device/usb/usb_device.h" | |
22 | |
23 template <typename T> | |
24 struct DefaultSingletonTraits; | |
25 | |
26 namespace base { | |
27 class Value; | |
28 } | |
29 | |
30 namespace content { | |
31 class BrowserContext; | |
32 } | |
33 | |
34 namespace device { | |
35 class UsbDevice; | |
36 } | |
37 | |
38 namespace extensions { | |
39 | |
40 struct DevicePermissionEntry { | |
41 DevicePermissionEntry(uint16_t vendor_id, | |
42 uint16_t product_id, | |
43 const base::string16& serial_number); | |
44 | |
45 base::Value* ToValue() const; | |
46 | |
47 // The vendor ID of this device. | |
48 uint16_t vendor_id; | |
49 | |
50 // The product ID of this device. | |
51 uint16_t product_id; | |
52 | |
53 // The serial number (possibly alphanumeric) of this device. | |
54 base::string16 serial_number; | |
55 }; | |
56 | |
57 class DevicePermissions { | |
scheib
2014/09/29 15:30:53
http://google-styleguide.googlecode.com/svn/trunk/
| |
58 public: | |
59 virtual ~DevicePermissions(); | |
60 | |
61 bool CheckUsbDevice(scoped_refptr<device::UsbDevice> device) const; | |
62 | |
63 private: | |
64 friend class DevicePermissionsManager; | |
65 | |
66 DevicePermissions(content::BrowserContext* context, | |
67 const std::string& extension_id); | |
68 DevicePermissions( | |
69 const std::vector<DevicePermissionEntry>& permission_entries, | |
70 const std::set<scoped_refptr<device::UsbDevice>>& ephemeral_devices); | |
71 | |
72 std::vector<DevicePermissionEntry>& permission_entries(); | |
73 std::set<scoped_refptr<device::UsbDevice>>& ephemeral_devices(); | |
74 | |
75 std::vector<DevicePermissionEntry> permission_entries_; | |
76 std::set<scoped_refptr<device::UsbDevice>> ephemeral_devices_; | |
77 | |
78 DISALLOW_COPY_AND_ASSIGN(DevicePermissions); | |
79 }; | |
80 | |
81 class DevicePermissionsManager : public KeyedService, | |
82 public base::NonThreadSafe, | |
83 public content::NotificationObserver, | |
84 public device::UsbDevice::Observer { | |
85 public: | |
86 static DevicePermissionsManager* Get(content::BrowserContext* context); | |
87 | |
88 scoped_ptr<DevicePermissions> GetForExtension( | |
89 const std::string& extension_id); | |
90 | |
91 std::vector<base::string16> GetPermissionMessageStrings( | |
92 const std::string& extension_id); | |
93 | |
94 void AllowUsbDevice(const std::string& extension_id, | |
95 scoped_refptr<device::UsbDevice> device, | |
96 const base::string16& serial_number); | |
97 | |
98 void Clear(const std::string& extension_id); | |
99 | |
100 private: | |
101 friend class DevicePermissionsManagerFactory; | |
102 | |
103 DevicePermissionsManager(content::BrowserContext* context); | |
104 virtual ~DevicePermissionsManager(); | |
105 | |
106 DevicePermissions* Get(const std::string& extension_id) const; | |
107 DevicePermissions* GetOrInsert(const std::string& extension_id); | |
108 | |
109 // content::NotificationObserver. | |
110 virtual void Observe(int type, | |
111 const content::NotificationSource& source, | |
112 const content::NotificationDetails& details) OVERRIDE; | |
113 | |
114 // device::UsbDevice::Observer | |
115 virtual void OnDisconnect(scoped_refptr<device::UsbDevice> device) OVERRIDE; | |
116 | |
117 content::BrowserContext* context_; | |
118 std::map<std::string, DevicePermissions*> extension_id_to_device_permissions_; | |
119 content::NotificationRegistrar registrar_; | |
120 | |
121 DISALLOW_COPY_AND_ASSIGN(DevicePermissionsManager); | |
122 }; | |
123 | |
124 class DevicePermissionsManagerFactory | |
125 : public BrowserContextKeyedServiceFactory { | |
126 public: | |
127 static DevicePermissionsManager* GetForBrowserContext( | |
128 content::BrowserContext* context); | |
129 static DevicePermissionsManagerFactory* GetInstance(); | |
130 | |
131 private: | |
132 friend struct DefaultSingletonTraits<DevicePermissionsManagerFactory>; | |
133 | |
134 DevicePermissionsManagerFactory(); | |
135 virtual ~DevicePermissionsManagerFactory(); | |
136 | |
137 // BrowserContextKeyedServiceFactory | |
138 virtual KeyedService* BuildServiceInstanceFor( | |
139 content::BrowserContext* context) const OVERRIDE; | |
140 | |
141 DISALLOW_COPY_AND_ASSIGN(DevicePermissionsManagerFactory); | |
142 }; | |
143 | |
144 } // namespace extensions | |
145 | |
146 #endif // EXTENSIONS_DEVICE_PERMISSION_MANAGER_H_ | |
OLD | NEW |