ff333bd372497bd5d9d77c21af88d4bf2e4eb0fd
[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 WebviewGoFunction : public WebviewExtensionFunction {
140  public:
141   DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
142
143   WebviewGoFunction();
144
145  protected:
146   virtual ~WebviewGoFunction();
147
148  private:
149   // WebviewExtensionFunction implementation.
150   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
151
152   DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
153 };
154
155 class WebviewReloadFunction : public WebviewExtensionFunction {
156  public:
157   DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
158
159   WebviewReloadFunction();
160
161  protected:
162   virtual ~WebviewReloadFunction();
163
164  private:
165   // WebviewExtensionFunction implementation.
166   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
167
168   DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
169 };
170
171 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
172  public:
173   DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
174
175   WebviewSetPermissionFunction();
176
177  protected:
178   virtual ~WebviewSetPermissionFunction();
179
180  private:
181   // WebviewExtensionFunction implementation.
182   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
183
184   DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
185 };
186
187 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
188  public:
189   DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
190                              WEBVIEW_OVERRIDEUSERAGENT);
191
192   WebviewOverrideUserAgentFunction();
193
194  protected:
195   virtual ~WebviewOverrideUserAgentFunction();
196
197  private:
198   // WebviewExtensionFunction implementation.
199   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
200
201   DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
202 };
203
204 class WebviewStopFunction : public WebviewExtensionFunction {
205  public:
206   DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
207
208   WebviewStopFunction();
209
210  protected:
211   virtual ~WebviewStopFunction();
212
213  private:
214   // WebviewExtensionFunction implementation.
215   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
216
217   DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
218 };
219
220 class WebviewTerminateFunction : public WebviewExtensionFunction {
221  public:
222   DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
223
224   WebviewTerminateFunction();
225
226  protected:
227   virtual ~WebviewTerminateFunction();
228
229  private:
230   // WebviewExtensionFunction implementation.
231   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
232
233   DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
234 };
235
236 }  // namespace extensions
237
238 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_