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