12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <list> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DictionaryValue; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FilePath; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ListValue; 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TimeDelta; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Value; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class DevToolsClient; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct Geoposition; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class JavaScriptDialogManager; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct KeyEvent; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MouseEvent; 27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochstruct TouchEvent; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Status; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebView { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~WebView() {} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Return the id for this WebView. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual std::string GetId() = 0; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Return true if the web view was crashed. 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual bool WasCrashed() = 0; 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make DevToolsCient connect to DevTools if it is disconnected. 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status ConnectIfNecessary() = 0; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Handles events that have been received but not yet handled. 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Status HandleReceivedEvents() = 0; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Load a given URL in the main frame. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status Load(const std::string& url) = 0; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Reload the current page. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status Reload() = 0; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Evaluates a JavaScript expression in a specified frame and returns 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the result. |frame| is a frame ID or an empty string for the main frame. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the expression evaluates to a element, it will be bound to a unique ID 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (per frame) and the ID will be returned. 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |result| will never be NULL on success. 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status EvaluateScript(const std::string& frame, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& expression, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value>* result) = 0; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Calls a JavaScript function in a specified frame with the given args and 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // returns the result. |frame| is a frame ID or an empty string for the main 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // frame. |args| may contain IDs that refer to previously returned elements. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These will be translated back to their referred objects before invoking the 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // function. 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |result| will never be NULL on success. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status CallFunction(const std::string& frame, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& function, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::ListValue& args, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::Value>* result) = 0; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Calls a JavaScript function in a specified frame with the given args and 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // two callbacks. The first may be invoked with a value to return to the user. 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The second may be used to report an error. This function waits until 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // one of the callbacks is invoked or the timeout occurs. 76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |result| will never be NULL on success. 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual Status CallAsyncFunction(const std::string& frame, 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& function, 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue& args, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::TimeDelta& timeout, 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value>* result) = 0; 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Same as |CallAsyncFunction|, except no additional error callback is passed 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to the function. Also, |kJavaScriptError| or |kScriptTimeout| is used 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // as the error code instead of |kUnknownError| in appropriate cases. 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // |result| will never be NULL on success. 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual Status CallUserAsyncFunction(const std::string& frame, 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& function, 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue& args, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::TimeDelta& timeout, 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value>* result) = 0; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the frame ID for a frame element returned by invoking the given 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // JavaScript function. |frame| is a frame ID or an empty string for the main 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // frame. 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status GetFrameByFunction(const std::string& frame, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& function, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::ListValue& args, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* out_frame) = 0; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Dispatch a sequence of mouse events. 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual Status DispatchMouseEvents(const std::list<MouseEvent>& events, 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& frame) = 0; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Dispatch a single touch event. 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual Status DispatchTouchEvent(const TouchEvent& event) = 0; 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 108d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Dispatch a sequence of touch events. 109d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Status DispatchTouchEvents(const std::list<TouchEvent>& events) = 0; 110d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Dispatch a sequence of key events. 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status DispatchKeyEvents(const std::list<KeyEvent>& events) = 0; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Return all the cookies visible to the current page. 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status GetCookies(scoped_ptr<base::ListValue>* cookies) = 0; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Delete the cookie with the given name. 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status DeleteCookie(const std::string& name, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& url) = 0; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Waits until all pending navigations have completed in the given frame. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |frame_id| is "", waits for navigations on the main frame. 12390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // If a modal dialog appears while waiting, kUnexpectedAlertOpen will be 12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // returned. 125424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // If timeout is exceeded, will return a timeout status. 126424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // If |stop_load_on_timeout| is true, will attempt to stop the page load on 127424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // timeout before returning the timeout status. 128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual Status WaitForPendingNavigations(const std::string& frame_id, 129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const base::TimeDelta& timeout, 130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool stop_load_on_timeout) = 0; 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether the frame is pending navigation. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status IsPendingNavigation( 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& frame_id, bool* is_pending) = 0; 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the JavaScriptDialogManager. Never null. 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual JavaScriptDialogManager* GetJavaScriptDialogManager() = 0; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Overrides normal geolocation with a given geoposition. 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual Status OverrideGeolocation(const Geoposition& geoposition) = 0; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Captures the visible portions of the web view as a base64-encoded PNG. 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Status CaptureScreenshot(std::string* screenshot) = 0; 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set files in a file input element. 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |element| is the WebElement JSON Object of the input element. 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual Status SetFileInputFiles( 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& frame, 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& element, 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<base::FilePath>& files) = 0; 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 152d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Take a heap snapshot which can build up a graph of Javascript objects. 153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // A raw heap snapshot is in JSON format: 154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // 1. A meta data element "snapshot" about how to parse data elements. 155d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // 2. Data elements: "nodes", "edges", "strings". 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual Status TakeHeapSnapshot(scoped_ptr<base::Value>* snapshot) = 0; 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Start recording Javascript CPU Profile. 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual Status StartProfile() = 0; 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Stop recording Javascript CPU Profile and returns a graph of 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // CPUProfile objects. The format for the captured profile is defined 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // (by DevTools) in protocol.json. 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual Status EndProfile(scoped_ptr<base::Value>* profile_data) = 0; 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_H_ 168