| Index: chrome/browser/ui/website_settings/website_settings.cc
|
| diff --git a/chrome/browser/ui/website_settings/website_settings.cc b/chrome/browser/ui/website_settings/website_settings.cc
|
| index f93484c1b45f5fe647db6ec31130765d0f6b10d1..bdb6dd098c6757e2b0cdea4f3ba38ca1e977880f 100644
|
| --- a/chrome/browser/ui/website_settings/website_settings.cc
|
| +++ b/chrome/browser/ui/website_settings/website_settings.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/command_line.h"
|
| #include "base/i18n/time_formatting.h"
|
| +#include "base/metrics/field_trial.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| @@ -26,9 +27,12 @@
|
| #include "chrome/browser/content_settings/local_shared_objects_container.h"
|
| #include "chrome/browser/history/history_service_factory.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ssl/chrome_ssl_host_state_delegate.h"
|
| +#include "chrome/browser/ssl/chrome_ssl_host_state_delegate_factory.h"
|
| #include "chrome/browser/ssl/ssl_error_info.h"
|
| #include "chrome/browser/ui/website_settings/website_settings_infobar_delegate.h"
|
| #include "chrome/browser/ui/website_settings/website_settings_ui.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/content_settings_pattern.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/cert_store.h"
|
| @@ -121,6 +125,33 @@ WebsiteSettings::SiteIdentityStatus GetSiteIdentityStatusByCTInfo(
|
| : WebsiteSettings::SITE_IDENTITY_STATUS_CERT;
|
| }
|
|
|
| +const char kRememberCertificateErrorDecisionsFieldTrialName[] =
|
| + "RememberCertificateErrorDecisions";
|
| +const char kRememberCertificateErrorDecisionsFieldTrialDefaultGroup[] =
|
| + "Default";
|
| +const char kRememberCertificateErrorDecisionsFieldTrialDisableGroup[] =
|
| + "Disable";
|
| +// Returns true if the user is in the experimental group or has the flag enabled
|
| +// for remembering SSL error decisions, otherwise false.
|
| +//
|
| +// TODO(jww): The field trial is scheduled to end 2015/02/28. This should be
|
| +// removed at that point unless the field trial or flag continues.
|
| +bool InRememberCertificateErrorDecisionsGroup() {
|
| + std::string group_name = base::FieldTrialList::FindFullName(
|
| + kRememberCertificateErrorDecisionsFieldTrialName);
|
| +
|
| + // The Default and Disable groups are the "old-style" forget-at-session
|
| + // restart groups, so they do not get the button.
|
| + bool in_experimental_group = !group_name.empty() &&
|
| + group_name.compare(
|
| + kRememberCertificateErrorDecisionsFieldTrialDefaultGroup) != 0 &&
|
| + group_name.compare(
|
| + kRememberCertificateErrorDecisionsFieldTrialDisableGroup) != 0;
|
| + bool has_command_line_switch = CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kRememberCertErrorDecisions);
|
| + return in_experimental_group || has_command_line_switch;
|
| +}
|
| +
|
| } // namespace
|
|
|
| WebsiteSettings::WebsiteSettings(
|
| @@ -141,7 +172,9 @@ WebsiteSettings::WebsiteSettings(
|
| cert_id_(0),
|
| site_connection_status_(SITE_CONNECTION_STATUS_UNKNOWN),
|
| cert_store_(cert_store),
|
| - content_settings_(profile->GetHostContentSettingsMap()) {
|
| + content_settings_(profile->GetHostContentSettingsMap()),
|
| + chrome_ssl_host_state_delegate_(
|
| + ChromeSSLHostStateDelegateFactory::GetForProfile(profile)) {
|
| Init(profile, url, ssl);
|
|
|
| HistoryService* history_service = HistoryServiceFactory::GetForProfile(
|
| @@ -532,6 +565,17 @@ void WebsiteSettings::Init(Profile* profile,
|
| }
|
| }
|
|
|
| + // Check if a user decision has been made to allow or deny certificates with
|
| + // errors on this site.
|
| + ChromeSSLHostStateDelegate* delegate =
|
| + ChromeSSLHostStateDelegateFactory::GetForProfile(profile);
|
| + DCHECK(delegate);
|
| + // Only show an SSL decision revoke button if both the user has chosen to
|
| + // bypass SSL host errors for this host in the past and the user is not using
|
| + // the traditional "forget-at-session-restart" error decision memory.
|
| + show_ssl_decision_revoke_button_ = delegate->HasUserDecision(url.host()) &&
|
| + InRememberCertificateErrorDecisionsGroup();
|
| +
|
| // By default select the permissions tab that displays all the site
|
| // permissions. In case of a connection error or an issue with the
|
| // certificate presented by the website, select the connection tab to draw
|
| @@ -665,6 +709,7 @@ void WebsiteSettings::PresentSiteIdentity() {
|
| info.signed_certificate_timestamp_ids.assign(
|
| signed_certificate_timestamp_ids_.begin(),
|
| signed_certificate_timestamp_ids_.end());
|
| + info.show_ssl_decision_revoke_button = show_ssl_decision_revoke_button_;
|
| ui_->SetIdentityInfo(info);
|
| }
|
|
|
|
|