| 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/usb/usb_device.h" | 10 #include "device/usb/usb_device.h" |
| 11 #include "device/usb/usb_device_handle.h" | 11 #include "device/usb/usb_device_handle.h" |
| 12 #include "extensions/browser/api/device_permissions_manager.h" | 12 #include "extensions/browser/api/device_permissions_manager.h" |
| 13 #include "extensions/browser/extension_prefs.h" | 13 #include "extensions/browser/extension_prefs.h" |
| 14 #include "extensions/common/extension.h" | 14 #include "extensions/common/extension.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 namespace extensions { | 18 namespace extensions { |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 using device::UsbDevice; | 22 using device::UsbDevice; |
| 23 using device::UsbDeviceHandle; | 23 using device::UsbDeviceHandle; |
| 24 using testing::_; |
| 25 using testing::DoAll; |
| 24 using testing::Return; | 26 using testing::Return; |
| 27 using testing::SetArgPointee; |
| 28 |
| 29 int next_id; |
| 25 | 30 |
| 26 class MockUsbDevice : public UsbDevice { | 31 class MockUsbDevice : public UsbDevice { |
| 27 public: | 32 public: |
| 28 MockUsbDevice(const std::string& serial_number, uint32 unique_id) | 33 explicit MockUsbDevice(const std::string& serial_number) |
| 29 : UsbDevice(0, 0, unique_id), serial_number_(serial_number) {} | 34 : UsbDevice(0, 0, next_id++) { |
| 35 if (serial_number.empty()) { |
| 36 EXPECT_CALL(*this, GetSerialNumber(_)).WillRepeatedly(Return(false)); |
| 37 } else { |
| 38 EXPECT_CALL(*this, GetSerialNumber(_)) |
| 39 .WillRepeatedly( |
| 40 DoAll(SetArgPointee<0>(base::ASCIIToUTF16(serial_number)), |
| 41 Return(true))); |
| 42 } |
| 30 | 43 |
| 44 EXPECT_CALL(*this, GetProduct(_)) |
| 45 .WillRepeatedly( |
| 46 DoAll(SetArgPointee<0>(base::ASCIIToUTF16("Test Product")), |
| 47 Return(true))); |
| 48 EXPECT_CALL(*this, GetManufacturer(_)) |
| 49 .WillRepeatedly( |
| 50 DoAll(SetArgPointee<0>(base::ASCIIToUTF16("Test Manufacturer")), |
| 51 Return(true))); |
| 52 } |
| 53 |
| 54 MOCK_METHOD2(RequestUsbAccess, void(int, const base::Callback<void(bool)>&)); |
| 31 MOCK_METHOD0(Open, scoped_refptr<UsbDeviceHandle>()); | 55 MOCK_METHOD0(Open, scoped_refptr<UsbDeviceHandle>()); |
| 32 MOCK_METHOD1(Close, bool(scoped_refptr<UsbDeviceHandle>)); | 56 MOCK_METHOD1(Close, bool(scoped_refptr<UsbDeviceHandle>)); |
| 33 #if defined(OS_CHROMEOS) | 57 MOCK_METHOD0(GetConfiguration, const device::UsbConfigDescriptor*()); |
| 34 MOCK_METHOD2(RequestUsbAccess, void(int, const base::Callback<void(bool)>&)); | 58 MOCK_METHOD1(GetManufacturer, bool(base::string16*)); |
| 35 #endif | 59 MOCK_METHOD1(GetProduct, bool(base::string16*)); |
| 36 MOCK_METHOD0(GetConfiguration, const device::UsbConfigDescriptor&()); | 60 MOCK_METHOD1(GetSerialNumber, bool(base::string16*)); |
| 37 | |
| 38 virtual bool GetManufacturer(base::string16* manufacturer) { | |
| 39 *manufacturer = base::ASCIIToUTF16("Test Manufacturer"); | |
| 40 return true; | |
| 41 } | |
| 42 | |
| 43 virtual bool GetProduct(base::string16* product) { | |
| 44 *product = base::ASCIIToUTF16("Test Product"); | |
| 45 return true; | |
| 46 } | |
| 47 | |
| 48 virtual bool GetSerialNumber(base::string16* serial_number) override { | |
| 49 if (serial_number_.empty()) { | |
| 50 // Return false as if the device does not have or failed to return its | |
| 51 // serial number. | |
| 52 return false; | |
| 53 } | |
| 54 | |
| 55 *serial_number = base::UTF8ToUTF16(serial_number_); | |
| 56 return true; | |
| 57 } | |
| 58 | 61 |
| 59 void NotifyDisconnect() { UsbDevice::NotifyDisconnect(); } | 62 void NotifyDisconnect() { UsbDevice::NotifyDisconnect(); } |
| 60 | 63 |
| 61 private: | 64 private: |
| 62 virtual ~MockUsbDevice() {} | 65 virtual ~MockUsbDevice() {} |
| 63 | |
| 64 const std::string serial_number_; | |
| 65 }; | 66 }; |
| 66 | 67 |
| 67 void AllowUsbDevice(DevicePermissionsManager* manager, | 68 void AllowUsbDevice(DevicePermissionsManager* manager, |
| 68 const Extension* extension, | 69 const Extension* extension, |
| 69 scoped_refptr<UsbDevice> device) { | 70 scoped_refptr<UsbDevice> device) { |
| 70 // If the device cannot provide any of these strings they will simply by | 71 // If the device cannot provide any of these strings they will simply by |
| 71 // empty. | 72 // empty. |
| 72 base::string16 product; | 73 base::string16 product; |
| 73 device->GetProduct(&product); | 74 device->GetProduct(&product); |
| 74 base::string16 manufacturer; | 75 base::string16 manufacturer; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 91 "{" | 92 "{" |
| 92 " \"app\": {" | 93 " \"app\": {" |
| 93 " \"background\": {" | 94 " \"background\": {" |
| 94 " \"scripts\": [\"background.js\"]" | 95 " \"scripts\": [\"background.js\"]" |
| 95 " }" | 96 " }" |
| 96 " }," | 97 " }," |
| 97 " \"permissions\": [" | 98 " \"permissions\": [" |
| 98 " \"usb\"" | 99 " \"usb\"" |
| 99 " ]" | 100 " ]" |
| 100 "}")); | 101 "}")); |
| 101 device0 = new MockUsbDevice("ABCDE", 0); | 102 device0_ = new MockUsbDevice("ABCDE"); |
| 102 device1 = new MockUsbDevice("", 1); | 103 device1_ = new MockUsbDevice(""); |
| 103 device2 = new MockUsbDevice("12345", 2); | 104 device2_ = new MockUsbDevice("12345"); |
| 104 device3 = new MockUsbDevice("", 3); | 105 device3_ = new MockUsbDevice(""); |
| 105 } | 106 } |
| 106 | 107 |
| 107 extensions::TestExtensionEnvironment env_; | 108 extensions::TestExtensionEnvironment env_; |
| 108 const extensions::Extension* extension_; | 109 const extensions::Extension* extension_; |
| 109 scoped_refptr<MockUsbDevice> device0; | 110 scoped_refptr<MockUsbDevice> device0_; |
| 110 scoped_refptr<MockUsbDevice> device1; | 111 scoped_refptr<MockUsbDevice> device1_; |
| 111 scoped_refptr<MockUsbDevice> device2; | 112 scoped_refptr<MockUsbDevice> device2_; |
| 112 scoped_refptr<MockUsbDevice> device3; | 113 scoped_refptr<MockUsbDevice> device3_; |
| 113 }; | 114 }; |
| 114 | 115 |
| 115 TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { | 116 TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { |
| 116 DevicePermissionsManager* manager = | 117 DevicePermissionsManager* manager = |
| 117 DevicePermissionsManager::Get(env_.profile()); | 118 DevicePermissionsManager::Get(env_.profile()); |
| 118 AllowUsbDevice(manager, extension_, device0); | 119 AllowUsbDevice(manager, extension_, device0_); |
| 119 AllowUsbDevice(manager, extension_, device1); | 120 AllowUsbDevice(manager, extension_, device1_); |
| 120 | 121 |
| 121 scoped_ptr<DevicePermissions> device_permissions = | 122 scoped_ptr<DevicePermissions> device_permissions = |
| 122 manager->GetForExtension(extension_->id()); | 123 manager->GetForExtension(extension_->id()); |
| 123 scoped_refptr<DevicePermissionEntry> device0_entry = | 124 scoped_refptr<DevicePermissionEntry> device0_entry = |
| 124 device_permissions->FindEntry(device0); | 125 device_permissions->FindEntry(device0_); |
| 125 ASSERT_TRUE(device0_entry.get()); | 126 ASSERT_TRUE(device0_entry.get()); |
| 126 scoped_refptr<DevicePermissionEntry> device1_entry = | 127 scoped_refptr<DevicePermissionEntry> device1_entry = |
| 127 device_permissions->FindEntry(device1); | 128 device_permissions->FindEntry(device1_); |
| 128 ASSERT_TRUE(device1_entry.get()); | 129 ASSERT_TRUE(device1_entry.get()); |
| 129 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 130 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 130 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 131 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 131 ASSERT_EQ(2U, device_permissions->entries().size()); | 132 ASSERT_EQ(2U, device_permissions->entries().size()); |
| 132 | 133 |
| 133 ASSERT_EQ(base::ASCIIToUTF16( | 134 ASSERT_EQ(base::ASCIIToUTF16( |
| 134 "Test Product from Test Manufacturer (serial number ABCDE)"), | 135 "Test Product from Test Manufacturer (serial number ABCDE)"), |
| 135 device0_entry->GetPermissionMessageString()); | 136 device0_entry->GetPermissionMessageString()); |
| 136 ASSERT_EQ(base::ASCIIToUTF16("Test Product from Test Manufacturer"), | 137 ASSERT_EQ(base::ASCIIToUTF16("Test Product from Test Manufacturer"), |
| 137 device1_entry->GetPermissionMessageString()); | 138 device1_entry->GetPermissionMessageString()); |
| 138 | 139 |
| 139 manager->Clear(extension_->id()); | 140 manager->Clear(extension_->id()); |
| 140 | 141 |
| 141 device_permissions = manager->GetForExtension(extension_->id()); | 142 device_permissions = manager->GetForExtension(extension_->id()); |
| 142 ASSERT_FALSE(device_permissions->FindEntry(device0).get()); | 143 ASSERT_FALSE(device_permissions->FindEntry(device0_).get()); |
| 143 ASSERT_FALSE(device_permissions->FindEntry(device1).get()); | 144 ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
| 144 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 145 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 145 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 146 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 146 ASSERT_EQ(0U, device_permissions->entries().size()); | 147 ASSERT_EQ(0U, device_permissions->entries().size()); |
| 147 | 148 |
| 148 // After clearing device it should be possible to grant permission again. | 149 // After clearing device it should be possible to grant permission again. |
| 149 AllowUsbDevice(manager, extension_, device0); | 150 AllowUsbDevice(manager, extension_, device0_); |
| 150 AllowUsbDevice(manager, extension_, device1); | 151 AllowUsbDevice(manager, extension_, device1_); |
| 151 | 152 |
| 152 device_permissions = manager->GetForExtension(extension_->id()); | 153 device_permissions = manager->GetForExtension(extension_->id()); |
| 153 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 154 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 154 ASSERT_TRUE(device_permissions->FindEntry(device1).get()); | 155 ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
| 155 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 156 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 156 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 157 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 157 } | 158 } |
| 158 | 159 |
| 159 TEST_F(DevicePermissionsManagerTest, SuspendExtension) { | 160 TEST_F(DevicePermissionsManagerTest, SuspendExtension) { |
| 160 DevicePermissionsManager* manager = | 161 DevicePermissionsManager* manager = |
| 161 DevicePermissionsManager::Get(env_.profile()); | 162 DevicePermissionsManager::Get(env_.profile()); |
| 162 AllowUsbDevice(manager, extension_, device0); | 163 AllowUsbDevice(manager, extension_, device0_); |
| 163 AllowUsbDevice(manager, extension_, device1); | 164 AllowUsbDevice(manager, extension_, device1_); |
| 164 | 165 |
| 165 scoped_ptr<DevicePermissions> device_permissions = | 166 scoped_ptr<DevicePermissions> device_permissions = |
| 166 manager->GetForExtension(extension_->id()); | 167 manager->GetForExtension(extension_->id()); |
| 167 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 168 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 168 ASSERT_TRUE(device_permissions->FindEntry(device1).get()); | 169 ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
| 169 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 170 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 170 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 171 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 171 | 172 |
| 172 manager->OnBackgroundHostClose(extension_->id()); | 173 manager->OnBackgroundHostClose(extension_->id()); |
| 173 | 174 |
| 174 device_permissions = manager->GetForExtension(extension_->id()); | 175 device_permissions = manager->GetForExtension(extension_->id()); |
| 175 // Device 0 is still registered because its serial number has been stored in | 176 // Device 0 is still registered because its serial number has been stored in |
| 176 // ExtensionPrefs, it is "persistent". | 177 // ExtensionPrefs, it is "persistent". |
| 177 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 178 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 178 // Device 1 does not have uniquely identifying traits and so permission to | 179 // Device 1 does not have uniquely identifying traits and so permission to |
| 179 // open it has been dropped when the app's windows have closed and the | 180 // open it has been dropped when the app's windows have closed and the |
| 180 // background page has been suspended. | 181 // background page has been suspended. |
| 181 ASSERT_FALSE(device_permissions->FindEntry(device1).get()); | 182 ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
| 182 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 183 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 183 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 184 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 184 } | 185 } |
| 185 | 186 |
| 186 TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { | 187 TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { |
| 187 DevicePermissionsManager* manager = | 188 DevicePermissionsManager* manager = |
| 188 DevicePermissionsManager::Get(env_.profile()); | 189 DevicePermissionsManager::Get(env_.profile()); |
| 189 AllowUsbDevice(manager, extension_, device0); | 190 AllowUsbDevice(manager, extension_, device0_); |
| 190 AllowUsbDevice(manager, extension_, device1); | 191 AllowUsbDevice(manager, extension_, device1_); |
| 191 | 192 |
| 192 scoped_ptr<DevicePermissions> device_permissions = | 193 scoped_ptr<DevicePermissions> device_permissions = |
| 193 manager->GetForExtension(extension_->id()); | 194 manager->GetForExtension(extension_->id()); |
| 194 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 195 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 195 ASSERT_TRUE(device_permissions->FindEntry(device1).get()); | 196 ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
| 196 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 197 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 197 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 198 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 198 | 199 |
| 199 device0->NotifyDisconnect(); | 200 device0_->NotifyDisconnect(); |
| 200 device1->NotifyDisconnect(); | 201 device1_->NotifyDisconnect(); |
| 201 | 202 |
| 202 device_permissions = manager->GetForExtension(extension_->id()); | 203 device_permissions = manager->GetForExtension(extension_->id()); |
| 203 // Device 0 will be accessible when it is reconnected because it can be | 204 // Device 0 will be accessible when it is reconnected because it can be |
| 204 // recognized by its serial number. | 205 // recognized by its serial number. |
| 205 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 206 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 206 // Device 1 does not have a serial number and cannot be distinguished from | 207 // Device 1 does not have a serial number and cannot be distinguished from |
| 207 // any other device of the same model so the app must request permission again | 208 // any other device of the same model so the app must request permission again |
| 208 // when it is reconnected. | 209 // when it is reconnected. |
| 209 ASSERT_FALSE(device_permissions->FindEntry(device1).get()); | 210 ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
| 210 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 211 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 211 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 212 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 212 } | 213 } |
| 213 | 214 |
| 214 TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { | 215 TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { |
| 215 DevicePermissionsManager* manager = | 216 DevicePermissionsManager* manager = |
| 216 DevicePermissionsManager::Get(env_.profile()); | 217 DevicePermissionsManager::Get(env_.profile()); |
| 217 AllowUsbDevice(manager, extension_, device0); | 218 AllowUsbDevice(manager, extension_, device0_); |
| 218 AllowUsbDevice(manager, extension_, device1); | 219 AllowUsbDevice(manager, extension_, device1_); |
| 219 | 220 |
| 220 scoped_ptr<DevicePermissions> device_permissions = | 221 scoped_ptr<DevicePermissions> device_permissions = |
| 221 manager->GetForExtension(extension_->id()); | 222 manager->GetForExtension(extension_->id()); |
| 222 scoped_refptr<DevicePermissionEntry> device0_entry = | 223 scoped_refptr<DevicePermissionEntry> device0_entry = |
| 223 device_permissions->FindEntry(device0); | 224 device_permissions->FindEntry(device0_); |
| 224 ASSERT_TRUE(device0_entry.get()); | 225 ASSERT_TRUE(device0_entry.get()); |
| 225 scoped_refptr<DevicePermissionEntry> device1_entry = | 226 scoped_refptr<DevicePermissionEntry> device1_entry = |
| 226 device_permissions->FindEntry(device1); | 227 device_permissions->FindEntry(device1_); |
| 227 ASSERT_TRUE(device1_entry.get()); | 228 ASSERT_TRUE(device1_entry.get()); |
| 228 | 229 |
| 229 manager->RemoveEntry(extension_->id(), device0_entry); | 230 manager->RemoveEntry(extension_->id(), device0_entry); |
| 230 device_permissions = manager->GetForExtension(extension_->id()); | 231 device_permissions = manager->GetForExtension(extension_->id()); |
| 231 ASSERT_FALSE(device_permissions->FindEntry(device0).get()); | 232 ASSERT_FALSE(device_permissions->FindEntry(device0_).get()); |
| 232 ASSERT_TRUE(device_permissions->FindEntry(device1).get()); | 233 ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
| 233 | 234 |
| 234 AllowUsbDevice(manager, extension_, device0); | 235 AllowUsbDevice(manager, extension_, device0_); |
| 235 device_permissions = manager->GetForExtension(extension_->id()); | 236 device_permissions = manager->GetForExtension(extension_->id()); |
| 236 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 237 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 237 ASSERT_TRUE(device_permissions->FindEntry(device1).get()); | 238 ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
| 238 | 239 |
| 239 manager->RemoveEntry(extension_->id(), device1_entry); | 240 manager->RemoveEntry(extension_->id(), device1_entry); |
| 240 device_permissions = manager->GetForExtension(extension_->id()); | 241 device_permissions = manager->GetForExtension(extension_->id()); |
| 241 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 242 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 242 ASSERT_FALSE(device_permissions->FindEntry(device1).get()); | 243 ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
| 243 | 244 |
| 244 AllowUsbDevice(manager, extension_, device1); | 245 AllowUsbDevice(manager, extension_, device1_); |
| 245 device_permissions = manager->GetForExtension(extension_->id()); | 246 device_permissions = manager->GetForExtension(extension_->id()); |
| 246 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 247 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 247 ASSERT_TRUE(device_permissions->FindEntry(device1).get()); | 248 ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
| 248 } | 249 } |
| 249 | 250 |
| 250 TEST_F(DevicePermissionsManagerTest, UpdateLastUsed) { | 251 TEST_F(DevicePermissionsManagerTest, UpdateLastUsed) { |
| 251 DevicePermissionsManager* manager = | 252 DevicePermissionsManager* manager = |
| 252 DevicePermissionsManager::Get(env_.profile()); | 253 DevicePermissionsManager::Get(env_.profile()); |
| 253 AllowUsbDevice(manager, extension_, device0); | 254 AllowUsbDevice(manager, extension_, device0_); |
| 254 | 255 |
| 255 scoped_ptr<DevicePermissions> device_permissions = | 256 scoped_ptr<DevicePermissions> device_permissions = |
| 256 manager->GetForExtension(extension_->id()); | 257 manager->GetForExtension(extension_->id()); |
| 257 scoped_refptr<DevicePermissionEntry> device0_entry = | 258 scoped_refptr<DevicePermissionEntry> device0_entry = |
| 258 device_permissions->FindEntry(device0); | 259 device_permissions->FindEntry(device0_); |
| 259 ASSERT_TRUE(device0_entry->last_used().is_null()); | 260 ASSERT_TRUE(device0_entry->last_used().is_null()); |
| 260 | 261 |
| 261 manager->UpdateLastUsed(extension_->id(), device0_entry); | 262 manager->UpdateLastUsed(extension_->id(), device0_entry); |
| 262 device_permissions = manager->GetForExtension(extension_->id()); | 263 device_permissions = manager->GetForExtension(extension_->id()); |
| 263 device0_entry = device_permissions->FindEntry(device0); | 264 device0_entry = device_permissions->FindEntry(device0_); |
| 264 ASSERT_FALSE(device0_entry->last_used().is_null()); | 265 ASSERT_FALSE(device0_entry->last_used().is_null()); |
| 265 } | 266 } |
| 266 | 267 |
| 267 TEST_F(DevicePermissionsManagerTest, LoadPrefs) { | 268 TEST_F(DevicePermissionsManagerTest, LoadPrefs) { |
| 268 scoped_ptr<base::Value> prefs_value = base::test::ParseJson( | 269 scoped_ptr<base::Value> prefs_value = base::test::ParseJson( |
| 269 "[" | 270 "[" |
| 270 " {" | 271 " {" |
| 271 " \"product_id\": 0," | 272 " \"product_id\": 0," |
| 272 " \"serial_number\": \"ABCDE\"," | 273 " \"serial_number\": \"ABCDE\"," |
| 273 " \"type\": \"usb\"," | 274 " \"type\": \"usb\"," |
| 274 " \"vendor_id\": 0" | 275 " \"vendor_id\": 0" |
| 275 " }" | 276 " }" |
| 276 "]"); | 277 "]"); |
| 277 env_.GetExtensionPrefs()->UpdateExtensionPref( | 278 env_.GetExtensionPrefs()->UpdateExtensionPref( |
| 278 extension_->id(), "devices", prefs_value.release()); | 279 extension_->id(), "devices", prefs_value.release()); |
| 279 | 280 |
| 280 DevicePermissionsManager* manager = | 281 DevicePermissionsManager* manager = |
| 281 DevicePermissionsManager::Get(env_.profile()); | 282 DevicePermissionsManager::Get(env_.profile()); |
| 282 scoped_ptr<DevicePermissions> device_permissions = | 283 scoped_ptr<DevicePermissions> device_permissions = |
| 283 manager->GetForExtension(extension_->id()); | 284 manager->GetForExtension(extension_->id()); |
| 284 ASSERT_TRUE(device_permissions->FindEntry(device0).get()); | 285 ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
| 285 ASSERT_FALSE(device_permissions->FindEntry(device1).get()); | 286 ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
| 286 ASSERT_FALSE(device_permissions->FindEntry(device2).get()); | 287 ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
| 287 ASSERT_FALSE(device_permissions->FindEntry(device3).get()); | 288 ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
| 288 } | 289 } |
| 289 | 290 |
| 290 } // namespace extensions | 291 } // namespace extensions |
| OLD | NEW |