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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_
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"
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 {
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
22 class WebviewExtensionFunction : public AsyncExtensionFunction {
24 WebviewExtensionFunction() {}
27 virtual ~WebviewExtensionFunction() {}
29 // ExtensionFunction implementation.
30 virtual bool RunImpl() OVERRIDE FINAL;
33 virtual bool RunImplSafe(WebViewGuest* guest) = 0;
36 class WebviewClearDataFunction : public WebviewExtensionFunction {
38 DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
40 WebviewClearDataFunction();
43 virtual ~WebviewClearDataFunction();
46 // WebviewExtensionFunction implementation.
47 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
49 uint32 GetRemovalMask();
52 // Removal start time.
53 base::Time remove_since_;
54 // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
56 // Tracks any data related or parse errors.
59 DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
62 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
64 WebviewExecuteCodeFunction();
67 virtual ~WebviewExecuteCodeFunction();
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;
78 // Contains extension resource built from path of file which is
79 // specified in JSON arguments.
80 extensions::ExtensionResource resource_;
82 int guest_instance_id_;
84 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
87 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
89 WebviewExecuteScriptFunction();
92 virtual ~WebviewExecuteScriptFunction() {}
94 virtual void OnExecuteCodeFinished(const std::string& error,
97 const base::ListValue& result) OVERRIDE;
99 DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
102 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
105 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
107 WebviewInsertCSSFunction();
110 virtual ~WebviewInsertCSSFunction() {}
112 virtual bool ShouldInsertCSS() const OVERRIDE;
114 DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
117 DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
120 class WebviewCaptureVisibleRegionFunction
121 : public extensions::CaptureWebContentsFunction {
122 DECLARE_EXTENSION_FUNCTION("webview.captureVisibleRegion",
123 WEBVIEW_CAPTUREVISIBLEREGION);
125 WebviewCaptureVisibleRegionFunction();
128 virtual ~WebviewCaptureVisibleRegionFunction();
131 // extensions::CaptureWebContentsFunction implementation.
132 virtual bool IsScreenshotEnabled() OVERRIDE;
133 virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
134 virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
136 DISALLOW_COPY_AND_ASSIGN(WebviewCaptureVisibleRegionFunction);
139 class WebviewSetZoomFunction : public WebviewExtensionFunction {
141 DECLARE_EXTENSION_FUNCTION("webview.setZoom", WEBVIEW_SETZOOM);
143 WebviewSetZoomFunction();
146 virtual ~WebviewSetZoomFunction();
149 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
151 DISALLOW_COPY_AND_ASSIGN(WebviewSetZoomFunction);
154 class WebviewGetZoomFunction : public WebviewExtensionFunction {
156 DECLARE_EXTENSION_FUNCTION("webview.getZoom", WEBVIEW_GETZOOM);
158 WebviewGetZoomFunction();
161 virtual ~WebviewGetZoomFunction();
164 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
166 DISALLOW_COPY_AND_ASSIGN(WebviewGetZoomFunction);
169 class WebviewGoFunction : public WebviewExtensionFunction {
171 DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
176 virtual ~WebviewGoFunction();
179 // WebviewExtensionFunction implementation.
180 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
182 DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
185 class WebviewReloadFunction : public WebviewExtensionFunction {
187 DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
189 WebviewReloadFunction();
192 virtual ~WebviewReloadFunction();
195 // WebviewExtensionFunction implementation.
196 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
198 DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
201 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
203 DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
205 WebviewSetPermissionFunction();
208 virtual ~WebviewSetPermissionFunction();
211 // WebviewExtensionFunction implementation.
212 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
214 DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
217 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
219 DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
220 WEBVIEW_OVERRIDEUSERAGENT);
222 WebviewOverrideUserAgentFunction();
225 virtual ~WebviewOverrideUserAgentFunction();
228 // WebviewExtensionFunction implementation.
229 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
231 DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
234 class WebviewStopFunction : public WebviewExtensionFunction {
236 DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
238 WebviewStopFunction();
241 virtual ~WebviewStopFunction();
244 // WebviewExtensionFunction implementation.
245 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
247 DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
250 class WebviewTerminateFunction : public WebviewExtensionFunction {
252 DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
254 WebviewTerminateFunction();
257 virtual ~WebviewTerminateFunction();
260 // WebviewExtensionFunction implementation.
261 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
263 DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
266 } // namespace extensions
268 #endif // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_