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