Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2463)

Unified Diff: chrome/browser/ui/webui/options/options_ui.cc

Issue 7003007: Apply content-security-policy to the HTML options page. This is a (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/shared_resources.grd ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/options/options_ui.cc
===================================================================
--- chrome/browser/ui/webui/options/options_ui.cc (revision 84887)
+++ chrome/browser/ui/webui/options/options_ui.cc (working copy)
@@ -44,10 +44,10 @@
#include "content/browser/tab_contents/tab_contents_delegate.h"
#include "content/browser/user_metrics.h"
#include "content/common/notification_type.h"
-#include "grit/browser_resources.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
+#include "grit/options_resources.h"
#include "grit/theme_resources.h"
#include "net/base/escape.h"
#include "ui/base/resource/resource_bundle.h"
@@ -73,6 +73,9 @@
#include "chrome/browser/ui/webui/options/certificate_manager_handler.h"
#endif
+static const char kLocalizedStringsFile[] = "strings.js";
+static const char kOptionsBundleJsFile[] = "options_bundle.js";
+
////////////////////////////////////////////////////////////////////////////////
//
// OptionsUIHTMLSource
@@ -110,22 +113,44 @@
void OptionsUIHTMLSource::StartDataRequest(const std::string& path,
bool is_incognito,
int request_id) {
+ scoped_refptr<RefCountedBytes> response_bytes(new RefCountedBytes);
SetFontAndTextDirection(localized_strings_.get());
- static const base::StringPiece options_html(
- ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_OPTIONS_HTML));
- const std::string full_html = jstemplate_builder::GetI18nTemplateHtml(
- options_html, localized_strings_.get());
+ if (path == kLocalizedStringsFile) {
+ // Return dynamically-generated strings from memory.
+ std::string template_data;
+ jstemplate_builder::AppendJsonJS(localized_strings_.get(), &template_data);
+ response_bytes->data.resize(template_data.size());
+ std::copy(template_data.begin(),
+ template_data.end(),
+ response_bytes->data.begin());
+ } else if (path == kOptionsBundleJsFile) {
+ // Return (and cache) the options javascript code.
+ static const base::StringPiece options_javascript(
+ ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_OPTIONS_BUNDLE_JS));
+ response_bytes->data.resize(options_javascript.size());
+ std::copy(options_javascript.begin(),
+ options_javascript.end(),
+ response_bytes->data.begin());
+ } else {
+ // Return (and cache) the main options html page as the default.
+ static const base::StringPiece options_html(
+ ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_OPTIONS_HTML));
+ response_bytes->data.resize(options_html.size());
+ std::copy(options_html.begin(),
+ options_html.end(),
+ response_bytes->data.begin());
+ }
- scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
- html_bytes->data.resize(full_html.size());
- std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin());
-
- SendResponse(request_id, html_bytes);
+ SendResponse(request_id, response_bytes);
}
-std::string OptionsUIHTMLSource::GetMimeType(const std::string&) const {
+std::string OptionsUIHTMLSource::GetMimeType(const std::string& path) const {
+ if (path == kLocalizedStringsFile || path == kOptionsBundleJsFile)
+ return "application/javascript";
+
return "text/html";
}
« no previous file with comments | « chrome/browser/resources/shared_resources.grd ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698