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 b47aa2e0d7f9dcef3c79059196251988a2ab61a0..e18789b94d9f02c4e62b111f44287b3f53263a9e 100644 |
--- a/chrome/browser/ssl/ssl_blocking_page.cc |
+++ b/chrome/browser/ssl/ssl_blocking_page.cc |
@@ -32,6 +32,7 @@ |
#include "chrome/browser/ssl/ssl_cert_reporter.h" |
#include "chrome/browser/ssl/ssl_error_classification.h" |
#include "chrome/browser/ssl/ssl_error_info.h" |
+#include "chrome/browser/ui/browser_navigator.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/grit/chromium_strings.h" |
@@ -237,7 +238,8 @@ SSLBlockingPage::SSLBlockingPage(content::WebContents* web_contents, |
int options_mask, |
const base::Time& time_triggered, |
scoped_ptr<SSLCertReporter> ssl_cert_reporter, |
- const base::Callback<void(bool)>& callback) |
+ const base::Callback<void(bool)>& callback, |
+ const GURL& suggested_url) |
: SecurityInterstitialPage(web_contents, request_url), |
callback_(callback), |
cert_error_(cert_error), |
@@ -250,7 +252,8 @@ SSLBlockingPage::SSLBlockingPage(content::WebContents* web_contents, |
strict_enforcement_((options_mask & STRICT_ENFORCEMENT) != 0), |
expired_but_previously_allowed_( |
(options_mask & EXPIRED_BUT_PREVIOUSLY_ALLOWED) != 0), |
- time_triggered_(time_triggered) { |
+ time_triggered_(time_triggered), |
+ suggested_url_(suggested_url) { |
interstitial_reason_ = |
IsErrorDueToBadClock(time_triggered_, cert_error_) ? |
SSL_REASON_BAD_CLOCK : SSL_REASON_SSL; |
@@ -382,6 +385,19 @@ void SSLBlockingPage::PopulateInterstitialStrings( |
"primaryParagraph", |
l10n_util::GetStringFUTF16(IDS_SSL_V2_PRIMARY_PARAGRAPH, url)); |
+ // If suggested url is not empty, display a modified message |
palmer
2015/07/17 00:16:00
Nit: URL
Bhanu Dev
2015/07/23 20:11:06
Done.
|
+ // with a link to suggested_url. |
+ if (!suggested_url_.is_empty()) { |
+ load_time_data->SetBoolean("common_name_mismatch_interstitial", true); |
+ load_time_data->SetString( |
+ "primaryParagraph", |
+ l10n_util::GetStringFUTF16( |
+ IDS_SSL_COMMON_NAME_MISMATCH_PRIMARY_PARAGRAPH, |
+ base::UTF8ToUTF16(request_url().host()), |
+ base::UTF8ToUTF16(suggested_url_.host()), |
+ base::UTF8ToUTF16(suggested_url_.spec()))); |
+ } |
+ |
if (overridable_) { |
load_time_data->SetBoolean("overridable", true); |
@@ -390,6 +406,7 @@ void SSLBlockingPage::PopulateInterstitialStrings( |
SSLErrorInfo::NetErrorToErrorType(cert_error_), |
ssl_info_.cert.get(), |
request_url()); |
+ |
load_time_data->SetString("explanationParagraph", error_info.details()); |
load_time_data->SetString( |
"primaryButtonText", |
@@ -539,6 +556,8 @@ void SSLBlockingPage::CommandReceived(const std::string& command) { |
case CMD_OPEN_REPORTING_PRIVACY: |
OpenExtendedReportingPrivacyPolicy(); |
break; |
+ case CMD_NAVIGATE_SUGGESTED_URL: |
+ NavigateToSuggestedURL(); |
case CMD_OPEN_DIAGNOSTIC: |
// Google doesn't currently have a transparency report for SSL. |
NOTREACHED() << "Unexpected command: " << command; |
@@ -637,6 +656,14 @@ std::string SSLBlockingPage::GetSamplingEventName() const { |
return event_name; |
} |
+void SSLBlockingPage::NavigateToSuggestedURL() const { |
+ content::NavigationController::LoadURLParams load_params(suggested_url_); |
+ // We use the transition type, PAGE_TRANSITION_TYPED for explicit |
+ // navigation actions. |
+ load_params.transition_type = ui::PAGE_TRANSITION_TYPED; |
+ web_contents()->GetController().LoadURLWithParams(load_params); |
+} |
+ |
// static |
bool SSLBlockingPage::IsOverridable(int options_mask, |
const Profile* const profile) { |