• 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_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:
WebviewExtensionFunction()25    WebviewExtensionFunction() {}
26 
27  protected:
~WebviewExtensionFunction()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);
WebviewContextMenusCreateFunction()41   WebviewContextMenusCreateFunction() {}
42 
43  protected:
~WebviewContextMenusCreateFunction()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);
WebviewContextMenusUpdateFunction()57   WebviewContextMenusUpdateFunction() {}
58 
59  protected:
~WebviewContextMenusUpdateFunction()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);
WebviewContextMenusRemoveFunction()73   WebviewContextMenusRemoveFunction() {}
74 
75  protected:
~WebviewContextMenusRemoveFunction()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);
WebviewContextMenusRemoveAllFunction()89   WebviewContextMenusRemoveAllFunction() {}
90 
91  protected:
~WebviewContextMenusRemoveAllFunction()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 WebviewNavigateFunction : public WebviewExtensionFunction {
102  public:
103   DECLARE_EXTENSION_FUNCTION("webview.navigate", WEBVIEW_NAVIGATE);
WebviewNavigateFunction()104   WebviewNavigateFunction() {}
105 
106  protected:
~WebviewNavigateFunction()107   virtual ~WebviewNavigateFunction() {}
108 
109  private:
110   // WebviewExtensionFunction implementation.
111   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
112 
113   DISALLOW_COPY_AND_ASSIGN(WebviewNavigateFunction);
114 };
115 
116 class WebviewClearDataFunction : public WebviewExtensionFunction {
117  public:
118   DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
119 
120   WebviewClearDataFunction();
121 
122  protected:
123   virtual ~WebviewClearDataFunction();
124 
125  private:
126   // WebviewExtensionFunction implementation.
127   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
128 
129   uint32 GetRemovalMask();
130   void ClearDataDone();
131 
132   // Removal start time.
133   base::Time remove_since_;
134   // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
135   uint32 remove_mask_;
136   // Tracks any data related or parse errors.
137   bool bad_message_;
138 
139   DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
140 };
141 
142 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
143  public:
144   WebviewExecuteCodeFunction();
145 
146  protected:
147   virtual ~WebviewExecuteCodeFunction();
148 
149   // Initialize |details_| if it hasn't already been.
150   virtual bool Init() OVERRIDE;
151   virtual bool ShouldInsertCSS() const OVERRIDE;
152   virtual bool CanExecuteScriptOnPage() OVERRIDE;
153   // Guarded by a process ID check.
154   virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL;
155   virtual bool IsWebView() const OVERRIDE;
156   virtual const GURL& GetWebViewSrc() const OVERRIDE;
157 
158  private:
159   // Contains extension resource built from path of file which is
160   // specified in JSON arguments.
161   extensions::ExtensionResource resource_;
162 
163   int guest_instance_id_;
164 
165   GURL guest_src_;
166 
167   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
168 };
169 
170 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
171  public:
172   WebviewExecuteScriptFunction();
173 
174  protected:
~WebviewExecuteScriptFunction()175   virtual ~WebviewExecuteScriptFunction() {}
176 
177   virtual void OnExecuteCodeFinished(const std::string& error,
178                                      int32 on_page_id,
179                                      const GURL& on_url,
180                                      const base::ListValue& result) OVERRIDE;
181 
182   DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
183 
184  private:
185   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
186 };
187 
188 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
189  public:
190   WebviewInsertCSSFunction();
191 
192  protected:
~WebviewInsertCSSFunction()193   virtual ~WebviewInsertCSSFunction() {}
194 
195   virtual bool ShouldInsertCSS() const OVERRIDE;
196 
197   DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
198 
199  private:
200   DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
201 };
202 
203 class WebviewCaptureVisibleRegionFunction
204     : public extensions::CaptureWebContentsFunction {
205   DECLARE_EXTENSION_FUNCTION("webview.captureVisibleRegion",
206                              WEBVIEW_CAPTUREVISIBLEREGION);
207 
208   WebviewCaptureVisibleRegionFunction();
209 
210  protected:
211   virtual ~WebviewCaptureVisibleRegionFunction();
212 
213  private:
214   // extensions::CaptureWebContentsFunction implementation.
215   virtual bool IsScreenshotEnabled() OVERRIDE;
216   virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
217   virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
218 
219   DISALLOW_COPY_AND_ASSIGN(WebviewCaptureVisibleRegionFunction);
220 };
221 
222 class WebviewSetNameFunction : public WebviewExtensionFunction {
223  public:
224   DECLARE_EXTENSION_FUNCTION("webview.setName", WEBVIEW_SETNAME);
225 
226   WebviewSetNameFunction();
227 
228  protected:
229   virtual ~WebviewSetNameFunction();
230 
231  private:
232   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
233 
234   DISALLOW_COPY_AND_ASSIGN(WebviewSetNameFunction);
235 };
236 
237 class WebviewSetZoomFunction : public WebviewExtensionFunction {
238  public:
239   DECLARE_EXTENSION_FUNCTION("webview.setZoom", WEBVIEW_SETZOOM);
240 
241   WebviewSetZoomFunction();
242 
243  protected:
244   virtual ~WebviewSetZoomFunction();
245 
246  private:
247   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
248 
249   DISALLOW_COPY_AND_ASSIGN(WebviewSetZoomFunction);
250 };
251 
252 class WebviewGetZoomFunction : public WebviewExtensionFunction {
253  public:
254   DECLARE_EXTENSION_FUNCTION("webview.getZoom", WEBVIEW_GETZOOM);
255 
256   WebviewGetZoomFunction();
257 
258  protected:
259   virtual ~WebviewGetZoomFunction();
260 
261  private:
262   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
263 
264   DISALLOW_COPY_AND_ASSIGN(WebviewGetZoomFunction);
265 };
266 
267 class WebviewFindFunction : public WebviewExtensionFunction {
268  public:
269   DECLARE_EXTENSION_FUNCTION("webview.find", WEBVIEW_FIND);
270 
271   WebviewFindFunction();
272 
273   // Exposes SendResponse() for use by WebviewFindHelper.
274   using WebviewExtensionFunction::SendResponse;
275 
276  protected:
277   virtual ~WebviewFindFunction();
278 
279  private:
280   // WebviewExtensionFunction implementation.
281   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
282 
283   DISALLOW_COPY_AND_ASSIGN(WebviewFindFunction);
284 };
285 
286 class WebviewStopFindingFunction : public WebviewExtensionFunction {
287  public:
288   DECLARE_EXTENSION_FUNCTION("webview.stopFinding", WEBVIEW_STOPFINDING);
289 
290   WebviewStopFindingFunction();
291 
292  protected:
293   virtual ~WebviewStopFindingFunction();
294 
295  private:
296   // WebviewExtensionFunction implementation.
297   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
298 
299   DISALLOW_COPY_AND_ASSIGN(WebviewStopFindingFunction);
300 };
301 
302 class WebviewGoFunction : public WebviewExtensionFunction {
303  public:
304   DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
305 
306   WebviewGoFunction();
307 
308  protected:
309   virtual ~WebviewGoFunction();
310 
311  private:
312   // WebviewExtensionFunction implementation.
313   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
314 
315   DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
316 };
317 
318 class WebviewReloadFunction : public WebviewExtensionFunction {
319  public:
320   DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
321 
322   WebviewReloadFunction();
323 
324  protected:
325   virtual ~WebviewReloadFunction();
326 
327  private:
328   // WebviewExtensionFunction implementation.
329   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
330 
331   DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
332 };
333 
334 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
335  public:
336   DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
337 
338   WebviewSetPermissionFunction();
339 
340  protected:
341   virtual ~WebviewSetPermissionFunction();
342 
343  private:
344   // WebviewExtensionFunction implementation.
345   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
346 
347   DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
348 };
349 
350 class WebviewShowContextMenuFunction : public WebviewExtensionFunction {
351  public:
352   DECLARE_EXTENSION_FUNCTION("webview.showContextMenu",
353                              WEBVIEW_SHOWCONTEXTMENU);
354 
355   WebviewShowContextMenuFunction();
356 
357  protected:
358   virtual ~WebviewShowContextMenuFunction();
359 
360  private:
361   // WebviewExtensionFunction implementation.
362   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
363 
364   DISALLOW_COPY_AND_ASSIGN(WebviewShowContextMenuFunction);
365 };
366 
367 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
368  public:
369   DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
370                              WEBVIEW_OVERRIDEUSERAGENT);
371 
372   WebviewOverrideUserAgentFunction();
373 
374  protected:
375   virtual ~WebviewOverrideUserAgentFunction();
376 
377  private:
378   // WebviewExtensionFunction implementation.
379   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
380 
381   DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
382 };
383 
384 class WebviewStopFunction : public WebviewExtensionFunction {
385  public:
386   DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
387 
388   WebviewStopFunction();
389 
390  protected:
391   virtual ~WebviewStopFunction();
392 
393  private:
394   // WebviewExtensionFunction implementation.
395   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
396 
397   DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
398 };
399 
400 class WebviewTerminateFunction : public WebviewExtensionFunction {
401  public:
402   DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
403 
404   WebviewTerminateFunction();
405 
406  protected:
407   virtual ~WebviewTerminateFunction();
408 
409  private:
410   // WebviewExtensionFunction implementation.
411   virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
412 
413   DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
414 };
415 
416 }  // namespace extensions
417 
418 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_
419