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 #ifndef CHROME_TEST_WEBDRIVER_WEBDRIVER_AUTOMATION_H_ | |
6 #define CHROME_TEST_WEBDRIVER_WEBDRIVER_AUTOMATION_H_ | |
7 | |
8 #include <map> | |
9 #include <string> | |
10 #include <vector> | |
11 | |
12 #include "base/command_line.h" | |
13 #include "base/files/file_path.h" | |
14 #include "base/memory/ref_counted.h" | |
15 #include "base/memory/scoped_ptr.h" | |
16 #include "chrome/common/automation_constants.h" | |
17 #include "chrome/test/webdriver/webdriver_logging.h" | |
18 #include "ui/base/keycodes/keyboard_codes.h" | |
19 | |
20 class AutomationId; | |
21 class AutomationProxy; | |
22 class ProxyLauncher; | |
23 struct WebKeyEvent; | |
24 struct WebMouseEvent; | |
25 class WebViewId; | |
26 struct WebViewInfo; | |
27 class WebViewLocator; | |
28 | |
29 namespace base { | |
30 class DictionaryValue; | |
31 class ListValue; | |
32 class Value; | |
33 } | |
34 | |
35 namespace webdriver { | |
36 | |
37 class Error; | |
38 class FramePath; | |
39 class Point; | |
40 class Rect; | |
41 | |
42 // Creates and controls the Chrome instance. | |
43 // This class should be created and accessed on a single thread. | |
44 // Note: All member functions are void because they are invoked | |
45 // by posting a task. | |
46 class Automation { | |
47 public: | |
48 struct BrowserOptions { | |
49 BrowserOptions(); | |
50 ~BrowserOptions(); | |
51 | |
52 // The command line to use for launching the browser. If no program is | |
53 // specified, the default browser executable will be used. | |
54 CommandLine command; | |
55 | |
56 // The user data directory to be copied and used. If empty, a temporary | |
57 // directory will be used. | |
58 base::FilePath user_data_dir; | |
59 | |
60 // The channel ID of an already running browser to connect to. If empty, | |
61 // the browser will be launched with an anonymous channel. | |
62 std::string channel_id; | |
63 | |
64 // True if the Chrome process should only be terminated if quit is called. | |
65 // If false, Chrome will also be terminated if this process is killed or | |
66 // shutdown. | |
67 bool detach_process; | |
68 | |
69 // True if the browser should ignore certificate related errors. | |
70 bool ignore_certificate_errors; | |
71 | |
72 // Set of switches to be excluded from default list when starting Chrome. | |
73 std::set<std::string> exclude_switches; | |
74 }; | |
75 | |
76 explicit Automation(const Logger& logger); | |
77 virtual ~Automation(); | |
78 | |
79 // Start the system's default Chrome binary. | |
80 void Init(const BrowserOptions& options, int* build_no, Error** error); | |
81 | |
82 // Terminates this session and disconnects its automation proxy. After | |
83 // invoking this method, the Automation can safely be deleted. | |
84 void Terminate(); | |
85 | |
86 // Executes the given |script| in the specified frame of the current | |
87 // tab. |result| will be set to the JSON result. Returns true on success. | |
88 void ExecuteScript(const WebViewId& view_id, | |
89 const FramePath& frame_path, | |
90 const std::string& script, | |
91 std::string* result, | |
92 Error** error); | |
93 | |
94 // Sends a webkit key event to the current browser. Waits until the key has | |
95 // been processed by the web page. | |
96 void SendWebKeyEvent(const WebViewId& view_id, | |
97 const WebKeyEvent& key_event, | |
98 Error** error); | |
99 | |
100 // Sends a web mouse event to the given view. Waits until the event has | |
101 // been processed by the view. | |
102 void SendWebMouseEvent(const WebViewId& view_id, | |
103 const WebMouseEvent& event, | |
104 Error** error); | |
105 | |
106 // Drag and drop the file paths to the given location. | |
107 void DragAndDropFilePaths( | |
108 const WebViewId& view_id, | |
109 const Point& location, | |
110 const std::vector<base::FilePath::StringType>& paths, | |
111 Error** error); | |
112 | |
113 // Captures a snapshot of the tab to the specified path. The PNG will | |
114 // contain the entire page, including what is not in the current view | |
115 // on the screen. | |
116 void CaptureEntirePageAsPNG( | |
117 const WebViewId& view_id, const base::FilePath& path, Error** error); | |
118 | |
119 #if !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS)) | |
120 // Dumps a heap profile of the process of the tab. | |
121 void HeapProfilerDump( | |
122 const WebViewId& view_id, const std::string& reason, Error** error); | |
123 #endif // !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS)) | |
124 | |
125 void NavigateToURL( | |
126 const WebViewId& view_id, const std::string& url, Error** error); | |
127 void NavigateToURLAsync( | |
128 const WebViewId& view_id, const std::string& url, Error** error); | |
129 void GoForward(const WebViewId& view_id, Error** error); | |
130 void GoBack(const WebViewId& view_id, Error** error); | |
131 void Reload(const WebViewId& view_id, Error** error); | |
132 | |
133 void GetCookies(const std::string& url, | |
134 scoped_ptr<base::ListValue>* cookies, | |
135 Error** error); | |
136 void DeleteCookie(const std::string& url, | |
137 const std::string& cookie_name, | |
138 Error** error); | |
139 void SetCookie(const std::string& url, | |
140 base::DictionaryValue* cookie_dict, | |
141 Error** error); | |
142 | |
143 // TODO(kkania): All of these mouse commands are deprecated and should be | |
144 // removed when chrome build 1002 is no longer supported. | |
145 // Use SendWebMouseEvent instead. | |
146 void MouseMoveDeprecated(const WebViewId& view_id, | |
147 const Point& p, | |
148 Error** error); | |
149 void MouseClickDeprecated(const WebViewId& view_id, | |
150 const Point& p, | |
151 automation::MouseButton button, | |
152 Error** error); | |
153 void MouseDragDeprecated(const WebViewId& view_id, | |
154 const Point& start, | |
155 const Point& end, | |
156 Error** error); | |
157 void MouseButtonDownDeprecated(const WebViewId& view_id, | |
158 const Point& p, | |
159 Error** error); | |
160 void MouseButtonUpDeprecated(const WebViewId& view_id, | |
161 const Point& p, | |
162 Error** error); | |
163 void MouseDoubleClickDeprecated(const WebViewId& view_id, | |
164 const Point& p, | |
165 Error** error); | |
166 | |
167 // Get info for all views currently open. | |
168 void GetViews(std::vector<WebViewInfo>* views, Error** error); | |
169 | |
170 // Check if the given view exists currently. | |
171 void DoesViewExist(const WebViewId& view_id, bool* does_exist, Error** error); | |
172 | |
173 // Closes the given view. | |
174 void CloseView(const WebViewId& view_id, Error** error); | |
175 | |
176 // Sets the bounds for the given view. The position should be in screen | |
177 // coordinates, while the size should be the desired size of the view. | |
178 void SetViewBounds(const WebViewId& view_id, | |
179 const Rect& bounds, | |
180 Error** error); | |
181 | |
182 // Maximizes the given view. | |
183 void MaximizeView(const WebViewId& view_id, Error** error); | |
184 | |
185 // Gets the active JavaScript modal dialog's message. | |
186 void GetAppModalDialogMessage(std::string* message, Error** error); | |
187 | |
188 // Accepts or dismisses the active JavaScript modal dialog. | |
189 void AcceptOrDismissAppModalDialog(bool accept, Error** error); | |
190 | |
191 // Accepts an active prompt JavaScript modal dialog, using the given | |
192 // prompt text as the result of the prompt. | |
193 void AcceptPromptAppModalDialog(const std::string& prompt_text, | |
194 Error** error); | |
195 | |
196 // Gets the version of the runing browser. | |
197 void GetBrowserVersion(std::string* version); | |
198 | |
199 // Gets the ChromeDriver automation version supported by the automation | |
200 // server. | |
201 void GetChromeDriverAutomationVersion(int* version, Error** error); | |
202 | |
203 // Waits for all views to stop loading. | |
204 void WaitForAllViewsToStopLoading(Error** error); | |
205 | |
206 // Install a packed or unpacked extension. If the path ends with '.crx', | |
207 // the extension is assumed to be packed. | |
208 void InstallExtension(const base::FilePath& path, std::string* extension_id, | |
209 Error** error); | |
210 | |
211 // Gets a list of dictionary information about all installed extensions. | |
212 void GetExtensionsInfo(base::ListValue* extensions_list, Error** error); | |
213 | |
214 // Gets a list of dictionary information about all installed extensions. | |
215 void IsPageActionVisible(const WebViewId& tab_id, | |
216 const std::string& extension_id, | |
217 bool* is_visible, | |
218 Error** error); | |
219 | |
220 // Sets whether the extension is enabled or not. | |
221 void SetExtensionState(const std::string& extension_id, | |
222 bool enable, | |
223 Error** error); | |
224 | |
225 // Clicks the extension action button. If |browser_action| is false, the | |
226 // page action will be clicked. | |
227 void ClickExtensionButton(const std::string& extension_id, | |
228 bool browser_action, | |
229 Error** error); | |
230 | |
231 // Uninstalls the given extension. | |
232 void UninstallExtension(const std::string& extension_id, Error** error); | |
233 | |
234 // Set a local state preference, which is not associated with any profile. | |
235 // Ownership of |value| is taken by this function. | |
236 void SetLocalStatePreference(const std::string& pref, | |
237 base::Value* value, | |
238 Error** error); | |
239 | |
240 // Set a user preference, which is associated with the current profile. | |
241 // Ownership of |value| is taken by this fucntion. | |
242 void SetPreference(const std::string& pref, | |
243 base::Value* value, | |
244 Error** error); | |
245 | |
246 // Gets the current geolocation. | |
247 void GetGeolocation(scoped_ptr<base::DictionaryValue>* geolocation, | |
248 Error** error); | |
249 | |
250 // Overrides the current geolocation. | |
251 void OverrideGeolocation(const base::DictionaryValue* geolocation, | |
252 Error** error); | |
253 | |
254 private: | |
255 AutomationProxy* automation() const; | |
256 Error* ConvertViewIdToLocator(const WebViewId& view_id, | |
257 WebViewLocator* view_locator); | |
258 Error* DetermineBuildNumber(); | |
259 Error* CheckVersion(int min_required_build_no, | |
260 const std::string& error_msg); | |
261 Error* CheckAlertsSupported(); | |
262 Error* CheckAdvancedInteractionsSupported(); | |
263 Error* CheckNewExtensionInterfaceSupported(); | |
264 Error* CheckGeolocationSupported(); | |
265 Error* CheckMaximizeSupported(); | |
266 Error* IsNewMouseApiSupported(bool* supports_new_api); | |
267 | |
268 const Logger& logger_; | |
269 scoped_ptr<ProxyLauncher> launcher_; | |
270 int build_no_; | |
271 scoped_ptr<base::DictionaryValue> geolocation_; | |
272 | |
273 DISALLOW_COPY_AND_ASSIGN(Automation); | |
274 }; | |
275 | |
276 } // namespace webdriver | |
277 | |
278 #endif // CHROME_TEST_WEBDRIVER_WEBDRIVER_AUTOMATION_H_ | |
OLD | NEW |