Chromium Code Reviews| 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..cb7ca8bc7b83022c0b390ea44bf815447f4da547 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)); |
| + load_time_data->SetBoolean("common_name_mismatch_interstitial", false); |
|
meacer
2015/07/28 01:18:06
nit: Drop _interstitial
Bhanu Dev
2015/07/30 02:39:10
Done.
|
| + // If suggested URL is not empty, display a modified message |
| + // 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()))); |
| + } |
| + |
| 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,9 @@ void SSLBlockingPage::CommandReceived(const std::string& command) { |
| case CMD_OPEN_REPORTING_PRIVACY: |
| OpenExtendedReportingPrivacyPolicy(); |
| break; |
| + case CMD_NAVIGATE_SUGGESTED_URL: |
| + NavigateToSuggestedURL(); |
| + break; |
| case CMD_OPEN_DIAGNOSTIC: |
| // Google doesn't currently have a transparency report for SSL. |
| NOTREACHED() << "Unexpected command: " << command; |
| @@ -637,6 +657,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; |
|
meacer
2015/07/28 01:18:06
TYPED is used for when the user explicitly types t
Bhanu Dev
2015/07/30 02:39:10
I too think "PAGE_TRANSITION_LINK" is more appropr
meacer
2015/07/30 19:40:21
I see, maybe captive portal uses TYPED because it'
|
| + web_contents()->GetController().LoadURLWithParams(load_params); |
| +} |
| + |
| // static |
| bool SSLBlockingPage::IsOverridable(int options_mask, |
| const Profile* const profile) { |