OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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/test/reliability/automated_ui_test_base.h" | |
6 | |
7 #include "base/test/test_timeouts.h" | |
8 #include "chrome/app/chrome_command_ids.h" | |
9 #include "chrome/browser/ui/view_ids.h" | |
10 #include "chrome/test/automation/automation_proxy.h" | |
11 #include "chrome/test/automation/browser_proxy.h" | |
12 #include "chrome/test/automation/tab_proxy.h" | |
13 #include "chrome/test/automation/window_proxy.h" | |
14 #include "chrome/test/ui/ui_test.h" | |
15 #include "ui/events/event_constants.h" | |
16 #include "ui/gfx/point.h" | |
17 #include "ui/gfx/rect.h" | |
18 | |
19 AutomatedUITestBase::AutomatedUITestBase() {} | |
20 | |
21 AutomatedUITestBase::~AutomatedUITestBase() {} | |
22 | |
23 void AutomatedUITestBase::LogErrorMessage(const std::string& error) { | |
24 } | |
25 | |
26 void AutomatedUITestBase::LogWarningMessage(const std::string& warning) { | |
27 } | |
28 | |
29 void AutomatedUITestBase::LogInfoMessage(const std::string& info) { | |
30 } | |
31 | |
32 void AutomatedUITestBase::SetUp() { | |
33 UITest::SetUp(); | |
34 set_active_browser(automation()->GetBrowserWindow(0).get()); | |
35 } | |
36 | |
37 bool AutomatedUITestBase::BackButton() { | |
38 return RunCommand(IDC_BACK); | |
39 } | |
40 | |
41 bool AutomatedUITestBase::CloseActiveTab() { | |
42 BrowserProxy* browser = active_browser(); | |
43 int tab_count; | |
44 if (!browser->GetTabCount(&tab_count)) { | |
45 LogErrorMessage("get_tab_count_failed"); | |
46 return false; | |
47 } | |
48 | |
49 if (tab_count > 1) { | |
50 return RunCommand(IDC_CLOSE_TAB); | |
51 } else if (tab_count == 1) { | |
52 // Synchronously close the window if it is not the last window. | |
53 return CloseActiveWindow(); | |
54 } else { | |
55 LogInfoMessage("invalid_tab_count"); | |
56 return false; | |
57 } | |
58 } | |
59 | |
60 bool AutomatedUITestBase::CloseActiveWindow() { | |
61 int browser_windows_count = 0; | |
62 if (!automation()->GetNormalBrowserWindowCount(&browser_windows_count)) | |
63 return false; | |
64 // Avoid quitting the application by not closing the last window. | |
65 if (browser_windows_count < 2) | |
66 return false; | |
67 bool application_closed; | |
68 CloseBrowser(active_browser(), &application_closed); | |
69 if (application_closed) { | |
70 LogErrorMessage("Application closed unexpectedly."); | |
71 return false; | |
72 } | |
73 for (int i = 0; i < browser_windows_count - 1; ++i) { | |
74 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(i)); | |
75 Browser::Type type; | |
76 if (browser->GetType(&type) && type == Browser::TYPE_TABBED) { | |
77 set_active_browser(browser.get()); | |
78 return true; | |
79 } | |
80 } | |
81 | |
82 LogErrorMessage("Can't find browser window."); | |
83 return false; | |
84 } | |
85 | |
86 bool AutomatedUITestBase::DuplicateTab() { | |
87 return RunCommand(IDC_DUPLICATE_TAB); | |
88 } | |
89 | |
90 bool AutomatedUITestBase::FindInPage() { | |
91 if (!RunCommandAsync(IDC_FIND)) | |
92 return false; | |
93 | |
94 return WaitForFindWindowVisibilityChange(active_browser(), true); | |
95 } | |
96 | |
97 bool AutomatedUITestBase::ForwardButton() { | |
98 return RunCommand(IDC_FORWARD); | |
99 } | |
100 | |
101 bool AutomatedUITestBase::GoOffTheRecord() { | |
102 return RunCommand(IDC_NEW_INCOGNITO_WINDOW); | |
103 } | |
104 | |
105 bool AutomatedUITestBase::Home() { | |
106 return RunCommand(IDC_HOME); | |
107 } | |
108 | |
109 bool AutomatedUITestBase::OpenAndActivateNewBrowserWindow( | |
110 scoped_refptr<BrowserProxy>* previous_browser) { | |
111 if (!automation()->OpenNewBrowserWindow(Browser::TYPE_TABBED, | |
112 true /* SW_SHOWNORMAL */)) { | |
113 LogWarningMessage("failed_to_open_new_browser_window"); | |
114 return false; | |
115 } | |
116 int num_browser_windows; | |
117 if (!automation()->GetBrowserWindowCount(&num_browser_windows)) { | |
118 LogErrorMessage("failed_to_get_browser_window_count"); | |
119 return false; | |
120 } | |
121 // Get the most recently opened browser window and activate the tab | |
122 // in order to activate this browser window. | |
123 scoped_refptr<BrowserProxy> browser( | |
124 automation()->GetBrowserWindow(num_browser_windows - 1)); | |
125 if (browser.get() == NULL) { | |
126 LogErrorMessage("browser_window_not_found"); | |
127 return false; | |
128 } | |
129 if (!browser->ActivateTab(0)) { | |
130 LogWarningMessage("failed_to_activate_tab"); | |
131 return false; | |
132 } | |
133 | |
134 if (previous_browser) { | |
135 DCHECK(previous_browser->get() == NULL); | |
136 active_browser_.swap(*previous_browser); | |
137 } | |
138 | |
139 active_browser_.swap(browser); | |
140 return true; | |
141 } | |
142 | |
143 bool AutomatedUITestBase::Navigate(const GURL& url) { | |
144 scoped_refptr<TabProxy> tab(GetActiveTab()); | |
145 if (tab.get() == NULL) { | |
146 LogErrorMessage("active_tab_not_found"); | |
147 return false; | |
148 } | |
149 AutomationMsg_NavigationResponseValues result = tab->NavigateToURL(url); | |
150 if (result != AUTOMATION_MSG_NAVIGATION_SUCCESS) { | |
151 LogErrorMessage("navigation_failed"); | |
152 return false; | |
153 } | |
154 | |
155 return true; | |
156 } | |
157 | |
158 bool AutomatedUITestBase::NewTab() { | |
159 // Apply accelerator and wait for a new tab to open, if either | |
160 // fails, return false. Apply Accelerator takes care of logging its failure. | |
161 return RunCommand(IDC_NEW_TAB); | |
162 } | |
163 | |
164 bool AutomatedUITestBase::ReloadPage() { | |
165 return RunCommand(IDC_RELOAD); | |
166 } | |
167 | |
168 bool AutomatedUITestBase::RestoreTab() { | |
169 return RunCommand(IDC_RESTORE_TAB); | |
170 } | |
171 | |
172 bool AutomatedUITestBase::SelectNextTab() { | |
173 return RunCommand(IDC_SELECT_NEXT_TAB); | |
174 } | |
175 | |
176 bool AutomatedUITestBase::SelectPreviousTab() { | |
177 return RunCommand(IDC_SELECT_PREVIOUS_TAB); | |
178 } | |
179 | |
180 bool AutomatedUITestBase::ShowDownloads() { | |
181 return RunCommand(IDC_SHOW_DOWNLOADS); | |
182 } | |
183 | |
184 bool AutomatedUITestBase::ShowHistory() { | |
185 return RunCommand(IDC_SHOW_HISTORY); | |
186 } | |
187 | |
188 bool AutomatedUITestBase::RunCommandAsync(int browser_command) { | |
189 BrowserProxy* browser = active_browser(); | |
190 if (NULL == browser) { | |
191 LogErrorMessage("browser_window_not_found"); | |
192 return false; | |
193 } | |
194 | |
195 if (!browser->RunCommandAsync(browser_command)) { | |
196 LogWarningMessage("failure_running_browser_command"); | |
197 return false; | |
198 } | |
199 return true; | |
200 } | |
201 | |
202 bool AutomatedUITestBase::RunCommand(int browser_command) { | |
203 BrowserProxy* browser = active_browser(); | |
204 if (NULL == browser) { | |
205 LogErrorMessage("browser_window_not_found"); | |
206 return false; | |
207 } | |
208 | |
209 if (!browser->RunCommand(browser_command)) { | |
210 LogWarningMessage("failure_running_browser_command"); | |
211 return false; | |
212 } | |
213 return true; | |
214 } | |
215 | |
216 scoped_refptr<TabProxy> AutomatedUITestBase::GetActiveTab() { | |
217 BrowserProxy* browser = active_browser(); | |
218 if (browser == NULL) { | |
219 LogErrorMessage("browser_window_not_found"); | |
220 return NULL; | |
221 } | |
222 | |
223 return browser->GetActiveTab(); | |
224 } | |
225 | |
226 scoped_refptr<WindowProxy> AutomatedUITestBase::GetAndActivateWindowForBrowser( | |
227 BrowserProxy* browser) { | |
228 if (!browser->BringToFront()) { | |
229 LogWarningMessage("failed_to_bring_window_to_front"); | |
230 return NULL; | |
231 } | |
232 | |
233 return browser->GetWindow(); | |
234 } | |
OLD | NEW |