1// Copyright (c) 2013 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_CHROMEDRIVER_CHROME_WEB_VIEW_IMPL_H_ 6#define CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_IMPL_H_ 7 8#include <list> 9#include <string> 10 11#include "base/callback.h" 12#include "base/compiler_specific.h" 13#include "base/memory/scoped_ptr.h" 14#include "chrome/test/chromedriver/chrome/web_view.h" 15 16namespace base { 17class DictionaryValue; 18class ListValue; 19class Value; 20} 21 22struct BrowserInfo; 23class DebuggerTracker; 24struct DeviceMetrics; 25class DevToolsClient; 26class DomTracker; 27class FrameTracker; 28class GeolocationOverrideManager; 29class MobileEmulationOverrideManager; 30class HeapSnapshotTaker; 31struct KeyEvent; 32struct MouseEvent; 33class NavigationTracker; 34class Status; 35 36class WebViewImpl : public WebView { 37 public: 38 WebViewImpl(const std::string& id, 39 const BrowserInfo* browser_info, 40 scoped_ptr<DevToolsClient> client); 41 WebViewImpl(const std::string& id, 42 const BrowserInfo* browser_info, 43 scoped_ptr<DevToolsClient> client, 44 const DeviceMetrics* device_metrics); 45 virtual ~WebViewImpl(); 46 47 // Overridden from WebView: 48 virtual std::string GetId() OVERRIDE; 49 virtual bool WasCrashed() OVERRIDE; 50 virtual Status ConnectIfNecessary() OVERRIDE; 51 virtual Status HandleReceivedEvents() OVERRIDE; 52 virtual Status Load(const std::string& url) OVERRIDE; 53 virtual Status Reload() OVERRIDE; 54 virtual Status EvaluateScript(const std::string& frame, 55 const std::string& expression, 56 scoped_ptr<base::Value>* result) OVERRIDE; 57 virtual Status CallFunction(const std::string& frame, 58 const std::string& function, 59 const base::ListValue& args, 60 scoped_ptr<base::Value>* result) OVERRIDE; 61 virtual Status CallAsyncFunction(const std::string& frame, 62 const std::string& function, 63 const base::ListValue& args, 64 const base::TimeDelta& timeout, 65 scoped_ptr<base::Value>* result) OVERRIDE; 66 virtual Status CallUserAsyncFunction( 67 const std::string& frame, 68 const std::string& function, 69 const base::ListValue& args, 70 const base::TimeDelta& timeout, 71 scoped_ptr<base::Value>* result) OVERRIDE; 72 virtual Status GetFrameByFunction(const std::string& frame, 73 const std::string& function, 74 const base::ListValue& args, 75 std::string* out_frame) OVERRIDE; 76 virtual Status DispatchMouseEvents( 77 const std::list<MouseEvent>& events, const std::string& frame) OVERRIDE; 78 virtual Status DispatchTouchEvent(const TouchEvent& event) OVERRIDE; 79 virtual Status DispatchTouchEvents( 80 const std::list<TouchEvent>& events) OVERRIDE; 81 virtual Status DispatchKeyEvents(const std::list<KeyEvent>& events) OVERRIDE; 82 virtual Status GetCookies(scoped_ptr<base::ListValue>* cookies) OVERRIDE; 83 virtual Status DeleteCookie(const std::string& name, 84 const std::string& url) OVERRIDE; 85 virtual Status WaitForPendingNavigations(const std::string& frame_id, 86 const base::TimeDelta& timeout, 87 bool stop_load_on_timeout) OVERRIDE; 88 virtual Status IsPendingNavigation( 89 const std::string& frame_id, bool* is_pending) OVERRIDE; 90 virtual JavaScriptDialogManager* GetJavaScriptDialogManager() OVERRIDE; 91 virtual Status OverrideGeolocation(const Geoposition& geoposition) OVERRIDE; 92 virtual Status CaptureScreenshot(std::string* screenshot) OVERRIDE; 93 virtual Status SetFileInputFiles( 94 const std::string& frame, 95 const base::DictionaryValue& element, 96 const std::vector<base::FilePath>& files) OVERRIDE; 97 virtual Status TakeHeapSnapshot(scoped_ptr<base::Value>* snapshot) OVERRIDE; 98 virtual Status StartProfile() OVERRIDE; 99 virtual Status EndProfile(scoped_ptr<base::Value>* profile_data) OVERRIDE; 100 101 private: 102 Status CallAsyncFunctionInternal(const std::string& frame, 103 const std::string& function, 104 const base::ListValue& args, 105 bool is_user_supplied, 106 const base::TimeDelta& timeout, 107 scoped_ptr<base::Value>* result); 108 Status IsNotPendingNavigation(const std::string& frame_id, 109 bool* is_not_pending); 110 111 Status InitProfileInternal(); 112 Status StopProfileInternal(); 113 114 std::string id_; 115 const BrowserInfo* browser_info_; 116 scoped_ptr<DomTracker> dom_tracker_; 117 scoped_ptr<FrameTracker> frame_tracker_; 118 scoped_ptr<NavigationTracker> navigation_tracker_; 119 scoped_ptr<JavaScriptDialogManager> dialog_manager_; 120 scoped_ptr<MobileEmulationOverrideManager> mobile_emulation_override_manager_; 121 scoped_ptr<GeolocationOverrideManager> geolocation_override_manager_; 122 scoped_ptr<HeapSnapshotTaker> heap_snapshot_taker_; 123 scoped_ptr<DebuggerTracker> debugger_; 124 scoped_ptr<DevToolsClient> client_; 125}; 126 127namespace internal { 128 129enum EvaluateScriptReturnType { 130 ReturnByValue, 131 ReturnByObject 132}; 133Status EvaluateScript(DevToolsClient* client, 134 int context_id, 135 const std::string& expression, 136 EvaluateScriptReturnType return_type, 137 scoped_ptr<base::DictionaryValue>* result); 138Status EvaluateScriptAndGetObject(DevToolsClient* client, 139 int context_id, 140 const std::string& expression, 141 bool* got_object, 142 std::string* object_id); 143Status EvaluateScriptAndGetValue(DevToolsClient* client, 144 int context_id, 145 const std::string& expression, 146 scoped_ptr<base::Value>* result); 147Status ParseCallFunctionResult(const base::Value& temp_result, 148 scoped_ptr<base::Value>* result); 149Status GetNodeIdFromFunction(DevToolsClient* client, 150 int context_id, 151 const std::string& function, 152 const base::ListValue& args, 153 bool* found_node, 154 int* node_id); 155 156} // namespace internal 157 158#endif // CHROME_TEST_CHROMEDRIVER_CHROME_WEB_VIEW_IMPL_H_ 159