diff options
author | tsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-28 18:38:55 +0000 |
---|---|---|
committer | tsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-28 18:38:55 +0000 |
commit | 4ecbbdfcbe7dfcc2013c6cf431fc9d4f25e21315 (patch) | |
tree | a74f1189e458eb345d3d548f2f41b1c747da30d2 /chrome | |
parent | cafe4ad25440a7752f5a4d230adf29b16a4766b0 (diff) | |
download | chromium_src-4ecbbdfcbe7dfcc2013c6cf431fc9d4f25e21315.zip chromium_src-4ecbbdfcbe7dfcc2013c6cf431fc9d4f25e21315.tar.gz chromium_src-4ecbbdfcbe7dfcc2013c6cf431fc9d4f25e21315.tar.bz2 |
Apply content-security-policy directive to chrome://tasks page.
Review URL: http://codereview.chromium.org/7482035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94512 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/browser_resources.grd | 4 | ||||
-rw-r--r-- | chrome/browser/resources/task_manager/includes.js | 64 | ||||
-rw-r--r-- | chrome/browser/resources/task_manager/main.html | 67 | ||||
-rw-r--r-- | chrome/browser/ui/webui/task_manager_ui.cc | 104 | ||||
-rw-r--r-- | chrome/test/functional/special_tabs.py | 5 |
5 files changed, 109 insertions, 135 deletions
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index 262af1e..2f672ab 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd @@ -44,7 +44,9 @@ <include name="IDR_DOWNLOADS_HTML" file="resources\downloads.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_NEW_PROFILE_JS" file="resources\new_profile.js" type="BINDATA" /> <include name="IDR_NEW_PROFILE_HTML" file="resources\new_profile.html" flattenhtml="true" type="BINDATA" /> - <include name="IDR_TASK_MANAGER_HTML" file="resources\task_manager\main.html" flattenhtml="true" type="BINDATA" /> + <include name="IDR_TASK_MANAGER_HTML" file="resources\task_manager\main.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_TASK_MANAGER_INCLUDES_JS" file="resources\task_manager\includes.js" type="BINDATA" /> + <include name="IDR_TASK_MANAGER_JS" file="resources\task_manager\main.js" type="BINDATA" /> <if expr="is_macosx"> <include name="IDR_EXTENSIONS_INFOBAR_CSS" file="resources\extensions_infobar_mac.css" flattenhtml="true" type="BINDATA" /> </if> diff --git a/chrome/browser/resources/task_manager/includes.js b/chrome/browser/resources/task_manager/includes.js new file mode 100644 index 0000000..cd4fa8c --- /dev/null +++ b/chrome/browser/resources/task_manager/includes.js @@ -0,0 +1,64 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This script includes additional resources via document.write(). Hence, it +// must be a separate script file loaded before other scripts which would +// reference the resources. + +var css = [ + 'list.css', + 'table.css', + 'menu.css', +]; + +var script = [ + 'local_strings.js', + 'i18n_template.js', + + 'util.js', + 'cr.js', + 'cr/ui.js', + 'cr/event_target.js', + 'cr/ui/array_data_model.js', + 'cr/ui/list_item.js', + 'cr/ui/list_selection_model.js', + 'cr/ui/list_single_selection_model.js', + 'cr/ui/list_selection_controller.js', + 'cr/ui/list.js', + + 'cr/ui/splitter.js', + 'cr/ui/table/table_splitter.js', + + 'cr/ui/table/table_column.js', + 'cr/ui/table/table_column_model.js', + 'cr/ui/table/table_header.js', + 'cr/ui/table/table_list.js', + 'cr/ui/table.js', + + 'cr/ui/grid.js', + + 'cr/ui/command.js', + 'cr/ui/position_util.js', + 'cr/ui/menu_item.js', + 'cr/ui/menu.js', + 'cr/ui/context_menu_handler.js', +]; + +(function() { + // Switch to 'test harness' mode when loading from a file url. + var isHarness = document.location.protocol == 'file:'; + + // In test harness mode we load resources from relative dirs. + var prefix = isHarness ? './shared/' : 'chrome://resources/'; + + for (var i = 0; i < css.length; ++i) { + document.write('<link href="' + prefix + 'css/' + css[i] + + '" rel="stylesheet"></link>'); + } + + for (var i = 0; i < script.length; ++i) { + document.write('<script src="' + prefix + 'js/' + script[i] + + '"><\/script>'); + } +})(); diff --git a/chrome/browser/resources/task_manager/main.html b/chrome/browser/resources/task_manager/main.html index e14b604..3778cfe 100644 --- a/chrome/browser/resources/task_manager/main.html +++ b/chrome/browser/resources/task_manager/main.html @@ -7,69 +7,12 @@ <html i18n-values="dir:textdirection;"> <head> <meta charset="utf-8"> + <include src="../content_security_policy.html"/> <title i18n-content="TITLE"></title> - <script> - var css = [ - 'list.css', - 'table.css', - 'menu.css', - ]; - - var script = [ - 'local_strings.js', - 'i18n_template.js', - - 'util.js', - 'cr.js', - 'cr/ui.js', - 'cr/event_target.js', - 'cr/ui/array_data_model.js', - 'cr/ui/list_item.js', - 'cr/ui/list_selection_model.js', - 'cr/ui/list_single_selection_model.js', - 'cr/ui/list_selection_controller.js', - 'cr/ui/list.js', - - 'cr/ui/splitter.js', - 'cr/ui/table/table_splitter.js', - - 'cr/ui/table/table_column.js', - 'cr/ui/table/table_column_model.js', - 'cr/ui/table/table_header.js', - 'cr/ui/table/table_list.js', - 'cr/ui/table.js', - - 'cr/ui/grid.js', - - 'cr/ui/command.js', - 'cr/ui/position_util.js', - 'cr/ui/menu_item.js', - 'cr/ui/menu.js', - 'cr/ui/context_menu_handler.js', - ]; - - (function() { - // Switch to 'test harness' mode when loading from a file url. - var isHarness = document.location.protocol == 'file:'; - - // In test harness mode we load resources from relative dirs. - var prefix = isHarness ? './shared/' : 'chrome://resources/'; - - for (var i = 0; i < css.length; ++i) { - document.write('<link href="' + prefix + 'css/' + css[i] + - '" rel="stylesheet"></link>'); - } - - for (var i = 0; i < script.length; ++i) { - document.write('<script src="' + prefix + 'js/' + script[i] + - '"><\57script>'); - } - - })(); - </script> - + <script src="chrome://tasks/includes.js"></script> + <script src="chrome://tasks/main.js"></script> + <script src="chrome://tasks/strings.js"></script> <link rel="stylesheet" href="task_manager.css"> - <script src="main.js"></script> </head> <body> <div class="dialog-title" i18n-content="TITLE"></div> @@ -87,6 +30,8 @@ <button id="close-window" i18n-content="CLOSE_WINDOW"></button> </div> </div> + <script src="chrome://resources/js/i18n_template.js"></script> + <script src="chrome://resources/js/i18n_process.js"></script> </body> </html> diff --git a/chrome/browser/ui/webui/task_manager_ui.cc b/chrome/browser/ui/webui/task_manager_ui.cc index ae33f06..e7baae6 100644 --- a/chrome/browser/ui/webui/task_manager_ui.cc +++ b/chrome/browser/ui/webui/task_manager_ui.cc @@ -8,6 +8,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/task_manager/task_manager.h" #include "chrome/browser/ui/webui/chrome_url_data_manager.h" +#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" #include "chrome/browser/ui/webui/task_manager_handler.h" #include "chrome/common/jstemplate_builder.h" #include "chrome/common/url_constants.h" @@ -21,74 +22,38 @@ namespace { -/////////////////////////////////////////////////////////////////////////////// -// -// TaskManagerUIHTMLSource -// -/////////////////////////////////////////////////////////////////////////////// - -class TaskManagerUIHTMLSource : public ChromeURLDataManager::DataSource { - public: - TaskManagerUIHTMLSource(); - - // Called when the network layer has requested a resource underneath - // the path we registered. - virtual void StartDataRequest(const std::string& path, - bool is_incognito, - int request_id); - virtual std::string GetMimeType(const std::string&) const { - return "text/html"; - } - - private: - ~TaskManagerUIHTMLSource() {} - - DISALLOW_COPY_AND_ASSIGN(TaskManagerUIHTMLSource); -}; - -TaskManagerUIHTMLSource::TaskManagerUIHTMLSource() - : DataSource(chrome::kChromeUITaskManagerHost, MessageLoop::current()) { -} - -void TaskManagerUIHTMLSource::StartDataRequest(const std::string& path, - bool is_incognito, - int request_id) { - DictionaryValue localized_strings; - localized_strings.SetString("CLOSE_WINDOW", - l10n_util::GetStringUTF16(IDS_CLOSE)); - -#define SET_LOCALIZED_STRING(STRINGS, ID) \ - (STRINGS.SetString(#ID, l10n_util::GetStringUTF16(IDS_TASK_MANAGER_##ID))) - - SET_LOCALIZED_STRING(localized_strings, TITLE); - SET_LOCALIZED_STRING(localized_strings, ABOUT_MEMORY_LINK); - SET_LOCALIZED_STRING(localized_strings, KILL); - SET_LOCALIZED_STRING(localized_strings, PROCESS_ID_COLUMN); - SET_LOCALIZED_STRING(localized_strings, PAGE_COLUMN); - SET_LOCALIZED_STRING(localized_strings, NET_COLUMN); - SET_LOCALIZED_STRING(localized_strings, CPU_COLUMN); - SET_LOCALIZED_STRING(localized_strings, PHYSICAL_MEM_COLUMN); - SET_LOCALIZED_STRING(localized_strings, SHARED_MEM_COLUMN); - SET_LOCALIZED_STRING(localized_strings, PRIVATE_MEM_COLUMN); - SET_LOCALIZED_STRING(localized_strings, GOATS_TELEPORTED_COLUMN); - SET_LOCALIZED_STRING(localized_strings, WEBCORE_IMAGE_CACHE_COLUMN); - SET_LOCALIZED_STRING(localized_strings, WEBCORE_SCRIPTS_CACHE_COLUMN); - SET_LOCALIZED_STRING(localized_strings, WEBCORE_CSS_CACHE_COLUMN); - SET_LOCALIZED_STRING(localized_strings, FPS_COLUMN); - SET_LOCALIZED_STRING(localized_strings, SQLITE_MEMORY_USED_COLUMN); - SET_LOCALIZED_STRING(localized_strings, JAVASCRIPT_MEMORY_ALLOCATED_COLUMN); - -#undef SET_LOCALIZED_STRING - - SetFontAndTextDirection(&localized_strings); - - static const base::StringPiece task_manager_html( - ResourceBundle::GetSharedInstance().GetRawDataResource( - IDR_TASK_MANAGER_HTML)); - std::string full_html = jstemplate_builder::GetI18nTemplateHtml( - task_manager_html, &localized_strings); - - SendResponse(request_id, base::RefCountedString::TakeString(&full_html)); +// Convenience macro for AddLocalizedString() method. +#define SET_LOCALIZED_STRING(ID) \ + source->AddLocalizedString(#ID, IDS_TASK_MANAGER_##ID) + +ChromeWebUIDataSource* CreateTaskManagerUIHTMLSource() { + ChromeWebUIDataSource* source = + new ChromeWebUIDataSource(chrome::kChromeUITaskManagerHost); + + source->AddLocalizedString("CLOSE_WINDOW", IDS_CLOSE); + SET_LOCALIZED_STRING(TITLE); + SET_LOCALIZED_STRING(ABOUT_MEMORY_LINK); + SET_LOCALIZED_STRING(KILL); + SET_LOCALIZED_STRING(PROCESS_ID_COLUMN); + SET_LOCALIZED_STRING(PAGE_COLUMN); + SET_LOCALIZED_STRING(NET_COLUMN); + SET_LOCALIZED_STRING(CPU_COLUMN); + SET_LOCALIZED_STRING(PHYSICAL_MEM_COLUMN); + SET_LOCALIZED_STRING(SHARED_MEM_COLUMN); + SET_LOCALIZED_STRING(PRIVATE_MEM_COLUMN); + SET_LOCALIZED_STRING(GOATS_TELEPORTED_COLUMN); + SET_LOCALIZED_STRING(WEBCORE_IMAGE_CACHE_COLUMN); + SET_LOCALIZED_STRING(WEBCORE_SCRIPTS_CACHE_COLUMN); + SET_LOCALIZED_STRING(WEBCORE_CSS_CACHE_COLUMN); + SET_LOCALIZED_STRING(FPS_COLUMN); + SET_LOCALIZED_STRING(SQLITE_MEMORY_USED_COLUMN); + SET_LOCALIZED_STRING(JAVASCRIPT_MEMORY_ALLOCATED_COLUMN); + source->set_json_path("strings.js"); + source->add_resource_path("main.js", IDR_TASK_MANAGER_JS); + source->add_resource_path("includes.js", IDR_TASK_MANAGER_INCLUDES_JS); + source->set_default_resource(IDR_TASK_MANAGER_HTML); + + return source; } } // namespace @@ -107,9 +72,8 @@ TaskManagerUI::TaskManagerUI(TabContents* contents) : ChromeWebUI(contents) { handler->Init(); AddMessageHandler(handler); - TaskManagerUIHTMLSource* html_source = new TaskManagerUIHTMLSource(); - // Set up the chrome://taskmanager/ source. + ChromeWebUIDataSource* html_source = CreateTaskManagerUIHTMLSource(); contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); } diff --git a/chrome/test/functional/special_tabs.py b/chrome/test/functional/special_tabs.py index da92018..60cadc6 100644 --- a/chrome/test/functional/special_tabs.py +++ b/chrome/test/functional/special_tabs.py @@ -69,6 +69,7 @@ class SpecialTabsTest(pyauto.PyUITest): 'chrome://stats': { 'CSP': False }, 'chrome://sync': { 'title': 'Sync Internals', 'CSP': False }, 'chrome://sync-internals': { 'title': 'Sync Internals', 'CSP': False }, + 'chrome://tasks': { 'title': 'Task Manager - Chromium' }, 'chrome://terms': { 'CSP': False }, 'chrome://textfields': { 'title': 'chrome://textfields', 'CSP': False }, 'chrome://version': { 'title': 'About Version' }, @@ -82,9 +83,6 @@ class SpecialTabsTest(pyauto.PyUITest): # crashed under debug when invoked from location bar (bug 88223). 'chrome://devtools': { 'CSP': False }, - # intermittent crash on cromeos=1 on linux - 'chrome://tasks': { 'title': 'About Histograms' }, - # returns "not available" despite having an URL constant. 'chrome://dialog': { 'CSP': False }, @@ -150,6 +148,7 @@ class SpecialTabsTest(pyauto.PyUITest): 'chrome://cryptohome': { 'CSP': False}, 'chrome://mobilesetup': { 'CSP': False }, 'chrome://print': { 'CSP': False }, + 'chrome://tasks': {}, } linux_special_url_tabs = { |