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 |