| Index: chrome/browser/ssl/security_state_model.cc
|
| diff --git a/chrome/browser/ssl/security_state_model.cc b/chrome/browser/ssl/security_state_model.cc
|
| index ace1743eac733172c50365b7f95d418bf44ced38..574969e6356ca4157af7ce88690021aa9b709211 100644
|
| --- a/chrome/browser/ssl/security_state_model.cc
|
| +++ b/chrome/browser/ssl/security_state_model.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ssl/chrome_security_state_model_client.h"
|
| #include "chrome/common/chrome_constants.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| @@ -64,14 +65,6 @@ SecurityStateModel::SecurityLevel GetSecurityLevelForNonSecureFieldTrial() {
|
| return level;
|
| }
|
|
|
| -scoped_refptr<net::X509Certificate> GetCertForSSLStatus(
|
| - const content::SSLStatus& ssl) {
|
| - scoped_refptr<net::X509Certificate> cert;
|
| - return content::CertStore::GetInstance()->RetrieveCert(ssl.cert_id, &cert)
|
| - ? cert
|
| - : nullptr;
|
| -}
|
| -
|
| SecurityStateModel::SHA1DeprecationStatus GetSHA1DeprecationStatus(
|
| scoped_refptr<net::X509Certificate> cert,
|
| const content::SSLStatus& ssl) {
|
| @@ -115,7 +108,8 @@ SecurityStateModel::SecurityLevel GetSecurityLevelForRequest(
|
| Profile* profile,
|
| scoped_refptr<net::X509Certificate> cert,
|
| SecurityStateModel::SHA1DeprecationStatus sha1_status,
|
| - SecurityStateModel::MixedContentStatus mixed_content_status) {
|
| + SecurityStateModel::MixedContentStatus mixed_content_status,
|
| + bool used_policy_installed_certificate) {
|
| switch (ssl.security_style) {
|
| case content::SECURITY_STYLE_UNKNOWN:
|
| return SecurityStateModel::NONE;
|
| @@ -134,17 +128,13 @@ SecurityStateModel::SecurityLevel GetSecurityLevelForRequest(
|
| return SecurityStateModel::SECURITY_WARNING;
|
|
|
| case content::SECURITY_STYLE_AUTHENTICATED: {
|
| -#if defined(OS_CHROMEOS)
|
| // Report if there is a policy cert first, before reporting any other
|
| // authenticated-but-with-errors cases. A policy cert is a strong
|
| // indicator of a MITM being present (the enterprise), while the
|
| // other authenticated-but-with-errors indicate something may
|
| // be wrong, or may be wrong in the future, but is unclear now.
|
| - policy::PolicyCertService* service =
|
| - policy::PolicyCertServiceFactory::GetForProfile(profile);
|
| - if (service && service->UsedPolicyCertificates())
|
| + if (used_policy_installed_certificate)
|
| return SecurityStateModel::SECURITY_POLICY_WARNING;
|
| -#endif
|
|
|
| if (sha1_status == SecurityStateModel::DEPRECATED_SHA1_MAJOR)
|
| return SecurityStateModel::SECURITY_ERROR;
|
| @@ -217,13 +207,15 @@ const SecurityStateModel::SecurityInfo& SecurityStateModel::GetSecurityInfo()
|
| return security_info_;
|
| }
|
|
|
| + scoped_refptr<net::X509Certificate> cert = nullptr;
|
| + client_->RetrieveCert(&cert);
|
| +
|
| if (entry->GetURL() == visible_url_ &&
|
| entry->GetSSL().Equals(visible_ssl_status_)) {
|
| // A cert must be present in the CertStore in order for the site to
|
| // be considered EV_SECURE, and the cert might have been removed
|
| // since the security level was last computed.
|
| - if (security_info_.security_level == EV_SECURE &&
|
| - !GetCertForSSLStatus(visible_ssl_status_)) {
|
| + if (security_info_.security_level == EV_SECURE && !cert) {
|
| security_info_.security_level = SECURE;
|
| }
|
| return security_info_;
|
| @@ -231,19 +223,21 @@ const SecurityStateModel::SecurityInfo& SecurityStateModel::GetSecurityInfo()
|
|
|
| SecurityInfoForRequest(
|
| entry->GetURL(), entry->GetSSL(),
|
| - Profile::FromBrowserContext(web_contents_->GetBrowserContext()),
|
| - &security_info_);
|
| + Profile::FromBrowserContext(web_contents_->GetBrowserContext()), cert,
|
| + client_->UsedPolicyInstalledCertificate(), &security_info_);
|
| visible_url_ = entry->GetURL();
|
| visible_ssl_status_ = entry->GetSSL();
|
| return security_info_;
|
| }
|
|
|
| // static
|
| -void SecurityStateModel::SecurityInfoForRequest(const GURL& url,
|
| - const content::SSLStatus& ssl,
|
| - Profile* profile,
|
| - SecurityInfo* security_info) {
|
| - scoped_refptr<net::X509Certificate> cert = GetCertForSSLStatus(ssl);
|
| +void SecurityStateModel::SecurityInfoForRequest(
|
| + const GURL& url,
|
| + const content::SSLStatus& ssl,
|
| + Profile* profile,
|
| + const scoped_refptr<net::X509Certificate>& cert,
|
| + bool used_policy_installed_certificate,
|
| + SecurityInfo* security_info) {
|
| security_info->cert_id = ssl.cert_id;
|
| security_info->sha1_deprecation_status = GetSHA1DeprecationStatus(cert, ssl);
|
| security_info->mixed_content_status = GetMixedContentStatus(ssl);
|
| @@ -264,8 +258,9 @@ void SecurityStateModel::SecurityInfoForRequest(const GURL& url,
|
|
|
| security_info->security_level = GetSecurityLevelForRequest(
|
| url, ssl, profile, cert, security_info->sha1_deprecation_status,
|
| - security_info->mixed_content_status);
|
| + security_info->mixed_content_status, used_policy_installed_certificate);
|
| }
|
|
|
| SecurityStateModel::SecurityStateModel(content::WebContents* web_contents)
|
| - : web_contents_(web_contents) {}
|
| + : web_contents_(web_contents),
|
| + client_(new ChromeSecurityStateModelClient(web_contents)) {}
|
|
|