| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ssl/ssl_blocking_page.h" | 5 #include "chrome/browser/ssl/ssl_blocking_page.h" |
| 6 | 6 |
| 7 #include "base/build_time.h" | 7 #include "base/build_time.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/i18n/time_formatting.h" | 10 #include "base/i18n/time_formatting.h" |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 #if !defined(OS_CHROMEOS) | 273 #if !defined(OS_CHROMEOS) |
| 274 base::LaunchOptions options; | 274 base::LaunchOptions options; |
| 275 options.wait = false; | 275 options.wait = false; |
| 276 #if defined(OS_LINUX) | 276 #if defined(OS_LINUX) |
| 277 options.allow_new_privs = true; | 277 options.allow_new_privs = true; |
| 278 #endif | 278 #endif |
| 279 base::LaunchProcess(command, options, NULL); | 279 base::LaunchProcess(command, options, NULL); |
| 280 #endif | 280 #endif |
| 281 } | 281 } |
| 282 | 282 |
| 283 bool IsErrorDueToBadClock(const base::Time& now, int error) { |
| 284 if (SSLErrorInfo::NetErrorToErrorType(error) != |
| 285 SSLErrorInfo::CERT_DATE_INVALID) { |
| 286 return false; |
| 287 } |
| 288 return SSLErrorClassification::IsUserClockInThePast(now) || |
| 289 SSLErrorClassification::IsUserClockInTheFuture(now); |
| 290 } |
| 291 |
| 283 } // namespace | 292 } // namespace |
| 284 | 293 |
| 285 // Note that we always create a navigation entry with SSL errors. | 294 // Note that we always create a navigation entry with SSL errors. |
| 286 // No error happening loading a sub-resource triggers an interstitial so far. | 295 // No error happening loading a sub-resource triggers an interstitial so far. |
| 287 SSLBlockingPage::SSLBlockingPage( | 296 SSLBlockingPage::SSLBlockingPage( |
| 288 content::WebContents* web_contents, | 297 content::WebContents* web_contents, |
| 289 int cert_error, | 298 int cert_error, |
| 290 const net::SSLInfo& ssl_info, | 299 const net::SSLInfo& ssl_info, |
| 291 const GURL& request_url, | 300 const GURL& request_url, |
| 292 bool overridable, | 301 bool overridable, |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 base::i18n::WrapStringWithLTRFormatting(&url); | 403 base::i18n::WrapStringWithLTRFormatting(&url); |
| 395 webui::SetFontAndTextDirection(&load_time_data); | 404 webui::SetFontAndTextDirection(&load_time_data); |
| 396 | 405 |
| 397 // Shared values for both the overridable and non-overridable versions. | 406 // Shared values for both the overridable and non-overridable versions. |
| 398 load_time_data.SetBoolean("ssl", true); | 407 load_time_data.SetBoolean("ssl", true); |
| 399 load_time_data.SetBoolean("overridable", overridable_); | 408 load_time_data.SetBoolean("overridable", overridable_); |
| 400 load_time_data.SetString( | 409 load_time_data.SetString( |
| 401 "tabTitle", l10n_util::GetStringUTF16(IDS_SSL_V2_TITLE)); | 410 "tabTitle", l10n_util::GetStringUTF16(IDS_SSL_V2_TITLE)); |
| 402 load_time_data.SetString( | 411 load_time_data.SetString( |
| 403 "heading", l10n_util::GetStringUTF16(IDS_SSL_V2_HEADING)); | 412 "heading", l10n_util::GetStringUTF16(IDS_SSL_V2_HEADING)); |
| 404 if ((SSLErrorClassification::IsUserClockInThePast( | 413 |
| 405 base::Time::NowFromSystemTime())) | 414 base::Time now = base::Time::NowFromSystemTime(); |
| 406 && (SSLErrorInfo::NetErrorToErrorType(cert_error_) == | 415 bool bad_clock = IsErrorDueToBadClock(now, cert_error_); |
| 407 SSLErrorInfo::CERT_DATE_INVALID)) { | 416 if (bad_clock) { |
| 408 load_time_data.SetString("primaryParagraph", | 417 load_time_data.SetString("primaryParagraph", |
| 409 l10n_util::GetStringFUTF16( | 418 l10n_util::GetStringFUTF16( |
| 410 IDS_SSL_CLOCK_ERROR, | 419 IDS_SSL_CLOCK_ERROR, |
| 411 url, | 420 url, |
| 412 base::TimeFormatShortDate(base::Time::Now()))); | 421 base::TimeFormatShortDate(now))); |
| 413 } else { | 422 } else { |
| 414 load_time_data.SetString( | 423 load_time_data.SetString( |
| 415 "primaryParagraph", | 424 "primaryParagraph", |
| 416 l10n_util::GetStringFUTF16(IDS_SSL_V2_PRIMARY_PARAGRAPH, url)); | 425 l10n_util::GetStringFUTF16(IDS_SSL_V2_PRIMARY_PARAGRAPH, url)); |
| 417 } | 426 } |
| 427 |
| 418 load_time_data.SetString( | 428 load_time_data.SetString( |
| 419 "openDetails", | 429 "openDetails", |
| 420 l10n_util::GetStringUTF16(IDS_SSL_V2_OPEN_DETAILS_BUTTON)); | 430 l10n_util::GetStringUTF16(IDS_SSL_V2_OPEN_DETAILS_BUTTON)); |
| 421 load_time_data.SetString( | 431 load_time_data.SetString( |
| 422 "closeDetails", | 432 "closeDetails", |
| 423 l10n_util::GetStringUTF16(IDS_SSL_V2_CLOSE_DETAILS_BUTTON)); | 433 l10n_util::GetStringUTF16(IDS_SSL_V2_CLOSE_DETAILS_BUTTON)); |
| 424 load_time_data.SetString("errorCode", net::ErrorToString(cert_error_)); | 434 load_time_data.SetString("errorCode", net::ErrorToString(cert_error_)); |
| 425 | 435 |
| 426 if (overridable_) { // Overridable. | 436 if (overridable_) { |
| 427 SSLErrorInfo error_info = | 437 SSLErrorInfo error_info = |
| 428 SSLErrorInfo::CreateError( | 438 SSLErrorInfo::CreateError( |
| 429 SSLErrorInfo::NetErrorToErrorType(cert_error_), | 439 SSLErrorInfo::NetErrorToErrorType(cert_error_), |
| 430 ssl_info_.cert.get(), | 440 ssl_info_.cert.get(), |
| 431 request_url_); | 441 request_url_); |
| 432 load_time_data.SetString( | 442 if (bad_clock) { |
| 433 "explanationParagraph", error_info.details()); | 443 load_time_data.SetString("explanationParagraph", |
| 444 l10n_util::GetStringFUTF16( |
| 445 IDS_SSL_CLOCK_ERROR_EXPLANATION, url)); |
| 446 } else { |
| 447 load_time_data.SetString("explanationParagraph", error_info.details()); |
| 448 } |
| 434 load_time_data.SetString( | 449 load_time_data.SetString( |
| 435 "primaryButtonText", | 450 "primaryButtonText", |
| 436 l10n_util::GetStringUTF16(IDS_SSL_OVERRIDABLE_SAFETY_BUTTON)); | 451 l10n_util::GetStringUTF16(IDS_SSL_OVERRIDABLE_SAFETY_BUTTON)); |
| 437 load_time_data.SetString( | 452 load_time_data.SetString( |
| 438 "finalParagraph", | 453 "finalParagraph", |
| 439 l10n_util::GetStringFUTF16(IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH, url)); | 454 l10n_util::GetStringFUTF16(IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH, |
| 440 } else { // Non-overridable. | 455 url)); |
| 441 load_time_data.SetBoolean("overridable", false); | 456 } else { |
| 442 SSLErrorInfo::ErrorType type = | 457 SSLErrorInfo::ErrorType type = |
| 443 SSLErrorInfo::NetErrorToErrorType(cert_error_); | 458 SSLErrorInfo::NetErrorToErrorType(cert_error_); |
| 444 if (type == SSLErrorInfo::CERT_INVALID && SSLErrorClassification:: | 459 if (type == SSLErrorInfo::CERT_INVALID && SSLErrorClassification:: |
| 445 IsWindowsVersionSP3OrLower()) { | 460 IsWindowsVersionSP3OrLower()) { |
| 446 load_time_data.SetString( | 461 load_time_data.SetString( |
| 447 "explanationParagraph", | 462 "explanationParagraph", |
| 448 l10n_util::GetStringFUTF16( | 463 l10n_util::GetStringFUTF16( |
| 449 IDS_SSL_NONOVERRIDABLE_MORE_INVALID_SP3, url)); | 464 IDS_SSL_NONOVERRIDABLE_MORE_INVALID_SP3, url)); |
| 465 } else if (bad_clock) { |
| 466 load_time_data.SetString("explanationParagraph", |
| 467 l10n_util::GetStringFUTF16( |
| 468 IDS_SSL_CLOCK_ERROR_EXPLANATION, url)); |
| 450 } else { | 469 } else { |
| 451 load_time_data.SetString("explanationParagraph", | 470 load_time_data.SetString("explanationParagraph", |
| 452 l10n_util::GetStringFUTF16( | 471 l10n_util::GetStringFUTF16( |
| 453 IDS_SSL_NONOVERRIDABLE_MORE, url)); | 472 IDS_SSL_NONOVERRIDABLE_MORE, url)); |
| 454 } | 473 } |
| 455 load_time_data.SetString( | 474 load_time_data.SetString( |
| 456 "primaryButtonText", | 475 "primaryButtonText", |
| 457 l10n_util::GetStringUTF16(IDS_SSL_NONOVERRIDABLE_RELOAD_BUTTON)); | 476 l10n_util::GetStringUTF16(IDS_SSL_NONOVERRIDABLE_RELOAD_BUTTON)); |
| 458 // Customize the help link depending on the specific error type. | 477 // Customize the help link depending on the specific error type. |
| 459 // Only mark as HSTS if none of the more specific error types apply, and use | 478 // Only mark as HSTS if none of the more specific error types apply, and use |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 // sure we don't clear the captive portal flag, since the interstitial was | 675 // sure we don't clear the captive portal flag, since the interstitial was |
| 657 // potentially caused by the captive portal. | 676 // potentially caused by the captive portal. |
| 658 captive_portal_detected_ = captive_portal_detected_ || | 677 captive_portal_detected_ = captive_portal_detected_ || |
| 659 (results->result == captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL); | 678 (results->result == captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL); |
| 660 // Also keep track of non-HTTP portals and error cases. | 679 // Also keep track of non-HTTP portals and error cases. |
| 661 captive_portal_no_response_ = captive_portal_no_response_ || | 680 captive_portal_no_response_ = captive_portal_no_response_ || |
| 662 (results->result == captive_portal::RESULT_NO_RESPONSE); | 681 (results->result == captive_portal::RESULT_NO_RESPONSE); |
| 663 } | 682 } |
| 664 #endif | 683 #endif |
| 665 } | 684 } |
| OLD | NEW |