Index: chrome/browser/devtools/device/usb/android_usb_browsertest.cc |
diff --git a/chrome/browser/devtools/device/usb/android_usb_browsertest.cc b/chrome/browser/devtools/device/usb/android_usb_browsertest.cc |
index c7f99ed6dccf78c937fd6e3dde81d8567d3f7723..1eab6e83942a41b5374a92ec075477ae22a21d69 100644 |
--- a/chrome/browser/devtools/device/usb/android_usb_browsertest.cc |
+++ b/chrome/browser/devtools/device/usb/android_usb_browsertest.cc |
@@ -29,7 +29,6 @@ using device::UsbEndpointDirection; |
using device::UsbInterfaceDescriptor; |
using device::UsbService; |
using device::UsbSynchronizationType; |
-using device::UsbTransferCallback; |
using device::UsbTransferType; |
using device::UsbUsageType; |
@@ -127,15 +126,22 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
virtual void Close() override { device_ = nullptr; } |
- bool SetConfiguration(int configuration_value) override { return true; } |
+ void SetConfiguration(int configuration_value, |
+ const ResultCallback& callback) override { |
+ NOTIMPLEMENTED(); |
+ } |
- bool ClaimInterface(int interface_number) override { |
- if (device_->claimed_interfaces_.find(interface_number) != |
- device_->claimed_interfaces_.end()) |
- return false; |
+ void ClaimInterface(int interface_number, |
+ const ResultCallback& callback) override { |
+ bool success = false; |
+ if (device_->claimed_interfaces_.find(interface_number) == |
+ device_->claimed_interfaces_.end()) { |
+ device_->claimed_interfaces_.insert(interface_number); |
+ success = true; |
+ } |
- device_->claimed_interfaces_.insert(interface_number); |
- return true; |
+ base::MessageLoop::current()->PostTask(FROM_HERE, |
+ base::Bind(callback, success)); |
} |
bool ReleaseInterface(int interface_number) override { |
@@ -147,35 +153,34 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
return true; |
} |
- virtual bool SetInterfaceAlternateSetting(int interface_number, |
- int alternate_setting) override { |
- return true; |
+ void SetInterfaceAlternateSetting(int interface_number, |
+ int alternate_setting, |
+ const ResultCallback& callback) override { |
+ NOTIMPLEMENTED(); |
} |
- virtual bool ResetDevice() override { return true; } |
- bool GetStringDescriptor(uint8_t string_id, |
- base::string16* content) override { |
- return false; |
+ void ResetDevice(const ResultCallback& callback) override { |
+ NOTIMPLEMENTED(); |
} |
// Async IO. Can be called on any thread. |
- virtual void ControlTransfer(UsbEndpointDirection direction, |
- TransferRequestType request_type, |
- TransferRecipient recipient, |
- uint8 request, |
- uint16 value, |
- uint16 index, |
- net::IOBuffer* buffer, |
- size_t length, |
- unsigned int timeout, |
- const UsbTransferCallback& callback) override {} |
- |
- virtual void BulkTransfer(UsbEndpointDirection direction, |
- uint8 endpoint, |
- net::IOBuffer* buffer, |
- size_t length, |
- unsigned int timeout, |
- const UsbTransferCallback& callback) override { |
+ void ControlTransfer(UsbEndpointDirection direction, |
+ TransferRequestType request_type, |
+ TransferRecipient recipient, |
+ uint8 request, |
+ uint16 value, |
+ uint16 index, |
+ scoped_refptr<net::IOBuffer> buffer, |
+ size_t length, |
+ unsigned int timeout, |
+ const TransferCallback& callback) override {} |
+ |
+ void BulkTransfer(UsbEndpointDirection direction, |
+ uint8 endpoint, |
+ scoped_refptr<net::IOBuffer> buffer, |
+ size_t length, |
+ unsigned int timeout, |
+ const TransferCallback& callback) override { |
if (direction == device::USB_DIRECTION_OUTBOUND) { |
if (remaining_body_length_ == 0) { |
std::vector<uint32> header(6); |
@@ -201,11 +206,10 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
device::UsbTransferStatus status = |
broken_ ? device::USB_TRANSFER_ERROR : device::USB_TRANSFER_COMPLETED; |
base::MessageLoop::current()->PostTask( |
- FROM_HERE, |
- base::Bind(callback, status, scoped_refptr<net::IOBuffer>(), 0)); |
+ FROM_HERE, base::Bind(callback, status, nullptr, 0)); |
ProcessQueries(); |
} else if (direction == device::USB_DIRECTION_INBOUND) { |
- queries_.push(Query(callback, make_scoped_refptr(buffer), length)); |
+ queries_.push(Query(callback, buffer, length)); |
ProcessQueries(); |
} |
} |
@@ -336,36 +340,34 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
} |
- virtual void InterruptTransfer(UsbEndpointDirection direction, |
- uint8 endpoint, |
- net::IOBuffer* buffer, |
- size_t length, |
- unsigned int timeout, |
- const UsbTransferCallback& callback) override { |
- } |
+ void InterruptTransfer(UsbEndpointDirection direction, |
+ uint8 endpoint, |
+ scoped_refptr<net::IOBuffer> buffer, |
+ size_t length, |
+ unsigned int timeout, |
+ const TransferCallback& callback) override {} |
- virtual void IsochronousTransfer( |
- UsbEndpointDirection direction, |
- uint8 endpoint, |
- net::IOBuffer* buffer, |
- size_t length, |
- unsigned int packets, |
- unsigned int packet_length, |
- unsigned int timeout, |
- const UsbTransferCallback& callback) override {} |
+ void IsochronousTransfer(UsbEndpointDirection direction, |
+ uint8 endpoint, |
+ scoped_refptr<net::IOBuffer> buffer, |
+ size_t length, |
+ unsigned int packets, |
+ unsigned int packet_length, |
+ unsigned int timeout, |
+ const TransferCallback& callback) override {} |
protected: |
virtual ~MockUsbDeviceHandle() {} |
struct Query { |
- UsbTransferCallback callback; |
+ TransferCallback callback; |
scoped_refptr<net::IOBuffer> buffer; |
size_t size; |
- Query(UsbTransferCallback callback, |
+ Query(TransferCallback callback, |
scoped_refptr<net::IOBuffer> buffer, |
int size) |
- : callback(callback), buffer(buffer), size(size) {}; |
+ : callback(callback), buffer(buffer), size(size) {} |
}; |
scoped_refptr<MockUsbDevice<T> > device_; |
@@ -381,7 +383,13 @@ class MockUsbDeviceHandle : public UsbDeviceHandle { |
template <class T> |
class MockUsbDevice : public UsbDevice { |
public: |
- MockUsbDevice() : UsbDevice(0, 0, 0) { |
+ MockUsbDevice() |
+ : UsbDevice(0, |
+ 0, |
+ 0, |
+ base::UTF8ToUTF16(kDeviceManufacturer), |
+ base::UTF8ToUTF16(kDeviceModel), |
+ base::UTF8ToUTF16(kDeviceSerial)) { |
UsbEndpointDescriptor bulk_in; |
bulk_in.address = 0x81; |
bulk_in.direction = device::USB_DIRECTION_INBOUND; |
@@ -406,30 +414,17 @@ class MockUsbDevice : public UsbDevice { |
config_desc_.interfaces.push_back(interface_desc); |
} |
- virtual scoped_refptr<UsbDeviceHandle> Open() override { |
- return new MockUsbDeviceHandle<T>(this); |
+ void Open(const OpenCallback& callback) override { |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(callback, make_scoped_refptr( |
+ new MockUsbDeviceHandle<T>(this)))); |
} |
- virtual const UsbConfigDescriptor* GetConfiguration() override { |
+ const UsbConfigDescriptor* GetConfiguration() override { |
return T::kConfigured ? &config_desc_ : nullptr; |
} |
- virtual bool GetManufacturer(base::string16* manufacturer) override { |
- *manufacturer = base::UTF8ToUTF16(kDeviceManufacturer); |
- return true; |
- } |
- |
- virtual bool GetProduct(base::string16* product) override { |
- *product = base::UTF8ToUTF16(kDeviceModel); |
- return true; |
- } |
- |
- virtual bool GetSerialNumber(base::string16* serial) override { |
- *serial = base::UTF8ToUTF16(kDeviceSerial); |
- return true; |
- } |
- |
- virtual bool Close(scoped_refptr<UsbDeviceHandle> handle) override { |
+ bool Close(scoped_refptr<UsbDeviceHandle> handle) override { |
return true; |
} |
@@ -453,52 +448,34 @@ class MockUsbService : public UsbService { |
return nullptr; |
} |
- void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override { |
- STLClearObject(devices); |
- std::copy(devices_.begin(), devices_.end(), back_inserter(*devices)); |
+ void GetDevices(const GetDevicesCallback& callback) override { |
+ callback.Run(devices_); |
} |
std::vector<scoped_refptr<UsbDevice> > devices_; |
}; |
-class MockBreakingUsbService : public UsbService { |
+class MockBreakingUsbService : public MockUsbService { |
public: |
- scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { |
- NOTIMPLEMENTED(); |
- return nullptr; |
- } |
- |
- void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override { |
- STLClearObject(devices); |
- devices->push_back(new MockUsbDevice<BreakingAndroidTraits>()); |
+ MockBreakingUsbService() { |
+ devices_.clear(); |
+ devices_.push_back(new MockUsbDevice<BreakingAndroidTraits>()); |
} |
}; |
-class MockNoConfigUsbService : public UsbService { |
+class MockNoConfigUsbService : public MockUsbService { |
public: |
- scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { |
- NOTIMPLEMENTED(); |
- return nullptr; |
- } |
- |
- void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override { |
- STLClearObject(devices); |
- devices->push_back(new MockUsbDevice<AndroidTraits>()); |
- devices->push_back(new MockUsbDevice<NoConfigTraits>()); |
+ MockNoConfigUsbService() { |
+ devices_.push_back(new MockUsbDevice<NoConfigTraits>()); |
} |
}; |
-class MockUsbServiceForCheckingTraits : public UsbService { |
+class MockUsbServiceForCheckingTraits : public MockUsbService { |
public: |
MockUsbServiceForCheckingTraits() : step_(0) {} |
- scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) override { |
- NOTIMPLEMENTED(); |
- return nullptr; |
- } |
- |
- void GetDevices(std::vector<scoped_refptr<UsbDevice>>* devices) override { |
- STLClearObject(devices); |
+ void GetDevices(const GetDevicesCallback& callback) override { |
+ std::vector<scoped_refptr<UsbDevice>> devices; |
// This switch should be kept in sync with |
// AndroidUsbBrowserTest::DeviceCountChanged. |
switch (step_) { |
@@ -507,19 +484,20 @@ class MockUsbServiceForCheckingTraits : public UsbService { |
break; |
case 1: |
// Android device. |
- devices->push_back(new MockUsbDevice<AndroidTraits>()); |
+ devices.push_back(new MockUsbDevice<AndroidTraits>()); |
break; |
case 2: |
// Android and non-android device. |
- devices->push_back(new MockUsbDevice<AndroidTraits>()); |
- devices->push_back(new MockUsbDevice<NonAndroidTraits>()); |
+ devices.push_back(new MockUsbDevice<AndroidTraits>()); |
+ devices.push_back(new MockUsbDevice<NonAndroidTraits>()); |
break; |
case 3: |
// Non-android device. |
- devices->push_back(new MockUsbDevice<NonAndroidTraits>()); |
+ devices.push_back(new MockUsbDevice<NonAndroidTraits>()); |
break; |
} |
step_++; |
+ callback.Run(devices); |
} |
private: |
@@ -548,15 +526,7 @@ class AndroidUsbDiscoveryTest : public InProcessBrowserTest { |
: scheduler_invoked_(0) { |
} |
void SetUpOnMainThread() override { |
- scoped_refptr<content::MessageLoopRunner> runner = |
- new content::MessageLoopRunner; |
- |
- BrowserThread::PostTaskAndReply( |
- BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&AndroidUsbDiscoveryTest::SetUpService, this), |
- runner->QuitClosure()); |
- runner->Run(); |
+ mock_usb_service_.reset(CreateMockService()); |
adb_bridge_ = |
DevToolsAndroidBridge::Factory::GetForProfile(browser()->profile()); |
@@ -579,23 +549,10 @@ class AndroidUsbDiscoveryTest : public InProcessBrowserTest { |
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, request); |
} |
- virtual void SetUpService() { |
- UsbService::SetInstanceForTest(new MockUsbService()); |
- } |
- |
- void TearDownOnMainThread() override { |
- scoped_refptr<content::MessageLoopRunner> runner = |
- new content::MessageLoopRunner; |
- UsbService* service = nullptr; |
- BrowserThread::PostTaskAndReply( |
- BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&UsbService::SetInstanceForTest, service), |
- runner->QuitClosure()); |
- runner->Run(); |
- } |
+ virtual MockUsbService* CreateMockService() { return new MockUsbService(); } |
scoped_refptr<content::MessageLoopRunner> runner_; |
+ scoped_ptr<MockUsbService> mock_usb_service_; |
DevToolsAndroidBridge* adb_bridge_; |
int scheduler_invoked_; |
}; |
@@ -613,22 +570,22 @@ class AndroidUsbCountTest : public AndroidUsbDiscoveryTest { |
class AndroidUsbTraitsTest : public AndroidUsbDiscoveryTest { |
protected: |
- void SetUpService() override { |
- UsbService::SetInstanceForTest(new MockUsbServiceForCheckingTraits()); |
+ MockUsbService* CreateMockService() override { |
+ return new MockUsbServiceForCheckingTraits(); |
} |
}; |
class AndroidBreakingUsbTest : public AndroidUsbDiscoveryTest { |
protected: |
- void SetUpService() override { |
- UsbService::SetInstanceForTest(new MockBreakingUsbService()); |
+ MockUsbService* CreateMockService() override { |
+ return new MockBreakingUsbService(); |
} |
}; |
class AndroidNoConfigUsbTest : public AndroidUsbDiscoveryTest { |
protected: |
- void SetUpService() override { |
- UsbService::SetInstanceForTest(new MockNoConfigUsbService()); |
+ MockUsbService* CreateMockService() override { |
+ return new MockNoConfigUsbService(); |
} |
}; |
@@ -662,10 +619,7 @@ class MockListListener : public DevToolsAndroidBridge::DeviceListListener { |
class MockCountListener : public DevToolsAndroidBridge::DeviceCountListener { |
public: |
explicit MockCountListener(DevToolsAndroidBridge* adb_bridge) |
- : adb_bridge_(adb_bridge), |
- reposts_left_(10), |
- invoked_(0) { |
- } |
+ : adb_bridge_(adb_bridge), invoked_(0) {} |
void DeviceCountChanged(int count) override { |
++invoked_; |
@@ -673,33 +627,9 @@ class MockCountListener : public DevToolsAndroidBridge::DeviceCountListener { |
Shutdown(); |
} |
- void Shutdown() { |
- ShutdownOnUIThread(); |
- }; |
- |
- void ShutdownOnUIThread() { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- if (reposts_left_-- == 0) { |
- base::MessageLoop::current()->Quit(); |
- } else { |
- BrowserThread::PostTask( |
- BrowserThread::FILE, |
- FROM_HERE, |
- base::Bind(&MockCountListener::ShutdownOnFileThread, |
- base::Unretained(this))); |
- } |
- } |
- |
- void ShutdownOnFileThread() { |
- DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
- BrowserThread::PostTask(BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&MockCountListener::ShutdownOnUIThread, |
- base::Unretained(this))); |
- } |
+ void Shutdown() { base::MessageLoop::current()->Quit(); } |
DevToolsAndroidBridge* adb_bridge_; |
- int reposts_left_; |
int invoked_; |
}; |
@@ -820,6 +750,7 @@ IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
runner_->Run(); |
EXPECT_EQ(1, listener.invoked_); |
EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); |
+ EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
} |
IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
@@ -829,6 +760,7 @@ IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
runner_->Run(); |
EXPECT_EQ(3, listener.invoked_); |
EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); |
+ EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
} |
IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
@@ -840,6 +772,7 @@ IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
runner_->Run(); |
EXPECT_EQ(1, listener.invoked_); |
EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); |
+ EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
} |
IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
@@ -849,6 +782,7 @@ IN_PROC_BROWSER_TEST_F(AndroidUsbCountTest, |
runner_->Run(); |
EXPECT_EQ(2, listener.invoked_); |
EXPECT_EQ(listener.invoked_ - 1, scheduler_invoked_); |
+ EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
} |
IN_PROC_BROWSER_TEST_F(AndroidUsbTraitsTest, TestDeviceCounting) { |