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 }
41
PopulateSSLDebuggingStrings(const net::SSLInfo ssl_info,const base::Time time_triggered,base::DictionaryValue * load_time_data)42 void PopulateSSLDebuggingStrings(const net::SSLInfo ssl_info,
43 const base::Time time_triggered,
44 base::DictionaryValue* load_time_data) {
45 load_time_data->SetString("subject",
46 ssl_info.cert->subject().GetDisplayName());
47 load_time_data->SetString("issuer", ssl_info.cert->issuer().GetDisplayName());
48 load_time_data->SetString(
49 "expirationDate",
50 base::TimeFormatShortDate(ssl_info.cert->valid_expiry()));
51 load_time_data->SetString("currentDate",
52 base::TimeFormatShortDate(time_triggered));
53 std::vector<std::string> sct_list;
54 for (const auto& sct_status : ssl_info.signed_certificate_timestamps) {
55 std::string sct_info = "\n\nSCT " + sct_status.sct->log_description + " (" +
56 net::ct::OriginToString(sct_status.sct->origin) +
57 ", " + net::ct::StatusToString(sct_status.status) +
58 ")";
59 sct_list.push_back(sct_info);
60 }
61 load_time_data->SetString("ct", base::StrCat(sct_list));
62 std::vector<std::string> encoded_chain;
63 ssl_info.cert->GetPEMEncodedChain(&encoded_chain);
64 load_time_data->SetString("pem", base::StrCat(encoded_chain));
65 }
66
67 } // namespace common_string_util
68
69 } // namespace security_interstitials
70