Home | History | Annotate | Download | only in adb
      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