Chromium Code Reviews| Index: apps/app_load_service.cc |
| diff --git a/apps/app_load_service.cc b/apps/app_load_service.cc |
| index 95608514cdc56ea89e50355c166b916502cbc04b..a2fb0e4eb8decd382904b07e09ff091a7784bbfb 100644 |
| --- a/apps/app_load_service.cc |
| +++ b/apps/app_load_service.cc |
| @@ -19,6 +19,7 @@ |
| #include "extensions/browser/extension_system.h" |
| #include "extensions/browser/notification_types.h" |
| #include "extensions/common/extension.h" |
| +#include "extensions/browser/extension_registry.h" |
| using extensions::Extension; |
| using extensions::ExtensionPrefs; |
| @@ -32,13 +33,11 @@ AppLoadService::PostReloadAction::PostReloadAction() |
| } |
| AppLoadService::AppLoadService(Profile* profile) |
| - : profile_(profile) { |
| + : profile_(profile), extension_registry_observer_(this) { |
| registrar_.Add(this, |
| extensions::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING, |
| content::NotificationService::AllSources()); |
| - registrar_.Add(this, |
| - extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
| - content::NotificationService::AllSources()); |
| + extension_registry_observer_.Add(extensions::ExtensionRegistry::Get(profile)); |
| } |
| AppLoadService::~AppLoadService() {} |
|
tapted
2014/08/04 07:05:37
This class is simple enough to just put
extension
limasdf
2014/08/04 07:30:35
Done.
|
| @@ -84,64 +83,59 @@ AppLoadService* AppLoadService::Get(Profile* profile) { |
| void AppLoadService::Observe(int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) { |
| - switch (type) { |
| - case extensions::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: { |
| - extensions::ExtensionHost* host = |
| - content::Details<extensions::ExtensionHost>(details).ptr(); |
| - const Extension* extension = host->extension(); |
| - // It is possible for an extension to be unloaded before it stops loading. |
| - if (!extension) |
| - break; |
| - std::map<std::string, PostReloadAction>::iterator it = |
| - post_reload_actions_.find(extension->id()); |
| - if (it == post_reload_actions_.end()) |
| - break; |
| - |
| - switch (it->second.action_type) { |
| - case LAUNCH: |
| - LaunchPlatformApp(profile_, extension); |
| - break; |
| - case RESTART: |
| - RestartPlatformApp(profile_, extension); |
| - break; |
| - case LAUNCH_WITH_COMMAND_LINE: |
| - LaunchPlatformAppWithCommandLine( |
| - profile_, extension, it->second.command_line, |
| - it->second.current_dir); |
| - break; |
| - default: |
| - NOTREACHED(); |
| - } |
| - |
| - post_reload_actions_.erase(it); |
| + DCHECK_EQ(type, extensions::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING); |
| + extensions::ExtensionHost* host = |
| + content::Details<extensions::ExtensionHost>(details).ptr(); |
| + const Extension* extension = host->extension(); |
| + // It is possible for an extension to be unloaded before it stops loading. |
| + if (!extension) |
| + return; |
| + std::map<std::string, PostReloadAction>::iterator it = |
| + post_reload_actions_.find(extension->id()); |
| + if (it == post_reload_actions_.end()) |
| + return; |
| + |
| + switch (it->second.action_type) { |
| + case LAUNCH: |
| + LaunchPlatformApp(profile_, extension); |
| break; |
| - } |
| - case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { |
| - const extensions::UnloadedExtensionInfo* unload_info = |
| - content::Details<extensions::UnloadedExtensionInfo>(details).ptr(); |
| - if (!unload_info->extension->is_platform_app()) |
| - break; |
| - |
| - extensions::ExtensionPrefs* extension_prefs = |
| - extensions::ExtensionPrefs::Get(profile_); |
| - if (WasUnloadedForReload(*unload_info) && |
| - extension_prefs->IsActive(unload_info->extension->id()) && |
| - !HasPostReloadAction(unload_info->extension->id())) { |
| - post_reload_actions_[unload_info->extension->id()].action_type = LAUNCH; |
| - } |
| + case RESTART: |
| + RestartPlatformApp(profile_, extension); |
| + break; |
| + case LAUNCH_WITH_COMMAND_LINE: |
| + LaunchPlatformAppWithCommandLine( |
| + profile_, extension, it->second.command_line, it->second.current_dir); |
| break; |
| - } |
| default: |
| NOTREACHED(); |
| } |
| + |
| + post_reload_actions_.erase(it); |
| +} |
| + |
| +void AppLoadService::OnExtensionUnloaded( |
| + content::BrowserContext* browser_context, |
| + const extensions::Extension* extension, |
| + extensions::UnloadedExtensionInfo::Reason reason) { |
| + if (!extension->is_platform_app()) |
| + return; |
| + |
| + extensions::ExtensionPrefs* extension_prefs = |
| + extensions::ExtensionPrefs::Get(browser_context); |
| + if (WasUnloadedForReload(extension->id(), reason) && |
| + extension_prefs->IsActive(extension->id()) && |
| + !HasPostReloadAction(extension->id())) { |
| + post_reload_actions_[extension->id()].action_type = LAUNCH; |
| + } |
| } |
| bool AppLoadService::WasUnloadedForReload( |
| - const extensions::UnloadedExtensionInfo& unload_info) { |
| - if (unload_info.reason == extensions::UnloadedExtensionInfo::REASON_DISABLE) { |
| + const extensions::ExtensionId& extension_id, |
| + const extensions::UnloadedExtensionInfo::Reason reason) { |
| + if (reason == extensions::UnloadedExtensionInfo::REASON_DISABLE) { |
| ExtensionPrefs* prefs = ExtensionPrefs::Get(profile_); |
| - return (prefs->GetDisableReasons(unload_info.extension->id()) & |
| - Extension::DISABLE_RELOAD) != 0; |
| + return (prefs->GetDisableReasons(extension_id) & |
| + Extension::DISABLE_RELOAD) != 0; |
| } |
| return false; |
| } |