15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/extensions_ui.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/command_handler.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/extensions/extension_error_handler.h" 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/webui/extensions/extension_loader_handler.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/install_extension_handler.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/pack_extension_handler.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/ui/webui/metrics_handler.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_ui_data_source.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/browser_resources.h" 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "grit/theme_resources.h" 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_CHROMEOS) 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/ui/webui/extensions/chromeos/kiosk_apps_handler.h" 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace extensions { 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)content::WebUIDataSource* CreateExtensionsHTMLSource() { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebUIDataSource* source = 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebUIDataSource::Create(chrome::kChromeUIExtensionsFrameHost); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->SetUseJsonJSFormatV2(); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->SetJsonPath("strings.js"); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->AddResourcePath("extensions.js", IDR_EXTENSIONS_JS); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->AddResourcePath("extension_command_list.js", 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDR_EXTENSION_COMMAND_LIST_JS); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->AddResourcePath("extension_list.js", IDR_EXTENSION_LIST_JS); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->SetDefaultResource(IDR_EXTENSIONS_HTML); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) source->DisableDenyXFrameOptions(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return source; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionsUI::ExtensionsUI(content::WebUI* web_ui) : WebUIController(web_ui) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebUIDataSource* source = CreateExtensionsHTMLSource(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSettingsHandler* handler = new ExtensionSettingsHandler(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) handler->GetLocalizedValues(source); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui->AddMessageHandler(handler); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PackExtensionHandler* pack_handler = new PackExtensionHandler(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pack_handler->GetLocalizedValues(source); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui->AddMessageHandler(pack_handler); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CommandHandler* commands_handler = new CommandHandler(profile); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) commands_handler->GetLocalizedValues(source); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui->AddMessageHandler(commands_handler); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionErrorHandler* extension_error_handler = 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new ExtensionErrorHandler(profile); 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) extension_error_handler->GetLocalizedValues(source); 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) web_ui->AddMessageHandler(extension_error_handler); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ExtensionLoaderHandler* extension_loader_handler = 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new ExtensionLoaderHandler(profile); 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extension_loader_handler->GetLocalizedValues(source); 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_ui->AddMessageHandler(extension_loader_handler); 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstallExtensionHandler* install_extension_handler = 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new InstallExtensionHandler(); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) install_extension_handler->GetLocalizedValues(source); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui->AddMessageHandler(install_extension_handler); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_CHROMEOS) 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) chromeos::KioskAppsHandler* kiosk_app_handler = 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new chromeos::KioskAppsHandler(); 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kiosk_app_handler->GetLocalizedValues(source); 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_ui->AddMessageHandler(kiosk_app_handler); 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch web_ui->AddMessageHandler(new MetricsHandler()); 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Need to allow <object> elements so that the <extensionoptions> browser 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // plugin can be loaded within chrome://extensions. 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) source->OverrideContentSecurityPolicyObjectSrc("object-src 'self';"); 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebUIDataSource::Add(profile, source); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 94a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ExtensionsUI::~ExtensionsUI() {} 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 96a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// static 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)base::RefCountedMemory* ExtensionsUI::GetFaviconResourceBytes( 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui::ScaleFactor scale_factor) { 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return rb.LoadDataResourceBytesForScale(IDR_EXTENSIONS_FAVICON, scale_factor); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace extensions 104