OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/run_loop.h" | 5 #include "base/run_loop.h" |
6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
7 #include "base/test/values_test_util.h" | 7 #include "base/test/values_test_util.h" |
8 #include "chrome/browser/extensions/test_extension_environment.h" | 8 #include "chrome/browser/extensions/test_extension_environment.h" |
9 #include "chrome/test/base/testing_profile.h" | 9 #include "chrome/test/base/testing_profile.h" |
10 #include "device/core/device_client.h" | 10 #include "device/core/device_client.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 | 116 |
117 return device_permissions->FindEntry(device, serial_number); | 117 return device_permissions->FindEntry(device, serial_number); |
118 } | 118 } |
119 | 119 |
120 } // namespace | 120 } // namespace |
121 | 121 |
122 class DevicePermissionsManagerTest : public testing::Test { | 122 class DevicePermissionsManagerTest : public testing::Test { |
123 protected: | 123 protected: |
124 void SetUp() override { | 124 void SetUp() override { |
125 testing::Test::SetUp(); | 125 testing::Test::SetUp(); |
126 env_.reset(new TestExtensionEnvironment()); | 126 env_.GetExtensionPrefs(); // Force creation before adding extensions. |
127 env_->GetExtensionPrefs(); // Force creation before adding extensions. | 127 extension_ = env_.MakeExtension(*base::test::ParseJson( |
128 extension_ = | 128 "{" |
129 env_->MakeExtension(*base::test::ParseJson( | 129 " \"app\": {" |
130 "{" | 130 " \"background\": {" |
131 " \"app\": {" | 131 " \"scripts\": [\"background.js\"]" |
132 " \"background\": {" | 132 " }" |
133 " \"scripts\": [\"background.js\"]" | 133 " }," |
134 " }" | 134 " \"permissions\": [" |
135 " }," | 135 " \"usb\"" |
136 " \"permissions\": [" | 136 " ]" |
137 " \"usb\"" | 137 "}")); |
138 " ]" | |
139 "}")); | |
140 device0_ = new MockUsbDevice("ABCDE"); | 138 device0_ = new MockUsbDevice("ABCDE"); |
141 device1_ = new MockUsbDevice(""); | 139 device1_ = new MockUsbDevice(""); |
142 device2_ = new MockUsbDevice("12345"); | 140 device2_ = new MockUsbDevice("12345"); |
143 device3_ = new MockUsbDevice(""); | 141 device3_ = new MockUsbDevice(""); |
144 usb_service_ = new MockUsbService(); | 142 usb_service_ = new MockUsbService(); |
145 UsbService::SetInstanceForTest(usb_service_); | 143 UsbService::SetInstanceForTest(usb_service_); |
146 } | 144 } |
147 | 145 |
148 void TearDown() override { | 146 extensions::TestExtensionEnvironment env_; |
149 env_.reset(nullptr); | |
150 UsbService::SetInstanceForTest(nullptr); | |
151 } | |
152 | |
153 scoped_ptr<extensions::TestExtensionEnvironment> env_; | |
154 const extensions::Extension* extension_; | 147 const extensions::Extension* extension_; |
155 MockUsbService* usb_service_; | 148 MockUsbService* usb_service_; |
156 scoped_refptr<MockUsbDevice> device0_; | 149 scoped_refptr<MockUsbDevice> device0_; |
157 scoped_refptr<MockUsbDevice> device1_; | 150 scoped_refptr<MockUsbDevice> device1_; |
158 scoped_refptr<MockUsbDevice> device2_; | 151 scoped_refptr<MockUsbDevice> device2_; |
159 scoped_refptr<MockUsbDevice> device3_; | 152 scoped_refptr<MockUsbDevice> device3_; |
160 }; | 153 }; |
161 | 154 |
162 TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { | 155 TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { |
163 DevicePermissionsManager* manager = | 156 DevicePermissionsManager* manager = |
164 DevicePermissionsManager::Get(env_->profile()); | 157 DevicePermissionsManager::Get(env_.profile()); |
165 AllowUsbDevice(manager, extension_, device0_); | 158 AllowUsbDevice(manager, extension_, device0_); |
166 AllowUsbDevice(manager, extension_, device1_); | 159 AllowUsbDevice(manager, extension_, device1_); |
167 | 160 |
168 scoped_ptr<DevicePermissions> device_permissions = | 161 scoped_ptr<DevicePermissions> device_permissions = |
169 manager->GetForExtension(extension_->id()); | 162 manager->GetForExtension(extension_->id()); |
170 scoped_refptr<DevicePermissionEntry> device0_entry = | 163 scoped_refptr<DevicePermissionEntry> device0_entry = |
171 FindEntry(device_permissions.get(), device0_); | 164 FindEntry(device_permissions.get(), device0_); |
172 ASSERT_TRUE(device0_entry.get()); | 165 ASSERT_TRUE(device0_entry.get()); |
173 scoped_refptr<DevicePermissionEntry> device1_entry = | 166 scoped_refptr<DevicePermissionEntry> device1_entry = |
174 FindEntry(device_permissions.get(), device1_); | 167 FindEntry(device_permissions.get(), device1_); |
(...skipping 23 matching lines...) Expand all Loading... |
198 | 191 |
199 device_permissions = manager->GetForExtension(extension_->id()); | 192 device_permissions = manager->GetForExtension(extension_->id()); |
200 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 193 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
201 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); | 194 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
202 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); | 195 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
203 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); | 196 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
204 } | 197 } |
205 | 198 |
206 TEST_F(DevicePermissionsManagerTest, SuspendExtension) { | 199 TEST_F(DevicePermissionsManagerTest, SuspendExtension) { |
207 DevicePermissionsManager* manager = | 200 DevicePermissionsManager* manager = |
208 DevicePermissionsManager::Get(env_->profile()); | 201 DevicePermissionsManager::Get(env_.profile()); |
209 AllowUsbDevice(manager, extension_, device0_); | 202 AllowUsbDevice(manager, extension_, device0_); |
210 AllowUsbDevice(manager, extension_, device1_); | 203 AllowUsbDevice(manager, extension_, device1_); |
211 | 204 |
212 scoped_ptr<DevicePermissions> device_permissions = | 205 scoped_ptr<DevicePermissions> device_permissions = |
213 manager->GetForExtension(extension_->id()); | 206 manager->GetForExtension(extension_->id()); |
214 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 207 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
215 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); | 208 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
216 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); | 209 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
217 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); | 210 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
218 | 211 |
219 manager->OnBackgroundHostClose(extension_->id()); | 212 manager->OnBackgroundHostClose(extension_->id()); |
220 | 213 |
221 device_permissions = manager->GetForExtension(extension_->id()); | 214 device_permissions = manager->GetForExtension(extension_->id()); |
222 // Device 0 is still registered because its serial number has been stored in | 215 // Device 0 is still registered because its serial number has been stored in |
223 // ExtensionPrefs, it is "persistent". | 216 // ExtensionPrefs, it is "persistent". |
224 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 217 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
225 // Device 1 does not have uniquely identifying traits and so permission to | 218 // Device 1 does not have uniquely identifying traits and so permission to |
226 // open it has been dropped when the app's windows have closed and the | 219 // open it has been dropped when the app's windows have closed and the |
227 // background page has been suspended. | 220 // background page has been suspended. |
228 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); | 221 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
229 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); | 222 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
230 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); | 223 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
231 } | 224 } |
232 | 225 |
233 TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { | 226 TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { |
234 DevicePermissionsManager* manager = | 227 DevicePermissionsManager* manager = |
235 DevicePermissionsManager::Get(env_->profile()); | 228 DevicePermissionsManager::Get(env_.profile()); |
236 AllowUsbDevice(manager, extension_, device0_); | 229 AllowUsbDevice(manager, extension_, device0_); |
237 AllowUsbDevice(manager, extension_, device1_); | 230 AllowUsbDevice(manager, extension_, device1_); |
238 | 231 |
239 scoped_ptr<DevicePermissions> device_permissions = | 232 scoped_ptr<DevicePermissions> device_permissions = |
240 manager->GetForExtension(extension_->id()); | 233 manager->GetForExtension(extension_->id()); |
241 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 234 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
242 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); | 235 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
243 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); | 236 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
244 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); | 237 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
245 | 238 |
246 usb_service_->NotifyDeviceRemoved(device0_); | 239 usb_service_->NotifyDeviceRemoved(device0_); |
247 usb_service_->NotifyDeviceRemoved(device1_); | 240 usb_service_->NotifyDeviceRemoved(device1_); |
248 | 241 |
249 device_permissions = manager->GetForExtension(extension_->id()); | 242 device_permissions = manager->GetForExtension(extension_->id()); |
250 // Device 0 will be accessible when it is reconnected because it can be | 243 // Device 0 will be accessible when it is reconnected because it can be |
251 // recognized by its serial number. | 244 // recognized by its serial number. |
252 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 245 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
253 // Device 1 does not have a serial number and cannot be distinguished from | 246 // Device 1 does not have a serial number and cannot be distinguished from |
254 // any other device of the same model so the app must request permission again | 247 // any other device of the same model so the app must request permission again |
255 // when it is reconnected. | 248 // when it is reconnected. |
256 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); | 249 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
257 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); | 250 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
258 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); | 251 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
259 } | 252 } |
260 | 253 |
261 TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { | 254 TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { |
262 DevicePermissionsManager* manager = | 255 DevicePermissionsManager* manager = |
263 DevicePermissionsManager::Get(env_->profile()); | 256 DevicePermissionsManager::Get(env_.profile()); |
264 AllowUsbDevice(manager, extension_, device0_); | 257 AllowUsbDevice(manager, extension_, device0_); |
265 AllowUsbDevice(manager, extension_, device1_); | 258 AllowUsbDevice(manager, extension_, device1_); |
266 | 259 |
267 scoped_ptr<DevicePermissions> device_permissions = | 260 scoped_ptr<DevicePermissions> device_permissions = |
268 manager->GetForExtension(extension_->id()); | 261 manager->GetForExtension(extension_->id()); |
269 scoped_refptr<DevicePermissionEntry> device0_entry = | 262 scoped_refptr<DevicePermissionEntry> device0_entry = |
270 FindEntry(device_permissions.get(), device0_); | 263 FindEntry(device_permissions.get(), device0_); |
271 ASSERT_TRUE(device0_entry.get()); | 264 ASSERT_TRUE(device0_entry.get()); |
272 scoped_refptr<DevicePermissionEntry> device1_entry = | 265 scoped_refptr<DevicePermissionEntry> device1_entry = |
273 FindEntry(device_permissions.get(), device1_); | 266 FindEntry(device_permissions.get(), device1_); |
(...skipping 15 matching lines...) Expand all Loading... |
289 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); | 282 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
290 | 283 |
291 AllowUsbDevice(manager, extension_, device1_); | 284 AllowUsbDevice(manager, extension_, device1_); |
292 device_permissions = manager->GetForExtension(extension_->id()); | 285 device_permissions = manager->GetForExtension(extension_->id()); |
293 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 286 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
294 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); | 287 ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
295 } | 288 } |
296 | 289 |
297 TEST_F(DevicePermissionsManagerTest, UpdateLastUsed) { | 290 TEST_F(DevicePermissionsManagerTest, UpdateLastUsed) { |
298 DevicePermissionsManager* manager = | 291 DevicePermissionsManager* manager = |
299 DevicePermissionsManager::Get(env_->profile()); | 292 DevicePermissionsManager::Get(env_.profile()); |
300 AllowUsbDevice(manager, extension_, device0_); | 293 AllowUsbDevice(manager, extension_, device0_); |
301 | 294 |
302 scoped_ptr<DevicePermissions> device_permissions = | 295 scoped_ptr<DevicePermissions> device_permissions = |
303 manager->GetForExtension(extension_->id()); | 296 manager->GetForExtension(extension_->id()); |
304 scoped_refptr<DevicePermissionEntry> device0_entry = | 297 scoped_refptr<DevicePermissionEntry> device0_entry = |
305 FindEntry(device_permissions.get(), device0_); | 298 FindEntry(device_permissions.get(), device0_); |
306 ASSERT_TRUE(device0_entry->last_used().is_null()); | 299 ASSERT_TRUE(device0_entry->last_used().is_null()); |
307 | 300 |
308 manager->UpdateLastUsed(extension_->id(), device0_entry); | 301 manager->UpdateLastUsed(extension_->id(), device0_entry); |
309 device_permissions = manager->GetForExtension(extension_->id()); | 302 device_permissions = manager->GetForExtension(extension_->id()); |
310 device0_entry = FindEntry(device_permissions.get(), device0_); | 303 device0_entry = FindEntry(device_permissions.get(), device0_); |
311 ASSERT_FALSE(device0_entry->last_used().is_null()); | 304 ASSERT_FALSE(device0_entry->last_used().is_null()); |
312 } | 305 } |
313 | 306 |
314 TEST_F(DevicePermissionsManagerTest, LoadPrefs) { | 307 TEST_F(DevicePermissionsManagerTest, LoadPrefs) { |
315 scoped_ptr<base::Value> prefs_value = base::test::ParseJson( | 308 scoped_ptr<base::Value> prefs_value = base::test::ParseJson( |
316 "[" | 309 "[" |
317 " {" | 310 " {" |
318 " \"product_id\": 0," | 311 " \"product_id\": 0," |
319 " \"serial_number\": \"ABCDE\"," | 312 " \"serial_number\": \"ABCDE\"," |
320 " \"type\": \"usb\"," | 313 " \"type\": \"usb\"," |
321 " \"vendor_id\": 0" | 314 " \"vendor_id\": 0" |
322 " }" | 315 " }" |
323 "]"); | 316 "]"); |
324 env_->GetExtensionPrefs()->UpdateExtensionPref(extension_->id(), "devices", | 317 env_.GetExtensionPrefs()->UpdateExtensionPref(extension_->id(), "devices", |
325 prefs_value.release()); | 318 prefs_value.release()); |
326 | 319 |
327 DevicePermissionsManager* manager = | 320 DevicePermissionsManager* manager = |
328 DevicePermissionsManager::Get(env_->profile()); | 321 DevicePermissionsManager::Get(env_.profile()); |
329 scoped_ptr<DevicePermissions> device_permissions = | 322 scoped_ptr<DevicePermissions> device_permissions = |
330 manager->GetForExtension(extension_->id()); | 323 manager->GetForExtension(extension_->id()); |
331 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); | 324 ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
332 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); | 325 ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
333 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); | 326 ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
334 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); | 327 ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
335 } | 328 } |
336 | 329 |
337 } // namespace extensions | 330 } // namespace extensions |
OLD | NEW |