1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/webui/extensions/extensions_ui.h" 6 7#include "chrome/browser/profiles/profile.h" 8#include "chrome/browser/ui/webui/extensions/command_handler.h" 9#include "chrome/browser/ui/webui/extensions/extension_error_handler.h" 10#include "chrome/browser/ui/webui/extensions/extension_loader_handler.h" 11#include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" 12#include "chrome/browser/ui/webui/extensions/install_extension_handler.h" 13#include "chrome/browser/ui/webui/extensions/pack_extension_handler.h" 14#include "chrome/browser/ui/webui/metrics_handler.h" 15#include "chrome/common/url_constants.h" 16#include "content/public/browser/web_ui.h" 17#include "content/public/browser/web_ui_data_source.h" 18#include "grit/browser_resources.h" 19#include "grit/theme_resources.h" 20#include "ui/base/resource/resource_bundle.h" 21 22#if defined(OS_CHROMEOS) 23#include "chrome/browser/ui/webui/extensions/chromeos/kiosk_apps_handler.h" 24#endif 25 26namespace extensions { 27 28namespace { 29 30content::WebUIDataSource* CreateExtensionsHTMLSource() { 31 content::WebUIDataSource* source = 32 content::WebUIDataSource::Create(chrome::kChromeUIExtensionsFrameHost); 33 34 source->SetUseJsonJSFormatV2(); 35 source->SetJsonPath("strings.js"); 36 source->AddResourcePath("extensions.js", IDR_EXTENSIONS_JS); 37 source->AddResourcePath("extension_command_list.js", 38 IDR_EXTENSION_COMMAND_LIST_JS); 39 source->AddResourcePath("extension_list.js", IDR_EXTENSION_LIST_JS); 40 source->SetDefaultResource(IDR_EXTENSIONS_HTML); 41 source->DisableDenyXFrameOptions(); 42 return source; 43} 44 45} // namespace 46 47ExtensionsUI::ExtensionsUI(content::WebUI* web_ui) : WebUIController(web_ui) { 48 Profile* profile = Profile::FromWebUI(web_ui); 49 content::WebUIDataSource* source = CreateExtensionsHTMLSource(); 50 51 ExtensionSettingsHandler* handler = new ExtensionSettingsHandler(); 52 handler->GetLocalizedValues(source); 53 web_ui->AddMessageHandler(handler); 54 55 PackExtensionHandler* pack_handler = new PackExtensionHandler(); 56 pack_handler->GetLocalizedValues(source); 57 web_ui->AddMessageHandler(pack_handler); 58 59 CommandHandler* commands_handler = new CommandHandler(profile); 60 commands_handler->GetLocalizedValues(source); 61 web_ui->AddMessageHandler(commands_handler); 62 63 ExtensionErrorHandler* extension_error_handler = 64 new ExtensionErrorHandler(profile); 65 extension_error_handler->GetLocalizedValues(source); 66 web_ui->AddMessageHandler(extension_error_handler); 67 68 ExtensionLoaderHandler* extension_loader_handler = 69 new ExtensionLoaderHandler(profile); 70 extension_loader_handler->GetLocalizedValues(source); 71 web_ui->AddMessageHandler(extension_loader_handler); 72 73 InstallExtensionHandler* install_extension_handler = 74 new InstallExtensionHandler(); 75 install_extension_handler->GetLocalizedValues(source); 76 web_ui->AddMessageHandler(install_extension_handler); 77 78#if defined(OS_CHROMEOS) 79 chromeos::KioskAppsHandler* kiosk_app_handler = 80 new chromeos::KioskAppsHandler(); 81 kiosk_app_handler->GetLocalizedValues(source); 82 web_ui->AddMessageHandler(kiosk_app_handler); 83#endif 84 85 web_ui->AddMessageHandler(new MetricsHandler()); 86 87 // Need to allow <object> elements so that the <extensionoptions> browser 88 // plugin can be loaded within chrome://extensions. 89 source->OverrideContentSecurityPolicyObjectSrc("object-src 'self';"); 90 91 content::WebUIDataSource::Add(profile, source); 92} 93 94ExtensionsUI::~ExtensionsUI() {} 95 96// static 97base::RefCountedMemory* ExtensionsUI::GetFaviconResourceBytes( 98 ui::ScaleFactor scale_factor) { 99 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 100 return rb.LoadDataResourceBytesForScale(IDR_EXTENSIONS_FAVICON, scale_factor); 101} 102 103} // namespace extensions 104