| 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..6fff853be520b51040448bb0c7cbf624801634df 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", false);
|
| + // 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", 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:
|
| + OpenSuggestedURL();
|
| + break;
|
| case CMD_OPEN_DIAGNOSTIC:
|
| // Google doesn't currently have a transparency report for SSL.
|
| NOTREACHED() << "Unexpected command: " << command;
|
| @@ -637,6 +657,12 @@ std::string SSLBlockingPage::GetSamplingEventName() const {
|
| return event_name;
|
| }
|
|
|
| +void SSLBlockingPage::OpenSuggestedURL() const {
|
| + content::NavigationController::LoadURLParams load_params(suggested_url_);
|
| + load_params.transition_type = ui::PAGE_TRANSITION_LINK;
|
| + web_contents()->GetController().LoadURLWithParams(load_params);
|
| +}
|
| +
|
| // static
|
| bool SSLBlockingPage::IsOverridable(int options_mask,
|
| const Profile* const profile) {
|
|
|