1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/security_interstitials/core/common_string_util.h"
6
7 #include "base/i18n/rtl.h"
8 #include "base/i18n/time_formatting.h"
9 #include "base/strings/strcat.h"
10 #include "components/security_interstitials/core/features.h"
11 #include "components/strings/grit/components_strings.h"
12 #include "components/url_formatter/url_formatter.h"
13 #include "net/base/net_errors.h"
14 #include "net/cert/ct_sct_to_string.h"
15 #include "ui/base/l10n/l10n_util.h"
16
17 namespace security_interstitials {
18
19 namespace common_string_util {
20
GetFormattedHostName(const GURL & gurl)21 base::string16 GetFormattedHostName(const GURL& gurl) {
22 base::string16 host = url_formatter::IDNToUnicode(gurl.host());
23 if (base::i18n::IsRTL())
24 base::i18n::WrapStringWithLTRFormatting(&host);
25 return host;
26 }
27
PopulateSSLLayoutStrings(int cert_error,base::DictionaryValue * load_time_data)28 void PopulateSSLLayoutStrings(int cert_error,
29 base::DictionaryValue* load_time_data) {
30 load_time_data->SetString("type", "SSL");
31 load_time_data->SetString("errorCode", net::ErrorToString(cert_error));
32 load_time_data->SetString(
33 "openDetails", l10n_util::GetStringUTF16(IDS_SSL_OPEN_DETAILS_BUTTON));
34 load_time_data->SetString(
35 "closeDetails", l10n_util::GetStringUTF16(IDS_SSL_CLOSE_DETAILS_BUTTON));
36 // Not used by most interstitials; can be overridden by individual
37 // interstitials as needed.
38 load_time_data->SetString("recurrentErrorParagraph", "");
39 load_time_data->SetBoolean("show_recurrent_error_paragraph", false);
40 load_time_data->SetString(
41 "optInLink",
42 l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_SCOUT_REPORTING_AGREE));
43 load_time_data->SetString(
44 "enhancedProtectionMessage",
45 l10n_util::GetStringUTF16(IDS_SAFE_BROWSING_ENHANCED_PROTECTION_MESSAGE));
46 }
47
PopulateSSLDebuggingStrings(const net::SSLInfo ssl_info,const base::Time time_triggered,base::DictionaryValue * load_time_data)48 void PopulateSSLDebuggingStrings(const net::SSLInfo ssl_info,
49 const base::Time time_triggered,
50 base::DictionaryValue* load_time_data) {
51 load_time_data->SetString("subject",
52 ssl_info.cert->subject().GetDisplayName());
53 load_time_data->SetString("issuer", ssl_info.cert->issuer().GetDisplayName());
54 load_time_data->SetString(
55 "expirationDate",
56 base::TimeFormatShortDate(ssl_info.cert->valid_expiry()));
57 load_time_data->SetString("currentDate",
58 base::TimeFormatShortDate(time_triggered));
59 std::vector<std::string> sct_list;
60 for (const auto& sct_status : ssl_info.signed_certificate_timestamps) {
61 std::string sct_info = "\n\nSCT " + sct_status.sct->log_description + " (" +
62 net::ct::OriginToString(sct_status.sct->origin) +
63 ", " + net::ct::StatusToString(sct_status.status) +
64 ")";
65 sct_list.push_back(sct_info);
66 }
67 load_time_data->SetString("ct", base::StrCat(sct_list));
68 std::vector<std::string> encoded_chain;
69 ssl_info.cert->GetPEMEncodedChain(&encoded_chain);
70 load_time_data->SetString("pem", base::StrCat(encoded_chain));
71 }
72
PopulateLegacyTLSStrings(base::DictionaryValue * load_time_data,const base::string16 & hostname)73 void PopulateLegacyTLSStrings(base::DictionaryValue* load_time_data,
74 const base::string16& hostname) {
75 load_time_data->SetString("tabTitle",
76 l10n_util::GetStringUTF16(IDS_SSL_V2_TITLE));
77 load_time_data->SetString("heading",
78 l10n_util::GetStringUTF16(IDS_LEGACY_TLS_HEADING));
79 load_time_data->SetString(
80 "primaryButtonText",
81 l10n_util::GetStringUTF16(IDS_SSL_OVERRIDABLE_SAFETY_BUTTON));
82 load_time_data->SetString(
83 "primaryParagraph",
84 l10n_util::GetStringUTF16(IDS_LEGACY_TLS_PRIMARY_PARAGRAPH));
85 load_time_data->SetString(
86 "explanationParagraph",
87 l10n_util::GetStringUTF16(IDS_LEGACY_TLS_EXPLANATION));
88 load_time_data->SetString(
89 "finalParagraph", l10n_util::GetStringFUTF16(
90 IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH, hostname));
91 }
92
93 } // namespace common_string_util
94
95 } // namespace security_interstitials
96