Chromium Code Reviews| Index: chrome/browser/ui/webui/extensions/extension_activity_ui.cc |
| diff --git a/chrome/browser/ui/webui/extensions/extension_activity_ui.cc b/chrome/browser/ui/webui/extensions/extension_activity_ui.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..700c571844256fb4e2f4725b7f59fcc429b0e912 |
| --- /dev/null |
| +++ b/chrome/browser/ui/webui/extensions/extension_activity_ui.cc |
| @@ -0,0 +1,99 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
|
Dan Beam
2012/01/28 04:24:41
2012
Eric Dingle
2012/01/30 18:27:11
Done.
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/ui/webui/extensions/extension_activity_ui.h" |
| + |
| +#include "base/bind.h" |
| +#include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" |
| +#include "chrome/browser/ui/webui/extensions/extension_icon_source.h" |
| +#include "chrome/browser/ui/webui/shared_resources_data_source.h" |
| +#include "chrome/common/url_constants.h" |
| +#include "content/public/browser/web_ui.h" |
| +#include "grit/browser_resources.h" |
| +#include "grit/generated_resources.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| + |
| +ExtensionActivityUI::ExtensionActivityUI(content::WebUI* web_ui) |
| + : WebUIController(web_ui), extension_(NULL) { |
| + web_ui->HideURL(); |
| + web_ui->OverrideTitle(l10n_util::GetStringUTF16( |
| + IDS_EXTENSION_ACTIVITY_TITLE)); |
| + |
| + ChromeWebUIDataSource* source = |
| + new ChromeWebUIDataSource(chrome::kChromeUIExtensionActivityHost); |
| + |
| + // Localized strings. |
| + source->AddLocalizedString("extensionActivity", IDS_EXTENSION_ACTIVITY_TITLE); |
| + source->AddLocalizedString("extensionActivityApiCall", |
| + IDS_EXTENSION_ACTIVITY_API_CALL); |
| + source->AddLocalizedString("extensionActivityApiBlock", |
| + IDS_EXTENSION_ACTIVITY_API_BLOCK); |
| + source->set_json_path("strings.js"); |
| + |
| + // Resources. |
| + source->add_resource_path("extension_activity.js", IDR_EXTENSION_ACTIVITY_JS); |
| + source->set_default_resource(IDR_EXTENSION_ACTIVITY_HTML); |
| + |
| + // Callback handlers. |
| + web_ui->RegisterMessageCallback("requestExtensionData", |
| + base::Bind(&ExtensionActivityUI::HandleRequestExtensionData, |
| + base::Unretained(this))); |
| + |
| + Profile* profile = Profile::FromWebUI(web_ui); |
| + profile->GetChromeURLDataManager()->AddDataSource(source); |
| + profile->GetChromeURLDataManager()->AddDataSource( |
| + new SharedResourcesDataSource()); |
| +} |
| + |
| +ExtensionActivityUI::~ExtensionActivityUI() { |
| + if (extension_) |
| + ExtensionActivityLog::GetInstance()->RemoveObserver(extension_, this); |
| +} |
| + |
| +void ExtensionActivityUI::HandleRequestExtensionData( |
| + const base::ListValue* args) { |
| + std::string extension_id; |
| + CHECK_EQ(1U, args->GetSize()); |
|
Dan Beam
2012/01/28 04:24:41
nit: This probably isn't necessary, but you can le
Eric Dingle
2012/01/30 18:27:11
Done.
|
| + CHECK(args->GetString(0, &extension_id)); |
| + |
| + ExtensionService* extension_service = Profile::FromWebUI(web_ui())-> |
| + GetExtensionService(); |
| + extension_ = extension_service->GetExtensionById(extension_id, false); |
| + if (!extension_) |
| + return; |
| + |
| + GURL icon = |
| + ExtensionIconSource::GetIconURL(extension_, |
| + Extension::EXTENSION_ICON_MEDIUM, |
| + ExtensionIconSet::MATCH_BIGGER, |
| + false, NULL); |
| + |
| + DictionaryValue* extension_data = new DictionaryValue(); |
|
Dan Beam
2012/01/28 04:24:41
Is this cleaned-up with ~result or does it leak?
Eric Dingle
2012/01/30 18:27:11
It's cleaned up by ~result. Added a comment.
|
| + extension_data->SetString("id", extension_->id()); |
| + extension_data->SetString("name", extension_->name()); |
| + extension_data->SetString("version", extension_->version()->GetString()); |
| + extension_data->SetString("description", extension_->description()); |
| + extension_data->SetString("icon", icon.spec()); |
| + |
| + DictionaryValue result; |
| + result.Set("extension", extension_data); |
| + |
| + web_ui()->CallJavascriptFunction("extension_activity.handleExtensionData", |
| + result); |
| + |
| + ExtensionActivityLog::GetInstance()->AddObserver(extension_, this); |
| +} |
| + |
| +void ExtensionActivityUI::OnExtensionActivity( |
| + const Extension* extension, |
| + ExtensionActivityLog::Activity activity, |
| + const std::string& msg) { |
| + DictionaryValue result; |
| + result.SetInteger("activity", activity); |
| + result.SetString("message", msg); |
| + web_ui()->CallJavascriptFunction("extension_activity.handleExtensionActivity", |
| + result); |
| +} |