| 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 72c035a202690072a8a5789af9f8033c0245e167..81a9b387c6fa39e64626e206055b976867e24d66 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/public/browser/browser_context.h"
|
| @@ -51,6 +52,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 {
|
| @@ -209,6 +211,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_;
|
| @@ -279,6 +285,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_;
|
|
|
| @@ -301,6 +310,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);
|
| @@ -395,11 +405,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) {
|
| @@ -699,6 +718,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 =
|
|
|