OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_H__ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_ |
6 #define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_H__ | 6 #define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/compiler_specific.h" | 11 #include "base/compiler_specific.h" |
12 #include "chrome/browser/extensions/extension_function.h" | 12 #include "chrome/browser/extensions/extension_function.h" |
| 13 #include "chrome/common/extensions/extension_resource.h" |
| 14 #include "chrome/common/extensions/user_script.h" |
13 #include "content/public/browser/notification_observer.h" | 15 #include "content/public/browser/notification_observer.h" |
14 #include "content/public/browser/notification_registrar.h" | 16 #include "content/public/browser/notification_registrar.h" |
15 #include "googleurl/src/gurl.h" | 17 #include "googleurl/src/gurl.h" |
16 | 18 |
17 class BackingStore; | 19 class BackingStore; |
18 class GURL; | 20 class GURL; |
19 class PrefServiceSyncable; | 21 class PrefServiceSyncable; |
20 class SkBitmap; | 22 class SkBitmap; |
21 | 23 |
22 namespace base { | 24 namespace base { |
23 class DictionaryValue; | 25 class DictionaryValue; |
24 } | 26 } |
25 | 27 |
26 namespace content { | 28 namespace content { |
27 class WebContents; | 29 class WebContents; |
28 } | 30 } |
29 | 31 |
| 32 namespace extensions { |
| 33 namespace api { |
| 34 namespace tabs { |
| 35 struct InjectDetails; |
| 36 } // namespace tabs |
| 37 } // namespace api |
| 38 } // namespace extensions |
| 39 |
30 namespace skia { | 40 namespace skia { |
31 class PlatformBitmap; | 41 class PlatformBitmap; |
32 } | 42 } |
33 | 43 |
34 // Windows | 44 // Windows |
35 class GetWindowFunction : public SyncExtensionFunction { | 45 class WindowsGetFunction : public SyncExtensionFunction { |
36 virtual ~GetWindowFunction() {} | 46 virtual ~WindowsGetFunction() {} |
37 virtual bool RunImpl() OVERRIDE; | 47 virtual bool RunImpl() OVERRIDE; |
38 DECLARE_EXTENSION_FUNCTION_NAME("windows.get") | 48 DECLARE_EXTENSION_FUNCTION_NAME("windows.get") |
39 }; | 49 }; |
40 class GetCurrentWindowFunction : public SyncExtensionFunction { | 50 class WindowsGetCurrentFunction : public SyncExtensionFunction { |
41 virtual ~GetCurrentWindowFunction() {} | 51 virtual ~WindowsGetCurrentFunction() {} |
42 virtual bool RunImpl() OVERRIDE; | 52 virtual bool RunImpl() OVERRIDE; |
43 DECLARE_EXTENSION_FUNCTION_NAME("windows.getCurrent") | 53 DECLARE_EXTENSION_FUNCTION_NAME("windows.getCurrent") |
44 }; | 54 }; |
45 class GetLastFocusedWindowFunction : public SyncExtensionFunction { | 55 class WindowsGetLastFocusedFunction : public SyncExtensionFunction { |
46 virtual ~GetLastFocusedWindowFunction() {} | 56 virtual ~WindowsGetLastFocusedFunction() {} |
47 virtual bool RunImpl() OVERRIDE; | 57 virtual bool RunImpl() OVERRIDE; |
48 DECLARE_EXTENSION_FUNCTION_NAME("windows.getLastFocused") | 58 DECLARE_EXTENSION_FUNCTION_NAME("windows.getLastFocused") |
49 }; | 59 }; |
50 class GetAllWindowsFunction : public SyncExtensionFunction { | 60 class WindowsGetAllFunction : public SyncExtensionFunction { |
51 virtual ~GetAllWindowsFunction() {} | 61 virtual ~WindowsGetAllFunction() {} |
52 virtual bool RunImpl() OVERRIDE; | 62 virtual bool RunImpl() OVERRIDE; |
53 DECLARE_EXTENSION_FUNCTION_NAME("windows.getAll") | 63 DECLARE_EXTENSION_FUNCTION_NAME("windows.getAll") |
54 }; | 64 }; |
55 class CreateWindowFunction : public SyncExtensionFunction { | 65 class WindowsCreateFunction : public SyncExtensionFunction { |
56 virtual ~CreateWindowFunction() {} | 66 virtual ~WindowsCreateFunction() {} |
57 virtual bool RunImpl() OVERRIDE; | 67 virtual bool RunImpl() OVERRIDE; |
58 // Returns whether the window should be created in incognito mode. | 68 // Returns whether the window should be created in incognito mode. |
59 // |urls| is the list of urls to open. If we are creating an incognito window, | 69 // |urls| is the list of urls to open. If we are creating an incognito window, |
60 // the function will remove these urls which may not be opened in incognito | 70 // the function will remove these urls which may not be opened in incognito |
61 // mode. If window creation leads the browser into an erroneous state, | 71 // mode. If window creation leads the browser into an erroneous state, |
62 // |is_error| is set to true (also, error_ member variable is assigned | 72 // |is_error| is set to true (also, error_ member variable is assigned |
63 // the proper error message). | 73 // the proper error message). |
64 bool ShouldOpenIncognitoWindow(const base::DictionaryValue* args, | 74 bool ShouldOpenIncognitoWindow(const base::DictionaryValue* args, |
65 std::vector<GURL>* urls, | 75 std::vector<GURL>* urls, |
66 bool* is_error); | 76 bool* is_error); |
67 DECLARE_EXTENSION_FUNCTION_NAME("windows.create") | 77 DECLARE_EXTENSION_FUNCTION_NAME("windows.create") |
68 }; | 78 }; |
69 class UpdateWindowFunction : public SyncExtensionFunction { | 79 class WindowsUpdateFunction : public SyncExtensionFunction { |
70 virtual ~UpdateWindowFunction() {} | 80 virtual ~WindowsUpdateFunction() {} |
71 virtual bool RunImpl() OVERRIDE; | 81 virtual bool RunImpl() OVERRIDE; |
72 DECLARE_EXTENSION_FUNCTION_NAME("windows.update") | 82 DECLARE_EXTENSION_FUNCTION_NAME("windows.update") |
73 }; | 83 }; |
74 class RemoveWindowFunction : public SyncExtensionFunction { | 84 class WindowsRemoveFunction : public SyncExtensionFunction { |
75 virtual ~RemoveWindowFunction() {} | 85 virtual ~WindowsRemoveFunction() {} |
76 virtual bool RunImpl() OVERRIDE; | 86 virtual bool RunImpl() OVERRIDE; |
77 DECLARE_EXTENSION_FUNCTION_NAME("windows.remove") | 87 DECLARE_EXTENSION_FUNCTION_NAME("windows.remove") |
78 }; | 88 }; |
79 | 89 |
80 // Tabs | 90 // Tabs |
81 class GetTabFunction : public SyncExtensionFunction { | 91 class TabsGetFunction : public SyncExtensionFunction { |
82 virtual ~GetTabFunction() {} | 92 virtual ~TabsGetFunction() {} |
83 virtual bool RunImpl() OVERRIDE; | 93 virtual bool RunImpl() OVERRIDE; |
84 DECLARE_EXTENSION_FUNCTION_NAME("tabs.get") | 94 DECLARE_EXTENSION_FUNCTION_NAME("tabs.get") |
85 }; | 95 }; |
86 class GetCurrentTabFunction : public SyncExtensionFunction { | 96 class TabsGetCurrentFunction : public SyncExtensionFunction { |
87 virtual ~GetCurrentTabFunction() {} | 97 virtual ~TabsGetCurrentFunction() {} |
88 virtual bool RunImpl() OVERRIDE; | 98 virtual bool RunImpl() OVERRIDE; |
89 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getCurrent") | 99 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getCurrent") |
90 }; | 100 }; |
91 class GetSelectedTabFunction : public SyncExtensionFunction { | 101 class TabsGetSelectedFunction : public SyncExtensionFunction { |
92 virtual ~GetSelectedTabFunction() {} | 102 virtual ~TabsGetSelectedFunction() {} |
93 virtual bool RunImpl() OVERRIDE; | 103 virtual bool RunImpl() OVERRIDE; |
94 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getSelected") | 104 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getSelected") |
95 }; | 105 }; |
96 class GetAllTabsInWindowFunction : public SyncExtensionFunction { | 106 class TabsGetAllInWindowFunction : public SyncExtensionFunction { |
97 virtual ~GetAllTabsInWindowFunction() {} | 107 virtual ~TabsGetAllInWindowFunction() {} |
98 virtual bool RunImpl() OVERRIDE; | 108 virtual bool RunImpl() OVERRIDE; |
99 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getAllInWindow") | 109 DECLARE_EXTENSION_FUNCTION_NAME("tabs.getAllInWindow") |
100 }; | 110 }; |
101 class QueryTabsFunction : public SyncExtensionFunction { | 111 class TabsQueryFunction : public SyncExtensionFunction { |
102 virtual ~QueryTabsFunction() {} | 112 virtual ~TabsQueryFunction() {} |
103 virtual bool RunImpl() OVERRIDE; | 113 virtual bool RunImpl() OVERRIDE; |
104 DECLARE_EXTENSION_FUNCTION_NAME("tabs.query") | 114 DECLARE_EXTENSION_FUNCTION_NAME("tabs.query") |
105 }; | 115 }; |
106 class CreateTabFunction : public SyncExtensionFunction { | 116 class TabsCreateFunction : public SyncExtensionFunction { |
107 virtual ~CreateTabFunction() {} | 117 virtual ~TabsCreateFunction() {} |
108 virtual bool RunImpl() OVERRIDE; | 118 virtual bool RunImpl() OVERRIDE; |
109 DECLARE_EXTENSION_FUNCTION_NAME("tabs.create") | 119 DECLARE_EXTENSION_FUNCTION_NAME("tabs.create") |
110 }; | 120 }; |
111 class DuplicateTabFunction : public SyncExtensionFunction { | 121 class TabsDuplicateFunction : public SyncExtensionFunction { |
112 virtual ~DuplicateTabFunction() {} | 122 virtual ~TabsDuplicateFunction() {} |
113 virtual bool RunImpl() OVERRIDE; | 123 virtual bool RunImpl() OVERRIDE; |
114 DECLARE_EXTENSION_FUNCTION_NAME("tabs.duplicate") | 124 DECLARE_EXTENSION_FUNCTION_NAME("tabs.duplicate") |
115 }; | 125 }; |
116 class HighlightTabsFunction : public SyncExtensionFunction { | 126 class TabsHighlightFunction : public SyncExtensionFunction { |
117 virtual ~HighlightTabsFunction() {} | 127 virtual ~TabsHighlightFunction() {} |
118 virtual bool RunImpl() OVERRIDE; | 128 virtual bool RunImpl() OVERRIDE; |
119 DECLARE_EXTENSION_FUNCTION_NAME("tabs.highlight") | 129 DECLARE_EXTENSION_FUNCTION_NAME("tabs.highlight") |
120 }; | 130 }; |
121 class UpdateTabFunction : public AsyncExtensionFunction { | 131 class TabsUpdateFunction : public AsyncExtensionFunction { |
122 public: | 132 public: |
123 UpdateTabFunction(); | 133 TabsUpdateFunction(); |
124 | 134 |
125 protected: | 135 protected: |
126 virtual ~UpdateTabFunction() {} | 136 virtual ~TabsUpdateFunction() {} |
127 virtual bool UpdateURLIfPresent(base::DictionaryValue* update_props, | 137 virtual bool UpdateURLIfPresent(base::DictionaryValue* update_props, |
128 int tab_id, | 138 int tab_id, |
129 bool* is_async); | 139 bool* is_async); |
130 virtual void PopulateResult(); | 140 virtual void PopulateResult(); |
131 | 141 |
132 content::WebContents* web_contents_; | 142 content::WebContents* web_contents_; |
133 | 143 |
134 private: | 144 private: |
135 virtual bool RunImpl() OVERRIDE; | 145 virtual bool RunImpl() OVERRIDE; |
136 void OnExecuteCodeFinished(const std::string& error, | 146 void OnExecuteCodeFinished(const std::string& error, |
137 int32 on_page_id, | 147 int32 on_page_id, |
138 const GURL& on_url, | 148 const GURL& on_url, |
139 const ListValue& script_result); | 149 const ListValue& script_result); |
140 | 150 |
141 DECLARE_EXTENSION_FUNCTION_NAME("tabs.update") | 151 DECLARE_EXTENSION_FUNCTION_NAME("tabs.update") |
142 }; | 152 }; |
143 class MoveTabsFunction : public SyncExtensionFunction { | 153 class TabsMoveFunction : public SyncExtensionFunction { |
144 virtual ~MoveTabsFunction() {} | 154 virtual ~TabsMoveFunction() {} |
145 virtual bool RunImpl() OVERRIDE; | 155 virtual bool RunImpl() OVERRIDE; |
146 DECLARE_EXTENSION_FUNCTION_NAME("tabs.move") | 156 DECLARE_EXTENSION_FUNCTION_NAME("tabs.move") |
147 }; | 157 }; |
148 class ReloadTabFunction : public SyncExtensionFunction { | 158 class TabsReloadFunction : public SyncExtensionFunction { |
149 virtual ~ReloadTabFunction() {} | 159 virtual ~TabsReloadFunction() {} |
150 virtual bool RunImpl() OVERRIDE; | 160 virtual bool RunImpl() OVERRIDE; |
151 DECLARE_EXTENSION_FUNCTION_NAME("tabs.reload") | 161 DECLARE_EXTENSION_FUNCTION_NAME("tabs.reload") |
152 }; | 162 }; |
153 class RemoveTabsFunction : public SyncExtensionFunction { | 163 class TabsRemoveFunction : public SyncExtensionFunction { |
154 virtual ~RemoveTabsFunction() {} | 164 virtual ~TabsRemoveFunction() {} |
155 virtual bool RunImpl() OVERRIDE; | 165 virtual bool RunImpl() OVERRIDE; |
156 DECLARE_EXTENSION_FUNCTION_NAME("tabs.remove") | 166 DECLARE_EXTENSION_FUNCTION_NAME("tabs.remove") |
157 }; | 167 }; |
158 class DetectTabLanguageFunction : public AsyncExtensionFunction, | 168 class TabsDetectLanguageFunction : public AsyncExtensionFunction, |
159 public content::NotificationObserver { | 169 public content::NotificationObserver { |
160 private: | 170 private: |
161 virtual ~DetectTabLanguageFunction() {} | 171 virtual ~TabsDetectLanguageFunction() {} |
162 virtual bool RunImpl() OVERRIDE; | 172 virtual bool RunImpl() OVERRIDE; |
163 | 173 |
164 virtual void Observe(int type, | 174 virtual void Observe(int type, |
165 const content::NotificationSource& source, | 175 const content::NotificationSource& source, |
166 const content::NotificationDetails& details) OVERRIDE; | 176 const content::NotificationDetails& details) OVERRIDE; |
167 void GotLanguage(const std::string& language); | 177 void GotLanguage(const std::string& language); |
168 content::NotificationRegistrar registrar_; | 178 content::NotificationRegistrar registrar_; |
169 DECLARE_EXTENSION_FUNCTION_NAME("tabs.detectLanguage") | 179 DECLARE_EXTENSION_FUNCTION_NAME("tabs.detectLanguage") |
170 }; | 180 }; |
171 class CaptureVisibleTabFunction : public AsyncExtensionFunction, | 181 class TabsCaptureVisibleTabFunction : public AsyncExtensionFunction, |
172 public content::NotificationObserver { | 182 public content::NotificationObserver { |
173 public: | 183 public: |
174 static void RegisterUserPrefs(PrefServiceSyncable* service); | 184 static void RegisterUserPrefs(PrefServiceSyncable* service); |
175 | 185 |
176 protected: | 186 protected: |
177 enum ImageFormat { | 187 enum ImageFormat { |
178 FORMAT_JPEG, | 188 FORMAT_JPEG, |
179 FORMAT_PNG | 189 FORMAT_PNG |
180 }; | 190 }; |
181 | 191 |
182 // The default quality setting used when encoding jpegs. | 192 // The default quality setting used when encoding jpegs. |
183 static const int kDefaultQuality; | 193 static const int kDefaultQuality; |
184 | 194 |
185 virtual ~CaptureVisibleTabFunction() {} | 195 virtual ~TabsCaptureVisibleTabFunction() {} |
186 virtual bool RunImpl() OVERRIDE; | 196 virtual bool RunImpl() OVERRIDE; |
187 virtual bool GetTabToCapture(content::WebContents** web_contents); | 197 virtual bool GetTabToCapture(content::WebContents** web_contents); |
188 virtual void Observe(int type, | 198 virtual void Observe(int type, |
189 const content::NotificationSource& source, | 199 const content::NotificationSource& source, |
190 const content::NotificationDetails& details) OVERRIDE; | 200 const content::NotificationDetails& details) OVERRIDE; |
191 void SendResultFromBitmap(const SkBitmap& screen_capture); | 201 void SendResultFromBitmap(const SkBitmap& screen_capture); |
192 | 202 |
193 private: | 203 private: |
194 void CopyFromBackingStoreComplete(skia::PlatformBitmap* bitmap, | 204 void CopyFromBackingStoreComplete(skia::PlatformBitmap* bitmap, |
195 bool succeeded); | 205 bool succeeded); |
196 | 206 |
197 content::NotificationRegistrar registrar_; | 207 content::NotificationRegistrar registrar_; |
198 | 208 |
199 // The format (JPEG vs PNG) of the resulting image. Set in RunImpl(). | 209 // The format (JPEG vs PNG) of the resulting image. Set in RunImpl(). |
200 ImageFormat image_format_; | 210 ImageFormat image_format_; |
201 | 211 |
202 // Quality setting to use when encoding jpegs. Set in RunImpl(). | 212 // Quality setting to use when encoding jpegs. Set in RunImpl(). |
203 int image_quality_; | 213 int image_quality_; |
204 | 214 |
205 DECLARE_EXTENSION_FUNCTION_NAME("tabs.captureVisibleTab") | 215 DECLARE_EXTENSION_FUNCTION_NAME("tabs.captureVisibleTab") |
206 }; | 216 }; |
207 | 217 |
208 #endif // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_H__ | 218 // Implement API call tabs.executeScript and tabs.insertCSS. |
| 219 class ExecuteCodeInTabFunction : public AsyncExtensionFunction { |
| 220 public: |
| 221 ExecuteCodeInTabFunction(); |
| 222 |
| 223 protected: |
| 224 virtual ~ExecuteCodeInTabFunction(); |
| 225 |
| 226 // ExtensionFunction: |
| 227 virtual bool HasPermission() OVERRIDE; |
| 228 virtual bool RunImpl() OVERRIDE; |
| 229 |
| 230 // Message handler. |
| 231 virtual void OnExecuteCodeFinished(const std::string& error, |
| 232 int32 on_page_id, |
| 233 const GURL& on_url, |
| 234 const ListValue& script_result); |
| 235 |
| 236 private: |
| 237 // Initialize the |execute_tab_id_| and |details_| if they haven't already |
| 238 // been. Returns whether initialization was successful. |
| 239 bool Init(); |
| 240 |
| 241 // Called when contents from the file whose path is specified in JSON |
| 242 // arguments has been loaded. |
| 243 void DidLoadFile(bool success, const std::string& data); |
| 244 |
| 245 // Runs on FILE thread. Loads message bundles for the extension and |
| 246 // localizes the CSS data. Calls back DidLoadAndLocalizeFile on the UI thread. |
| 247 void LocalizeCSS( |
| 248 const std::string& data, |
| 249 const std::string& extension_id, |
| 250 const FilePath& extension_path, |
| 251 const std::string& extension_default_locale); |
| 252 |
| 253 // Called when contents from the loaded file have been localized. |
| 254 void DidLoadAndLocalizeFile(bool success, const std::string& data); |
| 255 |
| 256 // Run in UI thread. Code string contains the code to be executed. Returns |
| 257 // true on success. If true is returned, this does an AddRef. |
| 258 bool Execute(const std::string& code_string); |
| 259 |
| 260 // Id of tab which executes code. |
| 261 int execute_tab_id_; |
| 262 |
| 263 // The injection details. |
| 264 scoped_ptr<extensions::api::tabs::InjectDetails> details_; |
| 265 |
| 266 // Contains extension resource built from path of file which is |
| 267 // specified in JSON arguments. |
| 268 ExtensionResource resource_; |
| 269 }; |
| 270 |
| 271 class TabsExecuteScriptFunction : public ExecuteCodeInTabFunction { |
| 272 private: |
| 273 virtual ~TabsExecuteScriptFunction() {} |
| 274 |
| 275 virtual void OnExecuteCodeFinished(const std::string& error, |
| 276 int32 on_page_id, |
| 277 const GURL& on_url, |
| 278 const ListValue& script_result) OVERRIDE; |
| 279 |
| 280 DECLARE_EXTENSION_FUNCTION_NAME("tabs.executeScript") |
| 281 }; |
| 282 |
| 283 class TabsInsertCSSFunction : public ExecuteCodeInTabFunction { |
| 284 private: |
| 285 virtual ~TabsInsertCSSFunction() {} |
| 286 |
| 287 DECLARE_EXTENSION_FUNCTION_NAME("tabs.insertCSS") |
| 288 }; |
| 289 |
| 290 #endif // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_API_H_ |
OLD | NEW |