Index: extensions/browser/api/usb/usb_apitest.cc |
diff --git a/extensions/browser/api/usb/usb_apitest.cc b/extensions/browser/api/usb/usb_apitest.cc |
index 6e17190967c435523a129660aefcaceb942b9ca6..57e073fe64a6146b92e8b46326e02ff74ba85bcd 100644 |
--- a/extensions/browser/api/usb/usb_apitest.cc |
+++ b/extensions/browser/api/usb/usb_apitest.cc |
@@ -11,10 +11,10 @@ |
#include "net/base/io_buffer.h" |
#include "testing/gmock/include/gmock/gmock.h" |
-using testing::AnyNumber; |
using testing::_; |
+using testing::AnyNumber; |
+using testing::Invoke; |
using testing::Return; |
-using testing::ReturnRef; |
using content::BrowserThread; |
using device::UsbConfigDescriptor; |
using device::UsbDevice; |
@@ -36,6 +36,11 @@ ACTION_TEMPLATE(InvokeUsbTransferCallback, |
::std::tr1::get<k>(args).Run(p1, io_buffer, 1); |
} |
+void RequestUsbAccess(int interface_id, |
+ const base::Callback<void(bool success)>& callback) { |
+ base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, true)); |
+} |
+ |
class MockUsbDeviceHandle : public UsbDeviceHandle { |
public: |
MockUsbDeviceHandle() : UsbDeviceHandle() {} |
@@ -82,6 +87,7 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
MOCK_METHOD0(ResetDevice, bool()); |
MOCK_METHOD2(GetStringDescriptor, bool(uint8_t, base::string16*)); |
+ MOCK_METHOD1(SetConfiguration, bool(int)); |
MOCK_METHOD1(ClaimInterface, bool(int interface_number)); |
MOCK_METHOD1(ReleaseInterface, bool(int interface_number)); |
MOCK_METHOD2(SetInterfaceAlternateSetting, |
@@ -101,36 +107,18 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
class MockUsbDevice : public UsbDevice { |
public: |
- explicit MockUsbDevice(MockUsbDeviceHandle* mock_handle) |
- : UsbDevice(0, 0, 0), mock_handle_(mock_handle) { |
- mock_handle->set_device(this); |
- } |
- |
- virtual scoped_refptr<UsbDeviceHandle> Open() override { |
- return mock_handle_; |
- } |
- |
- virtual bool Close(scoped_refptr<UsbDeviceHandle> handle) override { |
- EXPECT_TRUE(false) << "Should not be reached"; |
- return false; |
- } |
- |
-#if defined(OS_CHROMEOS) |
- virtual void RequestUsbAccess( |
- int interface_id, |
- const base::Callback<void(bool success)>& callback) override { |
- BrowserThread::PostTask( |
- BrowserThread::FILE, FROM_HERE, base::Bind(callback, true)); |
- } |
-#endif // OS_CHROMEOS |
+ MockUsbDevice(uint16 vendor_id, uint16 product_id, uint32 unique_id) |
+ : UsbDevice(vendor_id, product_id, unique_id) {} |
- MOCK_METHOD0(GetConfiguration, const UsbConfigDescriptor&()); |
- MOCK_METHOD1(GetManufacturer, bool(base::string16* manufacturer)); |
- MOCK_METHOD1(GetProduct, bool(base::string16* product)); |
- MOCK_METHOD1(GetSerialNumber, bool(base::string16* serial_number)); |
+ MOCK_METHOD2(RequestUsbAccess, void(int, const base::Callback<void(bool)>&)); |
+ MOCK_METHOD0(Open, scoped_refptr<UsbDeviceHandle>()); |
+ 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: |
- MockUsbDeviceHandle* mock_handle_; |
virtual ~MockUsbDevice() {} |
}; |
@@ -157,14 +145,18 @@ class UsbApiTest : public ShellApiTest { |
void SetUpOnMainThread() override { |
ShellApiTest::SetUpOnMainThread(); |
mock_device_handle_ = new MockUsbDeviceHandle(); |
- mock_device_ = new MockUsbDevice(mock_device_handle_.get()); |
- scoped_refptr<content::MessageLoopRunner> runner = |
- new content::MessageLoopRunner; |
- BrowserThread::PostTaskAndReply(BrowserThread::FILE, |
- FROM_HERE, |
+ mock_device_ = new MockUsbDevice(0, 0, 0); |
+ mock_device_handle_->set_device(mock_device_.get()); |
+ EXPECT_CALL(*mock_device_.get(), RequestUsbAccess(_, _)) |
+ .WillRepeatedly(Invoke(RequestUsbAccess)); |
+ EXPECT_CALL(*mock_device_.get(), Open()) |
+ .WillRepeatedly(Return(mock_device_handle_)); |
+ |
+ base::RunLoop run_loop; |
+ BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE, |
base::Bind(&UsbApiTest::SetUpService, this), |
- runner->QuitClosure()); |
- runner->Run(); |
+ run_loop.QuitClosure()); |
+ run_loop.Run(); |
} |
void SetUpService() { |
@@ -172,15 +164,13 @@ class UsbApiTest : public ShellApiTest { |
} |
void TearDownOnMainThread() override { |
- scoped_refptr<content::MessageLoopRunner> runner = |
- new content::MessageLoopRunner; |
UsbService* service = NULL; |
+ base::RunLoop run_loop; |
BrowserThread::PostTaskAndReply( |
- BrowserThread::FILE, |
- FROM_HERE, |
+ BrowserThread::FILE, FROM_HERE, |
base::Bind(&UsbService::SetInstanceForTest, service), |
- runner->QuitClosure()); |
- runner->Run(); |
+ run_loop.QuitClosure()); |
+ run_loop.Run(); |
} |
protected: |
@@ -206,11 +196,22 @@ IN_PROC_BROWSER_TEST_F(UsbApiTest, ResetDevice) { |
ASSERT_TRUE(RunAppTest("api_test/usb/reset_device")); |
} |
+IN_PROC_BROWSER_TEST_F(UsbApiTest, SetConfiguration) { |
+ UsbConfigDescriptor config_descriptor; |
+ EXPECT_CALL(*mock_device_handle_.get(), SetConfiguration(1)) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(1); |
+ EXPECT_CALL(*mock_device_.get(), GetConfiguration()) |
+ .WillOnce(Return(nullptr)) |
+ .WillOnce(Return(&config_descriptor)); |
+ ASSERT_TRUE(RunAppTest("api_test/usb/set_configuration")); |
+} |
+ |
IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) { |
UsbConfigDescriptor config_descriptor; |
- EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
+ EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(1); |
EXPECT_CALL(*mock_device_.get(), GetConfiguration()) |
- .WillOnce(ReturnRef(config_descriptor)); |
+ .WillOnce(Return(&config_descriptor)); |
ASSERT_TRUE(RunAppTest("api_test/usb/list_interfaces")); |
} |