Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / webview / webview_api.h
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_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_
7
8 #include "chrome/browser/extensions/api/capture_web_contents_function.h"
9 #include "chrome/browser/extensions/api/execute_code_function.h"
10 #include "chrome/browser/guestview/webview/webview_guest.h"
11
12 // WARNING: Webview could be loaded in an unblessed context, thus any new
13 // APIs must extend WebviewExtensionFunction/WebviewExecuteCodeFunction which
14 // do a process ID check to prevent abuse by normal renderer processes.
15 // TODO(guohui): refactor WebviewExecuteCodeFunction to also extend
16 // WebviewExtensionFunction.
17 namespace extensions {
18
19 // An abstract base class for async webview APIs. It does a process ID check
20 // in RunImpl, and then calls RunImplSafe which must be overriden by all
21 // subclasses.
22 class WebviewExtensionFunction : public AsyncExtensionFunction {
23  public:
24    WebviewExtensionFunction() {}
25
26  protected:
27   virtual ~WebviewExtensionFunction() {}
28
29   // ExtensionFunction implementation.
30   virtual bool RunImpl() OVERRIDE FINAL;
31
32  private:
33   virtual bool RunImplSafe(WebViewGuest* guest) = 0;
34 };
35
36 class WebviewClearDataFunction : public WebviewExtensionFunction {
37  public:
38   DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
39
40   WebviewClearDataFunction();
41
42  protected:
43   virtual ~WebviewClearDataFunction();
44
45  private:
46   // WebviewExtensionFunction implementation.
47   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
48
49   uint32 GetRemovalMask();
50   void ClearDataDone();
51
52   // Removal start time.
53   base::Time remove_since_;
54   // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
55   uint32 remove_mask_;
56   // Tracks any data related or parse errors.
57   bool bad_message_;
58
59   DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
60 };
61
62 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
63  public:
64   WebviewExecuteCodeFunction();
65
66  protected:
67   virtual ~WebviewExecuteCodeFunction();
68
69   // Initialize |details_| if it hasn't already been.
70   virtual bool Init() OVERRIDE;
71   virtual bool ShouldInsertCSS() const OVERRIDE;
72   virtual bool CanExecuteScriptOnPage() OVERRIDE;
73   // Guarded by a process ID check.
74   virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL;
75   virtual bool IsWebView() const OVERRIDE;
76
77  private:
78   // Contains extension resource built from path of file which is
79   // specified in JSON arguments.
80   extensions::ExtensionResource resource_;
81
82   int guest_instance_id_;
83
84   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
85 };
86
87 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
88  public:
89   WebviewExecuteScriptFunction();
90
91  protected:
92   virtual ~WebviewExecuteScriptFunction() {}
93
94   virtual void OnExecuteCodeFinished(const std::string& error,
95                                      int32 on_page_id,
96                                      const GURL& on_url,
97                                      const base::ListValue& result) OVERRIDE;
98
99   DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
100
101  private:
102   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
103 };
104
105 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
106  public:
107   WebviewInsertCSSFunction();
108
109  protected:
110   virtual ~WebviewInsertCSSFunction() {}
111
112   virtual bool ShouldInsertCSS() const OVERRIDE;
113
114   DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
115
116  private:
117   DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
118 };
119
120 class WebviewCaptureVisibleRegionFunction
121     : public extensions::CaptureWebContentsFunction {
122   DECLARE_EXTENSION_FUNCTION("webview.captureVisibleRegion",
123                              WEBVIEW_CAPTUREVISIBLEREGION);
124
125   WebviewCaptureVisibleRegionFunction();
126
127  protected:
128   virtual ~WebviewCaptureVisibleRegionFunction();
129
130  private:
131   // extensions::CaptureWebContentsFunction implementation.
132   virtual bool IsScreenshotEnabled() OVERRIDE;
133   virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
134   virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
135
136   DISALLOW_COPY_AND_ASSIGN(WebviewCaptureVisibleRegionFunction);
137 };
138
139 class WebviewSetZoomFunction : public WebviewExtensionFunction {
140  public:
141   DECLARE_EXTENSION_FUNCTION("webview.setZoom", WEBVIEW_SETZOOM);
142
143   WebviewSetZoomFunction();
144
145  protected:
146   virtual ~WebviewSetZoomFunction();
147
148  private:
149   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
150
151   DISALLOW_COPY_AND_ASSIGN(WebviewSetZoomFunction);
152 };
153
154 class WebviewGetZoomFunction : public WebviewExtensionFunction {
155  public:
156   DECLARE_EXTENSION_FUNCTION("webview.getZoom", WEBVIEW_GETZOOM);
157
158   WebviewGetZoomFunction();
159
160  protected:
161   virtual ~WebviewGetZoomFunction();
162
163  private:
164   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
165
166   DISALLOW_COPY_AND_ASSIGN(WebviewGetZoomFunction);
167 };
168
169 class WebviewGoFunction : public WebviewExtensionFunction {
170  public:
171   DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
172
173   WebviewGoFunction();
174
175  protected:
176   virtual ~WebviewGoFunction();
177
178  private:
179   // WebviewExtensionFunction implementation.
180   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
181
182   DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
183 };
184
185 class WebviewReloadFunction : public WebviewExtensionFunction {
186  public:
187   DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
188
189   WebviewReloadFunction();
190
191  protected:
192   virtual ~WebviewReloadFunction();
193
194  private:
195   // WebviewExtensionFunction implementation.
196   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
197
198   DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
199 };
200
201 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
202  public:
203   DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
204
205   WebviewSetPermissionFunction();
206
207  protected:
208   virtual ~WebviewSetPermissionFunction();
209
210  private:
211   // WebviewExtensionFunction implementation.
212   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
213
214   DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
215 };
216
217 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
218  public:
219   DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
220                              WEBVIEW_OVERRIDEUSERAGENT);
221
222   WebviewOverrideUserAgentFunction();
223
224  protected:
225   virtual ~WebviewOverrideUserAgentFunction();
226
227  private:
228   // WebviewExtensionFunction implementation.
229   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
230
231   DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
232 };
233
234 class WebviewStopFunction : public WebviewExtensionFunction {
235  public:
236   DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
237
238   WebviewStopFunction();
239
240  protected:
241   virtual ~WebviewStopFunction();
242
243  private:
244   // WebviewExtensionFunction implementation.
245   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
246
247   DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
248 };
249
250 class WebviewTerminateFunction : public WebviewExtensionFunction {
251  public:
252   DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
253
254   WebviewTerminateFunction();
255
256  protected:
257   virtual ~WebviewTerminateFunction();
258
259  private:
260   // WebviewExtensionFunction implementation.
261   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
262
263   DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
264 };
265
266 }  // namespace extensions
267
268 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_