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/guest_view/web_view/web_view_find_helper.h"
11 #include "chrome/browser/guest_view/web_view/web_view_guest.h"
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 {
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
23 class WebviewExtensionFunction : public AsyncExtensionFunction {
25 WebviewExtensionFunction() {}
28 virtual ~WebviewExtensionFunction() {}
30 // ExtensionFunction implementation.
31 virtual bool RunAsync() OVERRIDE FINAL;
34 virtual bool RunAsyncSafe(WebViewGuest* guest) = 0;
37 class WebviewContextMenusCreateFunction : public AsyncExtensionFunction {
39 DECLARE_EXTENSION_FUNCTION("webview.contextMenusCreate",
40 WEBVIEW_CONTEXTMENUSCREATE);
41 WebviewContextMenusCreateFunction() {}
44 virtual ~WebviewContextMenusCreateFunction() {}
46 // ExtensionFunction implementation.
47 virtual bool RunAsync() OVERRIDE;
50 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusCreateFunction);
53 class WebviewContextMenusUpdateFunction : public AsyncExtensionFunction {
55 DECLARE_EXTENSION_FUNCTION("webview.contextMenusUpdate",
56 WEBVIEW_CONTEXTMENUSUPDATE);
57 WebviewContextMenusUpdateFunction() {}
60 virtual ~WebviewContextMenusUpdateFunction() {}
62 // ExtensionFunction implementation.
63 virtual bool RunAsync() OVERRIDE;
66 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusUpdateFunction);
69 class WebviewContextMenusRemoveFunction : public AsyncExtensionFunction {
71 DECLARE_EXTENSION_FUNCTION("webview.contextMenusRemove",
72 WEBVIEW_CONTEXTMENUSREMOVE);
73 WebviewContextMenusRemoveFunction() {}
76 virtual ~WebviewContextMenusRemoveFunction() {}
78 // ExtensionFunction implementation.
79 virtual bool RunAsync() OVERRIDE;
82 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusRemoveFunction);
85 class WebviewContextMenusRemoveAllFunction : public AsyncExtensionFunction {
87 DECLARE_EXTENSION_FUNCTION("webview.contextMenusRemoveAll",
88 WEBVIEW_CONTEXTMENUSREMOVEALL);
89 WebviewContextMenusRemoveAllFunction() {}
92 virtual ~WebviewContextMenusRemoveAllFunction() {}
94 // ExtensionFunction implementation.
95 virtual bool RunAsync() OVERRIDE;
98 DISALLOW_COPY_AND_ASSIGN(WebviewContextMenusRemoveAllFunction);
101 class WebviewClearDataFunction : public WebviewExtensionFunction {
103 DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
105 WebviewClearDataFunction();
108 virtual ~WebviewClearDataFunction();
111 // WebviewExtensionFunction implementation.
112 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
114 uint32 GetRemovalMask();
115 void ClearDataDone();
117 // Removal start time.
118 base::Time remove_since_;
119 // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
121 // Tracks any data related or parse errors.
124 DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
127 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
129 WebviewExecuteCodeFunction();
132 virtual ~WebviewExecuteCodeFunction();
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;
144 // Contains extension resource built from path of file which is
145 // specified in JSON arguments.
146 extensions::ExtensionResource resource_;
148 int guest_instance_id_;
152 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
155 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
157 WebviewExecuteScriptFunction();
160 virtual ~WebviewExecuteScriptFunction() {}
162 virtual void OnExecuteCodeFinished(const std::string& error,
165 const base::ListValue& result) OVERRIDE;
167 DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
170 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
173 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
175 WebviewInsertCSSFunction();
178 virtual ~WebviewInsertCSSFunction() {}
180 virtual bool ShouldInsertCSS() const OVERRIDE;
182 DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
185 DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
188 class WebviewCaptureVisibleRegionFunction
189 : public extensions::CaptureWebContentsFunction {
190 DECLARE_EXTENSION_FUNCTION("webview.captureVisibleRegion",
191 WEBVIEW_CAPTUREVISIBLEREGION);
193 WebviewCaptureVisibleRegionFunction();
196 virtual ~WebviewCaptureVisibleRegionFunction();
199 // extensions::CaptureWebContentsFunction implementation.
200 virtual bool IsScreenshotEnabled() OVERRIDE;
201 virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
202 virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
204 DISALLOW_COPY_AND_ASSIGN(WebviewCaptureVisibleRegionFunction);
207 class WebviewSetZoomFunction : public WebviewExtensionFunction {
209 DECLARE_EXTENSION_FUNCTION("webview.setZoom", WEBVIEW_SETZOOM);
211 WebviewSetZoomFunction();
214 virtual ~WebviewSetZoomFunction();
217 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
219 DISALLOW_COPY_AND_ASSIGN(WebviewSetZoomFunction);
222 class WebviewGetZoomFunction : public WebviewExtensionFunction {
224 DECLARE_EXTENSION_FUNCTION("webview.getZoom", WEBVIEW_GETZOOM);
226 WebviewGetZoomFunction();
229 virtual ~WebviewGetZoomFunction();
232 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
234 DISALLOW_COPY_AND_ASSIGN(WebviewGetZoomFunction);
237 class WebviewFindFunction : public WebviewExtensionFunction {
239 DECLARE_EXTENSION_FUNCTION("webview.find", WEBVIEW_FIND);
241 WebviewFindFunction();
243 // Exposes SendResponse() for use by WebviewFindHelper.
244 using WebviewExtensionFunction::SendResponse;
247 virtual ~WebviewFindFunction();
250 // WebviewExtensionFunction implementation.
251 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
253 DISALLOW_COPY_AND_ASSIGN(WebviewFindFunction);
256 class WebviewStopFindingFunction : public WebviewExtensionFunction {
258 DECLARE_EXTENSION_FUNCTION("webview.stopFinding", WEBVIEW_STOPFINDING);
260 WebviewStopFindingFunction();
263 virtual ~WebviewStopFindingFunction();
266 // WebviewExtensionFunction implementation.
267 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
269 DISALLOW_COPY_AND_ASSIGN(WebviewStopFindingFunction);
272 class WebviewGoFunction : public WebviewExtensionFunction {
274 DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
279 virtual ~WebviewGoFunction();
282 // WebviewExtensionFunction implementation.
283 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
285 DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
288 class WebviewReloadFunction : public WebviewExtensionFunction {
290 DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
292 WebviewReloadFunction();
295 virtual ~WebviewReloadFunction();
298 // WebviewExtensionFunction implementation.
299 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
301 DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
304 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
306 DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
308 WebviewSetPermissionFunction();
311 virtual ~WebviewSetPermissionFunction();
314 // WebviewExtensionFunction implementation.
315 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
317 DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
320 class WebviewShowContextMenuFunction : public WebviewExtensionFunction {
322 DECLARE_EXTENSION_FUNCTION("webview.showContextMenu",
323 WEBVIEW_SHOWCONTEXTMENU);
325 WebviewShowContextMenuFunction();
328 virtual ~WebviewShowContextMenuFunction();
331 // WebviewExtensionFunction implementation.
332 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
334 DISALLOW_COPY_AND_ASSIGN(WebviewShowContextMenuFunction);
337 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
339 DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
340 WEBVIEW_OVERRIDEUSERAGENT);
342 WebviewOverrideUserAgentFunction();
345 virtual ~WebviewOverrideUserAgentFunction();
348 // WebviewExtensionFunction implementation.
349 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
351 DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
354 class WebviewStopFunction : public WebviewExtensionFunction {
356 DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
358 WebviewStopFunction();
361 virtual ~WebviewStopFunction();
364 // WebviewExtensionFunction implementation.
365 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
367 DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
370 class WebviewTerminateFunction : public WebviewExtensionFunction {
372 DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
374 WebviewTerminateFunction();
377 virtual ~WebviewTerminateFunction();
380 // WebviewExtensionFunction implementation.
381 virtual bool RunAsyncSafe(WebViewGuest* guest) OVERRIDE;
383 DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
386 } // namespace extensions
388 #endif // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_