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

Side by Side Diff: extensions/browser/api/api_resource_manager.h

Issue 346193002: Use ExtensionRegistry in EventRouter and ApiResourceManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 5 #ifndef EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
6 #define EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 6 #define EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/memory/linked_ptr.h" 12 #include "base/memory/linked_ptr.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/scoped_observer.h"
14 #include "base/threading/non_thread_safe.h" 15 #include "base/threading/non_thread_safe.h"
15 #include "chrome/browser/chrome_notification_types.h" 16 #include "chrome/browser/chrome_notification_types.h"
16 #include "components/keyed_service/core/keyed_service.h" 17 #include "components/keyed_service/core/keyed_service.h"
17 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/notification_observer.h" 19 #include "content/public/browser/notification_observer.h"
19 #include "content/public/browser/notification_registrar.h" 20 #include "content/public/browser/notification_registrar.h"
20 #include "content/public/browser/notification_service.h" 21 #include "content/public/browser/notification_service.h"
21 #include "extensions/browser/browser_context_keyed_api_factory.h" 22 #include "extensions/browser/browser_context_keyed_api_factory.h"
22 #include "extensions/browser/extension_host.h" 23 #include "extensions/browser/extension_host.h"
24 #include "extensions/browser/extension_registry.h"
25 #include "extensions/browser/extension_registry_observer.h"
23 #include "extensions/common/extension.h" 26 #include "extensions/common/extension.h"
24 27
25 namespace extensions { 28 namespace extensions {
26 29
27 namespace api { 30 namespace api {
28 class BluetoothSocketApiFunction; 31 class BluetoothSocketApiFunction;
29 class BluetoothSocketEventDispatcher; 32 class BluetoothSocketEventDispatcher;
30 class SerialEventDispatcher; 33 class SerialEventDispatcher;
31 } 34 }
32 35
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 // 71 //
69 // 72 //
70 // template <> 73 // template <>
71 // BrowserContextKeyedAPIFactory<ApiResourceManager<Resource> >* 74 // BrowserContextKeyedAPIFactory<ApiResourceManager<Resource> >*
72 // ApiResourceManager<Resource>::GetFactoryInstance() { 75 // ApiResourceManager<Resource>::GetFactoryInstance() {
73 // return g_factory.Pointer(); 76 // return g_factory.Pointer();
74 // } 77 // }
75 template <class T> 78 template <class T>
76 class ApiResourceManager : public BrowserContextKeyedAPI, 79 class ApiResourceManager : public BrowserContextKeyedAPI,
77 public base::NonThreadSafe, 80 public base::NonThreadSafe,
78 public content::NotificationObserver { 81 public content::NotificationObserver,
82 public ExtensionRegistryObserver {
79 public: 83 public:
80 explicit ApiResourceManager(content::BrowserContext* context) 84 explicit ApiResourceManager(content::BrowserContext* context)
81 : thread_id_(T::kThreadId), data_(new ApiResourceData(thread_id_)) { 85 : thread_id_(T::kThreadId),
82 registrar_.Add(this, 86 data_(new ApiResourceData(thread_id_)),
83 chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, 87 extension_registry_observer_(this) {
84 content::NotificationService::AllSources()); 88 extension_registry_observer_.Add(ExtensionRegistry::Get(context));
85 registrar_.Add(this, 89 registrar_.Add(this,
86 chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, 90 chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
87 content::NotificationService::AllSources()); 91 content::NotificationService::AllSources());
88 } 92 }
89 93
90 // For Testing. 94 // For Testing.
91 static ApiResourceManager<T>* CreateApiResourceManagerForTest( 95 static ApiResourceManager<T>* CreateApiResourceManagerForTest(
92 content::BrowserContext* context, 96 content::BrowserContext* context,
93 content::BrowserThread::ID thread_id) { 97 content::BrowserThread::ID thread_id) {
94 ApiResourceManager* manager = new ApiResourceManager<T>(context); 98 ApiResourceManager* manager = new ApiResourceManager<T>(context);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 133
130 base::hash_set<int>* GetResourceIds(const std::string& extension_id) { 134 base::hash_set<int>* GetResourceIds(const std::string& extension_id) {
131 return data_->GetResourceIds(extension_id); 135 return data_->GetResourceIds(extension_id);
132 } 136 }
133 137
134 protected: 138 protected:
135 // content::NotificationObserver: 139 // content::NotificationObserver:
136 virtual void Observe(int type, 140 virtual void Observe(int type,
137 const content::NotificationSource& source, 141 const content::NotificationSource& source,
138 const content::NotificationDetails& details) OVERRIDE { 142 const content::NotificationDetails& details) OVERRIDE {
139 switch (type) { 143 DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, type);
140 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { 144 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
141 std::string id = content::Details<extensions::UnloadedExtensionInfo>( 145 data_->InitiateExtensionSuspendedCleanup(host->extension_id());
142 details)->extension->id(); 146 }
143 data_->InitiateExtensionUnloadedCleanup(id); 147
144 break; 148 // ExtensionRegistryObserver:
145 } 149 virtual void OnExtensionUnloaded(
146 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: { 150 content::BrowserContext* browser_context,
147 ExtensionHost* host = content::Details<ExtensionHost>(details).ptr(); 151 const Extension* extension,
148 data_->InitiateExtensionSuspendedCleanup(host->extension_id()); 152 UnloadedExtensionInfo::Reason reason) OVERRIDE {
149 break; 153 data_->InitiateExtensionUnloadedCleanup(extension->id());
150 }
151 }
152 } 154 }
153 155
154 private: 156 private:
155 // TODO(rockot): ApiResourceData could be moved out of ApiResourceManager and 157 // TODO(rockot): ApiResourceData could be moved out of ApiResourceManager and
156 // we could avoid maintaining a friends list here. 158 // we could avoid maintaining a friends list here.
157 friend class BluetoothAPI; 159 friend class BluetoothAPI;
158 friend class api::BluetoothSocketApiFunction; 160 friend class api::BluetoothSocketApiFunction;
159 friend class api::BluetoothSocketEventDispatcher; 161 friend class api::BluetoothSocketEventDispatcher;
160 friend class api::SerialEventDispatcher; 162 friend class api::SerialEventDispatcher;
161 friend class core_api::TCPServerSocketEventDispatcher; 163 friend class core_api::TCPServerSocketEventDispatcher;
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 336
335 int next_id_; 337 int next_id_;
336 const content::BrowserThread::ID thread_id_; 338 const content::BrowserThread::ID thread_id_;
337 ApiResourceMap api_resource_map_; 339 ApiResourceMap api_resource_map_;
338 ExtensionToResourceMap extension_resource_map_; 340 ExtensionToResourceMap extension_resource_map_;
339 }; 341 };
340 342
341 content::BrowserThread::ID thread_id_; 343 content::BrowserThread::ID thread_id_;
342 content::NotificationRegistrar registrar_; 344 content::NotificationRegistrar registrar_;
343 scoped_refptr<ApiResourceData> data_; 345 scoped_refptr<ApiResourceData> data_;
346
347 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
348 extension_registry_observer_;
344 }; 349 };
345 350
346 } // namespace extensions 351 } // namespace extensions
347 352
348 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_ 353 #endif // EXTENSIONS_BROWSER_API_API_RESOURCE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698