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 23a94ca8ebb169c796d36d922bb1568397092c86..f29e3bb98f090aecc7b9007e2ea6870b6ef98dce 100644 |
--- a/chrome/browser/extensions/api/device_permissions_manager_unittest.cc |
+++ b/chrome/browser/extensions/api/device_permissions_manager_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "base/test/values_test_util.h" |
#include "chrome/browser/extensions/test_extension_environment.h" |
#include "chrome/test/base/testing_profile.h" |
+#include "device/core/device_client.h" |
#include "device/usb/usb_device.h" |
#include "device/usb/usb_device_handle.h" |
#include "extensions/browser/api/device_permissions_manager.h" |
@@ -21,8 +22,36 @@ namespace { |
using device::UsbDevice; |
using device::UsbDeviceHandle; |
+using device::UsbService; |
using testing::Return; |
+class MockUsbService : public UsbService { |
+ public: |
+ MockUsbService() : mock_device_client(this) {} |
+ |
+ MOCK_METHOD1(GetDeviceById, scoped_refptr<UsbDevice>(uint32)); |
+ MOCK_METHOD1(GetDevices, void(std::vector<scoped_refptr<UsbDevice>>*)); |
+ |
+ // 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: |
MockUsbDevice(const std::string& serial_number, uint32 unique_id) |
@@ -56,8 +85,6 @@ class MockUsbDevice : public UsbDevice { |
return true; |
} |
- void NotifyDisconnect() { UsbDevice::NotifyDisconnect(); } |
- |
private: |
virtual ~MockUsbDevice() {} |
@@ -86,26 +113,36 @@ 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 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", 0); |
device1 = new MockUsbDevice("", 1); |
device2 = new MockUsbDevice("12345", 2); |
device3 = new MockUsbDevice("", 3); |
+ usb_service_ = new MockUsbService(); |
+ UsbService::SetInstanceForTest(usb_service_); |
+ } |
+ |
+ void TearDown() override { |
+ env_.reset(nullptr); |
+ UsbService::SetInstanceForTest(nullptr); |
} |
- extensions::TestExtensionEnvironment env_; |
+ scoped_ptr<extensions::TestExtensionEnvironment> env_; |
const extensions::Extension* extension_; |
+ MockUsbService* usb_service_; |
scoped_refptr<MockUsbDevice> device0; |
scoped_refptr<MockUsbDevice> device1; |
scoped_refptr<MockUsbDevice> device2; |
@@ -114,7 +151,7 @@ class DevicePermissionsManagerTest : public testing::Test { |
TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
+ DevicePermissionsManager::Get(env_->profile()); |
AllowUsbDevice(manager, extension_, device0); |
AllowUsbDevice(manager, extension_, device1); |
@@ -158,7 +195,7 @@ TEST_F(DevicePermissionsManagerTest, AllowAndClearDevices) { |
TEST_F(DevicePermissionsManagerTest, SuspendExtension) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
+ DevicePermissionsManager::Get(env_->profile()); |
AllowUsbDevice(manager, extension_, device0); |
AllowUsbDevice(manager, extension_, device1); |
@@ -185,7 +222,7 @@ TEST_F(DevicePermissionsManagerTest, SuspendExtension) { |
TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
+ DevicePermissionsManager::Get(env_->profile()); |
AllowUsbDevice(manager, extension_, device0); |
AllowUsbDevice(manager, extension_, device1); |
@@ -196,8 +233,8 @@ TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { |
ASSERT_FALSE(device_permissions->FindEntry(device2).get()); |
ASSERT_FALSE(device_permissions->FindEntry(device3).get()); |
- device0->NotifyDisconnect(); |
- device1->NotifyDisconnect(); |
+ 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 |
@@ -213,7 +250,7 @@ TEST_F(DevicePermissionsManagerTest, DisconnectDevice) { |
TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
+ DevicePermissionsManager::Get(env_->profile()); |
AllowUsbDevice(manager, extension_, device0); |
AllowUsbDevice(manager, extension_, device1); |
@@ -249,7 +286,7 @@ TEST_F(DevicePermissionsManagerTest, RevokeAndRegrantAccess) { |
TEST_F(DevicePermissionsManagerTest, UpdateLastUsed) { |
DevicePermissionsManager* manager = |
- DevicePermissionsManager::Get(env_.profile()); |
+ DevicePermissionsManager::Get(env_->profile()); |
AllowUsbDevice(manager, extension_, device0); |
scoped_ptr<DevicePermissions> device_permissions = |
@@ -274,11 +311,11 @@ 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()); |
+ DevicePermissionsManager::Get(env_->profile()); |
scoped_ptr<DevicePermissions> device_permissions = |
manager->GetForExtension(extension_->id()); |
ASSERT_TRUE(device_permissions->FindEntry(device0).get()); |