| Index: extensions/browser/process_manager.cc
|
| diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc
|
| index e6beddbb891fcd56bf272cd5e58494f172773b20..fd7a545c1d397906a928c8eca6103a911b49bb0d 100644
|
| --- a/extensions/browser/process_manager.cc
|
| +++ b/extensions/browser/process_manager.cc
|
| @@ -229,14 +229,11 @@ ProcessManager::ProcessManager(BrowserContext* context,
|
| devtools_callback_(base::Bind(&ProcessManager::OnDevToolsStateChanged,
|
| base::Unretained(this))),
|
| last_background_close_sequence_id_(0),
|
| - weak_ptr_factory_(this) {
|
| + weak_ptr_factory_(this),
|
| + extension_registry_observer_(this) {
|
| + extension_registry_observer_.Add(ExtensionRegistry::Get(original_context));
|
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSIONS_READY,
|
| content::Source<BrowserContext>(original_context));
|
| - registrar_.Add(this,
|
| - chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
|
| - content::Source<BrowserContext>(original_context));
|
| - registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
|
| - content::Source<BrowserContext>(original_context));
|
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
|
| content::Source<BrowserContext>(context));
|
| registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE,
|
| @@ -660,33 +657,6 @@ void ProcessManager::Observe(int type,
|
| break;
|
| }
|
|
|
| - case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
|
| - BrowserContext* context = content::Source<BrowserContext>(source).ptr();
|
| - ExtensionSystem* system = ExtensionSystem::Get(context);
|
| - if (system->ready().is_signaled()) {
|
| - // The extension system is ready, so create the background host.
|
| - const Extension* extension =
|
| - content::Details<const Extension>(details).ptr();
|
| - CreateBackgroundHostForExtensionLoad(this, extension);
|
| - }
|
| - break;
|
| - }
|
| -
|
| - case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
|
| - const Extension* extension =
|
| - content::Details<UnloadedExtensionInfo>(details)->extension;
|
| - for (ExtensionHostSet::iterator iter = background_hosts_.begin();
|
| - iter != background_hosts_.end(); ++iter) {
|
| - ExtensionHost* host = *iter;
|
| - if (host->extension_id() == extension->id()) {
|
| - CloseBackgroundHost(host);
|
| - break;
|
| - }
|
| - }
|
| - UnregisterExtension(extension->id());
|
| - break;
|
| - }
|
| -
|
| case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: {
|
| ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
|
| if (background_hosts_.erase(host)) {
|
| @@ -760,6 +730,30 @@ void ProcessManager::Observe(int type,
|
| }
|
| }
|
|
|
| +void ProcessManager::OnExtensionLoaded(content::BrowserContext* browser_context,
|
| + const Extension* extension) {
|
| + if (ExtensionSystem::Get(browser_context)->ready().is_signaled()) {
|
| + // The extension system is ready, so create the background host.
|
| + CreateBackgroundHostForExtensionLoad(this, extension);
|
| + }
|
| +}
|
| +
|
| +void ProcessManager::OnExtensionUnloaded(
|
| + content::BrowserContext* browser_context,
|
| + const Extension* extension,
|
| + UnloadedExtensionInfo::Reason reason) {
|
| + for (ExtensionHostSet::iterator iter = background_hosts_.begin();
|
| + iter != background_hosts_.end();
|
| + ++iter) {
|
| + ExtensionHost* host = *iter;
|
| + if (host->extension_id() == extension->id()) {
|
| + CloseBackgroundHost(host);
|
| + break;
|
| + }
|
| + }
|
| + UnregisterExtension(extension->id());
|
| +}
|
| +
|
| void ProcessManager::OnDevToolsStateChanged(
|
| content::DevToolsAgentHost* agent_host,
|
| bool attached) {
|
|
|