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

Side by Side Diff: chrome/browser/extensions/extension_system.h

Issue 14757022: Add a non-blocking "OneShotEvent" class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: dcronin's comments; ExtensionSystem::ready; and WeakPtr support Created 7 years, 7 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 | Annotate | Revision Log
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_EXTENSION_SYSTEM_H_ 5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_ 6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "chrome/browser/extensions/api/api_resource_manager.h" 12 #include "chrome/browser/extensions/api/api_resource_manager.h"
13 #include "chrome/browser/extensions/api/serial/serial_connection.h" 13 #include "chrome/browser/extensions/api/serial/serial_connection.h"
14 #include "chrome/browser/extensions/api/socket/socket.h" 14 #include "chrome/browser/extensions/api/socket/socket.h"
15 #include "chrome/browser/extensions/api/usb/usb_device_resource.h" 15 #include "chrome/browser/extensions/api/usb/usb_device_resource.h"
16 #include "chrome/browser/profiles/profile_keyed_service.h" 16 #include "chrome/browser/profiles/profile_keyed_service.h"
17 #include "chrome/common/extensions/extension_constants.h" 17 #include "chrome/common/extensions/extension_constants.h"
18 #include "extensions/common/async_event.h"
18 19
19 class ExtensionInfoMap; 20 class ExtensionInfoMap;
20 class ExtensionProcessManager; 21 class ExtensionProcessManager;
21 class ExtensionService; 22 class ExtensionService;
22 class Profile; 23 class Profile;
23 24
24 namespace extensions { 25 namespace extensions {
25 // Unfortunately, for the ApiResourceManager<> template classes, we don't seem 26 // Unfortunately, for the ApiResourceManager<> template classes, we don't seem
26 // to be able to forward-declare because of compilation errors on Windows. 27 // to be able to forward-declare because of compilation errors on Windows.
27 class AlarmManager; 28 class AlarmManager;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 // extensions before anything else needs them to know. 134 // extensions before anything else needs them to know.
134 virtual void RegisterExtensionWithRequestContexts( 135 virtual void RegisterExtensionWithRequestContexts(
135 const Extension* extension) {} 136 const Extension* extension) {}
136 137
137 // Called by the ExtensionService that lives in this system. Lets the 138 // Called by the ExtensionService that lives in this system. Lets the
138 // info map clean up its RequestContexts once all the listeners to the 139 // info map clean up its RequestContexts once all the listeners to the
139 // EXTENSION_UNLOADED notification have finished running. 140 // EXTENSION_UNLOADED notification have finished running.
140 virtual void UnregisterExtensionWithRequestContexts( 141 virtual void UnregisterExtensionWithRequestContexts(
141 const std::string& extension_id, 142 const std::string& extension_id,
142 const extension_misc::UnloadedExtensionReason reason) {} 143 const extension_misc::UnloadedExtensionReason reason) {}
144
145 virtual const AsyncEvent& ready() const = 0;
143 }; 146 };
144 147
145 // The ExtensionSystem for ProfileImpl and OffTheRecordProfileImpl. 148 // The ExtensionSystem for ProfileImpl and OffTheRecordProfileImpl.
146 // Implementation details: non-shared services are owned by 149 // Implementation details: non-shared services are owned by
147 // ExtensionSystemImpl, a ProfileKeyedService with separate incognito 150 // ExtensionSystemImpl, a ProfileKeyedService with separate incognito
148 // instances. A private Shared class (also a ProfileKeyedService, 151 // instances. A private Shared class (also a ProfileKeyedService,
149 // but with a shared instance for incognito) keeps the common services. 152 // but with a shared instance for incognito) keeps the common services.
150 class ExtensionSystemImpl : public ExtensionSystem { 153 class ExtensionSystemImpl : public ExtensionSystem {
151 public: 154 public:
152 explicit ExtensionSystemImpl(Profile* profile); 155 explicit ExtensionSystemImpl(Profile* profile);
(...skipping 29 matching lines...) Expand all
182 virtual ExtensionWarningService* warning_service() OVERRIDE; 185 virtual ExtensionWarningService* warning_service() OVERRIDE;
183 virtual Blacklist* blacklist() OVERRIDE; // shared 186 virtual Blacklist* blacklist() OVERRIDE; // shared
184 187
185 virtual void RegisterExtensionWithRequestContexts( 188 virtual void RegisterExtensionWithRequestContexts(
186 const Extension* extension) OVERRIDE; 189 const Extension* extension) OVERRIDE;
187 190
188 virtual void UnregisterExtensionWithRequestContexts( 191 virtual void UnregisterExtensionWithRequestContexts(
189 const std::string& extension_id, 192 const std::string& extension_id,
190 const extension_misc::UnloadedExtensionReason reason) OVERRIDE; 193 const extension_misc::UnloadedExtensionReason reason) OVERRIDE;
191 194
195 virtual const AsyncEvent& ready() const OVERRIDE;
196
192 private: 197 private:
193 friend class ExtensionSystemSharedFactory; 198 friend class ExtensionSystemSharedFactory;
194 199
195 // Owns the Extension-related systems that have a single instance 200 // Owns the Extension-related systems that have a single instance
196 // shared between normal and incognito profiles. 201 // shared between normal and incognito profiles.
197 class Shared : public ProfileKeyedService { 202 class Shared : public ProfileKeyedService {
198 public: 203 public:
199 explicit Shared(Profile* profile); 204 explicit Shared(Profile* profile);
200 virtual ~Shared(); 205 virtual ~Shared();
201 206
(...skipping 11 matching lines...) Expand all
213 ExtensionPrefs* extension_prefs(); 218 ExtensionPrefs* extension_prefs();
214 ShellWindowGeometryCache* shell_window_geometry_cache(); 219 ShellWindowGeometryCache* shell_window_geometry_cache();
215 ExtensionService* extension_service(); 220 ExtensionService* extension_service();
216 ManagementPolicy* management_policy(); 221 ManagementPolicy* management_policy();
217 UserScriptMaster* user_script_master(); 222 UserScriptMaster* user_script_master();
218 Blacklist* blacklist(); 223 Blacklist* blacklist();
219 ExtensionInfoMap* info_map(); 224 ExtensionInfoMap* info_map();
220 LazyBackgroundTaskQueue* lazy_background_task_queue(); 225 LazyBackgroundTaskQueue* lazy_background_task_queue();
221 EventRouter* event_router(); 226 EventRouter* event_router();
222 ExtensionWarningService* warning_service(); 227 ExtensionWarningService* warning_service();
228 const AsyncEvent& ready() const { return ready_; }
223 229
224 private: 230 private:
225 Profile* profile_; 231 Profile* profile_;
226 232
227 // The services that are shared between normal and incognito profiles. 233 // The services that are shared between normal and incognito profiles.
228 234
229 scoped_ptr<StateStore> state_store_; 235 scoped_ptr<StateStore> state_store_;
230 scoped_ptr<StateStore> rules_store_; 236 scoped_ptr<StateStore> rules_store_;
231 scoped_ptr<ExtensionPrefs> extension_prefs_; 237 scoped_ptr<ExtensionPrefs> extension_prefs_;
232 // ShellWindowGeometryCache depends on ExtensionPrefs. 238 // ShellWindowGeometryCache depends on ExtensionPrefs.
233 scoped_ptr<ShellWindowGeometryCache> shell_window_geometry_cache_; 239 scoped_ptr<ShellWindowGeometryCache> shell_window_geometry_cache_;
234 // LazyBackgroundTaskQueue is a dependency of 240 // LazyBackgroundTaskQueue is a dependency of
235 // MessageService and EventRouter. 241 // MessageService and EventRouter.
236 scoped_ptr<LazyBackgroundTaskQueue> lazy_background_task_queue_; 242 scoped_ptr<LazyBackgroundTaskQueue> lazy_background_task_queue_;
237 scoped_ptr<EventRouter> event_router_; 243 scoped_ptr<EventRouter> event_router_;
238 scoped_ptr<NavigationObserver> navigation_observer_; 244 scoped_ptr<NavigationObserver> navigation_observer_;
239 scoped_refptr<UserScriptMaster> user_script_master_; 245 scoped_refptr<UserScriptMaster> user_script_master_;
240 // Blacklist depends on ExtensionPrefs. 246 // Blacklist depends on ExtensionPrefs.
241 scoped_ptr<Blacklist> blacklist_; 247 scoped_ptr<Blacklist> blacklist_;
242 // StandardManagementPolicyProvider depends on ExtensionPrefs and Blacklist. 248 // StandardManagementPolicyProvider depends on ExtensionPrefs and Blacklist.
243 scoped_ptr<StandardManagementPolicyProvider> 249 scoped_ptr<StandardManagementPolicyProvider>
244 standard_management_policy_provider_; 250 standard_management_policy_provider_;
245 // ExtensionService depends on ExtensionPrefs, StateStore, and Blacklist. 251 // ExtensionService depends on ExtensionPrefs, StateStore, and Blacklist.
246 scoped_ptr<ExtensionService> extension_service_; 252 scoped_ptr<ExtensionService> extension_service_;
247 scoped_ptr<ManagementPolicy> management_policy_; 253 scoped_ptr<ManagementPolicy> management_policy_;
248 // extension_info_map_ needs to outlive extension_process_manager_. 254 // extension_info_map_ needs to outlive extension_process_manager_.
249 scoped_refptr<ExtensionInfoMap> extension_info_map_; 255 scoped_refptr<ExtensionInfoMap> extension_info_map_;
250 scoped_ptr<ExtensionWarningService> extension_warning_service_; 256 scoped_ptr<ExtensionWarningService> extension_warning_service_;
251 scoped_ptr<ExtensionWarningBadgeService> extension_warning_badge_service_; 257 scoped_ptr<ExtensionWarningBadgeService> extension_warning_badge_service_;
258
259 AsyncEvent ready_;
252 }; 260 };
253 261
254 Profile* profile_; 262 Profile* profile_;
255 263
256 Shared* shared_; 264 Shared* shared_;
257 265
258 // |extension_process_manager_| must be destroyed before the Profile's 266 // |extension_process_manager_| must be destroyed before the Profile's
259 // |io_data_|. While |extension_process_manager_| still lives, we handle 267 // |io_data_|. While |extension_process_manager_| still lives, we handle
260 // incoming resource requests from extension processes and those require 268 // incoming resource requests from extension processes and those require
261 // access to the ResourceContext owned by |io_data_|. 269 // access to the ResourceContext owned by |io_data_|.
262 scoped_ptr<ExtensionProcessManager> extension_process_manager_; 270 scoped_ptr<ExtensionProcessManager> extension_process_manager_;
263 scoped_ptr<LocationManager> location_manager_; 271 scoped_ptr<LocationManager> location_manager_;
264 scoped_ptr<ApiResourceManager<SerialConnection> > serial_connection_manager_; 272 scoped_ptr<ApiResourceManager<SerialConnection> > serial_connection_manager_;
265 scoped_ptr<ApiResourceManager<Socket> > socket_manager_; 273 scoped_ptr<ApiResourceManager<Socket> > socket_manager_;
266 scoped_ptr<ApiResourceManager< 274 scoped_ptr<ApiResourceManager<
267 UsbDeviceResource> > usb_device_resource_manager_; 275 UsbDeviceResource> > usb_device_resource_manager_;
268 scoped_ptr<RulesRegistryService> rules_registry_service_; 276 scoped_ptr<RulesRegistryService> rules_registry_service_;
269 277
270 DISALLOW_COPY_AND_ASSIGN(ExtensionSystemImpl); 278 DISALLOW_COPY_AND_ASSIGN(ExtensionSystemImpl);
271 }; 279 };
272 280
273 } // namespace extensions 281 } // namespace extensions
274 282
275 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_ 283 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYSTEM_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698