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
16class GURL;
17class TabProxy;
18class WindowProxy;
19
20namespace 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.
29class BrowserProxy : public AutomationResourceProxy {
30 public:
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:
139  virtual ~BrowserProxy() {}
140 private:
141  DISALLOW_COPY_AND_ASSIGN(BrowserProxy);
142};
143
144#endif  // CHROME_TEST_AUTOMATION_BROWSER_PROXY_H_
145