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); |
} |