Chromium Code Reviews| Index: chrome/browser/ui/webui/components_ui.cc |
| diff --git a/chrome/browser/ui/webui/components_ui.cc b/chrome/browser/ui/webui/components_ui.cc |
| index e5cce27f49a3874dd03e8144820f3d736545d4e2..5c68d2e946a75f5efc483d56f1f405a672a848c7 100644 |
| --- a/chrome/browser/ui/webui/components_ui.cc |
| +++ b/chrome/browser/ui/webui/components_ui.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/values.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/component_updater/component_updater_service.h" |
| +#include "chrome/browser/component_updater/crx_update_item.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #include "chrome/common/chrome_paths.h" |
| @@ -75,8 +76,6 @@ class ComponentsDOMHandler : public WebUIMessageHandler { |
| void HandleCheckUpdate(const base::ListValue* args); |
| private: |
| - void LoadComponents(); |
| - |
| content::NotificationRegistrar registrar_; |
| DISALLOW_COPY_AND_ASSIGN(ComponentsDOMHandler); |
| @@ -86,18 +85,23 @@ ComponentsDOMHandler::ComponentsDOMHandler() { |
| } |
| void ComponentsDOMHandler::RegisterMessages() { |
| - web_ui()->RegisterMessageCallback("requestComponentsData", |
| + web_ui()->RegisterMessageCallback( |
| + "requestComponentsData", |
| base::Bind(&ComponentsDOMHandler::HandleRequestComponentsData, |
| base::Unretained(this))); |
| - web_ui()->RegisterMessageCallback("checkUpdate", |
| + web_ui()->RegisterMessageCallback( |
| + "checkUpdate", |
| base::Bind(&ComponentsDOMHandler::HandleCheckUpdate, |
| base::Unretained(this))); |
| } |
| void ComponentsDOMHandler::HandleRequestComponentsData( |
| const base::ListValue* args) { |
| - LoadComponents(); |
| + base::ListValue* list = ComponentsUI::LoadComponents(); |
|
Sorin Jianu
2014/05/08 22:07:24
Will the memory for |list| be correctly deallocate
Shrikant Kelkar
2014/05/15 23:12:43
Originally I also was concerned about this, but it
|
| + base::DictionaryValue result; |
| + result.Set("components", list); |
| + web_ui()->CallJavascriptFunction("returnComponentsData", result); |
| } |
| // This function is called when user presses button from html UI. |
| @@ -119,30 +123,6 @@ void ComponentsDOMHandler::HandleCheckUpdate(const base::ListValue* args) { |
| ComponentsUI::OnDemandUpdate(component_id); |
| } |
| -void ComponentsDOMHandler::LoadComponents() { |
| - component_updater::ComponentUpdateService* cus = |
| - g_browser_process->component_updater(); |
| - std::vector<component_updater::CrxComponentInfo> components; |
| - cus->GetComponents(&components); |
| - |
| - // Construct DictionaryValues to return to UI. |
| - base::ListValue* component_list = new base::ListValue(); |
| - for (size_t j = 0; j < components.size(); ++j) { |
| - const component_updater::CrxComponentInfo& component = components[j]; |
| - |
| - base::DictionaryValue* component_entry = new base::DictionaryValue(); |
| - component_entry->SetString("id", component.id); |
| - component_entry->SetString("name", component.name); |
| - component_entry->SetString("version", component.version); |
| - |
| - component_list->Append(component_entry); |
| - } |
| - |
| - base::DictionaryValue results; |
| - results.Set("components", component_list); |
| - web_ui()->CallJavascriptFunction("returnComponentsData", results); |
| -} |
| - |
| } // namespace |
| /////////////////////////////////////////////////////////////////////////////// |
| @@ -157,6 +137,16 @@ ComponentsUI::ComponentsUI(content::WebUI* web_ui) : WebUIController(web_ui) { |
| // Set up the chrome://components/ source. |
| Profile* profile = Profile::FromWebUI(web_ui); |
| content::WebUIDataSource::Add(profile, CreateComponentsUIHTMLSource(profile)); |
| + component_updater::ComponentUpdateService* cus = |
| + g_browser_process->component_updater(); |
| + cus->AddObserver(this); |
| +} |
| + |
| +ComponentsUI::~ComponentsUI() { |
| + component_updater::ComponentUpdateService* cus = |
| + g_browser_process->component_updater(); |
| + if (cus) |
| + cus->RemoveObserver(this); |
| } |
| // static |
| @@ -167,8 +157,103 @@ void ComponentsUI::OnDemandUpdate(const std::string& component_id) { |
| } |
| // static |
| +base::ListValue* ComponentsUI::LoadComponents() { |
| + component_updater::ComponentUpdateService* cus = |
| + g_browser_process->component_updater(); |
| + std::vector<std::string> component_ids; |
| + component_ids = cus->GetComponentIDs(); |
| + |
| + // Construct DictionaryValues to return to UI. |
| + base::ListValue* component_list = new base::ListValue(); |
|
Sorin Jianu
2014/05/08 22:07:24
Who owns this memory?
Shrikant Kelkar
2014/05/15 23:12:43
This instance is returned to caller, who attaches
|
| + for (size_t j = 0; j < component_ids.size(); ++j) { |
| + component_updater::CrxUpdateItem* item = cus->GetComponentDetails( |
|
Sorin Jianu
2014/05/08 22:07:24
This |item| could be const. Also, the result of ca
Shrikant Kelkar
2014/05/15 23:12:43
Done.
|
| + component_ids[j]); |
| + |
| + base::DictionaryValue* component_entry = new base::DictionaryValue(); |
|
Sorin Jianu
2014/05/08 22:07:24
Who owns this memory allocation?
Shrikant Kelkar
2014/05/15 23:12:43
component_list is owner here.
|
| + component_entry->SetString("id", component_ids[j]); |
| + component_entry->SetString("name", item->component.name); |
| + component_entry->SetString("version", item->component.version.GetString()); |
| + |
| + component_entry->SetString("status", |
| + ServiceStatusToString(item->status).c_str()); |
| + |
| + component_list->Append(component_entry); |
| + } |
| + |
| + return component_list; |
| +} |
| + |
| +// static |
| base::RefCountedMemory* ComponentsUI::GetFaviconResourceBytes( |
| ui::ScaleFactor scale_factor) { |
| return ResourceBundle::GetSharedInstance(). |
| LoadDataResourceBytesForScale(IDR_PLUGINS_FAVICON, scale_factor); |
| } |
| + |
| +void ComponentsUI::ComponentEventToString(Events event, |
| + std::string* converted_event) { |
|
Sorin Jianu
2014/05/08 22:07:24
Consider renaming the parameter to |event_string|
Shrikant Kelkar
2014/05/15 23:12:43
Done.
|
| + DCHECK(converted_event != NULL); |
| + switch (event) { |
| + case COMPONENT_UPDATER_STARTED: |
| + *converted_event = "UpdaterStarted"; |
| + return; |
| + case COMPONENT_UPDATER_SLEEPING: |
| + *converted_event = "UpdaterSleeping"; |
| + return; |
| + case COMPONENT_UPDATE_FOUND: |
| + *converted_event = "UpdateFound"; |
| + return; |
| + case COMPONENT_UPDATE_READY: |
| + *converted_event = "UpdateReady"; |
| + return; |
| + case COMPONENT_UPDATED: |
| + *converted_event = "ComponentUpdated"; |
| + return; |
| + case COMPONENT_NOT_UPDATED: |
| + *converted_event = "ComponentNotUpdated"; |
| + return; |
| + default: |
| + *converted_event = "Unknown"; |
| + return; |
| + } |
| +} |
| + |
| +std::string ComponentsUI::ServiceStatusToString( |
| + component_updater::CrxUpdateItem::Status status) { |
| + switch (status) { |
| + case component_updater::CrxUpdateItem::kNew: |
| + return "new"; |
| + case component_updater::CrxUpdateItem::kChecking: |
| + return "checking"; |
| + case component_updater::CrxUpdateItem::kCanUpdate: |
| + return "update"; |
| + case component_updater::CrxUpdateItem::kDownloadingDiff: |
| + return "downloading_diff"; |
| + case component_updater::CrxUpdateItem::kDownloading: |
| + return "downloading"; |
| + case component_updater::CrxUpdateItem::kUpdatingDiff: |
| + return "updating_diff"; |
| + case component_updater::CrxUpdateItem::kUpdating: |
| + return "updating"; |
| + case component_updater::CrxUpdateItem::kUpdated: |
| + return "updated"; |
| + case component_updater::CrxUpdateItem::kUpToDate: |
| + return "uptodate"; |
| + case component_updater::CrxUpdateItem::kNoUpdate: |
| + return "no_update"; |
| + case component_updater::CrxUpdateItem::kLastStatus: |
| + default: |
| + return "Unknown"; |
| + } |
| + return "Unknown"; |
| +} |
| + |
| +void ComponentsUI::OnEvent(Events event, const std::string& id) { |
| + std::string converted_event; |
| + ComponentEventToString(event, &converted_event); |
| + base::DictionaryValue parameters; |
| + parameters.SetString("event", converted_event.c_str()); |
| + if (!id.empty()) |
| + parameters.SetString("id", id.c_str()); |
| + web_ui()->CallJavascriptFunction("onComponentEvent", parameters); |
| +} |