| Index: content/browser/webui/url_data_manager_backend.cc
|
| diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc
|
| index 936316fccce2cd3e8127b7ca4834f7a4e6b843f5..246a443c2b2442950e8eea3ba5f1dc1d9c73b9ca 100644
|
| --- a/content/browser/webui/url_data_manager_backend.cc
|
| +++ b/content/browser/webui/url_data_manager_backend.cc
|
| @@ -31,6 +31,7 @@
|
| #include "content/browser/net/view_blob_internals_job_factory.h"
|
| #include "content/browser/net/view_http_cache_job_factory.h"
|
| #include "content/browser/resource_context_impl.h"
|
| +#include "content/browser/webui/i18n_source_stream.h"
|
| #include "content/browser/webui/shared_resources_data_source.h"
|
| #include "content/browser/webui/url_data_source_impl.h"
|
| #include "content/browser/webui/web_ui_data_source_impl.h"
|
| @@ -52,6 +53,7 @@
|
| #include "net/url_request/url_request_error_job.h"
|
| #include "net/url_request/url_request_job.h"
|
| #include "net/url_request/url_request_job_factory.h"
|
| +#include "ui/base/template_expressions.h"
|
| #include "url/url_util.h"
|
|
|
| namespace content {
|
| @@ -210,6 +212,10 @@ class URLRequestChromeJob : public net::URLRequestJob {
|
| is_gzipped_ = is_gzipped;
|
| }
|
|
|
| + void SetReplacements(const ui::TemplateReplacements* replacements) {
|
| + replacements_ = replacements;
|
| + }
|
| +
|
| // Returns true when job was generated from an incognito profile.
|
| bool is_incognito() const {
|
| return is_incognito_;
|
| @@ -280,6 +286,9 @@ class URLRequestChromeJob : public net::URLRequestJob {
|
| // resources in resources.pak use compress="gzip".
|
| bool is_gzipped_;
|
|
|
| + // Replacement dictionary for i18n.
|
| + const ui::TemplateReplacements* replacements_;
|
| +
|
| // The backend is owned by net::URLRequestContext and always outlives us.
|
| URLDataManagerBackend* const backend_;
|
|
|
| @@ -302,6 +311,7 @@ URLRequestChromeJob::URLRequestChromeJob(net::URLRequest* request,
|
| send_content_type_header_(false),
|
| is_incognito_(is_incognito),
|
| is_gzipped_(false),
|
| + replacements_(nullptr),
|
| backend_(backend),
|
| weak_factory_(this) {
|
| DCHECK(backend);
|
| @@ -396,11 +406,20 @@ void URLRequestChromeJob::GetResponseInfo(net::HttpResponseInfo* info) {
|
| }
|
|
|
| std::unique_ptr<net::SourceStream> URLRequestChromeJob::SetUpSourceStream() {
|
| - std::unique_ptr<net::SourceStream> source =
|
| + std::unique_ptr<net::SourceStream> source_stream =
|
| net::URLRequestJob::SetUpSourceStream();
|
| - return is_gzipped_ ? net::GzipSourceStream::Create(
|
| - std::move(source), net::SourceStream::TYPE_GZIP)
|
| - : std::move(source);
|
| +
|
| + if (is_gzipped_) {
|
| + source_stream = net::GzipSourceStream::Create(std::move(source_stream),
|
| + net::SourceStream::TYPE_GZIP);
|
| + }
|
| +
|
| + if (replacements_) {
|
| + source_stream = content::I18nSourceStream::Create(
|
| + std::move(source_stream), net::SourceStream::TYPE_NONE, replacements_);
|
| + }
|
| +
|
| + return source_stream;
|
| }
|
|
|
| void URLRequestChromeJob::MimeTypeAvailable(const std::string& mime_type) {
|
| @@ -712,6 +731,11 @@ bool URLDataManagerBackend::StartRequest(const net::URLRequest* request,
|
| source->source()->ShouldServeMimeTypeAsContentTypeHeader());
|
| job->set_is_gzipped(source->source()->IsGzipped(path));
|
|
|
| + // TODO(dschuyler): improve filtering of which resource to run template
|
| + // replacements upon.
|
| + if (source->source()->GetMimeType(path) == "text/html")
|
| + job->SetReplacements(source->GetReplacements());
|
| +
|
| std::string origin = GetOriginHeaderValue(request);
|
| if (!origin.empty()) {
|
| std::string header =
|
|
|