- add sources.
[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/execute_code_function.h"
9 #include "chrome/browser/guestview/webview/webview_guest.h"
10
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 {
17
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
20 // subclasses.
21 class WebviewExtensionFunction : public AsyncExtensionFunction {
22  public:
23    WebviewExtensionFunction() {}
24
25  protected:
26   virtual ~WebviewExtensionFunction() {}
27
28   // ExtensionFunction implementation.
29   virtual bool RunImpl() OVERRIDE FINAL;
30
31  private:
32   virtual bool RunImplSafe(WebViewGuest* guest) = 0;
33 };
34
35 class WebviewClearDataFunction : public WebviewExtensionFunction {
36  public:
37   DECLARE_EXTENSION_FUNCTION("webview.clearData", WEBVIEW_CLEARDATA);
38
39   WebviewClearDataFunction();
40
41  protected:
42   virtual ~WebviewClearDataFunction();
43
44  private:
45   // WebviewExtensionFunction implementation.
46   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
47
48   uint32 GetRemovalMask();
49   void ClearDataDone();
50
51   // Removal start time.
52   base::Time remove_since_;
53   // Removal mask, corresponds to StoragePartition::RemoveDataMask enum.
54   uint32 remove_mask_;
55   // Tracks any data related or parse errors.
56   bool bad_message_;
57
58   DISALLOW_COPY_AND_ASSIGN(WebviewClearDataFunction);
59 };
60
61 class WebviewExecuteCodeFunction : public extensions::ExecuteCodeFunction {
62  public:
63   WebviewExecuteCodeFunction();
64
65  protected:
66   virtual ~WebviewExecuteCodeFunction();
67
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;
75
76  private:
77   // Contains extension resource built from path of file which is
78   // specified in JSON arguments.
79   extensions::ExtensionResource resource_;
80
81   int guest_instance_id_;
82
83   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteCodeFunction);
84 };
85
86 class WebviewExecuteScriptFunction : public WebviewExecuteCodeFunction {
87  public:
88   WebviewExecuteScriptFunction();
89
90  protected:
91   virtual ~WebviewExecuteScriptFunction() {}
92
93   virtual void OnExecuteCodeFinished(const std::string& error,
94                                      int32 on_page_id,
95                                      const GURL& on_url,
96                                      const base::ListValue& result) OVERRIDE;
97
98   DECLARE_EXTENSION_FUNCTION("webview.executeScript", WEBVIEW_EXECUTESCRIPT)
99
100  private:
101   DISALLOW_COPY_AND_ASSIGN(WebviewExecuteScriptFunction);
102 };
103
104 class WebviewInsertCSSFunction : public WebviewExecuteCodeFunction {
105  public:
106   WebviewInsertCSSFunction();
107
108  protected:
109   virtual ~WebviewInsertCSSFunction() {}
110
111   virtual bool ShouldInsertCSS() const OVERRIDE;
112
113   DECLARE_EXTENSION_FUNCTION("webview.insertCSS", WEBVIEW_INSERTCSS)
114
115  private:
116   DISALLOW_COPY_AND_ASSIGN(WebviewInsertCSSFunction);
117 };
118
119 class WebviewGoFunction : public WebviewExtensionFunction {
120  public:
121   DECLARE_EXTENSION_FUNCTION("webview.go", WEBVIEW_GO);
122
123   WebviewGoFunction();
124
125  protected:
126   virtual ~WebviewGoFunction();
127
128  private:
129   // WebviewExtensionFunction implementation.
130   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
131
132   DISALLOW_COPY_AND_ASSIGN(WebviewGoFunction);
133 };
134
135 class WebviewReloadFunction : public WebviewExtensionFunction {
136  public:
137   DECLARE_EXTENSION_FUNCTION("webview.reload", WEBVIEW_RELOAD);
138
139   WebviewReloadFunction();
140
141  protected:
142   virtual ~WebviewReloadFunction();
143
144  private:
145   // WebviewExtensionFunction implementation.
146   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
147
148   DISALLOW_COPY_AND_ASSIGN(WebviewReloadFunction);
149 };
150
151 class WebviewSetPermissionFunction : public WebviewExtensionFunction {
152  public:
153   DECLARE_EXTENSION_FUNCTION("webview.setPermission", WEBVIEW_SETPERMISSION);
154
155   WebviewSetPermissionFunction();
156
157  protected:
158   virtual ~WebviewSetPermissionFunction();
159
160  private:
161   // WebviewExtensionFunction implementation.
162   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
163
164   DISALLOW_COPY_AND_ASSIGN(WebviewSetPermissionFunction);
165 };
166
167 class WebviewOverrideUserAgentFunction: public WebviewExtensionFunction {
168  public:
169   DECLARE_EXTENSION_FUNCTION("webview.overrideUserAgent",
170                              WEBVIEW_OVERRIDEUSERAGENT);
171
172   WebviewOverrideUserAgentFunction();
173
174  protected:
175   virtual ~WebviewOverrideUserAgentFunction();
176
177  private:
178   // WebviewExtensionFunction implementation.
179   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
180
181   DISALLOW_COPY_AND_ASSIGN(WebviewOverrideUserAgentFunction);
182 };
183
184 class WebviewStopFunction : public WebviewExtensionFunction {
185  public:
186   DECLARE_EXTENSION_FUNCTION("webview.stop", WEBVIEW_STOP);
187
188   WebviewStopFunction();
189
190  protected:
191   virtual ~WebviewStopFunction();
192
193  private:
194   // WebviewExtensionFunction implementation.
195   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
196
197   DISALLOW_COPY_AND_ASSIGN(WebviewStopFunction);
198 };
199
200 class WebviewTerminateFunction : public WebviewExtensionFunction {
201  public:
202   DECLARE_EXTENSION_FUNCTION("webview.terminate", WEBVIEW_TERMINATE);
203
204   WebviewTerminateFunction();
205
206  protected:
207   virtual ~WebviewTerminateFunction();
208
209  private:
210   // WebviewExtensionFunction implementation.
211   virtual bool RunImplSafe(WebViewGuest* guest) OVERRIDE;
212
213   DISALLOW_COPY_AND_ASSIGN(WebviewTerminateFunction);
214 };
215
216 }  // namespace extensions
217
218 #endif  // CHROME_BROWSER_EXTENSIONS_API_WEBVIEW_WEBVIEW_API_H_