diff options
author | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-09 01:47:37 +0000 |
---|---|---|
committer | rafaelw@chromium.org <rafaelw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-09 01:47:37 +0000 |
commit | 829f8e2906fa3251da47e61bbbe002f2c704e60f (patch) | |
tree | dc139d54c9594ce76c28099fcce39640bc689687 /chrome/browser/extensions/extensions_ui.cc | |
parent | 71167c0906304846a86280830c91109a080f9fd6 (diff) | |
download | chromium_src-829f8e2906fa3251da47e61bbbe002f2c704e60f.zip chromium_src-829f8e2906fa3251da47e61bbbe002f2c704e60f.tar.gz chromium_src-829f8e2906fa3251da47e61bbbe002f2c704e60f.tar.bz2 |
chrome-ui://extensions/ is now populated with data collected from the ExtensionsService and ExtensionErrorReporter
Review URL: http://codereview.chromium.org/39026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extensions_ui.cc')
-rw-r--r-- | chrome/browser/extensions/extensions_ui.cc | 95 |
1 files changed, 92 insertions, 3 deletions
diff --git a/chrome/browser/extensions/extensions_ui.cc b/chrome/browser/extensions/extensions_ui.cc index c4d2344..776676b 100644 --- a/chrome/browser/extensions/extensions_ui.cc +++ b/chrome/browser/extensions/extensions_ui.cc @@ -6,10 +6,14 @@ #include "base/thread.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/extensions/extensions_service.h" +#include "chrome/browser/extensions/extension_error_reporter.h" +#include "chrome/browser/profile.h" #include "chrome/common/jstemplate_builder.h" #include "chrome/common/l10n_util.h" #include "chrome/common/resource_bundle.h" #include "chrome/common/url_constants.h" +#include "net/base/net_util.h" #include "grit/browser_resources.h" #include "grit/generated_resources.h" @@ -52,8 +56,90 @@ void ExtensionsUIHTMLSource::StartDataRequest(const std::string& path, // /////////////////////////////////////////////////////////////////////////////// -ExtensionsDOMHandler::ExtensionsDOMHandler(DOMUI* dom_ui) - : DOMMessageHandler(dom_ui) { +ExtensionsDOMHandler::ExtensionsDOMHandler(DOMUI* dom_ui, + ExtensionsService* extension_service) + : DOMMessageHandler(dom_ui), extensions_service_(extension_service) { + dom_ui_->RegisterMessageCallback("requestExtensionsData", + NewCallback(this, &ExtensionsDOMHandler::HandleRequestExtensionsData)); +} + +void ExtensionsDOMHandler::HandleRequestExtensionsData(const Value* value) { + DictionaryValue results; + + // Add the extensions to the results structure. + ListValue *extensions_list = new ListValue(); + const ExtensionList* extensions = extensions_service_->extensions(); + for (ExtensionList::const_iterator extension = extensions->begin(); + extension != extensions->end(); ++extension) { + extensions_list->Append(CreateExtensionDetailValue(*extension)); + } + results.Set(L"extensions", extensions_list); + + // Add any error log lines to the result structure. + ListValue *errors_list = new ListValue(); + const std::vector<std::string>* errors = + ExtensionErrorReporter::GetInstance()->GetErrors(); + for (std::vector<std::string>::const_iterator error = errors->begin(); + error != errors->end(); ++error) { + errors_list->Append(Value::CreateStringValue(*error)); + } + results.Set(L"errors", errors_list); + + dom_ui_->CallJavascriptFunction(L"returnExtensionsData", results); +} + +// Static +DictionaryValue* ExtensionsDOMHandler::CreateContentScriptDetailValue( + const UserScript& script, const FilePath& extension_path) { + DictionaryValue* script_data = new DictionaryValue(); + + // TODO(rafaelw): When UserScript supports multiple js, this will have to + // put them all in this list; + ListValue *js_list = new ListValue(); + // We are passing through GURLs to canonicalize the output to a valid + // URL path fragment. + GURL script_url = net::FilePathToFileURL(script.path()); + GURL extension_url = net::FilePathToFileURL(extension_path); + std::string relative_js_path = + script_url.spec().substr(extension_url.spec().length() + 1); + + js_list->Append(new StringValue(relative_js_path)); + script_data->Set(L"js", js_list); + + // Get list of glob "matches" strings + ListValue *url_pattern_list = new ListValue(); + const std::vector<URLPattern>& url_patterns = script.url_patterns(); + for (std::vector<URLPattern>::const_iterator url_pattern = + url_patterns.begin(); + url_pattern != url_patterns.end(); ++url_pattern) { + url_pattern_list->Append(new StringValue(url_pattern->GetAsString())); + } + + script_data->Set(L"matches", url_pattern_list); + + return script_data; +} + +// Static +DictionaryValue* ExtensionsDOMHandler::CreateExtensionDetailValue( + const Extension *extension) { + DictionaryValue* extension_data = new DictionaryValue(); + + extension_data->SetString(L"name", extension->name()); + extension_data->SetString(L"description", extension->description()); + extension_data->SetString(L"version", extension->version()->GetString()); + + // Add list of content_script detail DictionaryValues + ListValue *content_script_list = new ListValue(); + UserScriptList content_scripts = extension->content_scripts(); + for (UserScriptList::const_iterator script = content_scripts.begin(); + script != content_scripts.end(); ++script) { + content_script_list->Append(CreateContentScriptDetailValue(*script, + extension->path())); + } + extension_data->Set(L"content_scripts", content_script_list); + + return extension_data; } ExtensionsDOMHandler::~ExtensionsDOMHandler() { @@ -68,7 +154,10 @@ ExtensionsUI::ExtensionsUI(DOMUIContents* contents) : DOMUI(contents) { } void ExtensionsUI::Init() { - ExtensionsDOMHandler* handler = new ExtensionsDOMHandler(this); + ExtensionsService *exstension_service = get_profile()->GetExtensionsService(); + + ExtensionsDOMHandler* handler = new ExtensionsDOMHandler(this, + exstension_service); AddMessageHandler(handler); handler->Init(); |