• 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 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