1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_TEST_AUTOMATION_BROWSER_PROXY_H_ 6 #define CHROME_TEST_AUTOMATION_BROWSER_PROXY_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/compiler_specific.h" 12 #include "chrome/browser/ui/browser.h" 13 #include "chrome/common/content_settings.h" 14 #include "chrome/test/automation/automation_handle_tracker.h" 15 16 class GURL; 17 class TabProxy; 18 class WindowProxy; 19 20 namespace gfx { 21 class Point; 22 class Rect; 23 } 24 25 // This class presents the interface to actions that can be performed on 26 // a given browser window. Note that this object can be invalidated at any 27 // time if the corresponding browser window in the app is closed. In that case, 28 // any subsequent calls will return false immediately. 29 class BrowserProxy : public AutomationResourceProxy { 30 public: BrowserProxy(AutomationMessageSender * sender,AutomationHandleTracker * tracker,int handle)31 BrowserProxy(AutomationMessageSender* sender, 32 AutomationHandleTracker* tracker, 33 int handle) 34 : AutomationResourceProxy(tracker, sender, handle) {} 35 36 // Activates the tab corresponding to (zero-based) tab_index. Returns true if 37 // successful. 38 bool ActivateTab(int tab_index) WARN_UNUSED_RESULT; 39 40 // Bring the browser window to the front, activating it. Returns true on 41 // success. 42 bool BringToFront() WARN_UNUSED_RESULT; 43 44 // Append a new tab to the TabStrip. The new tab is selected. 45 // The new tab navigates to the given tab_url. 46 // Returns true if successful. 47 bool AppendTab(const GURL& tab_url) WARN_UNUSED_RESULT; 48 49 // Gets the (zero-based) index of the currently active tab. Returns true if 50 // successful. 51 bool GetActiveTabIndex(int* active_tab_index) const WARN_UNUSED_RESULT; 52 53 // Returns the number of tabs in the given window. Returns true if 54 // the call was successful. 55 bool GetTabCount(int* num_tabs) const WARN_UNUSED_RESULT; 56 57 // Returns the type of the given window. Returns true if the call was 58 // successful. 59 bool GetType(Browser::Type* type) const WARN_UNUSED_RESULT; 60 61 // Returns the TabProxy for the tab at the given index, transferring 62 // ownership of the pointer to the caller. On failure, returns NULL. 63 // 64 // Use GetTabCount to see how many windows you can ask for. Tab numbers 65 // are 0-based. 66 scoped_refptr<TabProxy> GetTab(int tab_index) const; 67 68 // Returns the TabProxy for the currently active tab, transferring 69 // ownership of the pointer to the caller. On failure, returns NULL. 70 scoped_refptr<TabProxy> GetActiveTab() const; 71 72 // Returns the WindowProxy for this browser's window. It can be used to 73 // retreive view bounds, simulate clicks and key press events. The caller 74 // owns the returned WindowProxy. 75 // On failure, returns NULL. 76 scoped_refptr<WindowProxy> GetWindow() const; 77 78 // Apply the accelerator with given id (IDC_BACK, IDC_NEWTAB ...) 79 // The list can be found at chrome/app/chrome_command_ids.h 80 // Returns true if the call was successful. 81 // 82 // The alternate way to test the accelerators is to use the Windows messaging 83 // system to send the actual keyboard events (ui_controls.h) A precondition 84 // to using this system is that the target window should have the keyboard 85 // focus. This leads to a flaky test behavior in circumstances when the 86 // desktop screen is locked or the test is being executed over a remote 87 // desktop. 88 bool ApplyAccelerator(int id) WARN_UNUSED_RESULT; 89 90 // Block the thread until the tab count is |count|. 91 // Returns true on success. 92 bool WaitForTabCountToBecome(int count) WARN_UNUSED_RESULT; 93 94 // Block the thread until the specified tab is the active tab. 95 // |wait_timeout| is the timeout, in milliseconds, for waiting. 96 // Returns false if the tab does not become active. 97 bool WaitForTabToBecomeActive( 98 int tab, 99 base::TimeDelta wait_timeout) WARN_UNUSED_RESULT; 100 101 // Returns whether the Find window is fully visible If animating, |is_visible| 102 // will be false. Returns false on failure. 103 bool IsFindWindowFullyVisible(bool* is_visible) WARN_UNUSED_RESULT; 104 105 // Run the specified command in the browser 106 // (see Browser::ExecuteCommandWithDisposition() for the list of supported 107 // commands). Returns true if the command was successfully dispatched, 108 // false otherwise. 109 bool RunCommandAsync(int browser_command) const WARN_UNUSED_RESULT; 110 111 // Run the specified command in the browser 112 // (see Browser::ExecuteCommandWithDisposition() for the list of supported 113 // commands). Returns true if the command was successfully dispatched and 114 // executed, false otherwise. 115 bool RunCommand(int browser_command) const WARN_UNUSED_RESULT; 116 117 // Simulates a termination the browser session (as if the user logged off the 118 // mahine). 119 bool TerminateSession() WARN_UNUSED_RESULT; 120 121 // Generic pattern for sending automation requests. 122 bool SendJSONRequest(const std::string& request, 123 int timeout_ms, 124 std::string* response) WARN_UNUSED_RESULT; 125 126 // Gets the load times for all tabs started from the command line. 127 // Puts the time of the first tab to start loading into |min_start_time|, 128 // the time when loading stopped into |max_stop_time| (should be similar to 129 // the delay that WaitForInitialLoads waits for), and a list of all 130 // finished timestamps into |stop_times|. Returns true on success. 131 bool GetInitialLoadTimes( 132 base::TimeDelta timeout, 133 float* min_start_time, 134 float* max_stop_time, 135 std::vector<float>* stop_times); 136 137 138 protected: ~BrowserProxy()139 virtual ~BrowserProxy() {} 140 private: 141 DISALLOW_COPY_AND_ASSIGN(BrowserProxy); 142 }; 143 144 #endif // CHROME_TEST_AUTOMATION_BROWSER_PROXY_H_ 145