Upstream version 7.36.149.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/guest_view/web_view/web_view_find_helper.h"
11 #include "chrome/browser/guest_view/web_view/web_view_guest.h"
12
13 // WARNING: Webview could be loaded in an unblessed context, thus any new
14 // APIs must extend WebviewExtensionFunction/WebviewExecuteCodeFunction which
15 // do a process ID check to prevent abuse by normal renderer processes.
16 // TODO(guohui): refactor WebviewExecuteCodeFunction to also extend
17 // WebviewExtensionFunction.
18 namespace extensions {
19
20 // An abstract base class for async webview APIs. It does a process ID check
21 // in RunAsync, and then calls RunAsyncSafe which must be overriden by all
22 // subclasses.
23 class WebviewExtensionFunction : public AsyncExtensionFunction {
24  public:
25    WebviewExtensionFunction() {}
26
27  protected:
28   virtual ~WebviewExtensionFunction() {}
29
30   // ExtensionFunction implementation.
31   virtual bool RunAsync() OVERRIDE FINAL;
32
33  private:
34   virtual bool RunAsyncSafe(WebViewGuest* guest) = 0;
35 };
36
37 class WebviewContextMenusCreateFunction : public AsyncExtensionFunction {
38  public:
39   DECLARE_EXTENSION_FUNCTION("webview.contextMenusCreate",
40                              WEBVIEW_CONTEXTMENUSCREATE);
41   WebviewContextMenusCreateFunction() {}
42
43  protected:
44   virtual ~WebviewContextMenusCreateFunction() {}
45
46   // ExtensionFunction implementation.
47   virtual bool RunAsync() OVERRIDE;
48
49  private:
50   DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusCreateFunction);
51 };
52
53 class WebviewContextMenusUpdateFunction : public AsyncExtensionFunction {
54  public:
55   DECLARE_EXTENSION_FUNCTION("webview.contextMenusUpdate",
56                              WEBVIEW_CONTEXTMENUSUPDATE);
57   WebviewContextMenusUpdateFunction() {}
58
59  protected:
60   virtual ~WebviewContextMenusUpdateFunction() {}
61
62   // ExtensionFunction implementation.
63   virtual bool RunAsync() OVERRIDE;
64
65  private:
66   DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusUpdateFunction);
67 };
68
69 class WebviewContextMenusRemoveFunction : public AsyncExtensionFunction {
70  public:
71   DECLARE_EXTENSION_FUNCTION("webview.contextMenusRemove",
72                              WEBVIEW_CONTEXTMENUSREMOVE);
73   WebviewContextMenusRemoveFunction() {}
74
75  protected:
76   virtual ~WebviewContextMenusRemoveFunction() {}
77
78   // ExtensionFunction implementation.
79   virtual bool RunAsync() OVERRIDE;
80
81  private:
82   DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusRemoveFunction);
83 };
84
85 class WebviewContextMenusRemoveAllFunction : public AsyncExtensionFunction {
86  public:
87   DECLARE_EXTENSION_FUNCTION("webview.contextMenusRemoveAll",
88                              WEBVIEW_CONTEXTMENUSREMOVEALL);
89   WebviewContextMenusRemoveAllFunction() {}
90
91  protected:
92   virtual ~WebviewContextMenusRemoveAllFunction() {}
93
94   // ExtensionFunction implementation.
95   virtual bool RunAsync() OVERRIDE;
96
97  private:
98   DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusRemoveAllFunction);
99 };
100
101 class WebviewClearDataFunction : public WebviewExtensionFunction {
102  public:
103   DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
104
105   WebviewClearDataFunction();
106
107  protected:
108   virtual ~WebviewClearDataFunction();
109
110  private:
111   // WebviewExtensionFunction implementation.
112   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
113
114   uint32 GetRemovalMask();
115   void ClearDataDone();
116
117   // Removal start time.
118   base::Time remove_since_;
119   // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
120   uint32 remove_mask_;
121   // Tracks any data related or parse errors.
122   bool bad_message_;
123
124   DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
125 };
126
127 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
128  public:
129   WebviewExecuteCodeFunction();
130
131  protected:
132   virtual ~WebviewExecuteCodeFunction();
133
134   // Initialize |details_| if it hasn't already been.
135   virtual bool Init() OVERRIDE;
136   virtual bool ShouldInsertCSS() const OVERRIDE;
137   virtual bool CanExecuteScriptOnPage() OVERRIDE;
138   // Guarded by a process ID check.
139   virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL;
140   virtual bool IsWebView() const OVERRIDE;
141   virtual const GURL& GetWebViewSrc() const OVERRIDE;
142
143  private:
144   // Contains extension resource built from path of file which is
145   // specified in JSON arguments.
146   extensions::ExtensionResource resource_;
147
148   int guest_instance_id_;
149
150   GURL guest_src_;
151
152   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
153 };
154
155 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
156  public:
157   WebviewExecuteScriptFunction();
158
159  protected:
160   virtual ~WebviewExecuteScriptFunction() {}
161
162   virtual void OnExecuteCodeFinished(const std::string& error,
163                                      int32 on_page_id,
164                                      const GURL& on_url,
165                                      const base::ListValue& result) OVERRIDE;
166
167   DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
168
169  private:
170   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
171 };
172
173 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
174  public:
175   WebviewInsertCSSFunction();
176
177  protected:
178   virtual ~WebviewInsertCSSFunction() {}
179
180   virtual bool ShouldInsertCSS() const OVERRIDE;
181
182   DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
183
184  private:
185   DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
186 };
187
188 class WebviewCaptureVisibleRegionFunction
189     : public extensions::CaptureWebContentsFunction {
190   DECLARE_EXTENSION_FUNCTION("webview.captureVisibleRegion",
191                              WEBVIEW_CAPTUREVISIBLEREGION);
192
193   WebviewCaptureVisibleRegionFunction();
194
195  protected:
196   virtual ~WebviewCaptureVisibleRegionFunction();
197
198  private:
199   // extensions::CaptureWebContentsFunction implementation.
200   virtual bool IsScreenshotEnabled() OVERRIDE;
201   virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
202   virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
203
204   DISALLOW_COPY_AND_ASSIGN(WebviewCaptureVisibleRegionFunction);
205 };
206
207 class WebviewSetZoomFunction : public WebviewExtensionFunction {
208  public:
209   DECLARE_EXTENSION_FUNCTION("webview.setZoom", WEBVIEW_SETZOOM);
210
211   WebviewSetZoomFunction();
212
213  protected:
214   virtual ~WebviewSetZoomFunction();
215
216  private:
217   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
218
219   DISALLOW_COPY_AND_ASSIGN(WebviewSetZoomFunction);
220 };
221
222 class WebviewGetZoomFunction : public WebviewExtensionFunction {
223  public:
224   DECLARE_EXTENSION_FUNCTION("webview.getZoom", WEBVIEW_GETZOOM);
225
226   WebviewGetZoomFunction();
227
228  protected:
229   virtual ~WebviewGetZoomFunction();
230
231  private:
232   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
233
234   DISALLOW_COPY_AND_ASSIGN(WebviewGetZoomFunction);
235 };
236
237 class WebviewFindFunction : public WebviewExtensionFunction {
238  public:
239   DECLARE_EXTENSION_FUNCTION("webview.find", WEBVIEW_FIND);
240
241   WebviewFindFunction();
242
243   // Exposes SendResponse() for use by WebviewFindHelper.
244   using WebviewExtensionFunction::SendResponse;
245
246  protected:
247   virtual ~WebviewFindFunction();
248
249  private:
250   // WebviewExtensionFunction implementation.
251   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
252
253   DISALLOW_COPY_AND_ASSIGN(WebviewFindFunction);
254 };
255
256 class WebviewStopFindingFunction : public WebviewExtensionFunction {
257  public:
258   DECLARE_EXTENSION_FUNCTION("webview.stopFinding", WEBVIEW_STOPFINDING);
259
260   WebviewStopFindingFunction();
261
262  protected:
263   virtual ~WebviewStopFindingFunction();
264
265  private:
266   // WebviewExtensionFunction implementation.
267   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
268
269   DISALLOW_COPY_AND_ASSIGN(WebviewStopFindingFunction);
270 };
271
272 class WebviewGoFunction : public WebviewExtensionFunction {
273  public:
274   DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
275
276   WebviewGoFunction();
277
278  protected:
279   virtual ~WebviewGoFunction();
280
281  private:
282   // WebviewExtensionFunction implementation.
283   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
284
285   DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
286 };
287
288 class WebviewReloadFunction : public WebviewExtensionFunction {
289  public:
290   DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
291
292   WebviewReloadFunction();
293
294  protected:
295   virtual ~WebviewReloadFunction();
296
297  private:
298   // WebviewExtensionFunction implementation.
299   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
300
301   DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
302 };
303
304 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
305  public:
306   DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
307
308   WebviewSetPermissionFunction();
309
310  protected:
311   virtual ~WebviewSetPermissionFunction();
312
313  private:
314   // WebviewExtensionFunction implementation.
315   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
316
317   DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
318 };
319
320 class WebviewShowContextMenuFunction : public WebviewExtensionFunction {
321  public:
322   DECLARE_EXTENSION_FUNCTION("webview.showContextMenu",
323                              WEBVIEW_SHOWCONTEXTMENU);
324
325   WebviewShowContextMenuFunction();
326
327  protected:
328   virtual ~WebviewShowContextMenuFunction();
329
330  private:
331   // WebviewExtensionFunction implementation.
332   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
333
334   DISALLOW_COPY_AND_ASSIGN(WebviewShowContextMenuFunction);
335 };
336
337 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
338  public:
339   DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
340                              WEBVIEW_OVERRIDEUSERAGENT);
341
342   WebviewOverrideUserAgentFunction();
343
344  protected:
345   virtual ~WebviewOverrideUserAgentFunction();
346
347  private:
348   // WebviewExtensionFunction implementation.
349   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
350
351   DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
352 };
353
354 class WebviewStopFunction : public WebviewExtensionFunction {
355  public:
356   DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
357
358   WebviewStopFunction();
359
360  protected:
361   virtual ~WebviewStopFunction();
362
363  private:
364   // WebviewExtensionFunction implementation.
365   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
366
367   DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
368 };
369
370 class WebviewTerminateFunction : public WebviewExtensionFunction {
371  public:
372   DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
373
374   WebviewTerminateFunction();
375
376  protected:
377   virtual ~WebviewTerminateFunction();
378
379  private:
380   // WebviewExtensionFunction implementation.
381   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
382
383   DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
384 };
385
386 }  // namespace extensions
387
388 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_