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

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

Issue 502033003: Move ExtensionActionStorageManager out of extension_action_api.* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Latest master for CQ Created 6 years, 3 months 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
« no previous file with comments | « no previous file | chrome/browser/extensions/api/extension_action/extension_action_api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_EXTENSION_ACTION_EXTENSION_ACTION_API_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/weak_ptr.h"
11 #include "base/observer_list.h" 10 #include "base/observer_list.h"
12 #include "base/scoped_observer.h"
13 #include "chrome/browser/extensions/chrome_extension_function.h" 11 #include "chrome/browser/extensions/chrome_extension_function.h"
14 #include "chrome/browser/extensions/extension_action.h" 12 #include "chrome/browser/extensions/extension_action.h"
15 #include "content/public/browser/notification_observer.h" 13 #include "content/public/browser/notification_observer.h"
16 #include "content/public/browser/notification_registrar.h" 14 #include "content/public/browser/notification_registrar.h"
17 #include "extensions/browser/browser_context_keyed_api_factory.h" 15 #include "extensions/browser/browser_context_keyed_api_factory.h"
18 #include "extensions/browser/extension_registry_observer.h" 16 #include "third_party/skia/include/core/SkColor.h"
19 17
20 namespace base { 18 namespace base {
21 class DictionaryValue; 19 class DictionaryValue;
22 } 20 }
23 21
24 namespace content { 22 namespace content {
25 class BrowserContext; 23 class BrowserContext;
26 class WebContents; 24 class WebContents;
27 } 25 }
28 26
29 namespace extensions { 27 namespace extensions {
30 class ExtensionPrefs; 28 class ExtensionPrefs;
31 class ExtensionRegistry;
32 class TabHelper;
33 29
34 class ExtensionActionAPI : public BrowserContextKeyedAPI { 30 class ExtensionActionAPI : public BrowserContextKeyedAPI {
35 public: 31 public:
36 class Observer { 32 class Observer {
37 public: 33 public:
38 // Called when there is a change to the given |extension_action|. 34 // Called when there is a change to the given |extension_action|.
39 // |web_contents| is the web contents that was affected, and 35 // |web_contents| is the web contents that was affected, and
40 // |browser_context| is the associated BrowserContext. (The latter is 36 // |browser_context| is the associated BrowserContext. (The latter is
41 // included because ExtensionActionAPI is shared between normal and 37 // included because ExtensionActionAPI is shared between normal and
42 // incognito contexts, so |browser_context| may not equal 38 // incognito contexts, so |browser_context| may not equal
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 static const char* service_name() { return "ExtensionActionAPI"; } 115 static const char* service_name() { return "ExtensionActionAPI"; }
120 static const bool kServiceRedirectedInIncognito = true; 116 static const bool kServiceRedirectedInIncognito = true;
121 117
122 ObserverList<Observer> observers_; 118 ObserverList<Observer> observers_;
123 119
124 content::BrowserContext* browser_context_; 120 content::BrowserContext* browser_context_;
125 121
126 DISALLOW_COPY_AND_ASSIGN(ExtensionActionAPI); 122 DISALLOW_COPY_AND_ASSIGN(ExtensionActionAPI);
127 }; 123 };
128 124
129 // This class manages reading and writing browser action values from storage.
130 class ExtensionActionStorageManager
131 : public ExtensionActionAPI::Observer,
132 public ExtensionRegistryObserver,
133 public base::SupportsWeakPtr<ExtensionActionStorageManager> {
134 public:
135 explicit ExtensionActionStorageManager(Profile* profile);
136 virtual ~ExtensionActionStorageManager();
137
138 private:
139 // ExtensionActionAPI::Observer:
140 virtual void OnExtensionActionUpdated(
141 ExtensionAction* extension_action,
142 content::WebContents* web_contents,
143 content::BrowserContext* browser_context) OVERRIDE;
144 virtual void OnExtensionActionAPIShuttingDown() OVERRIDE;
145
146 // ExtensionRegistryObserver:
147 virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
148 const Extension* extension) OVERRIDE;
149
150 // Reads/Writes the ExtensionAction's default values to/from storage.
151 void WriteToStorage(ExtensionAction* extension_action);
152 void ReadFromStorage(
153 const std::string& extension_id, scoped_ptr<base::Value> value);
154
155 Profile* profile_;
156
157 ScopedObserver<ExtensionActionAPI, ExtensionActionAPI::Observer>
158 extension_action_observer_;
159
160 // Listen to extension loaded notification.
161 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
162 extension_registry_observer_;
163 };
164
165 // Implementation of the browserAction and pageAction APIs. 125 // Implementation of the browserAction and pageAction APIs.
166 // 126 //
167 // Divergent behaviour between the two is minimal (pageAction has required 127 // Divergent behaviour between the two is minimal (pageAction has required
168 // tabIds while browserAction's are optional, they have different internal 128 // tabIds while browserAction's are optional, they have different internal
169 // browser notification requirements, and not all functions are defined for all 129 // browser notification requirements, and not all functions are defined for all
170 // APIs). 130 // APIs).
171 class ExtensionActionFunction : public ChromeSyncExtensionFunction { 131 class ExtensionActionFunction : public ChromeSyncExtensionFunction {
172 public: 132 public:
173 static bool ParseCSSColorString(const std::string& color_string, 133 static bool ParseCSSColorString(const std::string& color_string,
174 SkColor* result); 134 SkColor* result);
175 135
176 protected: 136 protected:
177 ExtensionActionFunction(); 137 ExtensionActionFunction();
178 virtual ~ExtensionActionFunction(); 138 virtual ~ExtensionActionFunction();
179 virtual bool RunSync() OVERRIDE; 139 virtual bool RunSync() OVERRIDE;
180 virtual bool RunExtensionAction() = 0; 140 virtual bool RunExtensionAction() = 0;
181 141
182 bool ExtractDataFromArguments(); 142 bool ExtractDataFromArguments();
183 void NotifyChange(); 143 void NotifyChange();
184 bool SetVisible(bool visible); 144 bool SetVisible(bool visible);
185 145
186 // Extension-related information for |tab_id_|.
187 // CHECK-fails if there is no tab.
188 extensions::TabHelper& tab_helper() const;
189
190 // All the extension action APIs take a single argument called details that 146 // All the extension action APIs take a single argument called details that
191 // is a dictionary. 147 // is a dictionary.
192 base::DictionaryValue* details_; 148 base::DictionaryValue* details_;
193 149
194 // The tab id the extension action function should apply to, if any, or 150 // The tab id the extension action function should apply to, if any, or
195 // kDefaultTabId if none was specified. 151 // kDefaultTabId if none was specified.
196 int tab_id_; 152 int tab_id_;
197 153
198 // WebContents for |tab_id_| if one exists. 154 // WebContents for |tab_id_| if one exists.
199 content::WebContents* contents_; 155 content::WebContents* contents_;
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 class PageActionGetPopupFunction 429 class PageActionGetPopupFunction
474 : public extensions::ExtensionActionGetPopupFunction { 430 : public extensions::ExtensionActionGetPopupFunction {
475 public: 431 public:
476 DECLARE_EXTENSION_FUNCTION("pageAction.getPopup", PAGEACTION_GETPOPUP) 432 DECLARE_EXTENSION_FUNCTION("pageAction.getPopup", PAGEACTION_GETPOPUP)
477 433
478 protected: 434 protected:
479 virtual ~PageActionGetPopupFunction() {} 435 virtual ~PageActionGetPopupFunction() {}
480 }; 436 };
481 437
482 #endif // CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H _ 438 #endif // CHROME_BROWSER_EXTENSIONS_API_EXTENSION_ACTION_EXTENSION_ACTION_API_H _
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/extension_action/extension_action_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698