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 { 46 virtual ~WindowsGetFunction() {} 47 virtual bool RunSync() OVERRIDE; 48 DECLARE_EXTENSION_FUNCTION("windows.get", WINDOWS_GET) 49 }; 50 class WindowsGetCurrentFunction : public ChromeSyncExtensionFunction { 51 virtual ~WindowsGetCurrentFunction() {} 52 virtual bool RunSync() OVERRIDE; 53 DECLARE_EXTENSION_FUNCTION("windows.getCurrent", WINDOWS_GETCURRENT) 54 }; 55 class WindowsGetLastFocusedFunction : public ChromeSyncExtensionFunction { 56 virtual ~WindowsGetLastFocusedFunction() {} 57 virtual bool RunSync() OVERRIDE; 58 DECLARE_EXTENSION_FUNCTION("windows.getLastFocused", WINDOWS_GETLASTFOCUSED) 59 }; 60 class WindowsGetAllFunction : public ChromeSyncExtensionFunction { 61 virtual ~WindowsGetAllFunction() {} 62 virtual bool RunSync() OVERRIDE; 63 DECLARE_EXTENSION_FUNCTION("windows.getAll", WINDOWS_GETALL) 64 }; 65 class WindowsCreateFunction : public ChromeSyncExtensionFunction { 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 { 82 virtual ~WindowsUpdateFunction() {} 83 virtual bool RunSync() OVERRIDE; 84 DECLARE_EXTENSION_FUNCTION("windows.update", WINDOWS_UPDATE) 85 }; 86 class WindowsRemoveFunction : public ChromeSyncExtensionFunction { 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 { 94 virtual ~TabsGetFunction() {} 95 virtual bool RunSync() OVERRIDE; 96 DECLARE_EXTENSION_FUNCTION("tabs.get", TABS_GET) 97 }; 98 class TabsGetCurrentFunction : public ChromeSyncExtensionFunction { 99 virtual ~TabsGetCurrentFunction() {} 100 virtual bool RunSync() OVERRIDE; 101 DECLARE_EXTENSION_FUNCTION("tabs.getCurrent", TABS_GETCURRENT) 102 }; 103 class TabsGetSelectedFunction : public ChromeSyncExtensionFunction { 104 virtual ~TabsGetSelectedFunction() {} 105 virtual bool RunSync() OVERRIDE; 106 DECLARE_EXTENSION_FUNCTION("tabs.getSelected", TABS_GETSELECTED) 107 }; 108 class TabsGetAllInWindowFunction : public ChromeSyncExtensionFunction { 109 virtual ~TabsGetAllInWindowFunction() {} 110 virtual bool RunSync() OVERRIDE; 111 DECLARE_EXTENSION_FUNCTION("tabs.getAllInWindow", TABS_GETALLINWINDOW) 112 }; 113 class TabsQueryFunction : public ChromeSyncExtensionFunction { 114 virtual ~TabsQueryFunction() {} 115 virtual bool RunSync() OVERRIDE; 116 DECLARE_EXTENSION_FUNCTION("tabs.query", TABS_QUERY) 117 }; 118 class TabsCreateFunction : public ChromeSyncExtensionFunction { 119 virtual ~TabsCreateFunction() {} 120 virtual bool RunSync() OVERRIDE; 121 DECLARE_EXTENSION_FUNCTION("tabs.create", TABS_CREATE) 122 }; 123 class TabsDuplicateFunction : public ChromeSyncExtensionFunction { 124 virtual ~TabsDuplicateFunction() {} 125 virtual bool RunSync() OVERRIDE; 126 DECLARE_EXTENSION_FUNCTION("tabs.duplicate", TABS_DUPLICATE) 127 }; 128 class TabsHighlightFunction : public ChromeSyncExtensionFunction { 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: 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 { 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 { 170 virtual ~TabsReloadFunction() {} 171 virtual bool RunSync() OVERRIDE; 172 DECLARE_EXTENSION_FUNCTION("tabs.reload", TABS_RELOAD) 173 }; 174 class TabsRemoveFunction : public ChromeSyncExtensionFunction { 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: 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: 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: 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: 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