1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/devtools/device/adb/adb_device_provider.h" 6 #include "chrome/browser/devtools/device/adb/mock_adb_server.h" 7 #include "chrome/browser/devtools/device/devtools_android_bridge.h" 8 #include "chrome/browser/devtools/devtools_target_impl.h" 9 #include "chrome/browser/ui/browser.h" 10 #include "chrome/test/base/in_process_browser_test.h" 11 #include "content/public/browser/browser_thread.h" 12 #include "content/public/test/test_utils.h" 13 14 using content::BrowserThread; 15 16 static scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> 17 FindBrowserByDisplayName(DevToolsAndroidBridge::RemoteBrowsers browsers, 18 const std::string& name) { 19 for (DevToolsAndroidBridge::RemoteBrowsers::iterator it = browsers.begin(); 20 it != browsers.end(); ++it) 21 if ((*it)->display_name() == name) 22 return *it; 23 return NULL; 24 } 25 26 class AdbClientSocketTest : public InProcessBrowserTest, 27 public DevToolsAndroidBridge::DeviceListListener { 28 29 public: 30 void StartTest() { 31 Profile* profile = browser()->profile(); 32 android_bridge_ = DevToolsAndroidBridge::Factory::GetForProfile(profile); 33 AndroidDeviceManager::DeviceProviders device_providers; 34 device_providers.push_back(new AdbDeviceProvider()); 35 android_bridge_->set_device_providers_for_test(device_providers); 36 android_bridge_->AddDeviceListListener(this); 37 content::RunMessageLoop(); 38 } 39 40 virtual void DeviceListChanged( 41 const DevToolsAndroidBridge::RemoteDevices& devices) OVERRIDE { 42 devices_ = devices; 43 android_bridge_->RemoveDeviceListListener(this); 44 base::MessageLoop::current()->Quit(); 45 } 46 47 void CheckDevices() { 48 ASSERT_EQ(2U, devices_.size()); 49 50 scoped_refptr<DevToolsAndroidBridge::RemoteDevice> connected = 51 devices_[0]->is_connected() ? devices_[0] : devices_[1]; 52 53 scoped_refptr<DevToolsAndroidBridge::RemoteDevice> not_connected = 54 devices_[0]->is_connected() ? devices_[1] : devices_[0]; 55 56 ASSERT_TRUE(connected->is_connected()); 57 ASSERT_FALSE(not_connected->is_connected()); 58 59 ASSERT_EQ(720, connected->screen_size().width()); 60 ASSERT_EQ(1184, connected->screen_size().height()); 61 62 ASSERT_EQ("01498B321301A00A", connected->serial()); 63 ASSERT_EQ("Nexus 6", connected->model()); 64 65 ASSERT_EQ("01498B2B0D01300E", not_connected->serial()); 66 ASSERT_EQ("Offline", not_connected->model()); 67 68 const DevToolsAndroidBridge::RemoteBrowsers& browsers = 69 connected->browsers(); 70 ASSERT_EQ(4U, browsers.size()); 71 72 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chrome = 73 FindBrowserByDisplayName(browsers, "Chrome"); 74 ASSERT_TRUE(chrome.get()); 75 76 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chrome_beta = 77 FindBrowserByDisplayName(browsers, "Chrome Beta"); 78 ASSERT_TRUE(chrome_beta.get()); 79 80 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> chromium = 81 FindBrowserByDisplayName(browsers, "Chromium"); 82 ASSERT_FALSE(chromium.get()); 83 84 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> webview = 85 FindBrowserByDisplayName(browsers, "WebView in com.sample.feed"); 86 ASSERT_TRUE(webview.get()); 87 88 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> noprocess = 89 FindBrowserByDisplayName(browsers, "Noprocess"); 90 ASSERT_TRUE(noprocess.get()); 91 92 ASSERT_EQ("32.0.1679.0", chrome->version()); 93 ASSERT_EQ("31.0.1599.0", chrome_beta->version()); 94 ASSERT_EQ("4.0", webview->version()); 95 96 std::vector<DevToolsAndroidBridge::RemotePage*> chrome_pages = 97 chrome->CreatePages(); 98 std::vector<DevToolsAndroidBridge::RemotePage*> chrome_beta_pages = 99 chrome_beta->CreatePages(); 100 std::vector<DevToolsAndroidBridge::RemotePage*> webview_pages = 101 webview->CreatePages(); 102 103 ASSERT_EQ(1U, chrome_pages.size()); 104 ASSERT_EQ(1U, chrome_beta_pages.size()); 105 ASSERT_EQ(2U, webview_pages.size()); 106 107 // Check that we have non-empty description for webview pages. 108 ASSERT_EQ(0U, chrome_pages[0]->GetTarget()->GetDescription().size()); 109 ASSERT_EQ(0U, chrome_beta_pages[0]->GetTarget()->GetDescription().size()); 110 ASSERT_NE(0U, webview_pages[0]->GetTarget()->GetDescription().size()); 111 ASSERT_NE(0U, webview_pages[1]->GetTarget()->GetDescription().size()); 112 113 ASSERT_EQ(GURL("http://www.chromium.org/"), 114 chrome_pages[0]->GetTarget()->GetURL()); 115 ASSERT_EQ("The Chromium Projects", 116 chrome_pages[0]->GetTarget()->GetTitle()); 117 118 STLDeleteElements(&chrome_pages); 119 STLDeleteElements(&chrome_beta_pages); 120 STLDeleteElements(&webview_pages); 121 } 122 123 private: 124 scoped_refptr<DevToolsAndroidBridge> android_bridge_; 125 DevToolsAndroidBridge::RemoteDevices devices_; 126 }; 127 128 IN_PROC_BROWSER_TEST_F(AdbClientSocketTest, TestAdbClientSocket) { 129 StartMockAdbServer(); 130 StartTest(); 131 CheckDevices(); 132 StopMockAdbServer(); 133 } 134