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