| 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..24db3cd392d539d1c5a5f9bb2ae7cacdf3b6b64f 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
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -24,8 +25,41 @@ using sync_file_system::SyncServiceState;
|
|
|
| namespace syncfs_internals {
|
|
|
| +namespace {
|
| +
|
| +void ConvertExtensionStatusToDictionary(
|
| + const base::WeakPtr<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 +73,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,
|
| + extension_service->AsWeakPtr(), callback));
|
| }
|
|
|
| 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);
|
| }
|
|
|