| Index: ui/base/template_expressions.cc
|
| diff --git a/ui/base/template_expressions.cc b/ui/base/template_expressions.cc
|
| index b8867d8cfaa1bdf2f3d5d42935063284235164d9..c8d49a95f86e55bc3e31e79974367116f413dee6 100644
|
| --- a/ui/base/template_expressions.cc
|
| +++ b/ui/base/template_expressions.cc
|
| @@ -15,6 +15,29 @@ const char kLeader[] = "$i18n";
|
| const size_t kLeaderSize = arraysize(kLeader) - 1;
|
| const char kKeyOpen = '{';
|
| const char kKeyClose = '}';
|
| +
|
| +// Escape quotes and backslashes ('"\) with backslashes.
|
| +std::string BackslashEscape(const std::string& in_string) {
|
| + std::string out;
|
| + out.reserve(in_string.size() * 2);
|
| + for (const char c : in_string) {
|
| + switch (c) {
|
| + case '\\':
|
| + out.append("\\\\");
|
| + break;
|
| + case '\'':
|
| + out.append("\\'");
|
| + break;
|
| + case '"':
|
| + out.append("\\\"");
|
| + break;
|
| + default:
|
| + out += c;
|
| + }
|
| + }
|
| + return out;
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace ui {
|
| @@ -77,6 +100,9 @@ std::string ReplaceTemplateExpressions(
|
| replacement = net::EscapeForHTML(replacement);
|
| } else if (context == "Raw") {
|
| // Pass the replacement through unchanged.
|
| + } else if (context == "Polymer") {
|
| + // Escape quotes and backslash for '$i18nPolymer{}' use (i.e. quoted).
|
| + replacement = BackslashEscape(replacement);
|
| } else {
|
| CHECK(false) << "Unknown context " << context;
|
| }
|
|
|