• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/api/capture_web_contents_function.h"
13 #include "chrome/browser/extensions/api/execute_code_function.h"
14 #include "chrome/browser/extensions/chrome_extension_function.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/common/extension_resource.h"
19 #include "extensions/common/user_script.h"
20 #include "url/gurl.h"
21 
22 class BackingStore;
23 class GURL;
24 class SkBitmap;
25 class TabStripModel;
26 
27 namespace base {
28 class DictionaryValue;
29 }
30 
31 namespace content {
32 class WebContents;
33 }
34 
35 namespace ui {
36 class ListSelectionModel;
37 }
38 
39 namespace user_prefs {
40 class PrefRegistrySyncable;
41 }
42 
43 namespace extensions {
44 
45 // Windows
46 class WindowsGetFunction : public ChromeSyncExtensionFunction {
~WindowsGetFunction()47   virtual ~WindowsGetFunction() {}
48   virtual bool RunImpl() OVERRIDE;
49   DECLARE_EXTENSION_FUNCTION("windows.get", WINDOWS_GET)
50 };
51 class WindowsGetCurrentFunction : public ChromeSyncExtensionFunction {
~WindowsGetCurrentFunction()52   virtual ~WindowsGetCurrentFunction() {}
53   virtual bool RunImpl() OVERRIDE;
54   DECLARE_EXTENSION_FUNCTION("windows.getCurrent", WINDOWS_GETCURRENT)
55 };
56 class WindowsGetLastFocusedFunction : public ChromeSyncExtensionFunction {
~WindowsGetLastFocusedFunction()57   virtual ~WindowsGetLastFocusedFunction() {}
58   virtual bool RunImpl() OVERRIDE;
59   DECLARE_EXTENSION_FUNCTION("windows.getLastFocused", WINDOWS_GETLASTFOCUSED)
60 };
61 class WindowsGetAllFunction : public ChromeSyncExtensionFunction {
~WindowsGetAllFunction()62   virtual ~WindowsGetAllFunction() {}
63   virtual bool RunImpl() OVERRIDE;
64   DECLARE_EXTENSION_FUNCTION("windows.getAll", WINDOWS_GETALL)
65 };
66 class WindowsCreateFunction : public ChromeSyncExtensionFunction {
~WindowsCreateFunction()67   virtual ~WindowsCreateFunction() {}
68   virtual bool RunImpl() OVERRIDE;
69   // Returns whether the window should be created in incognito mode.
70   // |create_data| are the options passed by the extension. It may be NULL.
71   // |urls| is the list of urls to open. If we are creating an incognito window,
72   // the function will remove these urls which may not be opened in incognito
73   // mode.  If window creation leads the browser into an erroneous state,
74   // |is_error| is set to true (also, error_ member variable is assigned
75   // the proper error message).
76   bool ShouldOpenIncognitoWindow(
77       const api::windows::Create::Params::CreateData* create_data,
78       std::vector<GURL>* urls,
79       bool* is_error);
80   DECLARE_EXTENSION_FUNCTION("windows.create", WINDOWS_CREATE)
81 };
82 class WindowsUpdateFunction : public ChromeSyncExtensionFunction {
~WindowsUpdateFunction()83   virtual ~WindowsUpdateFunction() {}
84   virtual bool RunImpl() OVERRIDE;
85   DECLARE_EXTENSION_FUNCTION("windows.update", WINDOWS_UPDATE)
86 };
87 class WindowsRemoveFunction : public ChromeSyncExtensionFunction {
~WindowsRemoveFunction()88   virtual ~WindowsRemoveFunction() {}
89   virtual bool RunImpl() OVERRIDE;
90   DECLARE_EXTENSION_FUNCTION("windows.remove", WINDOWS_REMOVE)
91 };
92 
93 // Tabs
94 class TabsGetFunction : public ChromeSyncExtensionFunction {
~TabsGetFunction()95   virtual ~TabsGetFunction() {}
96   virtual bool RunImpl() OVERRIDE;
97   DECLARE_EXTENSION_FUNCTION("tabs.get", TABS_GET)
98 };
99 class TabsGetCurrentFunction : public ChromeSyncExtensionFunction {
~TabsGetCurrentFunction()100   virtual ~TabsGetCurrentFunction() {}
101   virtual bool RunImpl() OVERRIDE;
102   DECLARE_EXTENSION_FUNCTION("tabs.getCurrent", TABS_GETCURRENT)
103 };
104 class TabsGetSelectedFunction : public ChromeSyncExtensionFunction {
~TabsGetSelectedFunction()105   virtual ~TabsGetSelectedFunction() {}
106   virtual bool RunImpl() OVERRIDE;
107   DECLARE_EXTENSION_FUNCTION("tabs.getSelected", TABS_GETSELECTED)
108 };
109 class TabsGetAllInWindowFunction : public ChromeSyncExtensionFunction {
~TabsGetAllInWindowFunction()110   virtual ~TabsGetAllInWindowFunction() {}
111   virtual bool RunImpl() OVERRIDE;
112   DECLARE_EXTENSION_FUNCTION("tabs.getAllInWindow", TABS_GETALLINWINDOW)
113 };
114 class TabsQueryFunction : public ChromeSyncExtensionFunction {
~TabsQueryFunction()115   virtual ~TabsQueryFunction() {}
116   virtual bool RunImpl() OVERRIDE;
117   DECLARE_EXTENSION_FUNCTION("tabs.query", TABS_QUERY)
118 };
119 class TabsCreateFunction : public ChromeSyncExtensionFunction {
~TabsCreateFunction()120   virtual ~TabsCreateFunction() {}
121   virtual bool RunImpl() OVERRIDE;
122   DECLARE_EXTENSION_FUNCTION("tabs.create", TABS_CREATE)
123 };
124 class TabsDuplicateFunction : public ChromeSyncExtensionFunction {
~TabsDuplicateFunction()125   virtual ~TabsDuplicateFunction() {}
126   virtual bool RunImpl() OVERRIDE;
127   DECLARE_EXTENSION_FUNCTION("tabs.duplicate", TABS_DUPLICATE)
128 };
129 class TabsHighlightFunction : public ChromeSyncExtensionFunction {
~TabsHighlightFunction()130   virtual ~TabsHighlightFunction() {}
131   virtual bool RunImpl() OVERRIDE;
132   bool HighlightTab(TabStripModel* tabstrip,
133                     ui::ListSelectionModel* selection,
134                     int *active_index,
135                     int index);
136   DECLARE_EXTENSION_FUNCTION("tabs.highlight", TABS_HIGHLIGHT)
137 };
138 class TabsUpdateFunction : public ChromeAsyncExtensionFunction {
139  public:
140   TabsUpdateFunction();
141 
142  protected:
~TabsUpdateFunction()143   virtual ~TabsUpdateFunction() {}
144   virtual bool UpdateURL(const std::string& url,
145                          int tab_id,
146                          bool* is_async);
147   virtual void PopulateResult();
148 
149   content::WebContents* web_contents_;
150 
151  private:
152   virtual bool RunImpl() OVERRIDE;
153   void OnExecuteCodeFinished(const std::string& error,
154                              int32 on_page_id,
155                              const GURL& on_url,
156                              const base::ListValue& script_result);
157 
158   DECLARE_EXTENSION_FUNCTION("tabs.update", TABS_UPDATE)
159 };
160 class TabsMoveFunction : public ChromeSyncExtensionFunction {
~TabsMoveFunction()161   virtual ~TabsMoveFunction() {}
162   virtual bool RunImpl() OVERRIDE;
163   bool MoveTab(int tab_id,
164                int* new_index,
165                int iteration,
166                base::ListValue* tab_values,
167                int* window_id);
168   DECLARE_EXTENSION_FUNCTION("tabs.move", TABS_MOVE)
169 };
170 class TabsReloadFunction : public ChromeSyncExtensionFunction {
~TabsReloadFunction()171   virtual ~TabsReloadFunction() {}
172   virtual bool RunImpl() OVERRIDE;
173   DECLARE_EXTENSION_FUNCTION("tabs.reload", TABS_RELOAD)
174 };
175 class TabsRemoveFunction : public ChromeSyncExtensionFunction {
~TabsRemoveFunction()176   virtual ~TabsRemoveFunction() {}
177   virtual bool RunImpl() OVERRIDE;
178   bool RemoveTab(int tab_id);
179   DECLARE_EXTENSION_FUNCTION("tabs.remove", TABS_REMOVE)
180 };
181 class TabsDetectLanguageFunction : public ChromeAsyncExtensionFunction,
182                                    public content::NotificationObserver {
183  private:
~TabsDetectLanguageFunction()184   virtual ~TabsDetectLanguageFunction() {}
185   virtual bool RunImpl() OVERRIDE;
186 
187   virtual void Observe(int type,
188                        const content::NotificationSource& source,
189                        const content::NotificationDetails& details) OVERRIDE;
190   void GotLanguage(const std::string& language);
191   content::NotificationRegistrar registrar_;
192   DECLARE_EXTENSION_FUNCTION("tabs.detectLanguage", TABS_DETECTLANGUAGE)
193 };
194 class TabsCaptureVisibleTabFunction
195     : public extensions::CaptureWebContentsFunction {
196  public:
197   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
198 
199  protected:
~TabsCaptureVisibleTabFunction()200   virtual ~TabsCaptureVisibleTabFunction() {}
201 
202  private:
203   // extensions::CaptureWebContentsFunction:
204   virtual bool IsScreenshotEnabled() OVERRIDE;
205   virtual content::WebContents* GetWebContentsForID(int id) OVERRIDE;
206   virtual void OnCaptureFailure(FailureReason reason) OVERRIDE;
207 
208   DECLARE_EXTENSION_FUNCTION("tabs.captureVisibleTab", TABS_CAPTUREVISIBLETAB)
209 };
210 
211 // Implement API call tabs.executeScript and tabs.insertCSS.
212 class ExecuteCodeInTabFunction : public ExecuteCodeFunction {
213  public:
214   ExecuteCodeInTabFunction();
215 
216  protected:
217   virtual ~ExecuteCodeInTabFunction();
218 
219   // ExtensionFunction:
220   virtual bool HasPermission() OVERRIDE;
221 
222   // Initialize the |execute_tab_id_| and |details_| if they haven't already
223   // been. Returns whether initialization was successful.
224   virtual bool Init() OVERRIDE;
225   virtual bool CanExecuteScriptOnPage() OVERRIDE;
226   virtual ScriptExecutor* GetScriptExecutor() OVERRIDE;
227   virtual bool IsWebView() const OVERRIDE;
228 
229  private:
230   // Id of tab which executes code.
231   int execute_tab_id_;
232 };
233 
234 class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction {
235  protected:
236   virtual bool ShouldInsertCSS() const OVERRIDE;
237 
238  private:
~TabsExecuteScriptFunction()239   virtual ~TabsExecuteScriptFunction() {}
240 
241   virtual void OnExecuteCodeFinished(
242       const std::string& error,
243       int32 on_page_id,
244       const GURL& on_url,
245       const base::ListValue& script_result) OVERRIDE;
246 
247   DECLARE_EXTENSION_FUNCTION("tabs.executeScript", TABS_EXECUTESCRIPT)
248 };
249 
250 class TabsInsertCSSFunction : public ExecuteCodeInTabFunction {
251  private:
~TabsInsertCSSFunction()252   virtual ~TabsInsertCSSFunction() {}
253 
254   virtual bool ShouldInsertCSS() const OVERRIDE;
255 
256   DECLARE_EXTENSION_FUNCTION("tabs.insertCSS", TABS_INSERTCSS)
257 };
258 
259 }  // namespace extensions
260 
261 #endif  // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_
262