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..1fbca2c56350e7cdcf2fec5a608e1bce02a45d47 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" |
@@ -76,6 +77,8 @@ class ComponentsDOMHandler : public WebUIMessageHandler { |
private: |
void LoadComponents(); |
+ std::string ServiceStatusToString( |
+ component_updater::CrxUpdateItem::Status status); |
content::NotificationRegistrar registrar_; |
@@ -86,11 +89,13 @@ 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))); |
} |
@@ -122,18 +127,22 @@ void ComponentsDOMHandler::HandleCheckUpdate(const base::ListValue* args) { |
void ComponentsDOMHandler::LoadComponents() { |
component_updater::ComponentUpdateService* cus = |
g_browser_process->component_updater(); |
- std::vector<component_updater::CrxComponentInfo> components; |
- cus->GetComponents(&components); |
+ std::vector<std::string> component_ids; |
+ cus->GetComponentIDs(&component_ids); |
// 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]; |
+ for (size_t j = 0; j < component_ids.size(); ++j) { |
+ component_updater::CrxUpdateItem* item; |
+ cus->GetComponentDetails(component_ids[j], &item); |
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_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); |
} |
@@ -143,6 +152,36 @@ void ComponentsDOMHandler::LoadComponents() { |
web_ui()->CallJavascriptFunction("returnComponentsData", results); |
} |
+std::string ComponentsDOMHandler::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"; |
+} |
+ |
} // namespace |
/////////////////////////////////////////////////////////////////////////////// |
@@ -157,6 +196,9 @@ 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); |
} |
// static |
@@ -172,3 +214,41 @@ base::RefCountedMemory* ComponentsUI::GetFaviconResourceBytes( |
return ResourceBundle::GetSharedInstance(). |
LoadDataResourceBytesForScale(IDR_PLUGINS_FAVICON, scale_factor); |
} |
+ |
+void ComponentsUI::ComponentEventToString(Events event, |
+ std::string* converted_event) { |
+ 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; |
+ } |
+} |
+ |
+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); |
+} |