| // 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_TEST_AUTOMATION_TAB_PROXY_H_ |
| #define CHROME_TEST_AUTOMATION_TAB_PROXY_H_ |
| |
| #include "build/build_config.h" // NOLINT |
| |
| #if defined(OS_WIN) |
| #include <wtypes.h> // NOLINT |
| #endif |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/compiler_specific.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/observer_list.h" |
| #include "chrome/common/automation_constants.h" |
| #include "chrome/test/automation/automation_handle_tracker.h" |
| #include "content/public/browser/save_page_type.h" |
| #include "content/public/common/page_type.h" |
| #include "content/public/common/security_style.h" |
| #include "net/cert/cert_status_flags.h" |
| #include "ui/base/window_open_disposition.h" |
| #include "ui/events/keycodes/keyboard_codes.h" |
| |
| class BrowserProxy; |
| class GURL; |
| |
| namespace IPC { |
| class Message; |
| } |
| |
| namespace base { |
| class FilePath; |
| class Value; |
| } |
| |
| class TabProxy : public AutomationResourceProxy { |
| public: |
| class TabProxyDelegate { |
| public: |
| virtual bool OnMessageReceived(TabProxy* tab, const IPC::Message& msg) { |
| return false; |
| } |
| virtual void OnChannelError(TabProxy* tab) {} |
| |
| protected: |
| virtual ~TabProxyDelegate() {} |
| }; |
| |
| TabProxy(AutomationMessageSender* sender, |
| AutomationHandleTracker* tracker, |
| int handle); |
| |
| // Gets the current url of the tab. |
| bool GetCurrentURL(GURL* url) const WARN_UNUSED_RESULT; |
| |
| // Gets the title of the tab. |
| bool GetTabTitle(std::wstring* title) const WARN_UNUSED_RESULT; |
| |
| // Gets the tabstrip index of the tab. |
| bool GetTabIndex(int* index) const WARN_UNUSED_RESULT; |
| |
| // Executes a javascript in a frame's context whose xpath is provided as the |
| // first parameter and extract the values from the resulting json string. |
| // Examples: |
| // jscript = "window.domAutomationController.send('string');" |
| // will result in value = "string" |
| // jscript = "window.domAutomationController.send(24);" |
| // will result in value = 24 |
| // NOTE: If this is called from a ui test, |dom_automation_enabled_| must be |
| // set to true for these functions to work. |
| bool ExecuteAndExtractString(const std::wstring& frame_xpath, |
| const std::wstring& jscript, |
| std::wstring* value) WARN_UNUSED_RESULT; |
| bool ExecuteAndExtractBool(const std::wstring& frame_xpath, |
| const std::wstring& jscript, |
| bool* value) WARN_UNUSED_RESULT; |
| bool ExecuteAndExtractInt(const std::wstring& frame_xpath, |
| const std::wstring& jscript, |
| int* value) WARN_UNUSED_RESULT; |
| |
| // Navigates to a url. This method accepts the same kinds of URL input that |
| // can be passed to Chrome on the command line. This is a synchronous call and |
| // hence blocks until the navigation completes. |
| AutomationMsg_NavigationResponseValues NavigateToURL( |
| const GURL& url) WARN_UNUSED_RESULT; |
| |
| // Navigates to a url. This method accepts the same kinds of URL input that |
| // can be passed to Chrome on the command line. This is a synchronous call and |
| // hence blocks until the |number_of_navigations| navigations complete. |
| AutomationMsg_NavigationResponseValues |
| NavigateToURLBlockUntilNavigationsComplete( |
| const GURL& url, int number_of_navigations) WARN_UNUSED_RESULT; |
| |
| |
| // Navigates to a url. This is an asynchronous version of NavigateToURL. |
| // The function returns immediately after sending the LoadURL notification |
| // to the browser. |
| // TODO(vibhor): Add a callback if needed in future. |
| // TODO(mpcomplete): If the navigation results in an auth challenge, the |
| // TabProxy we attach won't know about it. See bug 666730. |
| bool NavigateToURLAsync(const GURL& url) WARN_UNUSED_RESULT; |
| |
| // Equivalent to hitting the Back button. This is a synchronous call and |
| // hence blocks until the navigation completes. |
| AutomationMsg_NavigationResponseValues GoBack() WARN_UNUSED_RESULT; |
| |
| // Equivalent to hitting the Back button. This is a synchronous call and |
| // hence blocks until the |number_of_navigations| navigations complete. |
| AutomationMsg_NavigationResponseValues GoBackBlockUntilNavigationsComplete( |
| int number_of_navigations) WARN_UNUSED_RESULT; |
| |
| // Equivalent to hitting the Forward button. This is a synchronous call and |
| // hence blocks until the navigation completes. |
| AutomationMsg_NavigationResponseValues GoForward() WARN_UNUSED_RESULT; |
| |
| // Equivalent to hitting the Forward button. This is a synchronous call and |
| // hence blocks until the |number_of_navigations| navigations complete. |
| AutomationMsg_NavigationResponseValues GoForwardBlockUntilNavigationsComplete( |
| int number_of_navigations) WARN_UNUSED_RESULT; |
| |
| // Equivalent to hitting the Reload button. This is a synchronous call and |
| // hence blocks until the navigation completes. |
| AutomationMsg_NavigationResponseValues Reload() WARN_UNUSED_RESULT; |
| |
| // Closes the tab. This is synchronous, but does NOT block until the tab has |
| // closed, rather it blocks until the browser has initiated the close. Use |
| // Close(true) if you need to block until tab completely closes. |
| // |
| // Note that this proxy is invalid after this call. |
| bool Close() WARN_UNUSED_RESULT; |
| |
| // Variant of close that allows you to specify whether you want to block |
| // until the tab has completely closed (wait_until_closed == true) or block |
| // until the browser has initiated the close (wait_until_closed = false). |
| // |
| // When a tab is closed the browser does additional work via invoke later |
| // and may wait for messages from the renderer. Supplying a value of true to |
| // this method waits until all processing is done. Be careful with this, |
| // when closing the last tab it is possible for the browser to shutdown BEFORE |
| // the tab has completely closed. In other words, this may NOT be sent for |
| // the last tab. |
| bool Close(bool wait_until_closed) WARN_UNUSED_RESULT; |
| |
| // Starts a search within the current tab. The parameter |search_string| |
| // specifies what string to search for, |forward| specifies whether to search |
| // in forward direction, and |match_case| specifies case sensitivity |
| // (true=case sensitive). |find_next| specifies whether this is a new search |
| // or a continuation of the old one. |ordinal| is an optional parameter that |
| // returns the ordinal of the active match (also known as "the 7" part of |
| // "7 of 9"). A return value of -1 indicates failure. |
| int FindInPage(const std::wstring& search_string, FindInPageDirection forward, |
| FindInPageCase match_case, bool find_next, int* ordinal); |
| |
| bool GetCookies(const GURL& url, std::string* cookies) WARN_UNUSED_RESULT; |
| bool GetCookieByName(const GURL& url, |
| const std::string& name, |
| std::string* cookies) WARN_UNUSED_RESULT; |
| |
| #if defined(OS_WIN) |
| // The functions in this block are for external tabs, hence Windows only. |
| |
| // The container of an externally hosted tab calls this to reflect any |
| // accelerator keys that it did not process. This gives the tab a chance |
| // to handle the keys |
| bool ProcessUnhandledAccelerator(const MSG& msg) WARN_UNUSED_RESULT; |
| |
| // Ask the tab to set focus to either the first or last element on the page. |
| // When the restore_focus_to_view parameter is true, the render view |
| // associated with the current tab is informed that it is receiving focus. |
| // For external tabs only. |
| bool SetInitialFocus(bool reverse, bool restore_focus_to_view) |
| WARN_UNUSED_RESULT; |
| |
| // Navigates to a url in an externally hosted tab. |
| // This method accepts the same kinds of URL input that |
| // can be passed to Chrome on the command line. This is a synchronous call and |
| // hence blocks until the navigation completes. |
| AutomationMsg_NavigationResponseValues NavigateInExternalTab( |
| const GURL& url, const GURL& referrer) WARN_UNUSED_RESULT; |
| |
| AutomationMsg_NavigationResponseValues NavigateExternalTabAtIndex( |
| int index) WARN_UNUSED_RESULT; |
| |
| // Posts a message to the external tab. |
| void HandleMessageFromExternalHost(const std::string& message, |
| const std::string& origin, |
| const std::string& target); |
| #endif // defined(OS_WIN) |
| |
| // Sends off an asynchronous request for printing. |
| bool PrintAsync() WARN_UNUSED_RESULT; |
| |
| // Waits until the infobar count is |count|. |
| // Returns true on success. |
| bool WaitForInfoBarCount(size_t count) WARN_UNUSED_RESULT; |
| |
| // Uses the specified encoding to override encoding of the page in the tab. |
| bool OverrideEncoding(const std::string& encoding) WARN_UNUSED_RESULT; |
| |
| #if defined(OS_WIN) |
| // Resizes the tab window. |
| // The parent_window parameter allows a parent to be specified for the window |
| // passed in. |
| void Reposition(HWND window, HWND window_insert_after, int left, int top, |
| int width, int height, int flags, HWND parent_window); |
| |
| // Sends the selected context menu command to the chrome instance |
| void SendContextMenuCommand(int selected_command); |
| |
| // To be called when the window hosting the tab has moved. |
| void OnHostMoved(); |
| #endif // defined(OS_WIN) |
| |
| // Selects all contents on the page. |
| void SelectAll(); |
| |
| // Edit operations on the page. |
| void Cut(); |
| void Copy(); |
| void Paste(); |
| |
| // These handlers issue asynchronous Reload, Stop and SaveAs notifications to |
| // the chrome instance. |
| void ReloadAsync(); |
| void StopAsync(); |
| void SaveAsAsync(); |
| |
| // Notify the JavaScript engine in the render to change its parameters |
| // while performing stress testing. See |
| // |ViewHostMsg_JavaScriptStressTestControl_Commands| in render_messages.h |
| // for information on the arguments. |
| void JavaScriptStressTestControl(int cmd, int param); |
| |
| // Calls delegates |
| void AddObserver(TabProxyDelegate* observer); |
| void RemoveObserver(TabProxyDelegate* observer); |
| bool OnMessageReceived(const IPC::Message& message); |
| void OnChannelError(); |
| protected: |
| virtual ~TabProxy(); |
| |
| // Called when tracking the first object. Used for reference counting |
| // purposes. |
| void FirstObjectAdded(); |
| |
| // Called when no longer tracking any objects. Used for reference counting |
| // purposes. |
| void LastObjectRemoved(); |
| |
| // Caller takes ownership over returned value. Returns NULL on failure. |
| base::Value* ExecuteAndExtractValue( |
| const std::wstring& frame_xpath, |
| const std::wstring& jscript) WARN_UNUSED_RESULT; |
| |
| private: |
| base::Lock list_lock_; // Protects the observers_list_. |
| ObserverList<TabProxyDelegate> observers_list_; |
| DISALLOW_COPY_AND_ASSIGN(TabProxy); |
| }; |
| |
| #endif // CHROME_TEST_AUTOMATION_TAB_PROXY_H_ |