Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / devtools / device / adb / adb_client_socket_browsertest.cc
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   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     DevToolsAndroidBridge::RemotePages chrome_pages =
97         chrome->pages();
98     DevToolsAndroidBridge::RemotePages chrome_beta_pages =
99         chrome_beta->pages();
100     DevToolsAndroidBridge::RemotePages webview_pages =
101         webview->pages();
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     scoped_ptr<DevToolsTargetImpl> chrome_target(
108         android_bridge_->CreatePageTarget(chrome_pages[0]));
109     scoped_ptr<DevToolsTargetImpl> chrome_beta_target(
110         android_bridge_->CreatePageTarget(chrome_beta_pages[0]));
111     scoped_ptr<DevToolsTargetImpl> webview_target_0(
112         android_bridge_->CreatePageTarget(webview_pages[0]));
113     scoped_ptr<DevToolsTargetImpl> webview_target_1(
114         android_bridge_->CreatePageTarget(webview_pages[1]));
115
116     // Check that we have non-empty description for webview pages.
117     ASSERT_EQ(0U, chrome_target->GetDescription().size());
118     ASSERT_EQ(0U, chrome_beta_target->GetDescription().size());
119     ASSERT_NE(0U, webview_target_0->GetDescription().size());
120     ASSERT_NE(0U, webview_target_1->GetDescription().size());
121
122     ASSERT_EQ(GURL("http://www.chromium.org/"),
123                    chrome_target->GetURL());
124     ASSERT_EQ("The Chromium Projects",
125               chrome_target->GetTitle());
126   }
127
128  private:
129   scoped_refptr<DevToolsAndroidBridge> android_bridge_;
130   DevToolsAndroidBridge::RemoteDevices devices_;
131 };
132
133 IN_PROC_BROWSER_TEST_F(AdbClientSocketTest, TestAdbClientSocket) {
134   StartMockAdbServer();
135   StartTest();
136   CheckDevices();
137   StopMockAdbServer();
138 }