Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Side by Side Diff: chrome/browser/ssl/ssl_blocking_page.cc

Issue 416403006: Improve the SSL error display when the clock is wrong. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add an explanation paragraph for bad clocks. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/app/google_chrome_strings.grd ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 if (!bad_clock) {
felt 2014/08/12 19:35:08 The "final paragraph" is the sentence with a link
palmer 2014/08/12 22:45:33 No, it was an artefact of previous hacking. Fixed
438 "finalParagraph", 453 load_time_data.SetString(
439 l10n_util::GetStringFUTF16(IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH, url)); 454 "finalParagraph",
440 } else { // Non-overridable. 455 l10n_util::GetStringFUTF16(IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH,
441 load_time_data.SetBoolean("overridable", false); 456 url));
457 }
458 } else {
442 SSLErrorInfo::ErrorType type = 459 SSLErrorInfo::ErrorType type =
443 SSLErrorInfo::NetErrorToErrorType(cert_error_); 460 SSLErrorInfo::NetErrorToErrorType(cert_error_);
444 if (type == SSLErrorInfo::CERT_INVALID && SSLErrorClassification:: 461 if (type == SSLErrorInfo::CERT_INVALID && SSLErrorClassification::
445 IsWindowsVersionSP3OrLower()) { 462 IsWindowsVersionSP3OrLower()) {
446 load_time_data.SetString( 463 load_time_data.SetString(
447 "explanationParagraph", 464 "explanationParagraph",
448 l10n_util::GetStringFUTF16( 465 l10n_util::GetStringFUTF16(
449 IDS_SSL_NONOVERRIDABLE_MORE_INVALID_SP3, url)); 466 IDS_SSL_NONOVERRIDABLE_MORE_INVALID_SP3, url));
467 } else if (bad_clock) {
468 load_time_data.SetString("explanationParagraph",
469 l10n_util::GetStringFUTF16(
470 IDS_SSL_CLOCK_ERROR_EXPLANATION, url));
450 } else { 471 } else {
451 load_time_data.SetString("explanationParagraph", 472 load_time_data.SetString("explanationParagraph",
452 l10n_util::GetStringFUTF16( 473 l10n_util::GetStringFUTF16(
453 IDS_SSL_NONOVERRIDABLE_MORE, url)); 474 IDS_SSL_NONOVERRIDABLE_MORE, url));
454 } 475 }
455 load_time_data.SetString( 476 load_time_data.SetString(
456 "primaryButtonText", 477 "primaryButtonText",
457 l10n_util::GetStringUTF16(IDS_SSL_NONOVERRIDABLE_RELOAD_BUTTON)); 478 l10n_util::GetStringUTF16(IDS_SSL_NONOVERRIDABLE_RELOAD_BUTTON));
458 // Customize the help link depending on the specific error type. 479 // 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 480 // 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
656 // sure we don't clear the captive portal flag, since the interstitial was 677 // sure we don't clear the captive portal flag, since the interstitial was
657 // potentially caused by the captive portal. 678 // potentially caused by the captive portal.
658 captive_portal_detected_ = captive_portal_detected_ || 679 captive_portal_detected_ = captive_portal_detected_ ||
659 (results->result == captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL); 680 (results->result == captive_portal::RESULT_BEHIND_CAPTIVE_PORTAL);
660 // Also keep track of non-HTTP portals and error cases. 681 // Also keep track of non-HTTP portals and error cases.
661 captive_portal_no_response_ = captive_portal_no_response_ || 682 captive_portal_no_response_ = captive_portal_no_response_ ||
662 (results->result == captive_portal::RESULT_NO_RESPONSE); 683 (results->result == captive_portal::RESULT_NO_RESPONSE);
663 } 684 }
664 #endif 685 #endif
665 } 686 }
OLDNEW
« no previous file with comments | « chrome/app/google_chrome_strings.grd ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698