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 #include "extensions/browser/api/declarative/rules_registry_service.h" | 5 #include "extensions/browser/api/declarative/rules_registry_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 // Registers |web_request_rules_registry| on the IO thread. | 26 // Registers |web_request_rules_registry| on the IO thread. |
27 void RegisterToExtensionWebRequestEventRouterOnIO( | 27 void RegisterToExtensionWebRequestEventRouterOnIO( |
28 content::BrowserContext* browser_context, | 28 content::BrowserContext* browser_context, |
29 int rules_registry_id, | 29 int rules_registry_id, |
30 scoped_refptr<WebRequestRulesRegistry> web_request_rules_registry) { | 30 scoped_refptr<WebRequestRulesRegistry> web_request_rules_registry) { |
31 ExtensionWebRequestEventRouter::GetInstance()->RegisterRulesRegistry( | 31 ExtensionWebRequestEventRouter::GetInstance()->RegisterRulesRegistry( |
32 browser_context, rules_registry_id, web_request_rules_registry); | 32 browser_context, rules_registry_id, web_request_rules_registry); |
33 } | 33 } |
34 | 34 |
| 35 void NotifyWithExtensionSafe( |
| 36 scoped_refptr<const Extension> extension, |
| 37 void (RulesRegistry::*notification_callback)(const Extension*), |
| 38 scoped_refptr<RulesRegistry> registry) { |
| 39 (registry.get()->*notification_callback)(extension.get()); |
| 40 } |
| 41 |
35 } // namespace | 42 } // namespace |
36 | 43 |
37 const int RulesRegistryService::kDefaultRulesRegistryID = 0; | 44 const int RulesRegistryService::kDefaultRulesRegistryID = 0; |
38 const int RulesRegistryService::kInvalidRulesRegistryID = -1; | 45 const int RulesRegistryService::kInvalidRulesRegistryID = -1; |
39 | 46 |
40 RulesRegistryService::RulesRegistryService(content::BrowserContext* context) | 47 RulesRegistryService::RulesRegistryService(content::BrowserContext* context) |
41 : current_rules_registry_id_(kDefaultRulesRegistryID), | 48 : current_rules_registry_id_(kDefaultRulesRegistryID), |
42 content_rules_registry_(NULL), | 49 content_rules_registry_(NULL), |
43 extension_registry_observer_(this), | 50 extension_registry_observer_(this), |
44 browser_context_(context) { | 51 browser_context_(context) { |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 registries_to_delete.insert(key); | 169 registries_to_delete.insert(key); |
163 } | 170 } |
164 | 171 |
165 for (std::set<RulesRegistryKey>::iterator it = registries_to_delete.begin(); | 172 for (std::set<RulesRegistryKey>::iterator it = registries_to_delete.begin(); |
166 it != registries_to_delete.end(); ++it) { | 173 it != registries_to_delete.end(); ++it) { |
167 rule_registries_.erase(*it); | 174 rule_registries_.erase(*it); |
168 } | 175 } |
169 } | 176 } |
170 | 177 |
171 void RulesRegistryService::SimulateExtensionUninstalled( | 178 void RulesRegistryService::SimulateExtensionUninstalled( |
172 const std::string& extension_id) { | 179 const Extension* extension) { |
173 NotifyRegistriesHelper(&RulesRegistry::OnExtensionUninstalled, extension_id); | 180 NotifyRegistriesHelper(&RulesRegistry::OnExtensionUninstalled, extension); |
174 } | 181 } |
175 | 182 |
176 void RulesRegistryService::NotifyRegistriesHelper( | 183 void RulesRegistryService::NotifyRegistriesHelper( |
177 void (RulesRegistry::*notification_callback)(const std::string&), | 184 void (RulesRegistry::*notification_callback)(const Extension*), |
178 const std::string& extension_id) { | 185 const Extension* extension) { |
179 RulesRegistryMap::iterator i; | 186 RulesRegistryMap::iterator i; |
180 for (i = rule_registries_.begin(); i != rule_registries_.end(); ++i) { | 187 for (i = rule_registries_.begin(); i != rule_registries_.end(); ++i) { |
181 scoped_refptr<RulesRegistry> registry = i->second; | 188 scoped_refptr<RulesRegistry> registry = i->second; |
182 if (content::BrowserThread::CurrentlyOn(registry->owner_thread())) { | 189 if (content::BrowserThread::CurrentlyOn(registry->owner_thread())) { |
183 (registry.get()->*notification_callback)(extension_id); | 190 (registry.get()->*notification_callback)(extension); |
184 } else { | 191 } else { |
185 content::BrowserThread::PostTask( | 192 content::BrowserThread::PostTask( |
186 registry->owner_thread(), | 193 registry->owner_thread(), FROM_HERE, |
187 FROM_HERE, | 194 base::Bind(&NotifyWithExtensionSafe, make_scoped_refptr(extension), |
188 base::Bind(notification_callback, registry, extension_id)); | 195 notification_callback, registry)); |
189 } | 196 } |
190 } | 197 } |
191 } | 198 } |
192 | 199 |
193 void RulesRegistryService::OnExtensionLoaded( | 200 void RulesRegistryService::OnExtensionLoaded( |
194 content::BrowserContext* browser_context, | 201 content::BrowserContext* browser_context, |
195 const Extension* extension) { | 202 const Extension* extension) { |
196 NotifyRegistriesHelper(&RulesRegistry::OnExtensionLoaded, extension->id()); | 203 NotifyRegistriesHelper(&RulesRegistry::OnExtensionLoaded, extension); |
197 } | 204 } |
198 | 205 |
199 void RulesRegistryService::OnExtensionUnloaded( | 206 void RulesRegistryService::OnExtensionUnloaded( |
200 content::BrowserContext* browser_context, | 207 content::BrowserContext* browser_context, |
201 const Extension* extension, | 208 const Extension* extension, |
202 UnloadedExtensionInfo::Reason reason) { | 209 UnloadedExtensionInfo::Reason reason) { |
203 NotifyRegistriesHelper(&RulesRegistry::OnExtensionUnloaded, extension->id()); | 210 NotifyRegistriesHelper(&RulesRegistry::OnExtensionUnloaded, extension); |
204 } | 211 } |
205 | 212 |
206 void RulesRegistryService::OnExtensionUninstalled( | 213 void RulesRegistryService::OnExtensionUninstalled( |
207 content::BrowserContext* browser_context, | 214 content::BrowserContext* browser_context, |
208 const Extension* extension, | 215 const Extension* extension, |
209 extensions::UninstallReason reason) { | 216 extensions::UninstallReason reason) { |
210 NotifyRegistriesHelper(&RulesRegistry::OnExtensionUninstalled, | 217 NotifyRegistriesHelper(&RulesRegistry::OnExtensionUninstalled, extension); |
211 extension->id()); | |
212 } | 218 } |
213 | 219 |
214 } // namespace extensions | 220 } // namespace extensions |
OLD | NEW |