• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 struct BrowserInfo;
23 class DebuggerTracker;
24 struct DeviceMetrics;
25 class DevToolsClient;
26 class DomTracker;
27 class FrameTracker;
28 class GeolocationOverrideManager;
29 class MobileEmulationOverrideManager;
30 class HeapSnapshotTaker;
31 struct KeyEvent;
32 struct MouseEvent;
33 class NavigationTracker;
34 class Status;
35 
36 class 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 
127 namespace internal {
128 
129 enum EvaluateScriptReturnType {
130   ReturnByValue,
131   ReturnByObject
132 };
133 Status EvaluateScript(DevToolsClient* client,
134                       int context_id,
135                       const std::string& expression,
136                       EvaluateScriptReturnType return_type,
137                       scoped_ptr<base::DictionaryValue>* result);
138 Status EvaluateScriptAndGetObject(DevToolsClient* client,
139                                   int context_id,
140                                   const std::string& expression,
141                                   bool* got_object,
142                                   std::string* object_id);
143 Status EvaluateScriptAndGetValue(DevToolsClient* client,
144                                  int context_id,
145                                  const std::string& expression,
146                                  scoped_ptr<base::Value>* result);
147 Status ParseCallFunctionResult(const base::Value& temp_result,
148                                scoped_ptr<base::Value>* result);
149 Status 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