Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / tabs / tabs_api.h
1 // Copyright (c) 2012 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_TABS_TABS_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/compiler_specific.h"
12 #include "chrome/browser/extensions/chrome_extension_function.h"
13 #include "chrome/browser/extensions/chrome_extension_function_details.h"
14 #include "chrome/browser/ui/zoom/zoom_controller.h"
15 #include "chrome/common/extensions/api/tabs.h"
16 #include "content/public/browser/notification_observer.h"
17 #include "content/public/browser/notification_registrar.h"
18 #include "extensions/browser/api/capture_web_contents_function.h"
19 #include "extensions/browser/api/execute_code_function.h"
20 #include "extensions/common/extension_resource.h"
21 #include "extensions/common/user_script.h"
22 #include "url/gurl.h"
23
24 class GURL;
25 class SkBitmap;
26 class TabStripModel;
27
28 namespace base {
29 class DictionaryValue;
30 }
31
32 namespace content {
33 class WebContents;
34 }
35
36 namespace ui {
37 class ListSelectionModel;
38 }
39
40 namespace user_prefs {
41 class PrefRegistrySyncable;
42 }
43
44 namespace extensions {
45
46 // Converts a ZoomMode to its ZoomSettings representation.
47 void ZoomModeToZoomSettings(ZoomController::ZoomMode zoom_mode,
48                             api::tabs::ZoomSettings* zoom_settings);
49
50 // Windows
51 class WindowsGetFunction : public ChromeSyncExtensionFunction {
52   virtual ~WindowsGetFunction() {}
53   virtual bool RunSync() OVERRIDE;
54   DECLARE_EXTENSION_FUNCTION("windows.get", WINDOWS_GET)
55 };
56 class WindowsGetCurrentFunction : public ChromeSyncExtensionFunction {
57   virtual ~WindowsGetCurrentFunction() {}
58   virtual bool RunSync() OVERRIDE;
59   DECLARE_EXTENSION_FUNCTION("windows.getCurrent", WINDOWS_GETCURRENT)
60 };
61 class WindowsGetLastFocusedFunction : public ChromeSyncExtensionFunction {
62   virtual ~WindowsGetLastFocusedFunction() {}
63   virtual bool RunSync() OVERRIDE;
64   DECLARE_EXTENSION_FUNCTION("windows.getLastFocused", WINDOWS_GETLASTFOCUSED)
65 };
66 class WindowsGetAllFunction : public ChromeSyncExtensionFunction {
67   virtual ~WindowsGetAllFunction() {}
68   virtual bool RunSync() OVERRIDE;
69   DECLARE_EXTENSION_FUNCTION("windows.getAll", WINDOWS_GETALL)
70 };
71 class WindowsCreateFunction : public ChromeSyncExtensionFunction {
72   virtual ~WindowsCreateFunction() {}
73   virtual bool RunSync() OVERRIDE;
74   // Returns whether the window should be created in incognito mode.
75   // |create_data| are the options passed by the extension. It may be NULL.
76   // |urls| is the list of urls to open. If we are creating an incognito window,
77   // the function will remove these urls which may not be opened in incognito
78   // mode.  If window creation leads the browser into an erroneous state,
79   // |is_error| is set to true (also, error_ member variable is assigned
80   // the proper error message).
81   bool ShouldOpenIncognitoWindow(
82       const api::windows::Create::Params::CreateData* create_data,
83       std::vector<GURL>* urls,
84       bool* is_error);
85   DECLARE_EXTENSION_FUNCTION("windows.create", WINDOWS_CREATE)
86 };
87 class WindowsUpdateFunction : public ChromeSyncExtensionFunction {
88   virtual ~WindowsUpdateFunction() {}
89   virtual bool RunSync() OVERRIDE;
90   DECLARE_EXTENSION_FUNCTION("windows.update", WINDOWS_UPDATE)
91 };
92 class WindowsRemoveFunction : public ChromeSyncExtensionFunction {
93   virtual ~WindowsRemoveFunction() {}
94   virtual bool RunSync() OVERRIDE;
95   DECLARE_EXTENSION_FUNCTION("windows.remove", WINDOWS_REMOVE)
96 };
97
98 // Tabs
99 class TabsGetFunction : public ChromeSyncExtensionFunction {
100   virtual ~TabsGetFunction() {}
101   virtual bool RunSync() OVERRIDE;
102   DECLARE_EXTENSION_FUNCTION("tabs.get", TABS_GET)
103 };
104 class TabsGetCurrentFunction : public ChromeSyncExtensionFunction {
105   virtual ~TabsGetCurrentFunction() {}
106   virtual bool RunSync() OVERRIDE;
107   DECLARE_EXTENSION_FUNCTION("tabs.getCurrent", TABS_GETCURRENT)
108 };
109 class TabsGetSelectedFunction : public ChromeSyncExtensionFunction {
110   virtual ~TabsGetSelectedFunction() {}
111   virtual bool RunSync() OVERRIDE;
112   DECLARE_EXTENSION_FUNCTION("tabs.getSelected", TABS_GETSELECTED)
113 };
114 class TabsGetAllInWindowFunction : public ChromeSyncExtensionFunction {
115   virtual ~TabsGetAllInWindowFunction() {}
116   virtual bool RunSync() OVERRIDE;
117   DECLARE_EXTENSION_FUNCTION("tabs.getAllInWindow", TABS_GETALLINWINDOW)
118 };
119 class TabsQueryFunction : public ChromeSyncExtensionFunction {
120   virtual ~TabsQueryFunction() {}
121   virtual bool RunSync() OVERRIDE;
122   DECLARE_EXTENSION_FUNCTION("tabs.query", TABS_QUERY)
123 };
124 class TabsCreateFunction : public ChromeSyncExtensionFunction {
125   virtual ~TabsCreateFunction() {}
126   virtual bool RunSync() OVERRIDE;
127   DECLARE_EXTENSION_FUNCTION("tabs.create", TABS_CREATE)
128 };
129 class TabsDuplicateFunction : public ChromeSyncExtensionFunction {
130   virtual ~TabsDuplicateFunction() {}
131   virtual bool RunSync() OVERRIDE;
132   DECLARE_EXTENSION_FUNCTION("tabs.duplicate", TABS_DUPLICATE)
133 };
134 class TabsHighlightFunction : public ChromeSyncExtensionFunction {
135   virtual ~TabsHighlightFunction() {}
136   virtual bool RunSync() OVERRIDE;
137   bool HighlightTab(TabStripModel* tabstrip,
138                     ui::ListSelectionModel* selection,
139                     int *active_index,
140                     int index);
141   DECLARE_EXTENSION_FUNCTION("tabs.highlight", TABS_HIGHLIGHT)
142 };
143 class TabsUpdateFunction : public ChromeAsyncExtensionFunction {
144  public:
145   TabsUpdateFunction();
146
147  protected:
148   virtual ~TabsUpdateFunction() {}
149   virtual bool UpdateURL(const std::string& url,
150                          int tab_id,
151                          bool* is_async);
152   virtual void PopulateResult();
153
154   content::WebContents* web_contents_;
155
156  private:
157   virtual bool RunAsync() OVERRIDE;
158   void OnExecuteCodeFinished(const std::string& error,
159                              const GURL& on_url,
160                              const base::ListValue& script_result);
161
162   DECLARE_EXTENSION_FUNCTION("tabs.update", TABS_UPDATE)
163 };
164 class TabsMoveFunction : public ChromeSyncExtensionFunction {
165   virtual ~TabsMoveFunction() {}
166   virtual bool RunSync() OVERRIDE;
167   bool MoveTab(int tab_id,
168                int* new_index,
169                int iteration,
170                base::ListValue* tab_values,
171                int* window_id);
172   DECLARE_EXTENSION_FUNCTION("tabs.move", TABS_MOVE)
173 };
174 class TabsReloadFunction : public ChromeSyncExtensionFunction {
175   virtual ~TabsReloadFunction() {}
176   virtual bool RunSync() OVERRIDE;
177   DECLARE_EXTENSION_FUNCTION("tabs.reload", TABS_RELOAD)
178 };
179 class TabsRemoveFunction : public ChromeSyncExtensionFunction {
180   virtual ~TabsRemoveFunction() {}
181   virtual bool RunSync() OVERRIDE;
182   bool RemoveTab(int tab_id);
183   DECLARE_EXTENSION_FUNCTION("tabs.remove", TABS_REMOVE)
184 };
185 class TabsDetectLanguageFunction : public ChromeAsyncExtensionFunction,
186                                    public content::NotificationObserver {
187  private:
188   virtual ~TabsDetectLanguageFunction() {}
189   virtual bool RunAsync() OVERRIDE;
190
191   virtual void Observe(int type,
192                        const content::NotificationSource& source,
193                        const content::NotificationDetails& details) OVERRIDE;
194   void GotLanguage(const std::string& language);
195   content::NotificationRegistrar registrar_;
196   DECLARE_EXTENSION_FUNCTION("tabs.detectLanguage", TABS_DETECTLANGUAGE)
197 };
198 class TabsCaptureVisibleTabFunction
199     : public extensions::CaptureWebContentsFunction {
200  public:
201   TabsCaptureVisibleTabFunction();
202   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
203
204  protected:
205   virtual ~TabsCaptureVisibleTabFunction() {}
206
207  private:
208   ChromeExtensionFunctionDetails chrome_details_;
209
210   // extensions::CaptureWebContentsFunction:
211   virtual bool IsScreenshotEnabled() OVERRIDE;
212   virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
213   virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
214
215   DECLARE_EXTENSION_FUNCTION("tabs.captureVisibleTab", TABS_CAPTUREVISIBLETAB)
216 };
217
218 // Implement API call tabs.executeScript and tabs.insertCSS.
219 class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
220  public:
221   ExecuteCodeInTabFunction();
222
223  protected:
224   virtual ~ExecuteCodeInTabFunction();
225
226   // ExtensionFunction:
227   virtual bool HasPermission() OVERRIDE;
228
229   // Initialize the |execute_tab_id_| and |details_| if they haven't already
230   // been. Returns whether initialization was successful.
231   virtual bool Init() OVERRIDE;
232   virtual bool CanExecuteScriptOnPage() OVERRIDE;
233   virtual ScriptExecutor* GetScriptExecutor() OVERRIDE;
234   virtual bool IsWebView() const OVERRIDE;
235   virtual const GURL& GetWebViewSrc() const OVERRIDE;
236
237  private:
238   const ChromeExtensionFunctionDetails chrome_details_;
239
240   // Id of tab which executes code.
241   int execute_tab_id_;
242 };
243
244 class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction {
245  protected:
246   virtual bool ShouldInsertCSS() const OVERRIDE;
247
248  private:
249   virtual ~TabsExecuteScriptFunction() {}
250
251   virtual void OnExecuteCodeFinished(
252       const std::string& error,
253       const GURL& on_url,
254       const base::ListValue& script_result) OVERRIDE;
255
256   DECLARE_EXTENSION_FUNCTION("tabs.executeScript", TABS_EXECUTESCRIPT)
257 };
258
259 class TabsInsertCSSFunction : public ExecuteCodeInTabFunction {
260  private:
261   virtual ~TabsInsertCSSFunction() {}
262
263   virtual bool ShouldInsertCSS() const OVERRIDE;
264
265   DECLARE_EXTENSION_FUNCTION("tabs.insertCSS", TABS_INSERTCSS)
266 };
267
268 class ZoomAPIFunction : public ChromeAsyncExtensionFunction {
269  protected:
270   virtual ~ZoomAPIFunction() {}
271
272   // Gets the WebContents for |tab_id| if it is specified. Otherwise get the
273   // WebContents for the active tab in the current window. Calling this function
274   // may set error_.
275   //
276   // TODO(...) many other tabs API functions use similar behavior. There should
277   // be a way to share this implementation somehow.
278   content::WebContents* GetWebContents(int tab_id);
279 };
280
281 class TabsSetZoomFunction : public ZoomAPIFunction {
282  private:
283   virtual ~TabsSetZoomFunction() {}
284
285   virtual bool RunAsync() OVERRIDE;
286
287   DECLARE_EXTENSION_FUNCTION("tabs.setZoom", TABS_SETZOOM)
288 };
289
290 class TabsGetZoomFunction : public ZoomAPIFunction {
291  private:
292   virtual ~TabsGetZoomFunction() {}
293
294   virtual bool RunAsync() OVERRIDE;
295
296   DECLARE_EXTENSION_FUNCTION("tabs.getZoom", TABS_GETZOOM)
297 };
298
299 class TabsSetZoomSettingsFunction : public ZoomAPIFunction {
300  private:
301   virtual ~TabsSetZoomSettingsFunction() {}
302
303   virtual bool RunAsync() OVERRIDE;
304
305   DECLARE_EXTENSION_FUNCTION("tabs.setZoomSettings", TABS_SETZOOMSETTINGS)
306 };
307
308 class TabsGetZoomSettingsFunction : public ZoomAPIFunction {
309  private:
310   virtual ~TabsGetZoomSettingsFunction() {}
311
312   virtual bool RunAsync() OVERRIDE;
313
314   DECLARE_EXTENSION_FUNCTION("tabs.getZoomSettings", TABS_GETZOOMSETTINGS)
315 };
316
317 }  // namespace extensions
318
319 #endif  // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_