Index: chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc |
diff --git a/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc b/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc |
index 1a3fdef10ff6a214501df75c895fcab81b6417be..9932b4f92c0352f814ff6e258a1d702187478cb7 100644 |
--- a/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc |
+++ b/chrome/browser/devtools/device/adb/adb_client_socket_browsertest.cc |
@@ -10,6 +10,7 @@ |
#include "chrome/test/base/in_process_browser_test.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/test/test_utils.h" |
+#include "net/base/net_errors.h" |
using content::BrowserThread; |
@@ -23,6 +24,16 @@ FindBrowserByDisplayName(DevToolsAndroidBridge::RemoteBrowsers browsers, |
return NULL; |
} |
+static void ResponseReceived(int result, const std::string& response) { |
+ ASSERT_EQ(net::OK, result); |
+ base::MessageLoop::current()->QuitWhenIdle(); |
+} |
+ |
+static void ConnectedReceived(bool expected, bool received) { |
+ ASSERT_EQ(expected, received); |
+ base::MessageLoop::current()->QuitWhenIdle(); |
+} |
+ |
class AdbClientSocketTest : public InProcessBrowserTest, |
public DevToolsAndroidBridge::DeviceListListener { |
@@ -34,6 +45,7 @@ class AdbClientSocketTest : public InProcessBrowserTest, |
device_providers.push_back(new AdbDeviceProvider()); |
android_bridge_->set_device_providers_for_test(device_providers); |
android_bridge_->AddDeviceListListener(this); |
+ content::RunMessageLoop(); |
} |
virtual void DeviceListChanged( |
@@ -117,6 +129,29 @@ class AdbClientSocketTest : public InProcessBrowserTest, |
STLDeleteElements(&webview_pages); |
} |
+ void CheckConnection() { |
+ ASSERT_EQ(2U, devices_.size()); |
+ scoped_refptr<DevToolsAndroidBridge::RemoteDevice> connected = |
+ devices_[0]->is_connected() ? devices_[0] : devices_[1]; |
+ const DevToolsAndroidBridge::RemoteBrowsers& browsers = |
+ connected->browsers(); |
+ scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chrome = |
+ FindBrowserByDisplayName(browsers, "Chrome"); |
+ ASSERT_TRUE(chrome); |
+ chrome->SendJsonRequest("/json/version", base::Bind(&ResponseReceived)); |
+ content::RunMessageLoop(); |
+ } |
+ |
+ void CheckCleanup() { |
+ android_bridge_->IsConnectedForTest("01498B321301A00A", |
+ base::Bind(&ConnectedReceived, true)); |
+ content::RunMessageLoop(); |
+ devices_.clear(); |
+ android_bridge_->IsConnectedForTest("01498B321301A00A", |
+ base::Bind(&ConnectedReceived, false)); |
+ content::RunMessageLoop(); |
+ } |
+ |
private: |
scoped_refptr<DevToolsAndroidBridge> android_bridge_; |
DevToolsAndroidBridge::RemoteDevices devices_; |
@@ -125,7 +160,16 @@ class AdbClientSocketTest : public InProcessBrowserTest, |
IN_PROC_BROWSER_TEST_F(AdbClientSocketTest, TestAdbClientSocket) { |
StartMockAdbServer(); |
StartTest(); |
- content::RunMessageLoop(); |
CheckDevices(); |
StopMockAdbServer(); |
} |
+ |
+// DevToolsAndroidBridge used to free connected devices when there are no |
+// listeners. We test that it's no longer the case. |
+IN_PROC_BROWSER_TEST_F(AdbClientSocketTest, TestRemoteConnection) { |
+ StartMockAdbServer(); |
+ StartTest(); |
+ CheckConnection(); |
+ CheckCleanup(); |
+ StopMockAdbServer(); |
+} |