Home | History | Annotate | Download | only in automation
      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:
     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