summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authortsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-28 18:38:55 +0000
committertsepez@chromium.org <tsepez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-28 18:38:55 +0000
commit4ecbbdfcbe7dfcc2013c6cf431fc9d4f25e21315 (patch)
treea74f1189e458eb345d3d548f2f41b1c747da30d2 /chrome
parentcafe4ad25440a7752f5a4d230adf29b16a4766b0 (diff)
downloadchromium_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.grd4
-rw-r--r--chrome/browser/resources/task_manager/includes.js64
-rw-r--r--chrome/browser/resources/task_manager/main.html67
-rw-r--r--chrome/browser/ui/webui/task_manager_ui.cc104
-rw-r--r--chrome/test/functional/special_tabs.py5
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 = {