Chromium Code Reviews| Index: chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc |
| diff --git a/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc b/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc |
| index 061dc8304a978c73940a535f205e6836bdfa0391..5774f2068eca7dfe35646213c851639fd157b403 100644 |
| --- a/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc |
| +++ b/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc |
| @@ -24,8 +24,41 @@ using sync_file_system::SyncServiceState; |
| namespace syncfs_internals { |
| +namespace { |
| + |
| +void ConvertExtensionStatusToDictionary( |
| + ExtensionService* extension_service, |
| + const base::Callback<void(const base::ListValue&)>& callback, |
| + const std::map<GURL, std::string>& status_map) { |
| + DCHECK(!extension_service); |
| + |
| + base::ListValue list; |
| + for (std::map<GURL, std::string>::const_iterator itr = status_map.begin(); |
| + itr != status_map.end(); |
| + ++itr) { |
| + std::string extension_id = itr->first.HostNoBrackets(); |
| + |
| + // Join with human readable extension name. |
| + const extensions::Extension* extension = |
| + extension_service->GetExtensionById(extension_id, true); |
| + if (!extension) |
| + continue; |
| + |
| + base::DictionaryValue* dict = new base::DictionaryValue; |
| + dict->SetString("extensionID", extension_id); |
| + dict->SetString("extensionName", extension->name()); |
| + dict->SetString("status", itr->second); |
| + list.Append(dict); |
| + } |
| + |
| + callback.Run(list); |
| +} |
| + |
| +} // namespace |
| + |
| ExtensionStatusesHandler::ExtensionStatusesHandler(Profile* profile) |
| - : profile_(profile) {} |
| + : profile_(profile), |
| + weak_ptr_factory_(this) {} |
| ExtensionStatusesHandler::~ExtensionStatusesHandler() {} |
| @@ -39,42 +72,35 @@ void ExtensionStatusesHandler::RegisterMessages() { |
| // static |
| void ExtensionStatusesHandler::GetExtensionStatusesAsDictionary( |
| Profile* profile, |
| - base::ListValue* values) { |
| + const base::Callback<void(const base::ListValue&)>& callback) { |
| DCHECK(profile); |
| - DCHECK(values); |
| + |
| sync_file_system::SyncFileSystemService* sync_service = |
| SyncFileSystemServiceFactory::GetForProfile(profile); |
| + if (!sync_service) |
| + return; |
| + |
| ExtensionService* extension_service = |
| extensions::ExtensionSystem::Get(profile)->extension_service(); |
| - if (!sync_service || !extension_service) |
| + if (!extension_service) |
| return; |
| - std::map<GURL, std::string> status_map; |
| - sync_service->GetExtensionStatusMap(&status_map); |
| - for (std::map<GURL, std::string>::const_iterator itr = status_map.begin(); |
| - itr != status_map.end(); |
| - ++itr) { |
| - std::string extension_id = itr->first.HostNoBrackets(); |
| - |
| - // Join with human readable extension name. |
| - const extensions::Extension* extension = |
| - extension_service->GetExtensionById(extension_id, true); |
| - if (!extension) |
| - continue; |
| - |
| - base::DictionaryValue* dict = new base::DictionaryValue; |
| - dict->SetString("extensionID", extension_id); |
| - dict->SetString("extensionName", extension->name()); |
| - dict->SetString("status", itr->second); |
| - values->Append(dict); |
| - } |
| + sync_service->GetExtensionStatusMap(base::Bind( |
| + &ConvertExtensionStatusToDictionary, |
| + base::Unretained(extension_service), callback)); |
|
tzik
2014/05/21 10:52:33
extension_service->AsWeakPtr() and check it in Con
peria
2014/05/22 02:25:21
Done.
There already is a DCHECK(!extension_service
|
| } |
| void ExtensionStatusesHandler::GetExtensionStatuses( |
| const base::ListValue* args) { |
| DCHECK(args); |
| - base::ListValue list; |
| - GetExtensionStatusesAsDictionary(profile_, &list); |
| + GetExtensionStatusesAsDictionary( |
| + profile_, |
| + base::Bind(&ExtensionStatusesHandler::DidGetExtensionStatuses, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ExtensionStatusesHandler::DidGetExtensionStatuses( |
| + const base::ListValue& list) { |
| web_ui()->CallJavascriptFunction("ExtensionStatuses.onGetExtensionStatuses", |
| list); |
| } |