• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_
6 #define CHROME_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "chrome/browser/automation/automation_provider.h"
15 #include "chrome/browser/automation/automation_provider_json.h"
16 #include "chrome/browser/history/history.h"
17 #include "chrome/browser/importer/importer_list.h"
18 #include "chrome/browser/sync/profile_sync_service_harness.h"
19 #include "chrome/browser/ui/browser_list.h"
20 #include "content/common/notification_registrar.h"
21 #include "content/common/page_type.h"
22 
23 class DictionaryValue;
24 class TemplateURLModel;
25 
26 // This is an automation provider containing testing calls.
27 class TestingAutomationProvider : public AutomationProvider,
28                                   public BrowserList::Observer,
29                                   public ImporterList::Observer,
30                                   public NotificationObserver {
31  public:
32   explicit TestingAutomationProvider(Profile* profile);
33 
34   // IPC::Channel::Listener:
35   virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
36   virtual void OnChannelError() OVERRIDE;
37 
38  private:
39   class PopupMenuWaiter;
40 
41   // Storage for ImportSettings() to resume operations after a callback.
42   struct ImportSettingsData {
43     string16 browser_name;
44     int import_items;
45     bool first_run;
46     Browser* browser;
47     IPC::Message* reply_message;
48   };
49 
50   virtual ~TestingAutomationProvider();
51 
52   // BrowserList::Observer:
53   virtual void OnBrowserAdded(const Browser* browser) OVERRIDE;
54   virtual void OnBrowserRemoved(const Browser* browser) OVERRIDE;
55 
56   // ImporterList::Observer:
57   virtual void OnSourceProfilesLoaded() OVERRIDE;
58 
59   // NotificationObserver:
60   virtual void Observe(NotificationType type,
61                        const NotificationSource& source,
62                        const NotificationDetails& details) OVERRIDE;
63 
64   // IPC Message callbacks.
65   void CloseBrowser(int handle, IPC::Message* reply_message);
66   void CloseBrowserAsync(int browser_handle);
67   void ActivateTab(int handle, int at_index, int* status);
68   void AppendTab(int handle, const GURL& url, IPC::Message* reply_message);
69   void GetActiveTabIndex(int handle, int* active_tab_index);
70   void CloseTab(int tab_handle, bool wait_until_closed,
71                 IPC::Message* reply_message);
72   void GetCookies(const GURL& url, int handle, int* value_size,
73                   std::string* value);
74   void SetCookie(const GURL& url,
75                  const std::string& value,
76                  int handle,
77                  int* response_value);
78   void DeleteCookie(const GURL& url, const std::string& cookie_name,
79                     int handle, bool* success);
80   void ShowCollectedCookiesDialog(int handle, bool* success);
81   void NavigateToURLBlockUntilNavigationsComplete(int handle, const GURL& url,
82                                                   int number_of_navigations,
83                                                   IPC::Message* reply_message);
84   void NavigationAsync(int handle, const GURL& url, bool* status);
85   void NavigationAsyncWithDisposition(int handle,
86                                       const GURL& url,
87                                       WindowOpenDisposition disposition,
88                                       bool* status);
89   void Reload(int handle, IPC::Message* reply_message);
90   void SetAuth(int tab_handle, const std::wstring& username,
91                const std::wstring& password, IPC::Message* reply_message);
92   void CancelAuth(int tab_handle, IPC::Message* reply_message);
93   void NeedsAuth(int tab_handle, bool* needs_auth);
94   void GetRedirectsFrom(int tab_handle,
95                         const GURL& source_url,
96                         IPC::Message* reply_message);
97   void GetBrowserWindowCount(int* window_count);
98   void GetNormalBrowserWindowCount(int* window_count);
99   // Be aware that the browser window returned might be of non TYPE_NORMAL
100   // or in incognito mode.
101   void GetBrowserWindow(int index, int* handle);
102   void FindNormalBrowserWindow(int* handle);
103   void GetLastActiveBrowserWindow(int* handle);
104   void GetActiveWindow(int* handle);
105   void ExecuteBrowserCommandAsync(int handle, int command, bool* success);
106   void ExecuteBrowserCommand(int handle, int command,
107                              IPC::Message* reply_message);
108   void GetBrowserLocale(string16* locale);
109   void IsWindowActive(int handle, bool* success, bool* is_active);
110   void ActivateWindow(int handle);
111   void IsWindowMaximized(int handle, bool* is_maximized, bool* success);
112   void TerminateSession(int handle, bool* success);
113   void WindowGetViewBounds(int handle, int view_id, bool screen_coordinates,
114                            bool* success, gfx::Rect* bounds);
115   void GetWindowBounds(int handle, gfx::Rect* bounds, bool* result);
116   void SetWindowBounds(int handle, const gfx::Rect& bounds, bool* result);
117   void SetWindowVisible(int handle, bool visible, bool* result);
118   void WindowSimulateClick(const IPC::Message& message,
119                            int handle,
120                            const gfx::Point& click,
121                            int flags);
122   void WindowSimulateMouseMove(const IPC::Message& message,
123                                int handle,
124                                const gfx::Point& location);
125   void WindowSimulateKeyPress(const IPC::Message& message,
126                               int handle,
127                               int key,
128                               int flags);
129   void GetTabCount(int handle, int* tab_count);
130   void GetType(int handle, int* type_as_int);
131   void GetTab(int win_handle, int tab_index, int* tab_handle);
132   void GetTabProcessID(int handle, int* process_id);
133   void GetTabTitle(int handle, int* title_string_size, std::wstring* title);
134   void GetTabIndex(int handle, int* tabstrip_index);
135   void GetTabURL(int handle, bool* success, GURL* url);
136   void GetShelfVisibility(int handle, bool* visible);
137   void IsFullscreen(int handle, bool* is_fullscreen);
138   void GetFullscreenBubbleVisibility(int handle, bool* is_visible);
139   void GetAutocompleteEditForBrowser(int browser_handle, bool* success,
140                                      int* autocomplete_edit_handle);
141 
142   // Retrieves the visible text from the autocomplete edit.
143   void GetAutocompleteEditText(int autocomplete_edit_handle,
144                                bool* success, string16* text);
145 
146   // Sets the visible text from the autocomplete edit.
147   void SetAutocompleteEditText(int autocomplete_edit_handle,
148                                const string16& text,
149                                bool* success);
150 
151   // Retrieves if a query to an autocomplete provider is in progress.
152   void AutocompleteEditIsQueryInProgress(int autocomplete_edit_handle,
153                                          bool* success,
154                                          bool* query_in_progress);
155 
156   // Retrieves the individual autocomplete matches displayed by the popup.
157   void AutocompleteEditGetMatches(int autocomplete_edit_handle,
158                                   bool* success,
159                                   std::vector<AutocompleteMatchData>* matches);
160 
161   // Waits for the autocomplete edit to receive focus
162   void WaitForAutocompleteEditFocus(int autocomplete_edit_handle,
163                                     IPC::Message* reply_message);
164 
165   void ExecuteJavascript(int handle,
166                          const std::wstring& frame_xpath,
167                          const std::wstring& script,
168                          IPC::Message* reply_message);
169 
170   void GetConstrainedWindowCount(int handle, int* count);
171 
172 #if defined(TOOLKIT_VIEWS)
173   void GetFocusedViewID(int handle, int* view_id);
174 
175   // Block until the focused view ID changes to something other than
176   // previous_view_id.
177   void WaitForFocusedViewIDToChange(int handle,
178                                     int previous_view_id,
179                                     IPC::Message* reply_message);
180 
181   // Start tracking popup menus. Must be called before executing the
182   // command that might open the popup menu; then call WaitForPopupMenuToOpen.
183   void StartTrackingPopupMenus(int browser_handle, bool* success);
184 
185   // Wait until a popup menu has opened.
186   void WaitForPopupMenuToOpen(IPC::Message* reply_message);
187 #endif  // defined(TOOLKIT_VIEWS)
188 
189   void HandleInspectElementRequest(int handle,
190                                    int x,
191                                    int y,
192                                    IPC::Message* reply_message);
193 
194   void GetDownloadDirectory(int handle, FilePath* download_directory);
195 
196   // If |show| is true, call Show() on the new window after creating it.
197   void OpenNewBrowserWindowOfType(int type,
198                                   bool show,
199                                   IPC::Message* reply_message);
200 
201   // Retrieves a Browser from a Window and vice-versa.
202   void GetWindowForBrowser(int window_handle, bool* success, int* handle);
203   void GetBrowserForWindow(int window_handle, bool* success,
204                            int* browser_handle);
205 
206   void ShowInterstitialPage(int tab_handle,
207                             const std::string& html_text,
208                             IPC::Message* reply_message);
209   void HideInterstitialPage(int tab_handle, bool* success);
210 
211   void WaitForTabToBeRestored(int tab_handle, IPC::Message* reply_message);
212 
213   // Gets the security state for the tab associated to the specified |handle|.
214   void GetSecurityState(int handle, bool* success,
215                         SecurityStyle* security_style, int* ssl_cert_status,
216                         int* insecure_content_status);
217 
218   // Gets the page type for the tab associated to the specified |handle|.
219   void GetPageType(int handle, bool* success, PageType* page_type);
220 
221   // Gets the duration in ms of the last event matching |event_name|.
222   // |duration_ms| is -1 if the event hasn't occurred yet.
223   void GetMetricEventDuration(const std::string& event_name, int* duration_ms);
224 
225   // Simulates an action on the SSL blocking page at the tab specified by
226   // |handle|. If |proceed| is true, it is equivalent to the user pressing the
227   // 'Proceed' button, if false the 'Get me out of there button'.
228   // Not that this fails if the tab is not displaying a SSL blocking page.
229   void ActionOnSSLBlockingPage(int handle,
230                                bool proceed,
231                                IPC::Message* reply_message);
232 
233   // Brings the browser window to the front and activates it.
234   void BringBrowserToFront(int browser_handle, bool* success);
235 
236   // Checks to see if a command on the browser's CommandController is enabled.
237   void IsMenuCommandEnabled(int browser_handle,
238                             int message_num,
239                             bool* menu_item_enabled);
240 
241   // Prints the current tab immediately.
242   void PrintNow(int tab_handle, IPC::Message* reply_message);
243 
244   // Save the current web page.
245   void SavePage(int tab_handle,
246                 const FilePath& file_name,
247                 const FilePath& dir_path,
248                 int type,
249                 bool* success);
250 
251   // Responds to requests to open the FindInPage window.
252   void HandleOpenFindInPageRequest(const IPC::Message& message,
253                                    int handle);
254 
255   // Get the visibility state of the Find window.
256   void GetFindWindowVisibility(int handle, bool* visible);
257 
258   // Responds to requests to find the location of the Find window.
259   void HandleFindWindowLocationRequest(int handle, int* x, int* y);
260 
261   // Get the visibility state of the Bookmark bar.
262   void GetBookmarkBarVisibility(int handle, bool* visible, bool* animating);
263 
264   // Get the bookmarks as a JSON string.
265   void GetBookmarksAsJSON(int handle, std::string* bookmarks_as_json,
266                           bool *success);
267 
268   // Wait for the bookmark model to load.
269   void WaitForBookmarkModelToLoad(int handle, IPC::Message* reply_message);
270 
271   // Set |loaded| to true if the bookmark model has loaded, else false.
272   void BookmarkModelHasLoaded(int handle, bool* loaded);
273 
274   // Editing, modification, and removal of bookmarks.
275   // Bookmarks are referenced by id.
276   void AddBookmarkGroup(int handle,
277                         int64 parent_id, int index, std::wstring title,
278                         bool* success);
279   void AddBookmarkURL(int handle,
280                       int64 parent_id, int index,
281                       std::wstring title, const GURL& url,
282                       bool* success);
283   void ReparentBookmark(int handle,
284                         int64 id, int64 new_parent_id, int index,
285                         bool* success);
286   void SetBookmarkTitle(int handle,
287                         int64 id, std::wstring title,
288                         bool* success);
289   void SetBookmarkURL(int handle,
290                       int64 id, const GURL& url,
291                       bool* success);
292   void RemoveBookmark(int handle,
293                       int64 id,
294                       bool* success);
295 
296   // Retrieves the number of info-bars currently showing in |count|.
297   void GetInfoBarCount(int handle, size_t* count);
298 
299   // Causes a click on the "accept" button of the info-bar at |info_bar_index|.
300   // If |wait_for_navigation| is true, it sends the reply after a navigation has
301   // occurred.
302   void ClickInfoBarAccept(int handle,
303                           size_t info_bar_index,
304                           bool wait_for_navigation,
305                           IPC::Message* reply_message);
306 
307   // Retrieves the last time a navigation occurred for the tab.
308   void GetLastNavigationTime(int handle, int64* last_navigation_time);
309 
310   // Waits for a new navigation in the tab if none has happened since
311   // |last_navigation_time|.
312   void WaitForNavigation(int handle,
313                          int64 last_navigation_time,
314                          IPC::Message* reply_message);
315 
316   // Sets the int value for preference with name |name|.
317   void SetIntPreference(int handle,
318                         const std::string& name,
319                         int value,
320                         bool* success);
321 
322   // Sets the string value for preference with name |name|.
323   void SetStringPreference(int handle,
324                            const std::string& name,
325                            const std::string& value,
326                            bool* success);
327 
328   // Gets the bool value for preference with name |name|.
329   void GetBooleanPreference(int handle,
330                             const std::string& name,
331                             bool* success,
332                             bool* value);
333 
334   // Sets the bool value for preference with name |name|.
335   void SetBooleanPreference(int handle,
336                             const std::string& name,
337                             bool value,
338                             bool* success);
339 
340   void GetShowingAppModalDialog(bool* showing_dialog, int* dialog_button);
341   void ClickAppModalDialogButton(int button, bool* success);
342 
343   void WaitForBrowserWindowCountToBecome(int target_count,
344                                          IPC::Message* reply_message);
345 
346   void WaitForAppModalDialogToBeShown(IPC::Message* reply_message);
347 
348   void GoBackBlockUntilNavigationsComplete(int handle,
349                                            int number_of_navigations,
350                                            IPC::Message* reply_message);
351 
352   void GoForwardBlockUntilNavigationsComplete(int handle,
353                                               int number_of_navigations,
354                                               IPC::Message* reply_message);
355 
356   void SavePackageShouldPromptUser(bool should_prompt);
357 
358   void GetWindowTitle(int handle, string16* text);
359 
360   void SetShelfVisibility(int handle, bool visible);
361 
362   // Returns the number of blocked popups in the tab |handle|.
363   void GetBlockedPopupCount(int handle, int* count);
364 
365   // Generic pattern for pyautolib
366   // Uses the JSON interface for input/output.
367   void SendJSONRequest(int handle,
368                        const std::string& json_request,
369                        IPC::Message* reply_message);
370 
371   // Method ptr for json handlers.
372   // Uses the JSON interface for input/output.
373   typedef void (TestingAutomationProvider::*JsonHandler)(DictionaryValue*,
374                                                          IPC::Message*);
375 
376   // Method ptr for json handlers that take a browser argument.
377   // Uses the JSON interface for input/output.
378   typedef void (TestingAutomationProvider::*BrowserJsonHandler)(
379       Browser* browser,
380       DictionaryValue*,
381       IPC::Message*);
382 
383     // Set window dimensions.
384   // Uses the JSON interface for input/output.
385   void SetWindowDimensions(Browser* browser,
386                            DictionaryValue* args,
387                            IPC::Message* reply_message);
388 
389   // Get info about infobars in the given TabContents object.
390   // This includes info about the type of infobars, the message text,
391   // buttons, etc.
392   // Caller owns the returned object.
393   ListValue* GetInfobarsInfo(TabContents* tc);
394 
395   // Perform actions on an infobar like dismiss, accept, cancel.
396   // Uses the JSON interface for input/output.
397   void PerformActionOnInfobar(Browser* browser,
398                               DictionaryValue* args,
399                               IPC::Message* reply_message);
400 
401   // Get info about the chromium/chrome in use.
402   // This includes things like version, executable name, executable path.
403   // Uses the JSON interface for input/output.
404   void GetBrowserInfo(Browser* browser,
405                       DictionaryValue* args,
406                       IPC::Message* reply_message);
407 
408   // Get info about the state of navigation in a given tab.
409   // This includes ssl info.
410   // Uses the JSON interface for input/output.
411   void GetNavigationInfo(Browser* browser,
412                          DictionaryValue* args,
413                          IPC::Message* reply_message);
414 
415   // Get info about downloads. This includes only ones that have been
416   // registered by the history system.
417   // Uses the JSON interface for input/output.
418   void GetDownloadsInfo(Browser* browser,
419                         DictionaryValue* args,
420                         IPC::Message* reply_message);
421 
422   // Wait for all downloads to complete.
423   // Uses the JSON interface for input/output.
424   void WaitForDownloadsToComplete(Browser* browser,
425                                   DictionaryValue* args,
426                                   IPC::Message* reply_message);
427 
428   // Performs the given action on the specified download.
429   // Uses the JSON interface for input/output.
430   void PerformActionOnDownload(Browser* browser,
431                                DictionaryValue* args,
432                                IPC::Message* reply_message);
433 
434   // Get info about history.
435   // Uses the JSON interface for input/output.
436   void GetHistoryInfo(Browser* browser,
437                       DictionaryValue* args,
438                       IPC::Message* reply_message);
439 
440   // Add an item to the history service.
441   // Uses the JSON interface for input/output.
442   void AddHistoryItem(Browser* browser,
443                       DictionaryValue* args,
444                       IPC::Message* reply_message);
445 
446   // Invoke loading of template url model.
447   // Uses the JSON interface for input/output.
448   void LoadSearchEngineInfo(Browser* browser,
449                             DictionaryValue* args,
450                             IPC::Message* reply_message);
451 
452   // Get search engines list.
453   // Assumes that the profile's template url model is loaded.
454   // Uses the JSON interface for input/output.
455   void GetSearchEngineInfo(Browser* browser,
456                            DictionaryValue* args,
457                            IPC::Message* reply_message);
458 
459   // Add or edit search engine.
460   // Assumes that the profile's template url model is loaded.
461   // Uses the JSON interface for input/output.
462   void AddOrEditSearchEngine(Browser* browser,
463                              DictionaryValue* args,
464                              IPC::Message* reply_message);
465 
466   // Perform a given action on an existing search engine.
467   // Assumes that the profile's template url model is loaded.
468   // Uses the JSON interface for input/output.
469   void PerformActionOnSearchEngine(Browser* browser,
470                                    DictionaryValue* args,
471                                    IPC::Message* reply_message);
472 
473   // Get info about preferences.
474   // Uses the JSON interface for input/output.
475   void GetPrefsInfo(Browser* browser,
476                     DictionaryValue* args,
477                     IPC::Message* reply_message);
478 
479   // Set prefs.
480   // Uses the JSON interface for input/output.
481   void SetPrefs(Browser* browser,
482                 DictionaryValue* args,
483                 IPC::Message* reply_message);
484 
485   // Return load times of initial tabs.
486   // Uses the JSON interface for input/output.
487   // Only includes tabs from command line arguments or session restore.
488   // See declaration of InitialLoadObserver in automation_provider_observers.h
489   // for example response.
490   void GetInitialLoadTimes(Browser* browser,
491                            DictionaryValue* args,
492                            IPC::Message* reply_message);
493 
494   // Get info about plugins.
495   // Uses the JSON interface for input/output.
496   void GetPluginsInfo(Browser* browser,
497                       DictionaryValue* args,
498                       IPC::Message* reply_message);
499 
500   // Enable a plugin.
501   // Uses the JSON interface for input/output.
502   void EnablePlugin(Browser* browser,
503                     DictionaryValue* args,
504                     IPC::Message* reply_message);
505 
506   // Disable a plugin.
507   // Uses the JSON interface for input/output.
508   void DisablePlugin(Browser* browser,
509                      DictionaryValue* args,
510                      IPC::Message* reply_message);
511 
512   // Get info about omnibox.
513   // Contains data about the matches (url, content, description)
514   // in the omnibox popup, the text in the omnibox.
515   // Uses the JSON interface for input/output.
516   void GetOmniboxInfo(Browser* browser,
517                       DictionaryValue* args,
518                       IPC::Message* reply_message);
519 
520   // Set text in the omnibox. This sets focus to the omnibox.
521   // Uses the JSON interface for input/output.
522   void SetOmniboxText(Browser* browser,
523                       DictionaryValue* args,
524                       IPC::Message* reply_message);
525 
526   // Move omnibox popup selection up or down.
527   // Uses the JSON interface for input/output.
528   void OmniboxMovePopupSelection(Browser* browser,
529                                  DictionaryValue* args,
530                                  IPC::Message* reply_message);
531 
532   // Accept the current string of text in the omnibox.
533   // This is equivalent to clicking or hiting enter on a popup selection.
534   // Blocks until the page loads.
535   // Uses the JSON interface for input/output.
536   void OmniboxAcceptInput(Browser* browser,
537                           DictionaryValue* args,
538                           IPC::Message* reply_message);
539 
540   // Generate dictionary info about instant tab.
541   // Uses the JSON interface for input/output.
542   void GetInstantInfo(Browser* browser,
543                       DictionaryValue* args,
544                       IPC::Message* reply_message);
545 
546   // Save the contents of a tab into a file.
547   // Uses the JSON interface for input/output.
548   void SaveTabContents(Browser* browser,
549                        DictionaryValue* args,
550                        IPC::Message* reply_message);
551 
552   // Import the given settings from the given browser.
553   // Uses the JSON interface for input/output.
554   void ImportSettings(Browser* browser,
555                       DictionaryValue* args,
556                       IPC::Message* reply_message);
557 
558   // Add a new entry to the password store based on the password information
559   // provided. This method can also be used to add a blacklisted site (which
560   // will never fill in the password).
561   // Uses the JSON interface for input/output.
562   void AddSavedPassword(Browser* browser,
563                         DictionaryValue* args,
564                         IPC::Message* reply_message);
565 
566   // Removes the password matching the information provided. This method can
567   // also be used to remove a blacklisted site.
568   // Uses the JSON interface for input/output.
569   void RemoveSavedPassword(Browser* browser,
570                            DictionaryValue* args,
571                            IPC::Message* reply_message);
572 
573   // Return the saved username/password combinations.
574   // Uses the JSON interface for input/output.
575   void GetSavedPasswords(Browser* browser,
576                          DictionaryValue* args,
577                          IPC::Message* reply_message);
578 
579   // Clear the specified browsing data. This call provides similar
580   // functionality to RemoveBrowsingData but is synchronous.
581   // Uses the JSON interface for input/output.
582   void ClearBrowsingData(Browser* browser,
583                          DictionaryValue* args,
584                          IPC::Message* reply_message);
585 
586   // Get info about blocked popups in a tab.
587   // Uses the JSON interface for input/output.
588   void GetBlockedPopupsInfo(Browser* browser,
589                             DictionaryValue* args,
590                             IPC::Message* reply_message);
591 
592   // Launch a blocked popup.
593   // Uses the JSON interface for input/output.
594   void UnblockAndLaunchBlockedPopup(Browser* browser,
595                                     DictionaryValue* args,
596                                     IPC::Message* reply_message);
597 
598   // Get info about theme.
599   // Uses the JSON interface for input/output.
600   void GetThemeInfo(Browser* browser,
601                     DictionaryValue* args,
602                     IPC::Message* reply_message);
603 
604   // Get info about all intalled extensions.
605   // Uses the JSON interface for input/output.
606   void GetExtensionsInfo(Browser* browser,
607                          DictionaryValue* args,
608                          IPC::Message* reply_message);
609 
610   // Uninstalls the extension with the given id.
611   // Uses the JSON interface for input/output.
612   void UninstallExtensionById(Browser* browser,
613                               DictionaryValue* args,
614                               IPC::Message* reply_message);
615 
616   // Responds to the Find request and returns the match count.
617   void FindInPage(Browser* browser,
618                   DictionaryValue* args,
619                   IPC::Message* reply_message);
620 
621   // Returns information about translation for a given tab. Includes
622   // information about the translate bar if it is showing.
623   void GetTranslateInfo(Browser* browser,
624                         DictionaryValue* args,
625                         IPC::Message* reply_message);
626 
627   // Takes the specified action on the translate bar.
628   // Uses the JSON interface for input/output.
629   void SelectTranslateOption(Browser* browser,
630                              DictionaryValue* args,
631                              IPC::Message* reply_message);
632 
633   // Get the profiles that are currently saved to the DB.
634   // Uses the JSON interface for input/output.
635   void GetAutofillProfile(Browser* browser,
636                           DictionaryValue* args,
637                           IPC::Message* reply_message);
638 
639   // Fill in an AutofillProfile with the given profile information.
640   // Uses the JSON interface for input/output.
641   void FillAutofillProfile(Browser* browser,
642                            DictionaryValue* args,
643                            IPC::Message* reply_message);
644 
645   // Signs in to sync using the given username and password.
646   // Uses the JSON interface for input/output.
647   void SignInToSync(Browser* browser,
648                     DictionaryValue* args,
649                     IPC::Message* reply_message);
650 
651   // Returns info about sync.
652   // Uses the JSON interface for input/output.
653   void GetSyncInfo(Browser* browser,
654                    DictionaryValue* args,
655                    IPC::Message* reply_message);
656 
657   // Waits for the ongoing sync cycle to complete.
658   // Uses the JSON interface for input/output.
659   void AwaitSyncCycleCompletion(Browser* browser,
660                                 DictionaryValue* args,
661                                 IPC::Message* reply_message);
662 
663   // Enables sync for one or more sync datatypes.
664   // Uses the JSON interface for input/output.
665   void EnableSyncForDatatypes(Browser* browser,
666                               DictionaryValue* args,
667                               IPC::Message* reply_message);
668 
669   // Disables sync for one or more sync datatypes.
670   // Uses the JSON interface for input/output.
671   void DisableSyncForDatatypes(Browser* browser,
672                                DictionaryValue* args,
673                                IPC::Message* reply_message);
674 
675   // Translate DictionaryValues of autofill profiles and credit cards to the
676   // data structure used in the browser.
677   // Args:
678   //   profiles/cards: the ListValue of profiles/credit cards to translate.
679   //   error_message: a pointer to the return string in case of error.
680   static std::vector<AutofillProfile> GetAutofillProfilesFromList(
681       const ListValue& profiles, std::string* error_message);
682   static std::vector<CreditCard> GetCreditCardsFromList(
683       const ListValue& cards, std::string* error_message);
684 
685   // The opposite of the above: translates from the internal data structure
686   // for profiles and credit cards to a ListValue of DictionaryValues. The
687   // caller owns the returned object.
688   static ListValue* GetListFromAutofillProfiles(
689       const std::vector<AutofillProfile*>& autofill_profiles);
690   static ListValue* GetListFromCreditCards(
691       const std::vector<CreditCard*>& credit_cards);
692 
693   // Return the map from the internal data representation to the string value
694   // of auto fill fields and credit card fields.
695   static std::map<AutofillFieldType, std::string>
696       GetAutofillFieldToStringMap();
697   static std::map<AutofillFieldType, std::string>
698       GetCreditCardFieldToStringMap();
699 
700   // Get a list of active HTML5 notifications.
701   // Uses the JSON interface for input/output.
702   void GetActiveNotifications(Browser* browser,
703                               DictionaryValue* args,
704                               IPC::Message* reply_message);
705 
706   // Close an active HTML5 notification.
707   // Uses the JSON interface for input/output.
708   void CloseNotification(Browser* browser,
709                          DictionaryValue* args,
710                          IPC::Message* reply_message);
711 
712   // Waits for the number of active HTML5 notifications to reach a given count.
713   // Uses the JSON interface for input/output.
714   void WaitForNotificationCount(Browser* browser,
715                                 DictionaryValue* args,
716                                 IPC::Message* reply_message);
717 
718   // Gets info about the elements in the NTP.
719   // Uses the JSON interface for input/output.
720   void GetNTPInfo(Browser* browser,
721                   DictionaryValue* args,
722                   IPC::Message* reply_message);
723 
724   // Moves a thumbnail in the NTP's Most Visited sites section to a different
725   // index.
726   // Uses the JSON interface for input/output.
727   void MoveNTPMostVisitedThumbnail(Browser* browser,
728                                    DictionaryValue* args,
729                                    IPC::Message* reply_message);
730 
731   // Removes a thumbnail from the NTP's Most Visited sites section.
732   // Uses the JSON interface for input/output.
733   void RemoveNTPMostVisitedThumbnail(Browser* browser,
734                                      DictionaryValue* args,
735                                      IPC::Message* reply_message);
736 
737   // Unpins a thumbnail in the NTP's Most Visited sites section.
738   // Uses the JSON interface for input/output.
739   void UnpinNTPMostVisitedThumbnail(Browser* browser,
740                                     DictionaryValue* args,
741                                     IPC::Message* reply_message);
742 
743   // Restores all thumbnails that have been removed (i.e., blacklisted) from the
744   // NTP's Most Visited sites section.
745   // Uses the JSON interface for input/output.
746   void RestoreAllNTPMostVisitedThumbnails(Browser* browser,
747                                           DictionaryValue* args,
748                                           IPC::Message* reply_message);
749 
750   // Kills the given renderer process and returns after the associated
751   // RenderProcessHost receives notification of its closing.
752   void KillRendererProcess(Browser* browser,
753                            DictionaryValue* args,
754                            IPC::Message* reply_message);
755 
756   // Populates the fields of the event parameters with what is found
757   // on the args one. If fails return false and puts the error message in
758   // the error parameter, else returns true.
759   bool BuildWebKeyEventFromArgs(DictionaryValue* args,
760                                 std::string* error,
761                                 NativeWebKeyboardEvent* event);
762 
763   // Determines whether each relevant section of the NTP is in thumbnail mode.
764   void GetNTPThumbnailMode(Browser* browser,
765                            DictionaryValue* args,
766                            IPC::Message* reply_message);
767 
768   // Puts or removes the specified section of the NTP into/from thumbnail mode.
769   // If the section is put into thumbnail mode, all other relevant sections are
770   // removed from thumbnail mode.
771   void SetNTPThumbnailMode(Browser* browser,
772                            DictionaryValue* args,
773                            IPC::Message* reply_message);
774 
775   // Determines whether each relevant section of the NTP is in menu mode.
776   void GetNTPMenuMode(Browser* browser,
777                       DictionaryValue* args,
778                       IPC::Message* reply_message);
779 
780   // Puts or removes the specified section of the NTP into/from menu mode.
781   void SetNTPMenuMode(Browser* browser,
782                       DictionaryValue* args,
783                       IPC::Message* reply_message);
784 
785   // Launches the specified app from the currently-selected tab.
786   void LaunchApp(Browser* browser,
787                  DictionaryValue* args,
788                  IPC::Message* reply_message);
789 
790   // Sets the launch type for the specified app.
791   void SetAppLaunchType(Browser* browser,
792                         DictionaryValue* args,
793                         IPC::Message* reply_message);
794 
795   // Waits for all tabs to stop loading.
796   void WaitForAllTabsToStopLoading(DictionaryValue* args,
797                                    IPC::Message* reply_message);
798 
799   // Gets the browser and tab index of the given tab. Uses the JSON interface.
800   // Either "tab_id" or "tab_handle" must be specified, but not both. "tab_id"
801   // refers to the ID from the |NavigationController|, while "tab_handle" is
802   // the handle number assigned by the automation system.
803   // Example:
804   //   input: { "tab_id": 1,     // optional
805   //            "tab_handle": 3  // optional
806   //          }
807   //   output: { "windex": 1, "tab_index": 5 }
808   void GetIndicesFromTab(DictionaryValue* args, IPC::Message* reply_message);
809 
810   // Navigates to the given URL. Uses the JSON interface.
811   // Example:
812   //   input: { "windex": 1,
813   //            "tab_index": 3,
814   //            "url": "http://www.google.com",
815   //            "navigation_count": 1  // number of navigations to wait for
816   //          }
817   //   output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS }
818   void NavigateToURL(DictionaryValue* args, IPC::Message* reply_message);
819 
820   // Executes javascript in the specified frame. Uses the JSON interface.
821   // Waits for a result from the |DOMAutomationController|. The javascript
822   // must send a string.
823   // Example:
824   //   input: { "windex": 1,
825   //            "tab_index": 1,
826   //            "frame_xpath": "//frames[1]",
827   //            "javascript":
828   //                "window.domAutomationController.send(window.name)",
829   //           }
830   //   output: { "result": "My Window Name" }
831   // This and some following methods have a suffix of JSON to distingush them
832   // from already existing methods which perform the same function, but use
833   // custom IPC messages instead of the JSON IPC message. These functions will
834   // eventually be replaced with the JSON ones and the JSON suffix will be
835   // dropped.
836   // TODO(kkania): Replace the non-JSON counterparts and drop the JSON suffix.
837   void ExecuteJavascriptJSON(
838       DictionaryValue* args, IPC::Message* reply_message);
839 
840   // Goes forward in the specified tab. Uses the JSON interface.
841   // Example:
842   //   input: { "windex": 1, "tab_index": 1 }
843   //   output: { "did_go_forward": true,                      // optional
844   //             "result": AUTOMATION_MSG_NAVIGATION_SUCCESS  // optional
845   //           }
846   void GoForward(DictionaryValue* args, IPC::Message* reply_message);
847 
848   // Goes back in the specified tab. Uses the JSON interface.
849   // Example:
850   //   input: { "windex": 1, "tab_index": 1 }
851   //   output: { "did_go_back": true,                         // optional
852   //             "result": AUTOMATION_MSG_NAVIGATION_SUCCESS  // optional
853   //           }
854   void GoBack(DictionaryValue* args, IPC::Message* reply_message);
855 
856   // Reload the specified tab. Uses the JSON interface.
857   // Example:
858   //   input: { "windex": 1, "tab_index": 1 }
859   //   output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS  // optional }
860   void ReloadJSON(DictionaryValue* args, IPC::Message* reply_message);
861 
862   // Get the current url of the specified tab. Uses the JSON interface.
863   // Example:
864   //   input: { "windex": 1, "tab_index": 1 }
865   //   output: { "url": "http://www.google.com" }
866   void GetTabURLJSON(DictionaryValue* args, IPC::Message* reply_message);
867 
868   // Get the current url of the specified tab. Uses the JSON interface.
869   // Example:
870   //   input: { "windex": 1, "tab_index": 1 }
871   //   output: { "title": "Google" }
872   void GetTabTitleJSON(DictionaryValue* args, IPC::Message* reply_message);
873 
874   // Captures the entire page of the the specified tab, including the
875   // non-visible portions of the page, and saves the PNG to a file.
876   // Example:
877   //   input: { "windex": 1, "tab_index": 1, "path":"/tmp/foo.png"}
878   //   output: none
879   void CaptureEntirePageJSON(
880       DictionaryValue* args, IPC::Message* reply_message);
881 
882   // Gets the cookies for the given URL. Uses the JSON interface.
883   // "expiry" refers to the amount of seconds since the Unix epoch. If omitted,
884   // the cookie is valid for the duration of the browser session.
885   // Example:
886   //   input: { "url": "http://www.google.com" }
887   //   output: { "cookies": [
888   //               {
889   //                 "name": "PREF",
890   //                 "value": "123101",
891   //                 "path": "/",
892   //                 "domain": "www.google.com",
893   //                 "secure": false,
894   //                 "expiry": 1401982012
895   //               }
896   //             ]
897   //           }
898   void GetCookiesJSON(DictionaryValue* args, IPC::Message* reply_message);
899 
900   // Deletes the cookie with the given name for the URL. Uses the JSON
901   // interface.
902   // Example:
903   //   input: {
904   //            "url": "http://www.google.com",
905   //            "name": "my_cookie"
906   //          }
907   //   output: none
908   void DeleteCookieJSON(DictionaryValue* args, IPC::Message* reply_message);
909 
910   // Sets a cookie for the given URL. Uses the JSON interface.
911   // "expiry" refers to the amount of seconds since the Unix epoch. If omitted,
912   // the cookie will be valid for the duration of the browser session.
913   // "domain" refers to the applicable domain for the cookie. Valid domain
914   // choices for the site "http://www.google.com" and resulting cookie
915   // applicability:
916   //   [.]www.google.com - applicable on www.google.com and its subdomains
917   //   [.]google.com - applicable on google.com and its subdomains
918   //   <none> - applicable only on www.google.com
919   //
920   // Example:
921   //   input: { "url": "http://www.google.com",
922   //            "cookie": {
923   //              "name": "PREF",
924   //              "value": "123101",
925   //              "path": "/",                  // optional
926   //              "domain": ".www.google.com",  // optional
927   //              "secure": false,              // optional
928   //              "expiry": 1401982012          // optional
929   //            }
930   //          }
931   //   output: none
932   void SetCookieJSON(DictionaryValue* args, IPC::Message* reply_message);
933 
934   // Gets the ID for every open tab. This ID is unique per session.
935   // Example:
936   //   input: none
937   //   output: { "ids": [4124, 213, 1] }
938   void GetTabIds(DictionaryValue* args, IPC::Message* reply_message);
939 
940   // Checks if the given tab ID refers to an open tab.
941   // Example:
942   //   input: { "id": 41 }
943   //   output: { "is_valid": false }
944   void IsTabIdValid(DictionaryValue* args, IPC::Message* reply_message);
945 
946   // Closes the specified tab.
947   // Example:
948   //   input: { "windex": 1, "tab_index": 1 }
949   //   output: none
950   void CloseTabJSON(DictionaryValue* args, IPC::Message* reply_message);
951 
952   // Sends the WebKit events for a mouse click at a given coordinate.
953   // Example:
954   //   input: { "windex": 1,
955   //            "tab_index": 1,
956   //            "button": automation::kLeftButton,
957   //            "x": 100,
958   //            "y": 100
959   //          }
960   //   output: none
961   void WebkitMouseClick(DictionaryValue* args,
962                         IPC::Message* message);
963 
964   // Sends the WebKit event for a mouse move to a given coordinate.
965   // Example:
966   //   input: { "windex": 1,
967   //            "tab_index": 1,
968   //            "x": 100,
969   //            "y": 100
970   //          }
971   //   output: none
972   void WebkitMouseMove(DictionaryValue* args,
973                        IPC::Message* message);
974 
975   // Sends the WebKit events for a mouse drag between two coordinates.
976   // Example:
977   //   input: { "windex": 1,
978   //            "tab_index": 1,
979   //            "start_x": 100,
980   //            "start_y": 100,
981   //            "end_x": 100,
982   //            "end_y": 100
983   //          }
984   //   output: none
985   void WebkitMouseDrag(DictionaryValue* args,
986                        IPC::Message* message);
987 
988   // Sends the WebKit key event with the specified properties.
989   // Example:
990   //   input: { "windex": 1,
991   //            "tab_index": 1,
992   //            "type": automation::kRawKeyDownType,
993   //            "nativeKeyCode": ui::VKEY_X,
994   //            "windowsKeyCode": ui::VKEY_X,
995   //            "unmodifiedText": "x",
996   //            "text": "X",
997   //            "modifiers": automation::kShiftKeyMask,
998   //            "isSystemKey": false
999   //          }
1000   //   output: none
1001   void SendWebkitKeyEvent(DictionaryValue* args,
1002                           IPC::Message* message);
1003 
1004   // Sends the key event from the OS level to the browser window,
1005   // allowing it to be preprocessed by some external application (ie. IME).
1006   // Will switch to the tab specified by tab_index before sending the event.
1007   // Example:
1008   //   input: { "windex": 1,
1009   //            "tab_index": 1,
1010   //            "keyCode": ui::VKEY_X,
1011   //            "modifiers": automation::kShiftKeyMask,
1012   //          }
1013   //   output: none
1014   void SendOSLevelKeyEventToTab(DictionaryValue* args,
1015                                 IPC::Message* message);
1016 
1017   // Method used as a Task that sends a success AutomationJSONReply.
1018   void SendSuccessReply(IPC::Message* reply_message);
1019 
1020   // Activates the given tab.
1021   // Example:
1022   //   input: { "windex": 1,
1023   //            "tab_index": 1,
1024   //          }
1025   //   output: none
1026   void ActivateTabJSON(DictionaryValue* args, IPC::Message* message);
1027 
1028   // Auto-updates installed extensions.
1029   // Uses the JSON interface for input/output.
1030   void UpdateExtensionsNow(DictionaryValue* args, IPC::Message* reply_message);
1031 
1032   // Gets the version of ChromeDriver automation supported by this server.
1033   // Example:
1034   //   input: none
1035   //   output: { "version": 1 }
1036   void GetChromeDriverAutomationVersion(DictionaryValue* args,
1037                                         IPC::Message* message);
1038 
1039 #if defined(OS_CHROMEOS)
1040   void GetLoginInfo(DictionaryValue* args, IPC::Message* reply_message);
1041 
1042   void LoginAsGuest(DictionaryValue* args, IPC::Message* reply_message);
1043 
1044   void Login(DictionaryValue* args, IPC::Message* reply_message);
1045 
1046   void LockScreen(DictionaryValue* args, IPC::Message* reply_message);
1047 
1048   void UnlockScreen(DictionaryValue* args, IPC::Message* reply_message);
1049 
1050   void SignoutInScreenLocker(DictionaryValue* args,
1051                              IPC::Message* reply_message);
1052 
1053   void GetBatteryInfo(DictionaryValue* args, IPC::Message* reply_message);
1054 
1055   void GetNetworkInfo(DictionaryValue* args, IPC::Message* reply_message);
1056 
1057   void NetworkScan(DictionaryValue* args, IPC::Message* reply_message);
1058 
1059   void GetProxySettings(DictionaryValue* args, IPC::Message* reply_message);
1060 
1061   void SetProxySettings(DictionaryValue* args, IPC::Message* reply_message);
1062 
1063   void ConnectToWifiNetwork(DictionaryValue* args, IPC::Message* reply_message);
1064 
1065   void ConnectToHiddenWifiNetwork(DictionaryValue* args,
1066                                   IPC::Message* reply_message);
1067 
1068   void DisconnectFromWifiNetwork(DictionaryValue* args,
1069                                  IPC::Message* reply_message);
1070 
1071   void GetUpdateInfo(DictionaryValue* args, IPC::Message* reply_message);
1072 
1073   void UpdateCheck(DictionaryValue* args, IPC::Message* reply_message);
1074 
1075   void SetReleaseTrack(DictionaryValue* args, IPC::Message* reply_message);
1076 #endif  // defined(OS_CHROMEOS)
1077 
1078   void WaitForTabCountToBecome(int browser_handle,
1079                                int target_tab_count,
1080                                IPC::Message* reply_message);
1081 
1082   void WaitForInfoBarCount(int tab_handle,
1083                            size_t target_count,
1084                            IPC::Message* reply_message);
1085 
1086   // Gets the current used encoding name of the page in the specified tab.
1087   void GetPageCurrentEncoding(int tab_handle, std::string* current_encoding);
1088 
1089   void ShutdownSessionService(int handle, bool* result);
1090 
1091   void SetContentSetting(int handle,
1092                          const std::string& host,
1093                          ContentSettingsType content_type,
1094                          ContentSetting setting,
1095                          bool* success);
1096 
1097   // Load all plug-ins on the page.
1098   void LoadBlockedPlugins(int tab_handle, bool* success);
1099 
1100   // Resets to the default theme.
1101   void ResetToDefaultTheme();
1102 
1103   void WaitForProcessLauncherThreadToGoIdle(IPC::Message* reply_message);
1104 
1105   // Gets the browser that contains the given tab.
1106   void GetParentBrowserOfTab(
1107       int tab_handle, int* browser_handle, bool* success);
1108 
1109   // Callback for history redirect queries.
1110   virtual void OnRedirectQueryComplete(
1111       HistoryService::Handle request_handle,
1112       GURL from_url,
1113       bool success,
1114       history::RedirectList* redirects);
1115 
1116   void OnRemoveProvider();  // Called via PostTask
1117 
1118 #if defined(TOOLKIT_VIEWS)
1119   // Keep track of whether a popup menu has been opened since the last time
1120   // that StartTrackingPopupMenus has been called.
1121   bool popup_menu_opened_;
1122 
1123   // A temporary object that receives a notification when a popup menu opens.
1124   PopupMenuWaiter* popup_menu_waiter_;
1125 #endif  // defined(TOOLKIT_VIEWS)
1126 
1127   // Used to wait on various browser sync events.
1128   scoped_ptr<ProfileSyncServiceHarness> sync_waiter_;
1129 
1130   // Handle for an in-process redirect query. We expect only one redirect query
1131   // at a time (we should have only one caller, and it will block while waiting
1132   // for the results) so there is only one handle. When non-0, indicates a
1133   // query in progress.
1134   HistoryService::Handle redirect_query_;
1135 
1136   NotificationRegistrar registrar_;
1137 
1138   // Used to enumerate browser profiles.
1139   scoped_refptr<ImporterList> importer_list_;
1140 
1141   // The stored data for the ImportSettings operation.
1142   ImportSettingsData import_settings_data_;
1143 
1144   DISALLOW_COPY_AND_ASSIGN(TestingAutomationProvider);
1145 };
1146 
1147 #endif  // CHROME_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_
1148