Index: chrome/browser/extensions/api/device_permissions_manager_unittest.cc |
diff --git a/chrome/browser/extensions/api/device_permissions_manager_unittest.cc b/chrome/browser/extensions/api/device_permissions_manager_unittest.cc |
index 0140bf611a6ed48822d4c84fda1e4b7584608e65..32296bcc20aedb0efccc976401df7cd64ff12856 100644 |
--- a/chrome/browser/extensions/api/device_permissions_manager_unittest.cc |
+++ b/chrome/browser/extensions/api/device_permissions_manager_unittest.cc |
@@ -30,121 +30,86 @@ using testing::SetArgPointee; |
int next_id; |
+class MockDeviceClient : device::DeviceClient { |
+ public: |
+ MockDeviceClient() {} |
+ |
+ // device::DeviceClient implementation: |
+ UsbService* GetUsbService() override { |
+ DCHECK(usb_service_); |
+ return usb_service_; |
+ } |
+ |
+ void set_usb_service(UsbService* service) { usb_service_ = service; } |
+ |
+ private: |
+ UsbService* usb_service_ = nullptr; |
+}; |
+ |
class MockUsbService : public UsbService { |
public: |
- MockUsbService() : mock_device_client(this) {} |
+ MockUsbService() {} |
MOCK_METHOD1(GetDeviceById, scoped_refptr<UsbDevice>(uint32)); |
- MOCK_METHOD1(GetDevices, void(std::vector<scoped_refptr<UsbDevice>>*)); |
+ MOCK_METHOD1(GetDevices, void(const GetDevicesCallback& callback)); |
// Public wrapper for the protected NotifyDeviceRemove function. |
void NotifyDeviceRemoved(scoped_refptr<UsbDevice> device) { |
UsbService::NotifyDeviceRemoved(device); |
} |
- |
- private: |
- class MockDeviceClient : device::DeviceClient { |
- public: |
- explicit MockDeviceClient(UsbService* usb_service) |
- : usb_service_(usb_service) {} |
- |
- UsbService* GetUsbService() override { return usb_service_; } |
- |
- private: |
- UsbService* usb_service_; |
- }; |
- |
- MockDeviceClient mock_device_client; |
}; |
class MockUsbDevice : public UsbDevice { |
public: |
explicit MockUsbDevice(const std::string& serial_number) |
- : UsbDevice(0, 0, next_id++) { |
- if (serial_number.empty()) { |
- EXPECT_CALL(*this, GetSerialNumber(_)).WillRepeatedly(Return(false)); |
- } else { |
- EXPECT_CALL(*this, GetSerialNumber(_)) |
- .WillRepeatedly( |
- DoAll(SetArgPointee<0>(base::ASCIIToUTF16(serial_number)), |
- Return(true))); |
- } |
- |
- EXPECT_CALL(*this, GetProduct(_)) |
- .WillRepeatedly( |
- DoAll(SetArgPointee<0>(base::ASCIIToUTF16("Test Product")), |
- Return(true))); |
- EXPECT_CALL(*this, GetManufacturer(_)) |
- .WillRepeatedly( |
- DoAll(SetArgPointee<0>(base::ASCIIToUTF16("Test Manufacturer")), |
- Return(true))); |
- } |
- |
- MOCK_METHOD0(Open, scoped_refptr<UsbDeviceHandle>()); |
+ : UsbDevice(0, |
+ 0, |
+ next_id++, |
+ base::ASCIIToUTF16("Test Manufacturer"), |
+ base::ASCIIToUTF16("Test Product"), |
+ base::ASCIIToUTF16(serial_number)) {} |
+ |
+ MOCK_METHOD1(Open, void(const OpenCallback&)); |
MOCK_METHOD1(Close, bool(scoped_refptr<UsbDeviceHandle>)); |
MOCK_METHOD0(GetConfiguration, const device::UsbConfigDescriptor*()); |
- MOCK_METHOD1(GetManufacturer, bool(base::string16*)); |
- MOCK_METHOD1(GetProduct, bool(base::string16*)); |
- MOCK_METHOD1(GetSerialNumber, bool(base::string16*)); |
private: |
virtual ~MockUsbDevice() {} |
}; |
-void AllowUsbDevice(DevicePermissionsManager* manager, |
- const Extension* extension, |
- scoped_refptr<UsbDevice> device) { |
- // If the device cannot provide any of these strings they will simply by |
- // empty. |
- base::string16 product; |
- device->GetProduct(&product); |
- base::string16 manufacturer; |
- device->GetManufacturer(&manufacturer); |
- base::string16 serial_number; |
- device->GetSerialNumber(&serial_number); |
- |
- manager->AllowUsbDevice( |
- extension->id(), device, product, manufacturer, serial_number); |
-} |
- |
-scoped_refptr<DevicePermissionEntry> FindEntry( |
- DevicePermissions* device_permissions, |
- scoped_refptr<UsbDevice> device) { |
- base::string16 serial_number; |
- device->GetSerialNumber(&serial_number); |
- |
- return device_permissions->FindEntry(device, serial_number); |
-} |
- |
} // namespace |
class DevicePermissionsManagerTest : public testing::Test { |
protected: |
void SetUp() override { |
testing::Test::SetUp(); |
- env_.GetExtensionPrefs(); // Force creation before adding extensions. |
- extension_ = env_.MakeExtension(*base::test::ParseJson( |
- "{" |
- " \"app\": {" |
- " \"background\": {" |
- " \"scripts\": [\"background.js\"]" |
- " }" |
- " }," |
- " \"permissions\": [" |
- " \"usb\"" |
- " ]" |
- "}")); |
+ env_.reset(new extensions::TestExtensionEnvironment()); |
+ env_->GetExtensionPrefs(); // Force creation before adding extensions. |
+ extension_ = |
+ env_->MakeExtension(*base::test::ParseJson( |
+ "{" |
+ " \"app\": {" |
+ " \"background\": {" |
+ " \"scripts\": [\"background.js\"]" |
+ " }" |
+ " }," |
+ " \"permissions\": [" |
+ " \"usb\"" |
+ " ]" |
+ "}")); |
device0_ = new MockUsbDevice("ABCDE"); |
device1_ = new MockUsbDevice(""); |
device2_ = new MockUsbDevice("12345"); |
device3_ = new MockUsbDevice(""); |
- usb_service_ = new MockUsbService(); |
- UsbService::SetInstanceForTest(usb_service_); |
+ mock_device_client_.set_usb_service(&usb_service_); |
} |
- extensions::TestExtensionEnvironment env_; |
+ void TearDown() override { env_.reset(nullptr); } |
+ |
+ scoped_ptr<extensions::TestExtensionEnvironment> env_; |
const extensions::Extension* extension_; |
- MockUsbService* usb_service_; |
+ MockDeviceClient mock_device_client_; |
+ MockUsbService usb_service_; |
scoped_refptr<MockUsbDevice> device0_; |
scoped_refptr<MockUsbDevice> device1_; |
scoped_refptr<MockUsbDevice> device2_; |
@@ -153,20 +118,20 @@ class DevicePermissionsManagerTest : public testing::Test { |
TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
- AllowUsbDevice(manager, extension_, device0_); |
- AllowUsbDevice(manager, extension_, device1_); |
+ DevicePermissionsManager::Get(env_->profile()); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
+ manager->AllowUsbDevice(extension_->id(), device1_); |
- scoped_ptr<DevicePermissions> device_permissions = |
+ DevicePermissions* device_permissions = |
manager->GetForExtension(extension_->id()); |
scoped_refptr<DevicePermissionEntry> device0_entry = |
- FindEntry(device_permissions.get(), device0_); |
+ device_permissions->FindEntry(device0_); |
ASSERT_TRUE(device0_entry.get()); |
scoped_refptr<DevicePermissionEntry> device1_entry = |
- FindEntry(device_permissions.get(), device1_); |
+ device_permissions->FindEntry(device1_); |
ASSERT_TRUE(device1_entry.get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
ASSERT_EQ(2U, device_permissions->entries().size()); |
ASSERT_EQ(base::ASCIIToUTF16( |
@@ -176,132 +141,123 @@ TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { |
device1_entry->GetPermissionMessageString()); |
manager->Clear(extension_->id()); |
- |
+ // The device_permissions object is deleted by Clear. |
device_permissions = manager->GetForExtension(extension_->id()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ |
+ ASSERT_FALSE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
ASSERT_EQ(0U, device_permissions->entries().size()); |
// After clearing device it should be possible to grant permission again. |
- AllowUsbDevice(manager, extension_, device0_); |
- AllowUsbDevice(manager, extension_, device1_); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
+ manager->AllowUsbDevice(extension_->id(), device1_); |
- device_permissions = manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
} |
TEST_F(DevicePermissionsManagerTest, SuspendExtension) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
- AllowUsbDevice(manager, extension_, device0_); |
- AllowUsbDevice(manager, extension_, device1_); |
+ DevicePermissionsManager::Get(env_->profile()); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
+ manager->AllowUsbDevice(extension_->id(), device1_); |
- scoped_ptr<DevicePermissions> device_permissions = |
+ DevicePermissions* device_permissions = |
manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
manager->OnBackgroundHostClose(extension_->id()); |
- device_permissions = manager->GetForExtension(extension_->id()); |
// Device 0 is still registered because its serial number has been stored in |
// ExtensionPrefs, it is "persistent". |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
// Device 1 does not have uniquely identifying traits and so permission to |
// open it has been dropped when the app's windows have closed and the |
// background page has been suspended. |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
} |
-// TODO(reillyg): Until crbug.com/427985 is resolved device removal |
-// notifications are delivered asynchronously and so this test must be disabled. |
-TEST_F(DevicePermissionsManagerTest, DISABLED_DisconnectDevice) { |
+TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
- AllowUsbDevice(manager, extension_, device0_); |
- AllowUsbDevice(manager, extension_, device1_); |
+ DevicePermissionsManager::Get(env_->profile()); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
+ manager->AllowUsbDevice(extension_->id(), device1_); |
- scoped_ptr<DevicePermissions> device_permissions = |
+ DevicePermissions* device_permissions = |
manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
- usb_service_->NotifyDeviceRemoved(device0_); |
- usb_service_->NotifyDeviceRemoved(device1_); |
+ usb_service_.NotifyDeviceRemoved(device0_); |
+ usb_service_.NotifyDeviceRemoved(device1_); |
- device_permissions = manager->GetForExtension(extension_->id()); |
// Device 0 will be accessible when it is reconnected because it can be |
// recognized by its serial number. |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
// Device 1 does not have a serial number and cannot be distinguished from |
// any other device of the same model so the app must request permission again |
// when it is reconnected. |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
} |
TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
- AllowUsbDevice(manager, extension_, device0_); |
- AllowUsbDevice(manager, extension_, device1_); |
+ DevicePermissionsManager::Get(env_->profile()); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
+ manager->AllowUsbDevice(extension_->id(), device1_); |
- scoped_ptr<DevicePermissions> device_permissions = |
+ DevicePermissions* device_permissions = |
manager->GetForExtension(extension_->id()); |
scoped_refptr<DevicePermissionEntry> device0_entry = |
- FindEntry(device_permissions.get(), device0_); |
+ device_permissions->FindEntry(device0_); |
ASSERT_TRUE(device0_entry.get()); |
scoped_refptr<DevicePermissionEntry> device1_entry = |
- FindEntry(device_permissions.get(), device1_); |
+ device_permissions->FindEntry(device1_); |
ASSERT_TRUE(device1_entry.get()); |
manager->RemoveEntry(extension_->id(), device0_entry); |
- device_permissions = manager->GetForExtension(extension_->id()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
- AllowUsbDevice(manager, extension_, device0_); |
- device_permissions = manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
manager->RemoveEntry(extension_->id(), device1_entry); |
- device_permissions = manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
- AllowUsbDevice(manager, extension_, device1_); |
- device_permissions = manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device1_).get()); |
+ manager->AllowUsbDevice(extension_->id(), device1_); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device1_).get()); |
} |
TEST_F(DevicePermissionsManagerTest, UpdateLastUsed) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
- AllowUsbDevice(manager, extension_, device0_); |
+ DevicePermissionsManager::Get(env_->profile()); |
+ manager->AllowUsbDevice(extension_->id(), device0_); |
- scoped_ptr<DevicePermissions> device_permissions = |
+ DevicePermissions* device_permissions = |
manager->GetForExtension(extension_->id()); |
scoped_refptr<DevicePermissionEntry> device0_entry = |
- FindEntry(device_permissions.get(), device0_); |
+ device_permissions->FindEntry(device0_); |
ASSERT_TRUE(device0_entry->last_used().is_null()); |
manager->UpdateLastUsed(extension_->id(), device0_entry); |
- device_permissions = manager->GetForExtension(extension_->id()); |
- device0_entry = FindEntry(device_permissions.get(), device0_); |
+ device0_entry = device_permissions->FindEntry(device0_); |
ASSERT_FALSE(device0_entry->last_used().is_null()); |
} |
@@ -315,17 +271,17 @@ TEST_F(DevicePermissionsManagerTest, LoadPrefs) { |
" \"vendor_id\": 0" |
" }" |
"]"); |
- env_.GetExtensionPrefs()->UpdateExtensionPref(extension_->id(), "devices", |
- prefs_value.release()); |
+ env_->GetExtensionPrefs()->UpdateExtensionPref(extension_->id(), "devices", |
+ prefs_value.release()); |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
- scoped_ptr<DevicePermissions> device_permissions = |
+ DevicePermissionsManager::Get(env_->profile()); |
+ DevicePermissions* device_permissions = |
manager->GetForExtension(extension_->id()); |
- ASSERT_TRUE(FindEntry(device_permissions.get(), device0_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device1_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device2_).get()); |
- ASSERT_FALSE(FindEntry(device_permissions.get(), device3_).get()); |
+ ASSERT_TRUE(device_permissions->FindEntry(device0_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device1_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device2_).get()); |
+ ASSERT_FALSE(device_permissions->FindEntry(device3_).get()); |
} |
} // namespace extensions |