Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Side by Side Diff: chrome/browser/extensions/api/extension_action/extension_action_api.h

Issue 11638022: Consolidate [BrowserAction,PageAction,ScriptBadge]API into ExtensionActionAPI (Closed) Base URL: http://git.chromium.org/chromium/src.git@dc_unref_script_badge
Patch Set: nits Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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_EXTENSION_ACTION_EXTENSION_ACTION_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H_
7
8 #include "base/memory/weak_ptr.h"
9 #include "chrome/browser/extensions/extension_action.h"
10 #include "chrome/browser/extensions/extension_function.h"
11 #include "chrome/browser/profiles/profile_keyed_service.h"
12 #include "content/public/browser/notification_observer.h"
13 #include "content/public/browser/notification_registrar.h"
14
15 namespace base {
16 class DictionaryValue;
17 }
18
19 namespace content {
20 class WebContents;
21 }
22
23 namespace extensions {
24 class TabHelper;
25 }
26
27 namespace extensions {
28
29 class ExtensionActionAPI : public ProfileKeyedService {
30 public:
31 explicit ExtensionActionAPI(Profile* profile);
32 virtual ~ExtensionActionAPI();
33
34 // ProfileKeyedService implementation.
35 virtual void Shutdown() OVERRIDE;
36 };
37
38 // This class manages reading and writing browser action values from storage.
39 class ExtensionActionStorageManager
40 : public content::NotificationObserver,
41 public base::SupportsWeakPtr<ExtensionActionStorageManager> {
42 public:
43 explicit ExtensionActionStorageManager(Profile* profile);
44 virtual ~ExtensionActionStorageManager();
45
46 private:
47 // NotificationObserver:
48 virtual void Observe(int type,
49 const content::NotificationSource& source,
50 const content::NotificationDetails& details) OVERRIDE;
51
52 // Reads/Writes the ExtensionAction's default values to/from storage.
53 void WriteToStorage(ExtensionAction* extension_action);
54 void ReadFromStorage(
55 const std::string& extension_id, scoped_ptr<base::Value> value);
56
57 Profile* profile_;
58 content::NotificationRegistrar registrar_;
59 };
60
61 // Implementation of the browserAction, pageAction, and scriptBadge APIs.
62 //
63 // Divergent behaviour between the three is minimal (pageAction and scriptBadge
64 // have required tabIds while browserAction's are optional, they have different
65 // internal browser notification requirements, and not all functions are defined
66 // for all APIs).
67 class ExtensionActionFunction : public SyncExtensionFunction {
68 public:
69 static bool ParseCSSColorString(const std::string& color_string,
70 SkColor* result);
71
72 protected:
73 ExtensionActionFunction();
74 virtual ~ExtensionActionFunction();
75 virtual bool RunImpl() OVERRIDE;
76 virtual bool RunExtensionAction() = 0;
77
78 bool ExtractDataFromArguments();
79 void NotifyChange();
80 void NotifyBrowserActionChange();
81 void NotifyLocationBarChange();
82 void NotifySystemIndicatorChange();
83 bool SetVisible(bool visible);
84
85 // Extension-related information for |tab_id_|.
86 // CHECK-fails if there is no tab.
87 extensions::TabHelper& tab_helper() const;
88
89 // All the extension action APIs take a single argument called details that
90 // is a dictionary.
91 base::DictionaryValue* details_;
92
93 // The tab id the extension action function should apply to, if any, or
94 // kDefaultTabId if none was specified.
95 int tab_id_;
96
97 // WebContents for |tab_id_| if one exists.
98 content::WebContents* contents_;
99
100 // The extension action for the current extension.
101 ExtensionAction* extension_action_;
102 };
103
104 //
105 // Implementations of each extension action API.
106 //
107 // pageAction and browserAction bindings are created for these by extending them
108 // then declaring an EXTENSION_FUNCTION_NAME.
109 //
110
111 // show
112 class ExtensionActionShowFunction : public ExtensionActionFunction {
113 protected:
114 virtual ~ExtensionActionShowFunction() {}
115 virtual bool RunExtensionAction() OVERRIDE;
116 };
117
118 // hide
119 class ExtensionActionHideFunction : public ExtensionActionFunction {
120 protected:
121 virtual ~ExtensionActionHideFunction() {}
122 virtual bool RunExtensionAction() OVERRIDE;
123 };
124
125 // setIcon
126 class ExtensionActionSetIconFunction : public ExtensionActionFunction {
127 protected:
128 virtual ~ExtensionActionSetIconFunction() {}
129 virtual bool RunExtensionAction() OVERRIDE;
130 };
131
132 // setTitle
133 class ExtensionActionSetTitleFunction : public ExtensionActionFunction {
134 protected:
135 virtual ~ExtensionActionSetTitleFunction() {}
136 virtual bool RunExtensionAction() OVERRIDE;
137 };
138
139 // setPopup
140 class ExtensionActionSetPopupFunction : public ExtensionActionFunction {
141 protected:
142 virtual ~ExtensionActionSetPopupFunction() {}
143 virtual bool RunExtensionAction() OVERRIDE;
144 };
145
146 // setBadgeText
147 class ExtensionActionSetBadgeTextFunction : public ExtensionActionFunction {
148 protected:
149 virtual ~ExtensionActionSetBadgeTextFunction() {}
150 virtual bool RunExtensionAction() OVERRIDE;
151 };
152
153 // setBadgeBackgroundColor
154 class ExtensionActionSetBadgeBackgroundColorFunction
155 : public ExtensionActionFunction {
156 protected:
157 virtual ~ExtensionActionSetBadgeBackgroundColorFunction() {}
158 virtual bool RunExtensionAction() OVERRIDE;
159 };
160
161 // getTitle
162 class ExtensionActionGetTitleFunction : public ExtensionActionFunction {
163 protected:
164 virtual ~ExtensionActionGetTitleFunction() {}
165 virtual bool RunExtensionAction() OVERRIDE;
166 };
167
168 // getPopup
169 class ExtensionActionGetPopupFunction : public ExtensionActionFunction {
170 protected:
171 virtual ~ExtensionActionGetPopupFunction() {}
172 virtual bool RunExtensionAction() OVERRIDE;
173 };
174
175 // getBadgeText
176 class ExtensionActionGetBadgeTextFunction : public ExtensionActionFunction {
177 protected:
178 virtual ~ExtensionActionGetBadgeTextFunction() {}
179 virtual bool RunExtensionAction() OVERRIDE;
180 };
181
182 // getBadgeBackgroundColor
183 class ExtensionActionGetBadgeBackgroundColorFunction
184 : public ExtensionActionFunction {
185 protected:
186 virtual ~ExtensionActionGetBadgeBackgroundColorFunction() {}
187 virtual bool RunExtensionAction() OVERRIDE;
188 };
189
190 //
191 // browserAction.* aliases for supported browserAction APIs.
192 //
193
194 class BrowserActionSetIconFunction : public ExtensionActionSetIconFunction {
195 public:
196 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.setIcon")
197
198 protected:
199 virtual ~BrowserActionSetIconFunction() {}
200 };
201
202 class BrowserActionSetTitleFunction : public ExtensionActionSetTitleFunction {
203 public:
204 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.setTitle")
205
206 protected:
207 virtual ~BrowserActionSetTitleFunction() {}
208 };
209
210 class BrowserActionSetPopupFunction : public ExtensionActionSetPopupFunction {
211 public:
212 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.setPopup")
213
214 protected:
215 virtual ~BrowserActionSetPopupFunction() {}
216 };
217
218 class BrowserActionGetTitleFunction : public ExtensionActionGetTitleFunction {
219 public:
220 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.getTitle")
221
222 protected:
223 virtual ~BrowserActionGetTitleFunction() {}
224 };
225
226 class BrowserActionGetPopupFunction : public ExtensionActionGetPopupFunction {
227 public:
228 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.getPopup")
229
230 protected:
231 virtual ~BrowserActionGetPopupFunction() {}
232 };
233
234 class BrowserActionSetBadgeTextFunction
235 : public ExtensionActionSetBadgeTextFunction {
236 public:
237 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.setBadgeText")
238
239 protected:
240 virtual ~BrowserActionSetBadgeTextFunction() {}
241 };
242
243 class BrowserActionSetBadgeBackgroundColorFunction
244 : public ExtensionActionSetBadgeBackgroundColorFunction {
245 public:
246 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.setBadgeBackgroundColor")
247
248 protected:
249 virtual ~BrowserActionSetBadgeBackgroundColorFunction() {}
250 };
251
252 class BrowserActionGetBadgeTextFunction
253 : public ExtensionActionGetBadgeTextFunction {
254 public:
255 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.getBadgeText")
256
257 protected:
258 virtual ~BrowserActionGetBadgeTextFunction() {}
259 };
260
261 class BrowserActionGetBadgeBackgroundColorFunction
262 : public ExtensionActionGetBadgeBackgroundColorFunction {
263 public:
264 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.getBadgeBackgroundColor")
265
266 protected:
267 virtual ~BrowserActionGetBadgeBackgroundColorFunction() {}
268 };
269
270 class BrowserActionEnableFunction : public ExtensionActionShowFunction {
271 public:
272 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.enable")
273
274 protected:
275 virtual ~BrowserActionEnableFunction() {}
276 };
277
278 class BrowserActionDisableFunction : public ExtensionActionHideFunction {
279 public:
280 DECLARE_EXTENSION_FUNCTION_NAME("browserAction.disable")
281
282 protected:
283 virtual ~BrowserActionDisableFunction() {}
284 };
285
286 //
287 // scriptBadge.* aliases for supported scriptBadge APIs.
288 //
289
290 class ScriptBadgeSetPopupFunction : public ExtensionActionSetPopupFunction {
291 public:
292 DECLARE_EXTENSION_FUNCTION_NAME("scriptBadge.setPopup")
293
294 protected:
295 virtual ~ScriptBadgeSetPopupFunction() {}
296 };
297
298 class ScriptBadgeGetPopupFunction : public ExtensionActionGetPopupFunction {
299 public:
300 DECLARE_EXTENSION_FUNCTION_NAME("scriptBadge.getPopup")
301
302 protected:
303 virtual ~ScriptBadgeGetPopupFunction() {}
304 };
305
306 // scriptBadge.getAttention(tabId)
307 class ScriptBadgeGetAttentionFunction : public ExtensionActionFunction {
308 public:
309 DECLARE_EXTENSION_FUNCTION_NAME("scriptBadge.getAttention")
310
311 virtual bool RunExtensionAction() OVERRIDE;
312
313 protected:
314 virtual ~ScriptBadgeGetAttentionFunction();
315 };
316
317 } // namespace extensions
318
319 // Base class for deprecated page actions APIs
320 class PageActionsFunction : public SyncExtensionFunction {
321 protected:
322 PageActionsFunction();
323 virtual ~PageActionsFunction();
324 bool SetPageActionEnabled(bool enable);
325 };
326
327 // Implement chrome.pageActions.enableForTab().
328 class EnablePageActionsFunction : public PageActionsFunction {
329 public:
330 DECLARE_EXTENSION_FUNCTION_NAME("pageActions.enableForTab")
331
332 protected:
333 virtual ~EnablePageActionsFunction() {}
334
335 // ExtensionFunction:
336 virtual bool RunImpl() OVERRIDE;
337 };
338
339 // Implement chrome.pageActions.disableForTab().
340 class DisablePageActionsFunction : public PageActionsFunction {
341 public:
342 DECLARE_EXTENSION_FUNCTION_NAME("pageActions.disableForTab")
343
344 protected:
345 virtual ~DisablePageActionsFunction() {}
346
347 // ExtensionFunction:
348 virtual bool RunImpl() OVERRIDE;
349 };
350
351 //
352 // pageAction.* aliases for supported pageAction APIs.
353 //
354
355 class PageActionShowFunction : public extensions::ExtensionActionShowFunction {
356 public:
357 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.show")
358
359 protected:
360 virtual ~PageActionShowFunction() {}
361 };
362
363 class PageActionHideFunction : public extensions::ExtensionActionHideFunction {
364 public:
365 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.hide")
366
367 protected:
368 virtual ~PageActionHideFunction() {}
369 };
370
371 class PageActionSetIconFunction
372 : public extensions::ExtensionActionSetIconFunction {
373 public:
374 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.setIcon")
375
376 protected:
377 virtual ~PageActionSetIconFunction() {}
378 };
379
380 class PageActionSetTitleFunction
381 : public extensions::ExtensionActionSetTitleFunction {
382 public:
383 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.setTitle")
384
385 protected:
386 virtual ~PageActionSetTitleFunction() {}
387 };
388
389 class PageActionSetPopupFunction
390 : public extensions::ExtensionActionSetPopupFunction {
391 public:
392 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.setPopup")
393
394 protected:
395 virtual ~PageActionSetPopupFunction() {}
396 };
397
398 class PageActionGetTitleFunction
399 : public extensions::ExtensionActionGetTitleFunction {
400 public:
401 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.getTitle")
402
403 protected:
404 virtual ~PageActionGetTitleFunction() {}
405 };
406
407 class PageActionGetPopupFunction
408 : public extensions::ExtensionActionGetPopupFunction {
409 public:
410 DECLARE_EXTENSION_FUNCTION_NAME("pageAction.getPopup")
411
412 protected:
413 virtual ~PageActionGetPopupFunction() {}
414 };
415
416 #endif // CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H _
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698