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/execute_code_function.h"
9 #include "chrome/browser/guestview/webview/webview_guest.h"
11 // WARNING: Webview could be loaded in an unblessed context, thus any new
12 // APIs must extend WebviewExtensionFunction/WebviewExecuteCodeFunction which
13 // do a process ID check to prevent abuse by normal renderer processes.
14 // TODO(guohui): refactor WebviewExecuteCodeFunction to also extend
15 // WebviewExtensionFunction.
16 namespace extensions {
18 // An abstract base class for async webview APIs. It does a process ID check
19 // in RunImpl, and then calls RunImplSafe which must be overriden by all
21 class WebviewExtensionFunction : public AsyncExtensionFunction {
23 WebviewExtensionFunction() {}
26 virtual ~WebviewExtensionFunction() {}
28 // ExtensionFunction implementation.
29 virtual bool RunImpl() OVERRIDE FINAL;
32 virtual bool RunImplSafe(WebViewGuest* guest) = 0;
35 class WebviewClearDataFunction : public WebviewExtensionFunction {
37 DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
39 WebviewClearDataFunction();
42 virtual ~WebviewClearDataFunction();
45 // WebviewExtensionFunction implementation.
46 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
48 uint32 GetRemovalMask();
51 // Removal start time.
52 base::Time remove_since_;
53 // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
55 // Tracks any data related or parse errors.
58 DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
61 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
63 WebviewExecuteCodeFunction();
66 virtual ~WebviewExecuteCodeFunction();
68 // Initialize |details_| if it hasn't already been.
69 virtual bool Init() OVERRIDE;
70 virtual bool ShouldInsertCSS() const OVERRIDE;
71 virtual bool CanExecuteScriptOnPage() OVERRIDE;
72 // Guarded by a process ID check.
73 virtual extensions::ScriptExecutor* GetScriptExecutor() OVERRIDE FINAL;
74 virtual bool IsWebView() const OVERRIDE;
77 // Contains extension resource built from path of file which is
78 // specified in JSON arguments.
79 extensions::ExtensionResource resource_;
81 int guest_instance_id_;
83 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
86 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
88 WebviewExecuteScriptFunction();
91 virtual ~WebviewExecuteScriptFunction() {}
93 virtual void OnExecuteCodeFinished(const std::string& error,
96 const base::ListValue& result) OVERRIDE;
98 DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
101 DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
104 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
106 WebviewInsertCSSFunction();
109 virtual ~WebviewInsertCSSFunction() {}
111 virtual bool ShouldInsertCSS() const OVERRIDE;
113 DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
116 DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
119 class WebviewGoFunction : public WebviewExtensionFunction {
121 DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
126 virtual ~WebviewGoFunction();
129 // WebviewExtensionFunction implementation.
130 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
132 DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
135 class WebviewReloadFunction : public WebviewExtensionFunction {
137 DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
139 WebviewReloadFunction();
142 virtual ~WebviewReloadFunction();
145 // WebviewExtensionFunction implementation.
146 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
148 DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
151 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
153 DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
155 WebviewSetPermissionFunction();
158 virtual ~WebviewSetPermissionFunction();
161 // WebviewExtensionFunction implementation.
162 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
164 DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
167 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
169 DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
170 WEBVIEW_OVERRIDEUSERAGENT);
172 WebviewOverrideUserAgentFunction();
175 virtual ~WebviewOverrideUserAgentFunction();
178 // WebviewExtensionFunction implementation.
179 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
181 DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
184 class WebviewStopFunction : public WebviewExtensionFunction {
186 DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
188 WebviewStopFunction();
191 virtual ~WebviewStopFunction();
194 // WebviewExtensionFunction implementation.
195 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
197 DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
200 class WebviewTerminateFunction : public WebviewExtensionFunction {
202 DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
204 WebviewTerminateFunction();
207 virtual ~WebviewTerminateFunction();
210 // WebviewExtensionFunction implementation.
211 virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
213 DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
216 } // namespace extensions
218 #endif // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_