| Index: chrome/browser/ssl/ssl_blocking_page.cc
|
| diff --git a/chrome/browser/ssl/ssl_blocking_page.cc b/chrome/browser/ssl/ssl_blocking_page.cc
|
| index fdfe9d469359795f309555ef80fb39a8356c9ed3..2416a281cda5f2e33c62b6b883cb951df0820100 100644
|
| --- a/chrome/browser/ssl/ssl_blocking_page.cc
|
| +++ b/chrome/browser/ssl/ssl_blocking_page.cc
|
| @@ -317,6 +317,15 @@ void LaunchDateAndTimeSettings() {
|
| #endif
|
| }
|
|
|
| +bool IsErrorDueToBadClock(const base::Time& now, int error) {
|
| + if (SSLErrorInfo::NetErrorToErrorType(error) !=
|
| + SSLErrorInfo::CERT_DATE_INVALID) {
|
| + return false;
|
| + }
|
| + return SSLErrorClassification::IsUserClockInThePast(now) ||
|
| + SSLErrorClassification::IsUserClockInTheFuture(now);
|
| +}
|
| +
|
| } // namespace
|
|
|
| // Note that we always create a navigation entry with SSL errors.
|
| @@ -439,20 +448,21 @@ std::string SSLBlockingPage::GetHTMLContents() {
|
| "tabTitle", l10n_util::GetStringUTF16(IDS_SSL_V2_TITLE));
|
| load_time_data.SetString(
|
| "heading", l10n_util::GetStringUTF16(IDS_SSL_V2_HEADING));
|
| - if ((SSLErrorClassification::IsUserClockInThePast(
|
| - base::Time::NowFromSystemTime()))
|
| - && (SSLErrorInfo::NetErrorToErrorType(cert_error_) ==
|
| - SSLErrorInfo::CERT_DATE_INVALID)) {
|
| +
|
| + base::Time now = base::Time::NowFromSystemTime();
|
| + bool bad_clock = IsErrorDueToBadClock(now, cert_error_);
|
| + if (bad_clock) {
|
| load_time_data.SetString("primaryParagraph",
|
| l10n_util::GetStringFUTF16(
|
| IDS_SSL_CLOCK_ERROR,
|
| url,
|
| - base::TimeFormatShortDate(base::Time::Now())));
|
| + base::TimeFormatShortDate(now)));
|
| } else {
|
| load_time_data.SetString(
|
| "primaryParagraph",
|
| l10n_util::GetStringFUTF16(IDS_SSL_V2_PRIMARY_PARAGRAPH, url));
|
| }
|
| +
|
| load_time_data.SetString(
|
| "openDetails",
|
| l10n_util::GetStringUTF16(IDS_SSL_V2_OPEN_DETAILS_BUTTON));
|
| @@ -461,22 +471,27 @@ std::string SSLBlockingPage::GetHTMLContents() {
|
| l10n_util::GetStringUTF16(IDS_SSL_V2_CLOSE_DETAILS_BUTTON));
|
| load_time_data.SetString("errorCode", net::ErrorToString(cert_error_));
|
|
|
| - if (overridable_) { // Overridable.
|
| + if (overridable_) {
|
| SSLErrorInfo error_info =
|
| SSLErrorInfo::CreateError(
|
| SSLErrorInfo::NetErrorToErrorType(cert_error_),
|
| ssl_info_.cert.get(),
|
| request_url_);
|
| - load_time_data.SetString(
|
| - "explanationParagraph", error_info.details());
|
| + if (bad_clock) {
|
| + load_time_data.SetString("explanationParagraph",
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_SSL_CLOCK_ERROR_EXPLANATION, url));
|
| + } else {
|
| + load_time_data.SetString("explanationParagraph", error_info.details());
|
| + }
|
| load_time_data.SetString(
|
| "primaryButtonText",
|
| l10n_util::GetStringUTF16(IDS_SSL_OVERRIDABLE_SAFETY_BUTTON));
|
| load_time_data.SetString(
|
| "finalParagraph",
|
| - l10n_util::GetStringFUTF16(IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH, url));
|
| - } else { // Non-overridable.
|
| - load_time_data.SetBoolean("overridable", false);
|
| + l10n_util::GetStringFUTF16(IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH,
|
| + url));
|
| + } else {
|
| SSLErrorInfo::ErrorType type =
|
| SSLErrorInfo::NetErrorToErrorType(cert_error_);
|
| if (type == SSLErrorInfo::CERT_INVALID && SSLErrorClassification::
|
| @@ -485,6 +500,10 @@ std::string SSLBlockingPage::GetHTMLContents() {
|
| "explanationParagraph",
|
| l10n_util::GetStringFUTF16(
|
| IDS_SSL_NONOVERRIDABLE_MORE_INVALID_SP3, url));
|
| + } else if (bad_clock) {
|
| + load_time_data.SetString("explanationParagraph",
|
| + l10n_util::GetStringFUTF16(
|
| + IDS_SSL_CLOCK_ERROR_EXPLANATION, url));
|
| } else {
|
| load_time_data.SetString("explanationParagraph",
|
| l10n_util::GetStringFUTF16(
|
|
|