1// Copyright 2013 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 8#include <map> 9#include <string> 10#include <vector> 11 12#include "base/basictypes.h" 13#include "base/compiler_specific.h" 14#include "base/memory/scoped_ptr.h" 15#include "chrome/browser/automation/automation_event_observers.h" 16#include "chrome/browser/automation/automation_event_queue.h" 17#include "chrome/browser/automation/automation_provider.h" 18#include "chrome/browser/automation/automation_provider_json.h" 19#include "chrome/browser/history/history_service.h" 20#include "chrome/browser/ui/browser_list_observer.h" 21#include "content/public/browser/notification_registrar.h" 22#include "content/public/common/page_type.h" 23#include "content/public/common/security_style.h" 24#include "net/cert/cert_status_flags.h" 25#include "third_party/WebKit/public/web/WebInputEvent.h" 26 27#if defined(OS_CHROMEOS) 28#include "chromeos/dbus/power_manager/power_supply_properties.pb.h" 29#include "chromeos/dbus/power_manager_client.h" 30#endif 31 32class CreditCard; 33 34namespace base { 35class DictionaryValue; 36} 37 38namespace content { 39class RenderViewHost; 40struct NativeWebKeyboardEvent; 41struct WebPluginInfo; 42} 43 44namespace gfx { 45class Rect; 46} 47 48// This is an automation provider containing testing calls. 49class TestingAutomationProvider : public AutomationProvider, 50 public chrome::BrowserListObserver, 51#if defined(OS_CHROMEOS) 52 public chromeos::PowerManagerClient::Observer, 53#endif 54 public content::NotificationObserver { 55 public: 56 explicit TestingAutomationProvider(Profile* profile); 57 58 virtual IPC::Channel::Mode GetChannelMode(bool use_named_interface); 59 60 // IPC::Listener: 61 virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 62 virtual void OnChannelError() OVERRIDE; 63 64 private: 65 virtual ~TestingAutomationProvider(); 66 67 // chrome::BrowserListObserver: 68 virtual void OnBrowserAdded(Browser* browser) OVERRIDE; 69 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; 70 71 // content::NotificationObserver: 72 virtual void Observe(int type, 73 const content::NotificationSource& source, 74 const content::NotificationDetails& details) OVERRIDE; 75 76#if defined(OS_CHROMEOS) 77 // chromeos::PowerManagerClient::Observer: 78 virtual void PowerChanged(const power_manager::PowerSupplyProperties& proto); 79#endif 80 81 // IPC Message callbacks. 82 void CloseBrowser(int handle, IPC::Message* reply_message); 83 void ActivateTab(int handle, int at_index, int* status); 84 void AppendTab(int handle, const GURL& url, IPC::Message* reply_message); 85 void GetMachPortCount(int* port_count); 86 void GetActiveTabIndex(int handle, int* active_tab_index); 87 void CloseTab(int tab_handle, bool wait_until_closed, 88 IPC::Message* reply_message); 89 void GetCookies(const GURL& url, int handle, int* value_size, 90 std::string* value); 91 void NavigateToURLBlockUntilNavigationsComplete(int handle, const GURL& url, 92 int number_of_navigations, 93 IPC::Message* reply_message); 94 void NavigationAsync(int handle, const GURL& url, bool* status); 95 void Reload(int handle, IPC::Message* reply_message); 96 void GetRedirectsFrom(int tab_handle, 97 const GURL& source_url, 98 IPC::Message* reply_message); 99 void GetBrowserWindowCount(int* window_count); 100 void GetNormalBrowserWindowCount(int* window_count); 101 // Be aware that the browser window returned might be of non TYPE_TABBED 102 // or in incognito mode. 103 void GetBrowserWindow(int index, int* handle); 104 void ExecuteBrowserCommandAsync(int handle, int command, bool* success); 105 void ExecuteBrowserCommand(int handle, int command, 106 IPC::Message* reply_message); 107 void TerminateSession(int handle, bool* success); 108 void WindowGetViewBounds(int handle, int view_id, bool screen_coordinates, 109 bool* success, gfx::Rect* bounds); 110 void SetWindowBounds(int handle, const gfx::Rect& bounds, bool* result); 111 void SetWindowVisible(int handle, bool visible, bool* result); 112 void GetTabCount(int handle, int* tab_count); 113 void GetType(int handle, int* type_as_int); 114 void GetTab(int win_handle, int tab_index, int* tab_handle); 115 void GetTabTitle(int handle, int* title_string_size, std::wstring* title); 116 void GetTabIndex(int handle, int* tabstrip_index); 117 void GetTabURL(int handle, bool* success, GURL* url); 118 void ExecuteJavascript(int handle, 119 const std::wstring& frame_xpath, 120 const std::wstring& script, 121 IPC::Message* reply_message); 122 123 // If |show| is true, call Show() on the new window after creating it. 124 void OpenNewBrowserWindowOfType(int type, 125 bool show, 126 IPC::Message* reply_message); 127 128 // Retrieves a Browser from a Window and vice-versa. 129 void GetWindowForBrowser(int window_handle, bool* success, int* handle); 130 131 // Gets the duration in ms of the last event matching |event_name|. 132 // |duration_ms| is -1 if the event hasn't occurred yet. 133 void GetMetricEventDuration(const std::string& event_name, int* duration_ms); 134 135 // Brings the browser window to the front and activates it. 136 void BringBrowserToFront(int browser_handle, bool* success); 137 138 // Responds to requests to open the FindInPage window. 139 void HandleOpenFindInPageRequest(const IPC::Message& message, 140 int handle); 141 142 // Get the visibility state of the Find window. 143 void GetFindWindowVisibility(int handle, bool* visible); 144 145 // Wait for the bookmark model to load. 146 void WaitForBookmarkModelToLoad(int handle, IPC::Message* reply_message); 147 148 // Set |loaded| to true if the bookmark model has loaded, else false. 149 void BookmarkModelHasLoaded(int handle, bool* loaded); 150 151 // Get the visibility state of the Bookmark bar. 152 // Returns a status dictionary over the JSON interface. 153 void GetBookmarkBarStatus(base::DictionaryValue* args, 154 IPC::Message* reply_message); 155 156 // Get the bookmarks as a JSON string. 157 void GetBookmarksAsJSON(base::DictionaryValue* args, 158 IPC::Message* reply_message); 159 160 // Editing, modification, and removal of bookmarks through the JSON interface. 161 // Bookmarks are referenced by id. 162 void WaitForBookmarkModelToLoadJSON(base::DictionaryValue* args, 163 IPC::Message* reply_message); 164 void AddBookmark(base::DictionaryValue* args, 165 IPC::Message* reply_message); 166 void ReparentBookmark(base::DictionaryValue* args, 167 IPC::Message* reply_message); 168 void SetBookmarkTitle(base::DictionaryValue* args, 169 IPC::Message* reply_message); 170 void SetBookmarkURL(base::DictionaryValue* args, 171 IPC::Message* reply_message); 172 void RemoveBookmark(base::DictionaryValue* args, 173 IPC::Message* reply_message); 174 175 void WaitForBrowserWindowCountToBecome(int target_count, 176 IPC::Message* reply_message); 177 178 void GoBackBlockUntilNavigationsComplete(int handle, 179 int number_of_navigations, 180 IPC::Message* reply_message); 181 182 void GoForwardBlockUntilNavigationsComplete(int handle, 183 int number_of_navigations, 184 IPC::Message* reply_message); 185 186 // Generic pattern for pyautolib 187 // Uses the JSON interface for input/output. 188 void SendJSONRequestWithBrowserHandle(int handle, 189 const std::string& json_request, 190 IPC::Message* reply_message); 191 void SendJSONRequestWithBrowserIndex(int index, 192 const std::string& json_request, 193 IPC::Message* reply_message); 194 void SendJSONRequest(Browser* browser, 195 const std::string& json_request, 196 IPC::Message* reply_message); 197 198 // Method ptr for json handlers. 199 // Uses the JSON interface for input/output. 200 typedef void (TestingAutomationProvider::*JsonHandler)(base::DictionaryValue*, 201 IPC::Message*); 202 203 // Method ptr for json handlers that take a browser argument. 204 // Uses the JSON interface for input/output. 205 typedef void (TestingAutomationProvider::*BrowserJsonHandler)( 206 Browser* browser, 207 base::DictionaryValue*, 208 IPC::Message*); 209 210 // JSON interface helper functions. 211 static scoped_ptr<DictionaryValue> ParseJSONRequestCommand( 212 const std::string& json_request, 213 std::string* command, 214 std::string* error); 215 void BuildJSONHandlerMaps(); 216 217 // Set window dimensions. 218 // Uses the JSON interface for input/output. 219 void SetWindowDimensions(Browser* browser, 220 base::DictionaryValue* args, 221 IPC::Message* reply_message); 222 223 // Get info about infobars in the given WebContents object. 224 // This includes info about the type of infobars, the message text, 225 // buttons, etc. 226 // Caller owns the returned object. 227 ListValue* GetInfobarsInfo(content::WebContents* tc); 228 229 // Perform actions on an infobar like dismiss, accept, cancel. 230 // This method can handle dismiss for all infobars. It can also handle 231 // accept / cancel (where it will assume the infobar is a confirm infobar) and 232 // allow / deny (where it will assume the infobar is a media stream infobar). 233 // For the media stream infobar, passing 'allow' will just select the first 234 // video and audio device available to the bar, or report an error if there 235 // are no devices available. 236 // 237 // Uses the JSON interface for input/output. 238 void PerformActionOnInfobar(Browser* browser, 239 base::DictionaryValue* args, 240 IPC::Message* reply_message); 241 242 // Create a new profile and open a new browser window with this profile. Uses 243 // the JSON interface for input/output. 244 void OpenNewBrowserWindowWithNewProfile( 245 base::DictionaryValue* args, 246 IPC::Message* reply_message); 247 248 // Open a new browser window. 249 // Uses the JSON interface for input/output. 250 void OpenNewBrowserWindow(base::DictionaryValue* args, 251 IPC::Message* reply_message); 252 // Close a browser window. 253 // Uses the JSON interface for input/output. 254 void CloseBrowserWindow(base::DictionaryValue* args, 255 IPC::Message* reply_message); 256 257 // Get info about multi-profile users. 258 // Uses the JSON interface for input/output. 259 void GetMultiProfileInfo( 260 base::DictionaryValue* args, 261 IPC::Message* reply_message); 262 // Open a new browser window for an existing profile. 263 // Uses the JSON interface for input/output. 264 void OpenProfileWindow( 265 base::DictionaryValue* args, IPC::Message* reply_message); 266 267 // Get info about the chromium/chrome in use. 268 // This includes things like version, executable name, executable path. 269 // Uses the JSON interface for input/output. 270 void GetBrowserInfo(base::DictionaryValue* args, 271 IPC::Message* reply_message); 272 273 // Get the browser window count. Uses the JSON interface. 274 void GetBrowserWindowCountJSON(base::DictionaryValue* args, 275 IPC::Message* reply_message); 276 277 // Get info about browser-related processes that currently exist. 278 void GetProcessInfo(base::DictionaryValue* args, 279 IPC::Message* reply_message); 280 281 // Get info about the state of navigation in a given tab. 282 // This includes ssl info. 283 // Uses the JSON interface for input/output. 284 void GetNavigationInfo(Browser* browser, 285 base::DictionaryValue* args, 286 IPC::Message* reply_message); 287 288 // Get info about downloads. This includes only ones that have been 289 // registered by the history system. 290 // Uses the JSON interface for input/output. 291 void GetDownloadsInfo(Browser* browser, 292 base::DictionaryValue* args, 293 IPC::Message* reply_message); 294 295 // Wait for all downloads to complete. 296 // Uses the JSON interface for input/output. 297 void WaitForAllDownloadsToComplete(Browser* browser, 298 base::DictionaryValue* args, 299 IPC::Message* reply_message); 300 301 // Performs the given action on the specified download. 302 // Uses the JSON interface for input/output. 303 void PerformActionOnDownload(Browser* browser, 304 base::DictionaryValue* args, 305 IPC::Message* reply_message); 306 307 // Get info about history. 308 // Uses the JSON interface for input/output. 309 void GetHistoryInfo(Browser* browser, 310 base::DictionaryValue* args, 311 IPC::Message* reply_message); 312 313 // Invoke loading of template url model. 314 // Uses the JSON interface for input/output. 315 void LoadSearchEngineInfo(Browser* browser, 316 base::DictionaryValue* args, 317 IPC::Message* reply_message); 318 319 // Sets the visibility of the download shelf. Uses the JSON interface. 320 // Example: 321 // input: { "is_visible": true, 322 // "windex": 1, 323 // } 324 // output: none 325 void SetDownloadShelfVisibleJSON(base::DictionaryValue* args, 326 IPC::Message* reply_message); 327 328 // Gets the visibility of the download shelf. Uses the JSON interface. 329 // Example: 330 // input: { "windex": 1 } 331 // output: { "is_visible": true } 332 void IsDownloadShelfVisibleJSON(base::DictionaryValue* args, 333 IPC::Message* reply_message); 334 335 // Gets the download path of the given tab. Uses the JSON interface. 336 // Example: 337 // input: { "tab_index": 1, 338 // "windex": 1, 339 // } 340 // output: { "path": "/home/foobar/Downloads" } 341 void GetDownloadDirectoryJSON(base::DictionaryValue* args, 342 IPC::Message* reply_message); 343 344 // Get search engines list. 345 // Assumes that the profile's template url model is loaded. 346 // Uses the JSON interface for input/output. 347 void GetSearchEngineInfo(Browser* browser, 348 base::DictionaryValue* args, 349 IPC::Message* reply_message); 350 351 // Add or edit search engine. 352 // Assumes that the profile's template url model is loaded. 353 // Uses the JSON interface for input/output. 354 void AddOrEditSearchEngine(Browser* browser, 355 base::DictionaryValue* args, 356 IPC::Message* reply_message); 357 358 // Perform a given action on an existing search engine. 359 // Assumes that the profile's template url model is loaded. 360 // Uses the JSON interface for input/output. 361 void PerformActionOnSearchEngine(Browser* browser, 362 base::DictionaryValue* args, 363 IPC::Message* reply_message); 364 365 // Get info about preferences stored in Local State. 366 // Uses the JSON interface for input/output. 367 void GetLocalStatePrefsInfo(base::DictionaryValue* args, 368 IPC::Message* reply_message); 369 370 // Set local state prefs. 371 // Uses the JSON interface for input/output. 372 void SetLocalStatePrefs(base::DictionaryValue* args, 373 IPC::Message* reply_message); 374 375 // Get info about preferences. 376 // Uses the JSON interface for input/output. 377 void GetPrefsInfo(base::DictionaryValue* args, 378 IPC::Message* reply_message); 379 380 // Set prefs. 381 // Uses the JSON interface for input/output. 382 void SetPrefs(base::DictionaryValue* args, 383 IPC::Message* reply_message); 384 385 // Return load times of initial tabs. 386 // Uses the JSON interface for input/output. 387 // Only includes tabs from command line arguments or session restore. 388 // See declaration of InitialLoadObserver in automation_provider_observers.h 389 // for example response. 390 void GetInitialLoadTimes(Browser* browser, 391 base::DictionaryValue* args, 392 IPC::Message* reply_message); 393 394 // Get info about plugins. 395 // Uses the JSON interface for input/output. 396 void GetPluginsInfo(Browser* browser, 397 base::DictionaryValue* args, 398 IPC::Message* reply_message); 399 void GetPluginsInfoCallback(Browser* browser, 400 base::DictionaryValue* args, 401 IPC::Message* reply_message, 402 const std::vector<content::WebPluginInfo>& plugins); 403 404 // Enable a plugin. 405 // Uses the JSON interface for input/output. 406 void EnablePlugin(Browser* browser, 407 base::DictionaryValue* args, 408 IPC::Message* reply_message); 409 410 // Disable a plugin. 411 // Uses the JSON interface for input/output. 412 void DisablePlugin(Browser* browser, 413 base::DictionaryValue* args, 414 IPC::Message* reply_message); 415 416 // Get info about omnibox. 417 // Contains data about the matches (url, content, description) 418 // in the omnibox popup, the text in the omnibox. 419 // Uses the JSON interface for input/output. 420 void GetOmniboxInfo(Browser* browser, 421 base::DictionaryValue* args, 422 IPC::Message* reply_message); 423 424 // Set text in the omnibox. This sets focus to the omnibox. 425 // Uses the JSON interface for input/output. 426 void SetOmniboxText(Browser* browser, 427 base::DictionaryValue* args, 428 IPC::Message* reply_message); 429 430 // Move omnibox popup selection up or down. 431 // Uses the JSON interface for input/output. 432 void OmniboxMovePopupSelection(Browser* browser, 433 base::DictionaryValue* args, 434 IPC::Message* reply_message); 435 436 // Accept the current string of text in the omnibox. 437 // This is equivalent to clicking or hiting enter on a popup selection. 438 // Blocks until the page loads. 439 // Uses the JSON interface for input/output. 440 void OmniboxAcceptInput(Browser* browser, 441 base::DictionaryValue* args, 442 IPC::Message* reply_message); 443 444 // Save the contents of a tab into a file. 445 // Uses the JSON interface for input/output. 446 void SaveTabContents(Browser* browser, 447 base::DictionaryValue* args, 448 IPC::Message* reply_message); 449 450 // Add a new entry to the password store based on the password information 451 // provided. This method can also be used to add a blacklisted site (which 452 // will never fill in the password). 453 // Uses the JSON interface for input/output. 454 void AddSavedPassword(Browser* browser, 455 base::DictionaryValue* args, 456 IPC::Message* reply_message); 457 458 // Removes the password matching the information provided. This method can 459 // also be used to remove a blacklisted site. 460 // Uses the JSON interface for input/output. 461 void RemoveSavedPassword(Browser* browser, 462 base::DictionaryValue* args, 463 IPC::Message* reply_message); 464 465 // Return the saved username/password combinations. 466 // Uses the JSON interface for input/output. 467 void GetSavedPasswords(Browser* browser, 468 base::DictionaryValue* args, 469 IPC::Message* reply_message); 470 471 // Install the given unpacked/packed extension. 472 // Uses the JSON interface for input/output. 473 void InstallExtension(base::DictionaryValue* args, 474 IPC::Message* reply_message); 475 476 // Get info about all intalled extensions. 477 // Uses the JSON interface for input/output. 478 void GetExtensionsInfo(base::DictionaryValue* args, 479 IPC::Message* reply_message); 480 481 // Uninstalls the extension with the given id. 482 // Uses the JSON interface for input/output. 483 void UninstallExtensionById(base::DictionaryValue* args, 484 IPC::Message* reply_message); 485 486 // Set extension states: 487 // Enable/disable extension. 488 // Allow/disallow extension in incognito mode. 489 // Uses the JSON interface for input/output. 490 void SetExtensionStateById(base::DictionaryValue* args, 491 IPC::Message* reply_message); 492 493 // Trigger page action asynchronously in the active tab. 494 // Uses the JSON interface for input/output. 495 void TriggerPageActionById(base::DictionaryValue* args, 496 IPC::Message* reply_message); 497 498 // Trigger browser action asynchronously in the active tab. 499 // Uses the JSON interface for input/output. 500 void TriggerBrowserActionById(base::DictionaryValue* args, 501 IPC::Message* reply_message); 502 503 // Auto-updates installed extensions. 504 // Uses the JSON interface for input/output. 505 void UpdateExtensionsNow(base::DictionaryValue* args, 506 IPC::Message* reply_message); 507 508 // Overrides the current geoposition. 509 // Uses the JSON interface for input/output. 510 void OverrideGeoposition(base::DictionaryValue* args, 511 IPC::Message* reply_message); 512 513 // Responds to the Find request and returns the match count. 514 void FindInPage(Browser* browser, 515 base::DictionaryValue* args, 516 IPC::Message* reply_message); 517 518 // Opens the find request dialogue in the given browser. 519 // Example: 520 // input: { "windex": 1 } 521 // output: none 522 void OpenFindInPage(base::DictionaryValue* args, 523 IPC::Message* reply_message); 524 525 // Returns whether the find request dialogue is visible in the given browser. 526 // Example: 527 // input: { "windex": 1 } 528 // output: { "is_visible": true } 529 void IsFindInPageVisible(base::DictionaryValue* args, 530 IPC::Message* reply_message); 531 532 // Get ordered list of all active and queued HTML5 notifications. 533 // Uses the JSON interface for input/output. 534 void GetAllNotifications(Browser* browser, 535 base::DictionaryValue* args, 536 IPC::Message* reply_message); 537 538 // Close an active HTML5 notification. 539 // Uses the JSON interface for input/output. 540 void CloseNotification(Browser* browser, 541 base::DictionaryValue* args, 542 IPC::Message* reply_message); 543 544 // Waits for the number of active HTML5 notifications to reach a given count. 545 // Uses the JSON interface for input/output. 546 void WaitForNotificationCount(Browser* browser, 547 base::DictionaryValue* args, 548 IPC::Message* reply_message); 549 550 // Gets info about the elements in the NTP. 551 // Uses the JSON interface for input/output. 552 void GetNTPInfo(Browser* browser, 553 base::DictionaryValue* args, 554 IPC::Message* reply_message); 555 556 // Removes a thumbnail from the NTP's Most Visited sites section. 557 // Uses the JSON interface for input/output. 558 void RemoveNTPMostVisitedThumbnail(Browser* browser, 559 base::DictionaryValue* args, 560 IPC::Message* reply_message); 561 562 // Restores all thumbnails that have been removed (i.e., blacklisted) from the 563 // NTP's Most Visited sites section. 564 // Uses the JSON interface for input/output. 565 void RestoreAllNTPMostVisitedThumbnails(Browser* browser, 566 base::DictionaryValue* args, 567 IPC::Message* reply_message); 568 569 // Kills the given renderer process and returns after the associated 570 // RenderProcessHost receives notification of its closing. 571 void KillRendererProcess(Browser* browser, 572 base::DictionaryValue* args, 573 IPC::Message* reply_message); 574 575 // Populates the fields of the event parameter with what is found in the 576 // args parameter. Upon failure, returns false and puts the error message in 577 // the error parameter, otherwise returns true. 578 bool BuildWebKeyEventFromArgs(base::DictionaryValue* args, 579 std::string* error, 580 content::NativeWebKeyboardEvent* event); 581 582 // Launches the specified app from the currently-selected tab. 583 void LaunchApp(Browser* browser, 584 base::DictionaryValue* args, 585 IPC::Message* reply_message); 586 587 // Sets the launch type for the specified app. 588 void SetAppLaunchType(Browser* browser, 589 base::DictionaryValue* args, 590 IPC::Message* reply_message); 591 592 // Gets statistics about the v8 heap in a renderer process. 593 void GetV8HeapStats(Browser* browser, 594 base::DictionaryValue* args, 595 IPC::Message* reply_message); 596 597 // Gets the current FPS associated with a renderer process view. 598 void GetFPS(Browser* browser, 599 base::DictionaryValue* args, 600 IPC::Message* reply_message); 601 602 // Fullscreen and Mouse Lock hooks. They take no JSON parameters. 603 void IsFullscreenForBrowser(Browser* browser, 604 base::DictionaryValue* args, 605 IPC::Message* reply_message); 606 void IsFullscreenForTab(Browser* browser, 607 base::DictionaryValue* args, 608 IPC::Message* reply_message); 609 void IsMouseLocked(Browser* browser, 610 base::DictionaryValue* args, 611 IPC::Message* reply_message); 612 void IsMouseLockPermissionRequested(Browser* browser, 613 base::DictionaryValue* args, 614 IPC::Message* reply_message); 615 void IsFullscreenPermissionRequested(Browser* browser, 616 base::DictionaryValue* args, 617 IPC::Message* reply_message); 618 void IsFullscreenBubbleDisplayed(Browser* browser, 619 base::DictionaryValue* args, 620 IPC::Message* reply_message); 621 void IsFullscreenBubbleDisplayingButtons(Browser* browser, 622 base::DictionaryValue* args, 623 IPC::Message* reply_message); 624 void AcceptCurrentFullscreenOrMouseLockRequest(Browser* browser, 625 base::DictionaryValue* args, 626 IPC::Message* reply_message); 627 void DenyCurrentFullscreenOrMouseLockRequest(Browser* browser, 628 base::DictionaryValue* args, 629 IPC::Message* reply_message); 630 631 // Gets the browser and tab index of the given tab. Uses the JSON interface. 632 // Either "tab_id" or "tab_handle" must be specified, but not both. "tab_id" 633 // refers to the ID from the |NavigationController|, while "tab_handle" is 634 // the handle number assigned by the automation system. 635 // Example: 636 // input: { "tab_id": 1, // optional 637 // "tab_handle": 3 // optional 638 // } 639 // output: { "windex": 1, "tab_index": 5 } 640 void GetIndicesFromTab(base::DictionaryValue* args, 641 IPC::Message* reply_message); 642 643 // Executes a browser command on the given browser window. Does not wait for 644 // the command to complete. 645 // Example: 646 // input: { "accelerator": 1, 647 // "windex": 1 648 // } 649 void ExecuteBrowserCommandAsyncJSON(DictionaryValue* args, 650 IPC::Message* reply_message); 651 652 // Executes a browser command on the given browser window. Waits for the 653 // command to complete before returning. 654 // Example: 655 // input: { "accelerator": 1, 656 // "windex": 1 657 // } 658 void ExecuteBrowserCommandJSON(DictionaryValue* args, 659 IPC::Message* reply_message); 660 661 // Checks if a browser command is enabled on the given browser window. 662 // Example: 663 // input: { "accelerator": 1, 664 // "windex": 1 665 // } 666 // output: { "enabled": true } 667 void IsMenuCommandEnabledJSON(DictionaryValue* args, 668 IPC::Message* reply_message); 669 670 // Returns a dictionary of information about the given tab. 671 // Example: 672 // input: { "tab_index": 1, 673 // "windex": 1 674 // } 675 // output: { "title": "Hello World", 676 // "url": "http://foo.bar" } 677 void GetTabInfo(DictionaryValue* args, 678 IPC::Message* reply_message); 679 680 // Returns the tab count for the given browser window. 681 // Example: 682 // input: { "windex": 1 } 683 // output: { "tab_count": 5 } 684 void GetTabCountJSON(DictionaryValue* args, 685 IPC::Message* reply_message); 686 687 // Navigates to the given URL. Uses the JSON interface. 688 // The pair |windex| and |tab_index| or the single |auto_id| must be given 689 // to specify the tab. 690 // Example: 691 // input: { "windex": 1, 692 // "tab_index": 3, 693 // "auto_id": { "type": 0, "id": "awoein" }, 694 // "url": "http://www.google.com", 695 // "navigation_count": 1 // number of navigations to wait for 696 // } 697 // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS } 698 void NavigateToURL(base::DictionaryValue* args, IPC::Message* reply_message); 699 700 // Get the index of the currently active tab. Uses the JSON interface. 701 // The integer |windex| must be given to specify the browser window. 702 // Example: 703 // input: { "windex": 1 } 704 // output: { "tab_index": 3 } 705 void GetActiveTabIndexJSON(DictionaryValue* args, 706 IPC::Message* reply_message); 707 708 // Append a new tab. Uses the JSON interface. 709 // The integer |windex| must be given to specify the browser window. The tab 710 // is opened to |url| and blocks until the page loads. 711 // Example: 712 // input: { "windex": 1, 713 // "url": "http://google.com" 714 // } 715 // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS } 716 void AppendTabJSON(DictionaryValue* args, IPC::Message* reply_message); 717 718 // Waits until any pending navigation completes in the specified tab. 719 // The pair |windex| and |tab_index| or the single |auto_id| must be given 720 // to specify the tab. 721 // Example: 722 // input: { "windex": 1, 723 // "tab_index": 1, 724 // "auto_id": { "type": 0, "id": "awoein" }, 725 // } 726 // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS } 727 void WaitUntilNavigationCompletes( 728 base::DictionaryValue* args, IPC::Message* reply_message); 729 730 // Executes javascript in the specified frame. Uses the JSON interface. 731 // Waits for a result from the |DOMAutomationController|. The javascript 732 // must send a string. 733 // The pair |windex| and |tab_index| or the single |auto_id| must be given 734 // to specify the tab. 735 // Example: 736 // input: { "windex": 1, 737 // "tab_index": 1, 738 // "auto_id": { "type": 0, "id": "awoein" }, 739 // "frame_xpath": "//frames[1]", 740 // "javascript": 741 // "window.domAutomationController.send(window.name)", 742 // } 743 // output: { "result": "My Window Name" } 744 // This and some following methods have a suffix of JSON to distingush them 745 // from already existing methods which perform the same function, but use 746 // custom IPC messages instead of the JSON IPC message. These functions will 747 // eventually be replaced with the JSON ones and the JSON suffix will be 748 // dropped. 749 // TODO(kkania): Replace the non-JSON counterparts and drop the JSON suffix. 750 void ExecuteJavascriptJSON( 751 base::DictionaryValue* args, IPC::Message* reply_message); 752 753 // Creates a DomEventObserver associated with the AutomationEventQueue. 754 // Example: 755 // input: { "event_name": "login complete", 756 // "automation_id": 4444, 757 // "recurring": False 758 // } 759 // output: { "observer_id": 1 } 760 void AddDomEventObserver( 761 base::DictionaryValue* args, IPC::Message* reply_message); 762 763 // Removes an event observer associated with the AutomationEventQueue. 764 // Example: 765 // input: { "observer_id": 1 } 766 // output: none 767 void RemoveEventObserver( 768 base::DictionaryValue* args, IPC::Message* reply_message); 769 770 // Retrieves an event from the AutomationEventQueue. 771 // Blocks if 'blocking' is true, otherwise returns immediately. 772 // Example: 773 // input: { "observer_id": 1, 774 // "blocking": true, 775 // } 776 // output: { "type": "raised", 777 // "name": "login complete" 778 // "id": 1, 779 // } 780 void GetNextEvent(base::DictionaryValue* args, IPC::Message* reply_message); 781 782 // Removes all events and observers attached to the AutomationEventQueue. 783 // Example: 784 // input: none 785 // output: none 786 void ClearEventQueue( 787 base::DictionaryValue* args, IPC::Message* reply_message); 788 789 // Executes javascript in the specified frame of a render view. 790 // Uses the JSON interface. Waits for a result from the 791 // |DOMAutomationController|. The javascript must send a string. 792 // Example: 793 // input: { "view": { 794 // "render_process_id": 1, 795 // "render_view_id": 2, 796 // } 797 // "frame_xpath": "//frames[1]", 798 // "javascript": 799 // "window.domAutomationController.send(window.name)", 800 // } 801 // output: { "result": "My Window Name" } 802 void ExecuteJavascriptInRenderView( 803 base::DictionaryValue* args, IPC::Message* reply_message); 804 805 // Goes forward in the specified tab. Uses the JSON interface. 806 // The pair |windex| and |tab_index| or the single |auto_id| must be given 807 // to specify the tab. 808 // Example: 809 // input: { "windex": 1, 810 // "tab_index": 1, 811 // "auto_id": { "type": 0, "id": "awoein" } 812 // } 813 // output: { "did_go_forward": true, // optional 814 // "result": AUTOMATION_MSG_NAVIGATION_SUCCESS // optional 815 // } 816 void GoForward(base::DictionaryValue* args, IPC::Message* reply_message); 817 818 // Goes back in the specified tab. Uses the JSON interface. 819 // The pair |windex| and |tab_index| or the single |auto_id| must be given 820 // to specify the tab. 821 // Example: 822 // input: { "windex": 1, 823 // "tab_index": 1, 824 // "auto_id": { "type": 0, "id": "awoein" } 825 // } 826 // output: { "did_go_back": true, // optional 827 // "result": AUTOMATION_MSG_NAVIGATION_SUCCESS // optional 828 // } 829 void GoBack(base::DictionaryValue* args, IPC::Message* reply_message); 830 831 // Reload the specified tab. Uses the JSON interface. 832 // The pair |windex| and |tab_index| or the single |auto_id| must be given 833 // to specify the tab. 834 // Example: 835 // input: { "windex": 1, 836 // "tab_index": 1, 837 // "auto_id": { "type": 0, "id": "awoein" } 838 // } 839 // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS // optional } 840 void ReloadJSON(base::DictionaryValue* args, IPC::Message* reply_message); 841 842 // Gets the cookies for the given URL. Uses the JSON interface. 843 // "expiry" refers to the amount of seconds since the Unix epoch. If omitted, 844 // the cookie is valid for the duration of the browser session. 845 // Example: 846 // input: { "url": "http://www.google.com" } 847 // output: { "cookies": [ 848 // { 849 // "name": "PREF", 850 // "value": "123101", 851 // "path": "/", 852 // "domain": "www.google.com", 853 // "secure": false, 854 // "expiry": 1401982012 855 // } 856 // ] 857 // } 858 void GetCookiesJSON(base::DictionaryValue* args, IPC::Message* reply_message); 859 860 // Deletes the cookie with the given name for the URL. Uses the JSON 861 // interface. 862 // Example: 863 // input: { 864 // "url": "http://www.google.com", 865 // "name": "my_cookie" 866 // } 867 // output: none 868 void DeleteCookieJSON(base::DictionaryValue* args, 869 IPC::Message* reply_message); 870 871 // Sets a cookie for the given URL. Uses the JSON interface. 872 // "expiry" refers to the amount of seconds since the Unix epoch. If omitted, 873 // the cookie will be valid for the duration of the browser session. 874 // "domain" refers to the applicable domain for the cookie. Valid domain 875 // choices for the site "http://www.google.com" and resulting cookie 876 // applicability: 877 // [.]www.google.com - applicable on www.google.com and its subdomains 878 // [.]google.com - applicable on google.com and its subdomains 879 // <none> - applicable only on www.google.com 880 // 881 // Example: 882 // input: { "url": "http://www.google.com", 883 // "cookie": { 884 // "name": "PREF", 885 // "value": "123101", 886 // "path": "/", // optional 887 // "domain": ".www.google.com", // optional 888 // "secure": false, // optional 889 // "expiry": 1401982012 // optional 890 // } 891 // } 892 // output: none 893 void SetCookieJSON(base::DictionaryValue* args, IPC::Message* reply_message); 894 895 // Gets the cookies for the given URL in the context of a given browser 896 // window. Uses the JSON interface. 897 // Example: 898 // input: { "url": "http://www.google.com", 899 // "tab_index": 1, 900 // "windex": 1, 901 // } 902 // output: { "cookies": "foo=bar" } 903 void GetCookiesInBrowserContext(base::DictionaryValue* args, 904 IPC::Message* reply_message); 905 906 // Deletes the cookie with the given name for the URL in the context of a 907 // given browser window. Uses the JSON interface. 908 // Example: 909 // input: { "url": "http://www.google.com", 910 // "cookie_name": "my_cookie" 911 // "tab_index": 1, 912 // "windex": 1, 913 // } 914 // output: none 915 void DeleteCookieInBrowserContext(base::DictionaryValue* args, 916 IPC::Message* reply_message); 917 918 // Sets a cookie for the given URL in the context of a given browser window. 919 // Uses the JSON interface. 920 // 921 // Example: 922 // input: { "url": "http://www.google.com", 923 // "value": "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT", 924 // "tab_index": 1, 925 // "windex": 1, 926 // } 927 // output: none 928 void SetCookieInBrowserContext(base::DictionaryValue* args, 929 IPC::Message* reply_message); 930 931 // Gets the ID for every open tab. This ID is unique per session. 932 // Example: 933 // input: none 934 // output: { "ids": [213, 1] } 935 void GetTabIds(base::DictionaryValue* args, IPC::Message* reply_message); 936 937 // Gets info about all open views. Each view ID is unique per session. 938 // Example: 939 // input: none 940 // output: { "views": [ 941 // { 942 // "auto_id": { "type": 0, "id": "awoein" }, 943 // "extension_id": "askjeoias3" // optional 944 // } 945 // ] 946 // } 947 void GetViews(base::DictionaryValue* args, IPC::Message* reply_message); 948 949 // Checks if the given tab ID refers to an open tab. 950 // Example: 951 // input: { "id": 41 } 952 // output: { "is_valid": false } 953 void IsTabIdValid(base::DictionaryValue* args, IPC::Message* reply_message); 954 955 // Checks if the given automation ID refers to an actual object. 956 // Example: 957 // input: { "auto_id": { "type": 0, "id": "awoein" } } 958 // output: { "does_exist": false } 959 void DoesAutomationObjectExist( 960 base::DictionaryValue* args, IPC::Message* reply_message); 961 962 // Closes the specified tab. 963 // The pair |windex| and |tab_index| or the single |auto_id| must be given 964 // to specify the tab. 965 // Example: 966 // input: { "windex": 1, 967 // "tab_index": 1, 968 // "auto_id": { "type": 0, "id": "awoein" } 969 // } 970 // output: none 971 void CloseTabJSON(base::DictionaryValue* args, IPC::Message* reply_message); 972 973 // Sets the specified web view bounds. 974 // The single |auto_id| must be given to specify the view. 975 // This method currently is only supported for tabs. 976 // Example: 977 // input: { "auto_id": { "type": 0, "id": "awoein" }, 978 // "bounds": { 979 // "x": 100, 980 // "y": 200, 981 // "width": 500, 982 // "height": 800 983 // } 984 // } 985 // output: none 986 void SetViewBounds(base::DictionaryValue* args, IPC::Message* reply_message); 987 988 // Maximizes the web view. 989 // The single |auto_id| must be given to specify the view. 990 // This method currently is only supported for tabs. 991 // Example: 992 // input: { "auto_id": { "type": 0, "id": "awoein" } } 993 // output: none 994 void MaximizeView(base::DictionaryValue* args, IPC::Message* reply_message); 995 996 // Sends the WebKit events for a mouse click at a given coordinate. 997 // The pair |windex| and |tab_index| or the single |auto_id| must be given 998 // to specify the render view. 999 // Example: 1000 // input: { "windex": 1, 1001 // "tab_index": 1, 1002 // "auto_id": { "type": 0, "id": "awoein" }, 1003 // "button": automation::kLeftButton, 1004 // "x": 100, 1005 // "y": 100 1006 // } 1007 // output: none 1008 void WebkitMouseClick(base::DictionaryValue* args, 1009 IPC::Message* message); 1010 1011 // Sends the WebKit event for a mouse move to a given coordinate. 1012 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1013 // to specify the render view. 1014 // Example: 1015 // input: { "windex": 1, 1016 // "tab_index": 1, 1017 // "auto_id": { "type": 0, "id": "awoein" }, 1018 // "x": 100, 1019 // "y": 100 1020 // } 1021 // output: none 1022 void WebkitMouseMove(base::DictionaryValue* args, 1023 IPC::Message* message); 1024 1025 // Sends the WebKit events for a mouse drag between two coordinates. 1026 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1027 // to specify the render view. 1028 // Example: 1029 // input: { "windex": 1, 1030 // "tab_index": 1, 1031 // "auto_id": { "type": 0, "id": "awoein" }, 1032 // "start_x": 100, 1033 // "start_y": 100, 1034 // "end_x": 100, 1035 // "end_y": 100 1036 // } 1037 // output: none 1038 void WebkitMouseDrag(base::DictionaryValue* args, 1039 IPC::Message* message); 1040 1041 // Sends the WebKit events for a mouse button down at a given coordinate. 1042 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1043 // to specify the render view. 1044 // Example: 1045 // input: { "windex": 1, 1046 // "tab_index": 1, 1047 // "auto_id": { "type": 0, "id": "awoein" }, 1048 // "x": 100, 1049 // "y": 100 1050 // } 1051 // output: none 1052 void WebkitMouseButtonDown(base::DictionaryValue* args, 1053 IPC::Message* message); 1054 1055 // Sends the WebKit events for a mouse button up at a given coordinate. 1056 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1057 // to specify the render view. 1058 // Example: 1059 // input: { "windex": 1, 1060 // "tab_index": 1, 1061 // "auto_id": { "type": 0, "id": "awoein" }, 1062 // "x": 100, 1063 // "y": 100 1064 // } 1065 // output: none 1066 void WebkitMouseButtonUp(base::DictionaryValue* args, 1067 IPC::Message* message); 1068 1069 // Sends the WebKit events for a mouse double click at a given coordinate. 1070 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1071 // to specify the render view. 1072 // Example: 1073 // input: { "windex": 1, 1074 // "tab_index": 1, 1075 // "auto_id": { "type": 0, "id": "awoein" }, 1076 // "x": 100, 1077 // "y": 100 1078 // } 1079 // output: none 1080 void WebkitMouseDoubleClick(base::DictionaryValue* args, 1081 IPC::Message* message); 1082 1083 // Drag and drop file paths at a given coordinate. 1084 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1085 // to specify the render view. 1086 // Example: 1087 // input: { "windex": 1, 1088 // "tab_index": 1, 1089 // "auto_id": { "type": 0, "id": "awoein" }, 1090 // "x": 100, 1091 // "y": 100, 1092 // "paths": [ 1093 // "/tmp/file.txt" 1094 // ], 1095 // } 1096 // output: none 1097 void DragAndDropFilePaths(base::DictionaryValue* args, 1098 IPC::Message* message); 1099 1100 // Sends the WebKit key event with the specified properties. 1101 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1102 // to specify the render view. 1103 // Example: 1104 // input: { "windex": 1, 1105 // "tab_index": 1, 1106 // "auto_id": { "type": 0, "id": "awoein" }, 1107 // "type": automation::kRawKeyDownType, 1108 // "nativeKeyCode": ui::VKEY_X, 1109 // "windowsKeyCode": ui::VKEY_X, 1110 // "unmodifiedText": "x", 1111 // "text": "X", 1112 // "modifiers": automation::kShiftKeyMask, 1113 // "isSystemKey": false 1114 // } 1115 // output: none 1116 void SendWebkitKeyEvent(base::DictionaryValue* args, 1117 IPC::Message* message); 1118 1119 // Gets the active JavaScript modal dialog's message. 1120 // Example: 1121 // input: none 1122 // output: { "message": "This is an alert!" } 1123 void GetAppModalDialogMessage( 1124 base::DictionaryValue* args, IPC::Message* reply_message); 1125 1126 // Accepts or dismisses the active JavaScript modal dialog. If optional 1127 // prompt text is given, it will be used as the result of the prompt dialog. 1128 // Example: 1129 // input: { "accept": true, 1130 // "prompt_text": "hello" // optional 1131 // } 1132 // output: none 1133 void AcceptOrDismissAppModalDialog( 1134 base::DictionaryValue* args, IPC::Message* reply_message); 1135 1136 // Activates the given tab. 1137 // The pair |windex| and |tab_index| or the single |auto_id| must be given 1138 // to specify the tab. 1139 // Example: 1140 // input: { "windex": 1, 1141 // "tab_index": 1, 1142 // "auto_id": { "type": 0, "id": "awoein" } 1143 // } 1144 // output: none 1145 void ActivateTabJSON(base::DictionaryValue* args, IPC::Message* message); 1146 1147 // Blocks until the given tab is restored. 1148 // Uses the JSON interface. 1149 void WaitForTabToBeRestored(DictionaryValue* args, 1150 IPC::Message* reply_message); 1151 1152 // Simulates an action on the SSL blocking page at the specified tab. 1153 // If |proceed| is true, it is equivalent to the user pressing the 1154 // 'Proceed' button, if false the 'Get me out of there button'. 1155 // Note that this fails if the tab is not displaying a SSL blocking page. 1156 // Uses the JSON interface. 1157 // Example: 1158 // input: { "windex": 1, 1159 // "tab_index": 1, 1160 // "proceed": true 1161 // } 1162 // output: none 1163 void ActionOnSSLBlockingPage(DictionaryValue* args, 1164 IPC::Message* reply_message); 1165 1166 // Gets the security state for the given tab. Uses the JSON interface. 1167 // Example: 1168 // input: { "windex": 1, 1169 // "tab_index": 1, 1170 // } 1171 // output: { "security_style": SECURITY_STYLE_AUTHENTICATED, 1172 // "ssl_cert_status": 3, // bitmask of status flags 1173 // "insecure_content_status": 1, // bitmask of ContentStatusFlags 1174 // } 1175 void GetSecurityState(DictionaryValue* args, 1176 IPC::Message* reply_message); 1177 1178 // Brings the given brower's window to the front. 1179 // Example: 1180 // input: { "windex": 1 } 1181 // output: none 1182 void BringBrowserToFrontJSON(base::DictionaryValue* args, 1183 IPC::Message* message); 1184 1185 // Gets the version of ChromeDriver automation supported by this server. 1186 // Example: 1187 // input: none 1188 // output: { "version": 1 } 1189 void GetChromeDriverAutomationVersion(base::DictionaryValue* args, 1190 IPC::Message* message); 1191 1192 // Determines whether the extension page action is visible in the given tab. 1193 // Example: 1194 // input: { "auto_id": { "type": 0, "id": "awoein" }, 1195 // "extension_id": "byzaaoiea", 1196 // } 1197 // output: none 1198 void IsPageActionVisible(base::DictionaryValue* args, 1199 IPC::Message* reply_message); 1200 1201 // Creates a new |TestingAutomationProvider| that opens a server channel 1202 // for the given |channel_id|. 1203 // The server channel will be available for connection when this returns. 1204 // Example: 1205 // input: { "channel_id": "testChannel123" } 1206 void CreateNewAutomationProvider(base::DictionaryValue* args, 1207 IPC::Message* reply_message); 1208 1209 // Triggers a policy update on the platform and cloud providers, if they 1210 // exist. Returns after the update notifications are received. 1211 // Example: 1212 // input: none 1213 // output: none 1214 void RefreshPolicies(base::DictionaryValue* args, 1215 IPC::Message* reply_message); 1216 1217 // Simulates a memory bug (reference an array out of bounds) to cause Address 1218 // Sanitizer (if it was built it) to catch the bug and abort the process. 1219 // Example: 1220 // input: none 1221 // output: none 1222 void SimulateAsanMemoryBug(base::DictionaryValue* args, 1223 IPC::Message* reply_message); 1224 1225#if defined(OS_CHROMEOS) 1226 // OOBE wizard. 1227 1228 // Accepts the network screen and continues to EULA. 1229 // Example: 1230 // input: none 1231 // ouput: { "next_screen": "eula" } 1232 void AcceptOOBENetworkScreen(base::DictionaryValue* args, 1233 IPC::Message* reply_message); 1234 1235 // Accepts or declines EULA, moving forward or back from EULA screen. 1236 // Example: 1237 // input: { "accepted": true, "usage_stats_reporting": false } 1238 // output: { "next_screen": "update" } 1239 void AcceptOOBEEula(base::DictionaryValue* args, IPC::Message* reply_message); 1240 1241 // Forces the ongoing update to cancel and proceed to the login screen. 1242 // Example: 1243 // input: none 1244 // output: { "next_screen": "login" } 1245 void CancelOOBEUpdate(base::DictionaryValue* args, 1246 IPC::Message* reply_message); 1247 1248 // Chooses user image on the image picker screen and starts browser session. 1249 // Example: 1250 // input: { "image": "profile" } - Google profile image 1251 // input: { "image": 2 } - default image number 2 (0-based) 1252 // output: { "next_screen": "session" } 1253 void PickUserImage(base::DictionaryValue* args, IPC::Message* reply_message); 1254 1255 // Skips OOBE to login step. Can be called when already at login screen, 1256 // in which case does nothing and sends return value immediately. 1257 // Example: 1258 // input: { "skip_image_selection": true } 1259 // output: { "next_screen": "login" } 1260 void SkipToLogin(DictionaryValue* args, IPC::Message* reply_message); 1261 1262 // Returns info about the current OOBE screen. 1263 // Example: 1264 // input: none 1265 // output: { "screen_name": "network" } 1266 // output: none (when already logged in) 1267 void GetOOBEScreenInfo(DictionaryValue* args, IPC::Message* reply_message); 1268 1269 // Login / Logout. 1270 void GetLoginInfo(base::DictionaryValue* args, IPC::Message* reply_message); 1271 1272 void ShowCreateAccountUI(base::DictionaryValue* args, 1273 IPC::Message* reply_message); 1274 1275 void LoginAsGuest(base::DictionaryValue* args, IPC::Message* reply_message); 1276 1277 // Submits the Chrome OS login form. Watch for the login to complete using 1278 // the AddLoginObserver and GetNextEvent commands. 1279 // Example: 1280 // input: { "username": "user@gmail.com", 1281 // "password": "fakepassword", 1282 // } 1283 void SubmitLoginForm(base::DictionaryValue* args, 1284 IPC::Message* reply_message); 1285 1286 void AddLoginEventObserver(DictionaryValue* args, 1287 IPC::Message* reply_message); 1288 1289 // Executes javascript in the specified frame in the OOBE WebUI on chromeos. 1290 // Waits for a result from the |DOMAutomationController|. The javascript must 1291 // send a string. Must be run before a user has logged in. 1292 // Example: 1293 // input: { "frame_xpath": "//frames[1]", 1294 // "javascript": 1295 // "window.domAutomationController.send(window.name)", 1296 // } 1297 // output: { "result": "My Window Name" } 1298 void ExecuteJavascriptInOOBEWebUI( 1299 base::DictionaryValue* args, IPC::Message* reply_message); 1300 1301 void SignOut(base::DictionaryValue* args, IPC::Message* reply_message); 1302 1303 // Screen locker. 1304 void LockScreen(base::DictionaryValue* args, IPC::Message* reply_message); 1305 1306 void UnlockScreen(base::DictionaryValue* args, IPC::Message* reply_message); 1307 1308 void SignoutInScreenLocker(base::DictionaryValue* args, 1309 IPC::Message* reply_message); 1310 1311 // Battery. 1312 void GetBatteryInfo(base::DictionaryValue* args, IPC::Message* reply_message); 1313 1314 // Network. 1315 void GetNetworkInfo(base::DictionaryValue* args, IPC::Message* reply_message); 1316 1317 void NetworkScan(base::DictionaryValue* args, IPC::Message* reply_message); 1318 1319 void ToggleNetworkDevice(base::DictionaryValue* args, 1320 IPC::Message* reply_message); 1321 1322 void SetProxySettings(base::DictionaryValue* args, 1323 IPC::Message* reply_message); 1324 1325 void SetSharedProxies(base::DictionaryValue* args, 1326 IPC::Message* reply_message); 1327 1328 void ConnectToCellularNetwork(base::DictionaryValue* args, 1329 IPC::Message* reply_message); 1330 1331 void DisconnectFromCellularNetwork(base::DictionaryValue* args, 1332 IPC::Message* reply_message); 1333 1334 void ConnectToWifiNetwork(base::DictionaryValue* args, 1335 IPC::Message* reply_message); 1336 1337 void ConnectToHiddenWifiNetwork(base::DictionaryValue* args, 1338 IPC::Message* reply_message); 1339 1340 void DisconnectFromWifiNetwork(base::DictionaryValue* args, 1341 IPC::Message* reply_message); 1342 1343 void ForgetWifiNetwork(DictionaryValue* args, IPC::Message* reply_message); 1344 1345 // VPN. 1346 void AddPrivateNetwork(DictionaryValue* args, IPC::Message* reply_message); 1347 1348 void GetPrivateNetworkInfo(base::DictionaryValue* args, 1349 IPC::Message* reply_message); 1350 1351 void ConnectToPrivateNetwork(base::DictionaryValue* args, 1352 IPC::Message* reply_message); 1353 1354 void DisconnectFromPrivateNetwork(base::DictionaryValue* args, 1355 IPC::Message* reply_message); 1356 1357 // Accessibility. 1358 void EnableSpokenFeedback(DictionaryValue* args, IPC::Message* reply_message); 1359 1360 void IsSpokenFeedbackEnabled(DictionaryValue* args, 1361 IPC::Message* reply_message); 1362 1363 // Time. 1364 void GetTimeInfo(Browser* browser, base::DictionaryValue* args, 1365 IPC::Message* reply_message); 1366 1367 void GetTimeInfo(base::DictionaryValue* args, IPC::Message* reply_message); 1368 1369 void SetTimezone(base::DictionaryValue* args, IPC::Message* reply_message); 1370 1371 void UpdateCheck(base::DictionaryValue* args, IPC::Message* reply_message); 1372 1373 // Volume. 1374 void GetVolumeInfo(base::DictionaryValue* args, IPC::Message* reply_message); 1375 1376 void SetVolume(base::DictionaryValue* args, IPC::Message* reply_message); 1377 1378 void SetMute(base::DictionaryValue* args, IPC::Message* reply_message); 1379 1380 void CaptureProfilePhoto(Browser* browser, 1381 DictionaryValue* args, 1382 IPC::Message* reply_message); 1383 1384 // Html terminal. 1385 void OpenCrosh(base::DictionaryValue* args, IPC::Message* reply_message); 1386 1387 void AddChromeosObservers(); 1388 void RemoveChromeosObservers(); 1389 1390#endif // defined(OS_CHROMEOS) 1391 1392 void WaitForTabCountToBecome(int browser_handle, 1393 int target_tab_count, 1394 IPC::Message* reply_message); 1395 1396 void WaitForInfoBarCount(int tab_handle, 1397 size_t target_count, 1398 IPC::Message* reply_message); 1399 1400 void WaitForProcessLauncherThreadToGoIdle(IPC::Message* reply_message); 1401 1402 void OnRemoveProvider(); // Called via PostTask 1403 1404 // Execute Javascript in the context of a specific render view. 1405 void ExecuteJavascriptInRenderViewFrame( 1406 const string16& frame_xpath, const string16& script, 1407 IPC::Message* reply_message, content::RenderViewHost* render_view_host); 1408 1409 // Selects the given |tab| if not selected already. 1410 void EnsureTabSelected(Browser* browser, content::WebContents* tab); 1411 1412#if defined(OS_CHROMEOS) 1413 power_manager::PowerSupplyProperties power_supply_properties_; 1414#endif // defined(OS_CHROMEOS) 1415 1416 std::map<std::string, JsonHandler> handler_map_; 1417 std::map<std::string, BrowserJsonHandler> browser_handler_map_; 1418 1419 content::NotificationRegistrar registrar_; 1420 1421 // The automation event observer queue. It is lazily created when an observer 1422 // is added to avoid overhead when not needed. 1423 scoped_ptr<AutomationEventQueue> automation_event_queue_; 1424 1425 // List of commands which just finish synchronously and don't require 1426 // setting up an observer. 1427 static const int kSynchronousCommands[]; 1428 1429 DISALLOW_COPY_AND_ASSIGN(TestingAutomationProvider); 1430}; 1431 1432#endif // CHROME_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_ 1433