// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_ #define CHROME_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_ #include #include #include #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/automation/automation_event_observers.h" #include "chrome/browser/automation/automation_event_queue.h" #include "chrome/browser/automation/automation_provider.h" #include "chrome/browser/automation/automation_provider_json.h" #include "chrome/browser/history/history.h" #include "chrome/browser/importer/importer_list_observer.h" #include "chrome/browser/sync/profile_sync_service_harness.h" #include "chrome/browser/ui/browser_list_observer.h" #include "content/public/browser/notification_registrar.h" #include "content/public/common/page_type.h" #include "content/public/common/security_style.h" #include "net/base/cert_status_flags.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" #if defined(OS_CHROMEOS) // TODO(sque): move to a ChromeOS-specific class. See crosbug.com/22081. class PowerManagerClientObserverForTesting; #endif // defined(OS_CHROMEOS) class CreditCard; class ImporterList; namespace base { class DictionaryValue; } namespace content { class RenderViewHost; struct NativeWebKeyboardEvent; } namespace gfx { class Rect; } namespace webkit { struct WebPluginInfo; } // This is an automation provider containing testing calls. class TestingAutomationProvider : public AutomationProvider, public chrome::BrowserListObserver, public importer::ImporterListObserver, public content::NotificationObserver { public: explicit TestingAutomationProvider(Profile* profile); virtual IPC::Channel::Mode GetChannelMode(bool use_named_interface); // IPC::Listener: virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; virtual void OnChannelError() OVERRIDE; private: // Storage for ImportSettings() to resume operations after a callback. struct ImportSettingsData { string16 browser_name; int import_items; bool first_run; Browser* browser; IPC::Message* reply_message; }; virtual ~TestingAutomationProvider(); // chrome::BrowserListObserver: virtual void OnBrowserAdded(Browser* browser) OVERRIDE; virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; // importer::ImporterListObserver: virtual void OnSourceProfilesLoaded() OVERRIDE; // content::NotificationObserver: virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; // IPC Message callbacks. void CloseBrowser(int handle, IPC::Message* reply_message); void ActivateTab(int handle, int at_index, int* status); void AppendTab(int handle, const GURL& url, IPC::Message* reply_message); void GetMachPortCount(int* port_count); void GetActiveTabIndex(int handle, int* active_tab_index); void CloseTab(int tab_handle, bool wait_until_closed, IPC::Message* reply_message); void GetCookies(const GURL& url, int handle, int* value_size, std::string* value); void NavigateToURLBlockUntilNavigationsComplete(int handle, const GURL& url, int number_of_navigations, IPC::Message* reply_message); void NavigationAsync(int handle, const GURL& url, bool* status); void Reload(int handle, IPC::Message* reply_message); void GetRedirectsFrom(int tab_handle, const GURL& source_url, IPC::Message* reply_message); void GetBrowserWindowCount(int* window_count); void GetNormalBrowserWindowCount(int* window_count); // Be aware that the browser window returned might be of non TYPE_TABBED // or in incognito mode. void GetBrowserWindow(int index, int* handle); void ExecuteBrowserCommandAsync(int handle, int command, bool* success); void ExecuteBrowserCommand(int handle, int command, IPC::Message* reply_message); void TerminateSession(int handle, bool* success); void WindowGetViewBounds(int handle, int view_id, bool screen_coordinates, bool* success, gfx::Rect* bounds); void SetWindowBounds(int handle, const gfx::Rect& bounds, bool* result); void SetWindowVisible(int handle, bool visible, bool* result); void WindowSimulateMouseMove(const IPC::Message& message, int handle, const gfx::Point& location); void WindowSimulateKeyPress(const IPC::Message& message, int handle, int key, int flags); void GetTabCount(int handle, int* tab_count); void GetType(int handle, int* type_as_int); void GetTab(int win_handle, int tab_index, int* tab_handle); void GetTabTitle(int handle, int* title_string_size, std::wstring* title); void GetTabIndex(int handle, int* tabstrip_index); void GetTabURL(int handle, bool* success, GURL* url); void ExecuteJavascript(int handle, const std::wstring& frame_xpath, const std::wstring& script, IPC::Message* reply_message); // If |show| is true, call Show() on the new window after creating it. void OpenNewBrowserWindowOfType(int type, bool show, IPC::Message* reply_message); // Retrieves a Browser from a Window and vice-versa. void GetWindowForBrowser(int window_handle, bool* success, int* handle); // Gets the duration in ms of the last event matching |event_name|. // |duration_ms| is -1 if the event hasn't occurred yet. void GetMetricEventDuration(const std::string& event_name, int* duration_ms); // Brings the browser window to the front and activates it. void BringBrowserToFront(int browser_handle, bool* success); // Responds to requests to open the FindInPage window. void HandleOpenFindInPageRequest(const IPC::Message& message, int handle); // Get the visibility state of the Find window. void GetFindWindowVisibility(int handle, bool* visible); // Wait for the bookmark model to load. void WaitForBookmarkModelToLoad(int handle, IPC::Message* reply_message); // Set |loaded| to true if the bookmark model has loaded, else false. void BookmarkModelHasLoaded(int handle, bool* loaded); // Get the visibility state of the Bookmark bar. // Returns a status dictionary over the JSON interface. void GetBookmarkBarStatus(base::DictionaryValue* args, IPC::Message* reply_message); // Get the bookmarks as a JSON string. void GetBookmarksAsJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Editing, modification, and removal of bookmarks through the JSON interface. // Bookmarks are referenced by id. void WaitForBookmarkModelToLoadJSON(base::DictionaryValue* args, IPC::Message* reply_message); void AddBookmark(base::DictionaryValue* args, IPC::Message* reply_message); void ReparentBookmark(base::DictionaryValue* args, IPC::Message* reply_message); void SetBookmarkTitle(base::DictionaryValue* args, IPC::Message* reply_message); void SetBookmarkURL(base::DictionaryValue* args, IPC::Message* reply_message); void RemoveBookmark(base::DictionaryValue* args, IPC::Message* reply_message); void WaitForBrowserWindowCountToBecome(int target_count, IPC::Message* reply_message); void GoBackBlockUntilNavigationsComplete(int handle, int number_of_navigations, IPC::Message* reply_message); void GoForwardBlockUntilNavigationsComplete(int handle, int number_of_navigations, IPC::Message* reply_message); // Generic pattern for pyautolib // Uses the JSON interface for input/output. void SendJSONRequestWithBrowserHandle(int handle, const std::string& json_request, IPC::Message* reply_message); void SendJSONRequestWithBrowserIndex(int index, const std::string& json_request, IPC::Message* reply_message); void SendJSONRequest(Browser* browser, const std::string& json_request, IPC::Message* reply_message); // Method ptr for json handlers. // Uses the JSON interface for input/output. typedef void (TestingAutomationProvider::*JsonHandler)(base::DictionaryValue*, IPC::Message*); // Method ptr for json handlers that take a browser argument. // Uses the JSON interface for input/output. typedef void (TestingAutomationProvider::*BrowserJsonHandler)( Browser* browser, base::DictionaryValue*, IPC::Message*); // JSON interface helper functions. static scoped_ptr ParseJSONRequestCommand( const std::string& json_request, std::string* command, std::string* error); void BuildJSONHandlerMaps(); // Set window dimensions. // Uses the JSON interface for input/output. void SetWindowDimensions(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Get info about infobars in the given WebContents object. // This includes info about the type of infobars, the message text, // buttons, etc. // Caller owns the returned object. ListValue* GetInfobarsInfo(content::WebContents* tc); // Perform actions on an infobar like dismiss, accept, cancel. // This method can handle dismiss for all infobars. It can also handle // accept / cancel (where it will assume the infobar is a confirm infobar) and // allow / deny (where it will assume the infobar is a media stream infobar). // For the media stream infobar, passing 'allow' will just select the first // video and audio device available to the bar, or report an error if there // are no devices available. // // Uses the JSON interface for input/output. void PerformActionOnInfobar(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Create a new profile and open a new browser window with this profile. Uses // the JSON interface for input/output. void OpenNewBrowserWindowWithNewProfile( base::DictionaryValue* args, IPC::Message* reply_message); // Open a new browser window. // Uses the JSON interface for input/output. void OpenNewBrowserWindow(base::DictionaryValue* args, IPC::Message* reply_message); // Close a browser window. // Uses the JSON interface for input/output. void CloseBrowserWindow(base::DictionaryValue* args, IPC::Message* reply_message); // Get info about multi-profile users. // Uses the JSON interface for input/output. void GetMultiProfileInfo( base::DictionaryValue* args, IPC::Message* reply_message); // Open a new browser window for an existing profile. // Uses the JSON interface for input/output. void OpenProfileWindow( base::DictionaryValue* args, IPC::Message* reply_message); // Get info about the chromium/chrome in use. // This includes things like version, executable name, executable path. // Uses the JSON interface for input/output. void GetBrowserInfo(base::DictionaryValue* args, IPC::Message* reply_message); // Get the browser window count. Uses the JSON interface. void GetBrowserWindowCountJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Get info about browser-related processes that currently exist. void GetProcessInfo(base::DictionaryValue* args, IPC::Message* reply_message); // Get info about the state of navigation in a given tab. // This includes ssl info. // Uses the JSON interface for input/output. void GetNavigationInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Get info about downloads. This includes only ones that have been // registered by the history system. // Uses the JSON interface for input/output. void GetDownloadsInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Wait for all downloads to complete. // Uses the JSON interface for input/output. void WaitForAllDownloadsToComplete(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Performs the given action on the specified download. // Uses the JSON interface for input/output. void PerformActionOnDownload(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Get info about history. // Uses the JSON interface for input/output. void GetHistoryInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Invoke loading of template url model. // Uses the JSON interface for input/output. void LoadSearchEngineInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Sets the visibility of the download shelf. Uses the JSON interface. // Example: // input: { "is_visible": true, // "windex": 1, // } // output: none void SetDownloadShelfVisibleJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Gets the visibility of the download shelf. Uses the JSON interface. // Example: // input: { "windex": 1 } // output: { "is_visible": true } void IsDownloadShelfVisibleJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Gets the download path of the given tab. Uses the JSON interface. // Example: // input: { "tab_index": 1, // "windex": 1, // } // output: { "path": "/home/foobar/Downloads" } void GetDownloadDirectoryJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Get search engines list. // Assumes that the profile's template url model is loaded. // Uses the JSON interface for input/output. void GetSearchEngineInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Add or edit search engine. // Assumes that the profile's template url model is loaded. // Uses the JSON interface for input/output. void AddOrEditSearchEngine(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Perform a given action on an existing search engine. // Assumes that the profile's template url model is loaded. // Uses the JSON interface for input/output. void PerformActionOnSearchEngine(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); #if defined(ENABLE_PROTECTOR_SERVICE) // Get ProtectorService state. // Uses the JSON interface for input/output. void GetProtectorState(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Perform a given action on the ProtectorService. // Uses the JSON interface for input/output. void PerformProtectorAction(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); #endif // Get info about preferences stored in Local State. // Uses the JSON interface for input/output. void GetLocalStatePrefsInfo(base::DictionaryValue* args, IPC::Message* reply_message); // Set local state prefs. // Uses the JSON interface for input/output. void SetLocalStatePrefs(base::DictionaryValue* args, IPC::Message* reply_message); // Get info about preferences. // Uses the JSON interface for input/output. void GetPrefsInfo(base::DictionaryValue* args, IPC::Message* reply_message); // Set prefs. // Uses the JSON interface for input/output. void SetPrefs(base::DictionaryValue* args, IPC::Message* reply_message); // Return load times of initial tabs. // Uses the JSON interface for input/output. // Only includes tabs from command line arguments or session restore. // See declaration of InitialLoadObserver in automation_provider_observers.h // for example response. void GetInitialLoadTimes(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Get info about plugins. // Uses the JSON interface for input/output. void GetPluginsInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void GetPluginsInfoCallback(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message, const std::vector& plugins); // Enable a plugin. // Uses the JSON interface for input/output. void EnablePlugin(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Disable a plugin. // Uses the JSON interface for input/output. void DisablePlugin(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Get info about omnibox. // Contains data about the matches (url, content, description) // in the omnibox popup, the text in the omnibox. // Uses the JSON interface for input/output. void GetOmniboxInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Set text in the omnibox. This sets focus to the omnibox. // Uses the JSON interface for input/output. void SetOmniboxText(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Move omnibox popup selection up or down. // Uses the JSON interface for input/output. void OmniboxMovePopupSelection(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Accept the current string of text in the omnibox. // This is equivalent to clicking or hiting enter on a popup selection. // Blocks until the page loads. // Uses the JSON interface for input/output. void OmniboxAcceptInput(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Generate dictionary info about instant tab. // Uses the JSON interface for input/output. void GetInstantInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Save the contents of a tab into a file. // Uses the JSON interface for input/output. void SaveTabContents(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Import the given settings from the given browser. // Uses the JSON interface for input/output. void ImportSettings(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Add a new entry to the password store based on the password information // provided. This method can also be used to add a blacklisted site (which // will never fill in the password). // Uses the JSON interface for input/output. void AddSavedPassword(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Removes the password matching the information provided. This method can // also be used to remove a blacklisted site. // Uses the JSON interface for input/output. void RemoveSavedPassword(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Return the saved username/password combinations. // Uses the JSON interface for input/output. void GetSavedPasswords(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Install the given unpacked/packed extension. // Uses the JSON interface for input/output. void InstallExtension(base::DictionaryValue* args, IPC::Message* reply_message); // Get info about all intalled extensions. // Uses the JSON interface for input/output. void GetExtensionsInfo(base::DictionaryValue* args, IPC::Message* reply_message); // Uninstalls the extension with the given id. // Uses the JSON interface for input/output. void UninstallExtensionById(base::DictionaryValue* args, IPC::Message* reply_message); // Set extension states: // Enable/disable extension. // Allow/disallow extension in incognito mode. // Uses the JSON interface for input/output. void SetExtensionStateById(base::DictionaryValue* args, IPC::Message* reply_message); // Trigger page action asynchronously in the active tab. // Uses the JSON interface for input/output. void TriggerPageActionById(base::DictionaryValue* args, IPC::Message* reply_message); // Trigger browser action asynchronously in the active tab. // Uses the JSON interface for input/output. void TriggerBrowserActionById(base::DictionaryValue* args, IPC::Message* reply_message); // Auto-updates installed extensions. // Uses the JSON interface for input/output. void UpdateExtensionsNow(base::DictionaryValue* args, IPC::Message* reply_message); #if !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS)) // Dumps a heap profile. // It also checks whether the heap profiler is running, or not. // Uses the JSON interface for input/output. void HeapProfilerDump(base::DictionaryValue* args, IPC::Message* reply_message); #endif // !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS)) // Overrides the current geoposition. // Uses the JSON interface for input/output. void OverrideGeoposition(base::DictionaryValue* args, IPC::Message* reply_message); // Append a command-line switch. // Uses the JSON interface for input/output. void AppendSwitchASCIIToCommandLine(base::DictionaryValue* args, IPC::Message* reply_message); // Responds to the Find request and returns the match count. void FindInPage(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Opens the find request dialogue in the given browser. // Example: // input: { "windex": 1 } // output: none void OpenFindInPage(base::DictionaryValue* args, IPC::Message* reply_message); // Returns whether the find request dialogue is visible in the given browser. // Example: // input: { "windex": 1 } // output: { "is_visible": true } void IsFindInPageVisible(base::DictionaryValue* args, IPC::Message* reply_message); // Signs in to sync using the given username and password. // Uses the JSON interface for input/output. void SignInToSync(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Returns info about sync. // Uses the JSON interface for input/output. void GetSyncInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Waits for the ongoing sync cycle to complete. // Uses the JSON interface for input/output. void AwaitFullSyncCompletion(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Waits for sync to reinitialize (for example, after a browser restart). // Uses the JSON interface for input/output. void AwaitSyncRestart(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Enables sync for one or more sync datatypes. // Uses the JSON interface for input/output. void EnableSyncForDatatypes(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Disables sync for one or more sync datatypes. // Uses the JSON interface for input/output. void DisableSyncForDatatypes(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Get ordered list of all active and queued HTML5 notifications. // Uses the JSON interface for input/output. void GetAllNotifications(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Close an active HTML5 notification. // Uses the JSON interface for input/output. void CloseNotification(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Waits for the number of active HTML5 notifications to reach a given count. // Uses the JSON interface for input/output. void WaitForNotificationCount(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Gets info about the elements in the NTP. // Uses the JSON interface for input/output. void GetNTPInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Removes a thumbnail from the NTP's Most Visited sites section. // Uses the JSON interface for input/output. void RemoveNTPMostVisitedThumbnail(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Restores all thumbnails that have been removed (i.e., blacklisted) from the // NTP's Most Visited sites section. // Uses the JSON interface for input/output. void RestoreAllNTPMostVisitedThumbnails(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Kills the given renderer process and returns after the associated // RenderProcessHost receives notification of its closing. void KillRendererProcess(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Populates the fields of the event parameter with what is found in the // args parameter. Upon failure, returns false and puts the error message in // the error parameter, otherwise returns true. bool BuildWebKeyEventFromArgs(base::DictionaryValue* args, std::string* error, content::NativeWebKeyboardEvent* event); // Populates the fields of the event parameter with default data, except for // the specified key type and key code. void BuildSimpleWebKeyEvent(WebKit::WebInputEvent::Type type, int windows_key_code, content::NativeWebKeyboardEvent* event); // Sends a key press event using the given key code to the specified tab. // A key press is a combination of a "key down" event and a "key up" event. // This function does not wait before returning. void SendWebKeyPressEventAsync(int key_code, content::WebContents* web_contents); // Launches the specified app from the currently-selected tab. void LaunchApp(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Sets the launch type for the specified app. void SetAppLaunchType(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Gets statistics about the v8 heap in a renderer process. void GetV8HeapStats(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Gets the current FPS associated with a renderer process view. void GetFPS(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Fullscreen and Mouse Lock hooks. They take no JSON parameters. void IsFullscreenForBrowser(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void IsFullscreenForTab(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void IsMouseLocked(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void IsMouseLockPermissionRequested(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void IsFullscreenPermissionRequested(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void IsFullscreenBubbleDisplayed(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void IsFullscreenBubbleDisplayingButtons(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void AcceptCurrentFullscreenOrMouseLockRequest(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void DenyCurrentFullscreenOrMouseLockRequest(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); // Waits for all views to stop loading or a modal dialog to become active. void WaitForAllViewsToStopLoading(base::DictionaryValue* args, IPC::Message* reply_message); // Gets the browser and tab index of the given tab. Uses the JSON interface. // Either "tab_id" or "tab_handle" must be specified, but not both. "tab_id" // refers to the ID from the |NavigationController|, while "tab_handle" is // the handle number assigned by the automation system. // Example: // input: { "tab_id": 1, // optional // "tab_handle": 3 // optional // } // output: { "windex": 1, "tab_index": 5 } void GetIndicesFromTab(base::DictionaryValue* args, IPC::Message* reply_message); // Executes a browser command on the given browser window. Does not wait for // the command to complete. // Example: // input: { "accelerator": 1, // "windex": 1 // } void ExecuteBrowserCommandAsyncJSON(DictionaryValue* args, IPC::Message* reply_message); // Executes a browser command on the given browser window. Waits for the // command to complete before returning. // Example: // input: { "accelerator": 1, // "windex": 1 // } void ExecuteBrowserCommandJSON(DictionaryValue* args, IPC::Message* reply_message); // Checks if a browser command is enabled on the given browser window. // Example: // input: { "accelerator": 1, // "windex": 1 // } // output: { "enabled": true } void IsMenuCommandEnabledJSON(DictionaryValue* args, IPC::Message* reply_message); // Returns a dictionary of information about the given tab. // Example: // input: { "tab_index": 1, // "windex": 1 // } // output: { "title": "Hello World", // "url": "http://foo.bar" } void GetTabInfo(DictionaryValue* args, IPC::Message* reply_message); // Returns the tab count for the given browser window. // Example: // input: { "windex": 1 } // output: { "tab_count": 5 } void GetTabCountJSON(DictionaryValue* args, IPC::Message* reply_message); // Navigates to the given URL. Uses the JSON interface. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 3, // "auto_id": { "type": 0, "id": "awoein" }, // "url": "http://www.google.com", // "navigation_count": 1 // number of navigations to wait for // } // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS } void NavigateToURL(base::DictionaryValue* args, IPC::Message* reply_message); // Get the index of the currently active tab. Uses the JSON interface. // The integer |windex| must be given to specify the browser window. // Example: // input: { "windex": 1 } // output: { "tab_index": 3 } void GetActiveTabIndexJSON(DictionaryValue* args, IPC::Message* reply_message); // Append a new tab. Uses the JSON interface. // The integer |windex| must be given to specify the browser window. The tab // is opened to |url| and blocks until the page loads. // Example: // input: { "windex": 1, // "url": "http://google.com" // } // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS } void AppendTabJSON(DictionaryValue* args, IPC::Message* reply_message); // Waits until any pending navigation completes in the specified tab. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // } // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS } void WaitUntilNavigationCompletes( base::DictionaryValue* args, IPC::Message* reply_message); // Executes javascript in the specified frame. Uses the JSON interface. // Waits for a result from the |DOMAutomationController|. The javascript // must send a string. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "frame_xpath": "//frames[1]", // "javascript": // "window.domAutomationController.send(window.name)", // } // output: { "result": "My Window Name" } // This and some following methods have a suffix of JSON to distingush them // from already existing methods which perform the same function, but use // custom IPC messages instead of the JSON IPC message. These functions will // eventually be replaced with the JSON ones and the JSON suffix will be // dropped. // TODO(kkania): Replace the non-JSON counterparts and drop the JSON suffix. void ExecuteJavascriptJSON( base::DictionaryValue* args, IPC::Message* reply_message); // Creates a DomEventObserver associated with the AutomationEventQueue. // Example: // input: { "event_name": "login complete", // "automation_id": 4444, // "recurring": False // } // output: { "observer_id": 1 } void AddDomEventObserver( base::DictionaryValue* args, IPC::Message* reply_message); // Removes an event observer associated with the AutomationEventQueue. // Example: // input: { "observer_id": 1 } // output: none void RemoveEventObserver( base::DictionaryValue* args, IPC::Message* reply_message); // Retrieves an event from the AutomationEventQueue. // Blocks if 'blocking' is true, otherwise returns immediately. // Example: // input: { "observer_id": 1, // "blocking": true, // } // output: { "type": "raised", // "name": "login complete" // "id": 1, // } void GetNextEvent(base::DictionaryValue* args, IPC::Message* reply_message); // Removes all events and observers attached to the AutomationEventQueue. // Example: // input: none // output: none void ClearEventQueue( base::DictionaryValue* args, IPC::Message* reply_message); // Executes javascript in the specified frame of a render view. // Uses the JSON interface. Waits for a result from the // |DOMAutomationController|. The javascript must send a string. // Example: // input: { "view": { // "render_process_id": 1, // "render_view_id": 2, // } // "frame_xpath": "//frames[1]", // "javascript": // "window.domAutomationController.send(window.name)", // } // output: { "result": "My Window Name" } void ExecuteJavascriptInRenderView( base::DictionaryValue* args, IPC::Message* reply_message); // Goes forward in the specified tab. Uses the JSON interface. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" } // } // output: { "did_go_forward": true, // optional // "result": AUTOMATION_MSG_NAVIGATION_SUCCESS // optional // } void GoForward(base::DictionaryValue* args, IPC::Message* reply_message); // Goes back in the specified tab. Uses the JSON interface. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" } // } // output: { "did_go_back": true, // optional // "result": AUTOMATION_MSG_NAVIGATION_SUCCESS // optional // } void GoBack(base::DictionaryValue* args, IPC::Message* reply_message); // Reload the specified tab. Uses the JSON interface. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" } // } // output: { "result": AUTOMATION_MSG_NAVIGATION_SUCCESS // optional } void ReloadJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Captures the entire page of the the specified tab, including the // non-visible portions of the page, and saves the PNG to a file. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "path": "/tmp/foo.png" // } // output: none void CaptureEntirePageJSON( base::DictionaryValue* args, IPC::Message* reply_message); // Gets the cookies for the given URL. Uses the JSON interface. // "expiry" refers to the amount of seconds since the Unix epoch. If omitted, // the cookie is valid for the duration of the browser session. // Example: // input: { "url": "http://www.google.com" } // output: { "cookies": [ // { // "name": "PREF", // "value": "123101", // "path": "/", // "domain": "www.google.com", // "secure": false, // "expiry": 1401982012 // } // ] // } void GetCookiesJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Deletes the cookie with the given name for the URL. Uses the JSON // interface. // Example: // input: { // "url": "http://www.google.com", // "name": "my_cookie" // } // output: none void DeleteCookieJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Sets a cookie for the given URL. Uses the JSON interface. // "expiry" refers to the amount of seconds since the Unix epoch. If omitted, // the cookie will be valid for the duration of the browser session. // "domain" refers to the applicable domain for the cookie. Valid domain // choices for the site "http://www.google.com" and resulting cookie // applicability: // [.]www.google.com - applicable on www.google.com and its subdomains // [.]google.com - applicable on google.com and its subdomains // - applicable only on www.google.com // // Example: // input: { "url": "http://www.google.com", // "cookie": { // "name": "PREF", // "value": "123101", // "path": "/", // optional // "domain": ".www.google.com", // optional // "secure": false, // optional // "expiry": 1401982012 // optional // } // } // output: none void SetCookieJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Gets the cookies for the given URL in the context of a given browser // window. Uses the JSON interface. // Example: // input: { "url": "http://www.google.com", // "tab_index": 1, // "windex": 1, // } // output: { "cookies": "foo=bar" } void GetCookiesInBrowserContext(base::DictionaryValue* args, IPC::Message* reply_message); // Deletes the cookie with the given name for the URL in the context of a // given browser window. Uses the JSON interface. // Example: // input: { "url": "http://www.google.com", // "cookie_name": "my_cookie" // "tab_index": 1, // "windex": 1, // } // output: none void DeleteCookieInBrowserContext(base::DictionaryValue* args, IPC::Message* reply_message); // Sets a cookie for the given URL in the context of a given browser window. // Uses the JSON interface. // // Example: // input: { "url": "http://www.google.com", // "value": "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT", // "tab_index": 1, // "windex": 1, // } // output: none void SetCookieInBrowserContext(base::DictionaryValue* args, IPC::Message* reply_message); // Gets the ID for every open tab. This ID is unique per session. // Example: // input: none // output: { "ids": [213, 1] } void GetTabIds(base::DictionaryValue* args, IPC::Message* reply_message); // Gets info about all open views. Each view ID is unique per session. // Example: // input: none // output: { "views": [ // { // "auto_id": { "type": 0, "id": "awoein" }, // "extension_id": "askjeoias3" // optional // } // ] // } void GetViews(base::DictionaryValue* args, IPC::Message* reply_message); // Checks if the given tab ID refers to an open tab. // Example: // input: { "id": 41 } // output: { "is_valid": false } void IsTabIdValid(base::DictionaryValue* args, IPC::Message* reply_message); // Checks if the given automation ID refers to an actual object. // Example: // input: { "auto_id": { "type": 0, "id": "awoein" } } // output: { "does_exist": false } void DoesAutomationObjectExist( base::DictionaryValue* args, IPC::Message* reply_message); // Closes the specified tab. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" } // } // output: none void CloseTabJSON(base::DictionaryValue* args, IPC::Message* reply_message); // Sets the specified web view bounds. // The single |auto_id| must be given to specify the view. // This method currently is only supported for tabs. // Example: // input: { "auto_id": { "type": 0, "id": "awoein" }, // "bounds": { // "x": 100, // "y": 200, // "width": 500, // "height": 800 // } // } // output: none void SetViewBounds(base::DictionaryValue* args, IPC::Message* reply_message); // Maximizes the web view. // The single |auto_id| must be given to specify the view. // This method currently is only supported for tabs. // Example: // input: { "auto_id": { "type": 0, "id": "awoein" } } // output: none void MaximizeView(base::DictionaryValue* args, IPC::Message* reply_message); // Sends the WebKit events for a mouse click at a given coordinate. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "button": automation::kLeftButton, // "x": 100, // "y": 100 // } // output: none void WebkitMouseClick(base::DictionaryValue* args, IPC::Message* message); // Sends the WebKit event for a mouse move to a given coordinate. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "x": 100, // "y": 100 // } // output: none void WebkitMouseMove(base::DictionaryValue* args, IPC::Message* message); // Sends the WebKit events for a mouse drag between two coordinates. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "start_x": 100, // "start_y": 100, // "end_x": 100, // "end_y": 100 // } // output: none void WebkitMouseDrag(base::DictionaryValue* args, IPC::Message* message); // Sends the WebKit events for a mouse button down at a given coordinate. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "x": 100, // "y": 100 // } // output: none void WebkitMouseButtonDown(base::DictionaryValue* args, IPC::Message* message); // Sends the WebKit events for a mouse button up at a given coordinate. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "x": 100, // "y": 100 // } // output: none void WebkitMouseButtonUp(base::DictionaryValue* args, IPC::Message* message); // Sends the WebKit events for a mouse double click at a given coordinate. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "x": 100, // "y": 100 // } // output: none void WebkitMouseDoubleClick(base::DictionaryValue* args, IPC::Message* message); // Drag and drop file paths at a given coordinate. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "x": 100, // "y": 100, // "paths": [ // "/tmp/file.txt" // ], // } // output: none void DragAndDropFilePaths(base::DictionaryValue* args, IPC::Message* message); // Sends the WebKit key event with the specified properties. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "type": automation::kRawKeyDownType, // "nativeKeyCode": ui::VKEY_X, // "windowsKeyCode": ui::VKEY_X, // "unmodifiedText": "x", // "text": "X", // "modifiers": automation::kShiftKeyMask, // "isSystemKey": false // } // output: none void SendWebkitKeyEvent(base::DictionaryValue* args, IPC::Message* message); // Sends the key event from the OS level to the browser window, // allowing it to be preprocessed by some external application (ie. IME). // Will switch to the tab specified by tab_index before sending the event. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "keyCode": ui::VKEY_X, // "modifiers": automation::kShiftKeyMask, // } // output: none void SendOSLevelKeyEventToTab(base::DictionaryValue* args, IPC::Message* message); // Processes the WebKit mouse event with the specified properties. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the render view. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" }, // "type": automation::kMouseDown, // "button": automation::kLeftButton, // "x": 100, // "y": 200, // "click_count": 1, // "modifiers": automation::kShiftKeyMask, // } // output: none void ProcessWebMouseEvent(base::DictionaryValue* args, IPC::Message* message); // Gets the active JavaScript modal dialog's message. // Example: // input: none // output: { "message": "This is an alert!" } void GetAppModalDialogMessage( base::DictionaryValue* args, IPC::Message* reply_message); // Accepts or dismisses the active JavaScript modal dialog. If optional // prompt text is given, it will be used as the result of the prompt dialog. // Example: // input: { "accept": true, // "prompt_text": "hello" // optional // } // output: none void AcceptOrDismissAppModalDialog( base::DictionaryValue* args, IPC::Message* reply_message); // Activates the given tab. // The pair |windex| and |tab_index| or the single |auto_id| must be given // to specify the tab. // Example: // input: { "windex": 1, // "tab_index": 1, // "auto_id": { "type": 0, "id": "awoein" } // } // output: none void ActivateTabJSON(base::DictionaryValue* args, IPC::Message* message); // Blocks until the given tab is restored. // Uses the JSON interface. void WaitForTabToBeRestored(DictionaryValue* args, IPC::Message* reply_message); // Simulates an action on the SSL blocking page at the specified tab. // If |proceed| is true, it is equivalent to the user pressing the // 'Proceed' button, if false the 'Get me out of there button'. // Note that this fails if the tab is not displaying a SSL blocking page. // Uses the JSON interface. // Example: // input: { "windex": 1, // "tab_index": 1, // "proceed": true // } // output: none void ActionOnSSLBlockingPage(DictionaryValue* args, IPC::Message* reply_message); // Gets the security state for the given tab. Uses the JSON interface. // Example: // input: { "windex": 1, // "tab_index": 1, // } // output: { "security_style": SECURITY_STYLE_AUTHENTICATED, // "ssl_cert_status": 3, // bitmask of status flags // "insecure_content_status": 1, // bitmask of ContentStatusFlags // } void GetSecurityState(DictionaryValue* args, IPC::Message* reply_message); // Brings the given brower's window to the front. // Example: // input: { "windex": 1 } // output: none void BringBrowserToFrontJSON(base::DictionaryValue* args, IPC::Message* message); // Gets the version of ChromeDriver automation supported by this server. // Example: // input: none // output: { "version": 1 } void GetChromeDriverAutomationVersion(base::DictionaryValue* args, IPC::Message* message); // Determines whether the extension page action is visible in the given tab. // Example: // input: { "auto_id": { "type": 0, "id": "awoein" }, // "extension_id": "byzaaoiea", // } // output: none void IsPageActionVisible(base::DictionaryValue* args, IPC::Message* reply_message); // Creates a new |TestingAutomationProvider| that opens a server channel // for the given |channel_id|. // The server channel will be available for connection when this returns. // Example: // input: { "channel_id": "testChannel123" } void CreateNewAutomationProvider(base::DictionaryValue* args, IPC::Message* reply_message); // Triggers a policy update on the platform and cloud providers, if they // exist. Returns after the update notifications are received. // Example: // input: none // output: none void RefreshPolicies(base::DictionaryValue* args, IPC::Message* reply_message); // Simulates a memory bug (reference an array out of bounds) to cause Address // Sanitizer (if it was built it) to catch the bug and abort the process. // Example: // input: none // output: none void SimulateAsanMemoryBug(base::DictionaryValue* args, IPC::Message* reply_message); #if defined(OS_CHROMEOS) // OOBE wizard. // Accepts the network screen and continues to EULA. // Example: // input: none // ouput: { "next_screen": "eula" } void AcceptOOBENetworkScreen(base::DictionaryValue* args, IPC::Message* reply_message); // Accepts or declines EULA, moving forward or back from EULA screen. // Example: // input: { "accepted": true, "usage_stats_reporting": false } // output: { "next_screen": "update" } void AcceptOOBEEula(base::DictionaryValue* args, IPC::Message* reply_message); // Forces the ongoing update to cancel and proceed to the login screen. // Example: // input: none // output: { "next_screen": "login" } void CancelOOBEUpdate(base::DictionaryValue* args, IPC::Message* reply_message); // Chooses user image on the image picker screen and starts browser session. // Example: // input: { "image": "profile" } - Google profile image // input: { "image": 2 } - default image number 2 (0-based) // output: { "next_screen": "session" } void PickUserImage(base::DictionaryValue* args, IPC::Message* reply_message); // Skips OOBE to login step. Can be called when already at login screen, // in which case does nothing and sends return value immediately. // Example: // input: { "skip_image_selection": true } // output: { "next_screen": "login" } void SkipToLogin(DictionaryValue* args, IPC::Message* reply_message); // Returns info about the current OOBE screen. // Example: // input: none // output: { "screen_name": "network" } // output: none (when already logged in) void GetOOBEScreenInfo(DictionaryValue* args, IPC::Message* reply_message); // Login / Logout. void GetLoginInfo(base::DictionaryValue* args, IPC::Message* reply_message); void ShowCreateAccountUI(base::DictionaryValue* args, IPC::Message* reply_message); void LoginAsGuest(base::DictionaryValue* args, IPC::Message* reply_message); // Submits the Chrome OS login form. Watch for the login to complete using // the AddLoginObserver and GetNextEvent commands. // Example: // input: { "username": "user@gmail.com", // "password": "fakepassword", // } void SubmitLoginForm(base::DictionaryValue* args, IPC::Message* reply_message); void AddLoginEventObserver(DictionaryValue* args, IPC::Message* reply_message); // Executes javascript in the specified frame in the OOBE WebUI on chromeos. // Waits for a result from the |DOMAutomationController|. The javascript must // send a string. Must be run before a user has logged in. // Example: // input: { "frame_xpath": "//frames[1]", // "javascript": // "window.domAutomationController.send(window.name)", // } // output: { "result": "My Window Name" } void ExecuteJavascriptInOOBEWebUI( base::DictionaryValue* args, IPC::Message* reply_message); void SignOut(base::DictionaryValue* args, IPC::Message* reply_message); // Screen locker. void LockScreen(base::DictionaryValue* args, IPC::Message* reply_message); void UnlockScreen(base::DictionaryValue* args, IPC::Message* reply_message); void SignoutInScreenLocker(base::DictionaryValue* args, IPC::Message* reply_message); // Battery. void GetBatteryInfo(base::DictionaryValue* args, IPC::Message* reply_message); // Network. void GetNetworkInfo(base::DictionaryValue* args, IPC::Message* reply_message); void NetworkScan(base::DictionaryValue* args, IPC::Message* reply_message); void ToggleNetworkDevice(base::DictionaryValue* args, IPC::Message* reply_message); void GetProxySettings(base::DictionaryValue* args, IPC::Message* reply_message); void SetProxySettings(base::DictionaryValue* args, IPC::Message* reply_message); void SetSharedProxies(base::DictionaryValue* args, IPC::Message* reply_message); void RefreshInternetDetails(base::DictionaryValue* args, IPC::Message* reply_message); void ConnectToCellularNetwork(base::DictionaryValue* args, IPC::Message* reply_message); void DisconnectFromCellularNetwork(base::DictionaryValue* args, IPC::Message* reply_message); void ConnectToWifiNetwork(base::DictionaryValue* args, IPC::Message* reply_message); void ConnectToHiddenWifiNetwork(base::DictionaryValue* args, IPC::Message* reply_message); void DisconnectFromWifiNetwork(base::DictionaryValue* args, IPC::Message* reply_message); void ForgetWifiNetwork(DictionaryValue* args, IPC::Message* reply_message); // VPN. void AddPrivateNetwork(DictionaryValue* args, IPC::Message* reply_message); void GetPrivateNetworkInfo(base::DictionaryValue* args, IPC::Message* reply_message); void ConnectToPrivateNetwork(base::DictionaryValue* args, IPC::Message* reply_message); void DisconnectFromPrivateNetwork(base::DictionaryValue* args, IPC::Message* reply_message); // Enterprise policy. void IsEnterpriseDevice(DictionaryValue* args, IPC::Message* reply_message); void EnrollEnterpriseDevice(DictionaryValue* args, IPC::Message* reply_message); void GetEnterprisePolicyInfo(DictionaryValue* args, IPC::Message* reply_message); // Accessibility. void EnableSpokenFeedback(DictionaryValue* args, IPC::Message* reply_message); void IsSpokenFeedbackEnabled(DictionaryValue* args, IPC::Message* reply_message); // Time. void GetTimeInfo(Browser* browser, base::DictionaryValue* args, IPC::Message* reply_message); void GetTimeInfo(base::DictionaryValue* args, IPC::Message* reply_message); void SetTimezone(base::DictionaryValue* args, IPC::Message* reply_message); // Update. void GetUpdateInfo(base::DictionaryValue* args, IPC::Message* reply_message); void UpdateCheck(base::DictionaryValue* args, IPC::Message* reply_message); void SetReleaseTrack(base::DictionaryValue* args, IPC::Message* reply_message); // Volume. void GetVolumeInfo(base::DictionaryValue* args, IPC::Message* reply_message); void SetVolume(base::DictionaryValue* args, IPC::Message* reply_message); void SetMute(base::DictionaryValue* args, IPC::Message* reply_message); void CaptureProfilePhoto(Browser* browser, DictionaryValue* args, IPC::Message* reply_message); // Html terminal. void OpenCrosh(base::DictionaryValue* args, IPC::Message* reply_message); void AddChromeosObservers(); void RemoveChromeosObservers(); #endif // defined(OS_CHROMEOS) void WaitForTabCountToBecome(int browser_handle, int target_tab_count, IPC::Message* reply_message); void WaitForInfoBarCount(int tab_handle, size_t target_count, IPC::Message* reply_message); void WaitForProcessLauncherThreadToGoIdle(IPC::Message* reply_message); void OnRemoveProvider(); // Called via PostTask // Execute Javascript in the context of a specific render view. void ExecuteJavascriptInRenderViewFrame( const string16& frame_xpath, const string16& script, IPC::Message* reply_message, content::RenderViewHost* render_view_host); // Selects the given |tab| if not selected already. void EnsureTabSelected(Browser* browser, content::WebContents* tab); #if defined(OS_CHROMEOS) // Avoid scoped ptr here to avoid having to define it completely in the // non-ChromeOS code. PowerManagerClientObserverForTesting* power_manager_observer_; #endif // defined(OS_CHROMEOS) std::map handler_map_; std::map browser_handler_map_; // Used to wait on various browser sync events. scoped_ptr sync_waiter_; content::NotificationRegistrar registrar_; // Used to enumerate browser profiles. scoped_refptr importer_list_; // The stored data for the ImportSettings operation. ImportSettingsData import_settings_data_; // The automation event observer queue. It is lazily created when an observer // is added to avoid overhead when not needed. scoped_ptr automation_event_queue_; // List of commands which just finish synchronously and don't require // setting up an observer. static const int kSynchronousCommands[]; DISALLOW_COPY_AND_ASSIGN(TestingAutomationProvider); }; #endif // CHROME_BROWSER_AUTOMATION_TESTING_AUTOMATION_PROVIDER_H_