// Copyright (c) 2013 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_CHROMEDRIVER_CHROME_WEB_VIEW_H_ #define CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_H_ #include <list> #include <string> #include <vector> #include "base/memory/scoped_ptr.h" namespace base { class DictionaryValue; class FilePath; class ListValue; class TimeDelta; class Value; } class DevToolsClient; struct Geoposition; class JavaScriptDialogManager; struct KeyEvent; struct MouseEvent; struct TouchEvent; class Status; class WebView { public: virtual ~WebView() {} // Return the id for this WebView. virtual std::string GetId() = 0; // Return true if the web view was crashed. virtual bool WasCrashed() = 0; // Make DevToolsCient connect to DevTools if it is disconnected. virtual Status ConnectIfNecessary() = 0; // Handles events that have been received but not yet handled. virtual Status HandleReceivedEvents() = 0; // Load a given URL in the main frame. virtual Status Load(const std::string& url) = 0; // Reload the current page. virtual Status Reload() = 0; // Evaluates a JavaScript expression in a specified frame and returns // the result. |frame| is a frame ID or an empty string for the main frame. // If the expression evaluates to a element, it will be bound to a unique ID // (per frame) and the ID will be returned. // |result| will never be NULL on success. virtual Status EvaluateScript(const std::string& frame, const std::string& expression, scoped_ptr<base::Value>* result) = 0; // Calls a JavaScript function in a specified frame with the given args and // returns the result. |frame| is a frame ID or an empty string for the main // frame. |args| may contain IDs that refer to previously returned elements. // These will be translated back to their referred objects before invoking the // function. // |result| will never be NULL on success. virtual Status CallFunction(const std::string& frame, const std::string& function, const base::ListValue& args, scoped_ptr<base::Value>* result) = 0; // Calls a JavaScript function in a specified frame with the given args and // two callbacks. The first may be invoked with a value to return to the user. // The second may be used to report an error. This function waits until // one of the callbacks is invoked or the timeout occurs. // |result| will never be NULL on success. virtual Status CallAsyncFunction(const std::string& frame, const std::string& function, const base::ListValue& args, const base::TimeDelta& timeout, scoped_ptr<base::Value>* result) = 0; // Same as |CallAsyncFunction|, except no additional error callback is passed // to the function. Also, |kJavaScriptError| or |kScriptTimeout| is used // as the error code instead of |kUnknownError| in appropriate cases. // |result| will never be NULL on success. virtual Status CallUserAsyncFunction(const std::string& frame, const std::string& function, const base::ListValue& args, const base::TimeDelta& timeout, scoped_ptr<base::Value>* result) = 0; // Gets the frame ID for a frame element returned by invoking the given // JavaScript function. |frame| is a frame ID or an empty string for the main // frame. virtual Status GetFrameByFunction(const std::string& frame, const std::string& function, const base::ListValue& args, std::string* out_frame) = 0; // Dispatch a sequence of mouse events. virtual Status DispatchMouseEvents(const std::list<MouseEvent>& events, const std::string& frame) = 0; // Dispatch a single touch event. virtual Status DispatchTouchEvent(const TouchEvent& event) = 0; // Dispatch a sequence of touch events. virtual Status DispatchTouchEvents(const std::list<TouchEvent>& events) = 0; // Dispatch a sequence of key events. virtual Status DispatchKeyEvents(const std::list<KeyEvent>& events) = 0; // Return all the cookies visible to the current page. virtual Status GetCookies(scoped_ptr<base::ListValue>* cookies) = 0; // Delete the cookie with the given name. virtual Status DeleteCookie(const std::string& name, const std::string& url) = 0; // Waits until all pending navigations have completed in the given frame. // If |frame_id| is "", waits for navigations on the main frame. // If a modal dialog appears while waiting, kUnexpectedAlertOpen will be // returned. // If timeout is exceeded, will return a timeout status. // If |stop_load_on_timeout| is true, will attempt to stop the page load on // timeout before returning the timeout status. virtual Status WaitForPendingNavigations(const std::string& frame_id, const base::TimeDelta& timeout, bool stop_load_on_timeout) = 0; // Returns whether the frame is pending navigation. virtual Status IsPendingNavigation( const std::string& frame_id, bool* is_pending) = 0; // Returns the JavaScriptDialogManager. Never null. virtual JavaScriptDialogManager* GetJavaScriptDialogManager() = 0; // Overrides normal geolocation with a given geoposition. virtual Status OverrideGeolocation(const Geoposition& geoposition) = 0; // Captures the visible portions of the web view as a base64-encoded PNG. virtual Status CaptureScreenshot(std::string* screenshot) = 0; // Set files in a file input element. // |element| is the WebElement JSON Object of the input element. virtual Status SetFileInputFiles( const std::string& frame, const base::DictionaryValue& element, const std::vector<base::FilePath>& files) = 0; // Take a heap snapshot which can build up a graph of Javascript objects. // A raw heap snapshot is in JSON format: // 1. A meta data element "snapshot" about how to parse data elements. // 2. Data elements: "nodes", "edges", "strings". virtual Status TakeHeapSnapshot(scoped_ptr<base::Value>* snapshot) = 0; }; #endif // CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_H_