| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/security_state/security_state_model.h" | 5 #include "components/security_state/security_state_model.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 return SecurityStateModel::CONTENT_STATUS_NONE; | 118 return SecurityStateModel::CONTENT_STATUS_NONE; |
| 119 } | 119 } |
| 120 | 120 |
| 121 SecurityStateModel::SecurityLevel GetSecurityLevelForRequest( | 121 SecurityStateModel::SecurityLevel GetSecurityLevelForRequest( |
| 122 const SecurityStateModel::VisibleSecurityState& visible_security_state, | 122 const SecurityStateModel::VisibleSecurityState& visible_security_state, |
| 123 SecurityStateModelClient* client, | 123 SecurityStateModelClient* client, |
| 124 SecurityStateModel::SHA1DeprecationStatus sha1_status, | 124 SecurityStateModel::SHA1DeprecationStatus sha1_status, |
| 125 SecurityStateModel::ContentStatus mixed_content_status, | 125 SecurityStateModel::ContentStatus mixed_content_status, |
| 126 SecurityStateModel::ContentStatus content_with_cert_errors_status) { | 126 SecurityStateModel::ContentStatus content_with_cert_errors_status) { |
| 127 DCHECK(visible_security_state.connection_info_initialized || | 127 DCHECK(visible_security_state.connection_info_initialized || |
| 128 visible_security_state.fails_malware_check); | 128 visible_security_state.malicious_content_status != |
| 129 SecurityStateModel::MALICIOUS_CONTENT_STATUS_NONE); |
| 129 | 130 |
| 130 // Override the connection security information if the website failed the | 131 // Override the connection security information if the website failed the |
| 131 // browser's malware checks. | 132 // browser's malware checks. |
| 132 if (visible_security_state.fails_malware_check) | 133 if (visible_security_state.malicious_content_status != |
| 134 SecurityStateModel::MALICIOUS_CONTENT_STATUS_NONE) { |
| 133 return SecurityStateModel::DANGEROUS; | 135 return SecurityStateModel::DANGEROUS; |
| 136 } |
| 134 | 137 |
| 135 GURL url = visible_security_state.url; | 138 GURL url = visible_security_state.url; |
| 136 | 139 |
| 137 bool is_cryptographic_with_certificate = | 140 bool is_cryptographic_with_certificate = |
| 138 (url.SchemeIsCryptographic() && visible_security_state.certificate); | 141 (url.SchemeIsCryptographic() && visible_security_state.certificate); |
| 139 | 142 |
| 140 // Set the security level to DANGEROUS for major certificate errors. | 143 // Set the security level to DANGEROUS for major certificate errors. |
| 141 if (is_cryptographic_with_certificate && | 144 if (is_cryptographic_with_certificate && |
| 142 net::IsCertStatusError(visible_security_state.cert_status) && | 145 net::IsCertStatusError(visible_security_state.cert_status) && |
| 143 !net::IsCertStatusMinorError(visible_security_state.cert_status)) { | 146 !net::IsCertStatusMinorError(visible_security_state.cert_status)) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 } | 204 } |
| 202 return SecurityStateModel::SECURE; | 205 return SecurityStateModel::SECURE; |
| 203 } | 206 } |
| 204 | 207 |
| 205 void SecurityInfoForRequest( | 208 void SecurityInfoForRequest( |
| 206 SecurityStateModelClient* client, | 209 SecurityStateModelClient* client, |
| 207 const SecurityStateModel::VisibleSecurityState& visible_security_state, | 210 const SecurityStateModel::VisibleSecurityState& visible_security_state, |
| 208 SecurityStateModel::SecurityInfo* security_info) { | 211 SecurityStateModel::SecurityInfo* security_info) { |
| 209 if (!visible_security_state.connection_info_initialized) { | 212 if (!visible_security_state.connection_info_initialized) { |
| 210 *security_info = SecurityStateModel::SecurityInfo(); | 213 *security_info = SecurityStateModel::SecurityInfo(); |
| 211 security_info->fails_malware_check = | 214 security_info->malicious_content_status = |
| 212 visible_security_state.fails_malware_check; | 215 visible_security_state.malicious_content_status; |
| 213 if (security_info->fails_malware_check) { | 216 if (security_info->malicious_content_status != |
| 217 SecurityStateModel::MALICIOUS_CONTENT_STATUS_NONE) { |
| 214 security_info->security_level = GetSecurityLevelForRequest( | 218 security_info->security_level = GetSecurityLevelForRequest( |
| 215 visible_security_state, client, SecurityStateModel::UNKNOWN_SHA1, | 219 visible_security_state, client, SecurityStateModel::UNKNOWN_SHA1, |
| 216 SecurityStateModel::CONTENT_STATUS_UNKNOWN, | 220 SecurityStateModel::CONTENT_STATUS_UNKNOWN, |
| 217 SecurityStateModel::CONTENT_STATUS_UNKNOWN); | 221 SecurityStateModel::CONTENT_STATUS_UNKNOWN); |
| 218 } | 222 } |
| 219 return; | 223 return; |
| 220 } | 224 } |
| 221 security_info->certificate = visible_security_state.certificate; | 225 security_info->certificate = visible_security_state.certificate; |
| 222 security_info->sha1_deprecation_status = | 226 security_info->sha1_deprecation_status = |
| 223 GetSHA1DeprecationStatus(visible_security_state); | 227 GetSHA1DeprecationStatus(visible_security_state); |
| 224 security_info->mixed_content_status = | 228 security_info->mixed_content_status = |
| 225 GetContentStatus(visible_security_state.displayed_mixed_content, | 229 GetContentStatus(visible_security_state.displayed_mixed_content, |
| 226 visible_security_state.ran_mixed_content); | 230 visible_security_state.ran_mixed_content); |
| 227 security_info->content_with_cert_errors_status = GetContentStatus( | 231 security_info->content_with_cert_errors_status = GetContentStatus( |
| 228 visible_security_state.displayed_content_with_cert_errors, | 232 visible_security_state.displayed_content_with_cert_errors, |
| 229 visible_security_state.ran_content_with_cert_errors); | 233 visible_security_state.ran_content_with_cert_errors); |
| 230 security_info->security_bits = visible_security_state.security_bits; | 234 security_info->security_bits = visible_security_state.security_bits; |
| 231 security_info->connection_status = visible_security_state.connection_status; | 235 security_info->connection_status = visible_security_state.connection_status; |
| 232 security_info->key_exchange_group = visible_security_state.key_exchange_group; | 236 security_info->key_exchange_group = visible_security_state.key_exchange_group; |
| 233 security_info->cert_status = visible_security_state.cert_status; | 237 security_info->cert_status = visible_security_state.cert_status; |
| 234 security_info->scheme_is_cryptographic = | 238 security_info->scheme_is_cryptographic = |
| 235 visible_security_state.url.SchemeIsCryptographic(); | 239 visible_security_state.url.SchemeIsCryptographic(); |
| 236 security_info->obsolete_ssl_status = | 240 security_info->obsolete_ssl_status = |
| 237 net::ObsoleteSSLStatus(security_info->connection_status); | 241 net::ObsoleteSSLStatus(security_info->connection_status); |
| 238 security_info->pkp_bypassed = visible_security_state.pkp_bypassed; | 242 security_info->pkp_bypassed = visible_security_state.pkp_bypassed; |
| 239 security_info->sct_verify_statuses = | 243 security_info->sct_verify_statuses = |
| 240 visible_security_state.sct_verify_statuses; | 244 visible_security_state.sct_verify_statuses; |
| 241 | 245 |
| 242 security_info->fails_malware_check = | 246 security_info->malicious_content_status = |
| 243 visible_security_state.fails_malware_check; | 247 visible_security_state.malicious_content_status; |
| 244 | 248 |
| 245 security_info->displayed_password_field_on_http = | 249 security_info->displayed_password_field_on_http = |
| 246 visible_security_state.displayed_password_field_on_http; | 250 visible_security_state.displayed_password_field_on_http; |
| 247 security_info->displayed_credit_card_field_on_http = | 251 security_info->displayed_credit_card_field_on_http = |
| 248 visible_security_state.displayed_credit_card_field_on_http; | 252 visible_security_state.displayed_credit_card_field_on_http; |
| 249 | 253 |
| 250 security_info->security_level = GetSecurityLevelForRequest( | 254 security_info->security_level = GetSecurityLevelForRequest( |
| 251 visible_security_state, client, security_info->sha1_deprecation_status, | 255 visible_security_state, client, security_info->sha1_deprecation_status, |
| 252 security_info->mixed_content_status, | 256 security_info->mixed_content_status, |
| 253 security_info->content_with_cert_errors_status); | 257 security_info->content_with_cert_errors_status); |
| 254 } | 258 } |
| 255 | 259 |
| 256 } // namespace | 260 } // namespace |
| 257 | 261 |
| 258 const SecurityStateModel::SecurityLevel | 262 const SecurityStateModel::SecurityLevel |
| 259 SecurityStateModel::kDisplayedInsecureContentLevel = | 263 SecurityStateModel::kDisplayedInsecureContentLevel = |
| 260 SecurityStateModel::NONE; | 264 SecurityStateModel::NONE; |
| 261 const SecurityStateModel::SecurityLevel | 265 const SecurityStateModel::SecurityLevel |
| 262 SecurityStateModel::kRanInsecureContentLevel = | 266 SecurityStateModel::kRanInsecureContentLevel = |
| 263 SecurityStateModel::DANGEROUS; | 267 SecurityStateModel::DANGEROUS; |
| 264 | 268 |
| 265 SecurityStateModel::SecurityInfo::SecurityInfo() | 269 SecurityStateModel::SecurityInfo::SecurityInfo() |
| 266 : security_level(SecurityStateModel::NONE), | 270 : security_level(SecurityStateModel::NONE), |
| 267 fails_malware_check(false), | 271 malicious_content_status( |
| 272 SecurityStateModel::MALICIOUS_CONTENT_STATUS_NONE), |
| 268 sha1_deprecation_status(SecurityStateModel::NO_DEPRECATED_SHA1), | 273 sha1_deprecation_status(SecurityStateModel::NO_DEPRECATED_SHA1), |
| 269 mixed_content_status(SecurityStateModel::CONTENT_STATUS_NONE), | 274 mixed_content_status(SecurityStateModel::CONTENT_STATUS_NONE), |
| 270 content_with_cert_errors_status(SecurityStateModel::CONTENT_STATUS_NONE), | 275 content_with_cert_errors_status(SecurityStateModel::CONTENT_STATUS_NONE), |
| 271 scheme_is_cryptographic(false), | 276 scheme_is_cryptographic(false), |
| 272 cert_status(0), | 277 cert_status(0), |
| 273 security_bits(-1), | 278 security_bits(-1), |
| 274 connection_status(0), | 279 connection_status(0), |
| 275 key_exchange_group(0), | 280 key_exchange_group(0), |
| 276 obsolete_ssl_status(net::OBSOLETE_SSL_NONE), | 281 obsolete_ssl_status(net::OBSOLETE_SSL_NONE), |
| 277 pkp_bypassed(false), | 282 pkp_bypassed(false), |
| (...skipping 11 matching lines...) Expand all Loading... |
| 289 VisibleSecurityState new_visible_state; | 294 VisibleSecurityState new_visible_state; |
| 290 client_->GetVisibleSecurityState(&new_visible_state); | 295 client_->GetVisibleSecurityState(&new_visible_state); |
| 291 SecurityInfoForRequest(client_, new_visible_state, result); | 296 SecurityInfoForRequest(client_, new_visible_state, result); |
| 292 } | 297 } |
| 293 | 298 |
| 294 void SecurityStateModel::SetClient(SecurityStateModelClient* client) { | 299 void SecurityStateModel::SetClient(SecurityStateModelClient* client) { |
| 295 client_ = client; | 300 client_ = client; |
| 296 } | 301 } |
| 297 | 302 |
| 298 SecurityStateModel::VisibleSecurityState::VisibleSecurityState() | 303 SecurityStateModel::VisibleSecurityState::VisibleSecurityState() |
| 299 : fails_malware_check(false), | 304 : malicious_content_status( |
| 305 SecurityStateModel::MALICIOUS_CONTENT_STATUS_NONE), |
| 300 connection_info_initialized(false), | 306 connection_info_initialized(false), |
| 301 cert_status(0), | 307 cert_status(0), |
| 302 connection_status(0), | 308 connection_status(0), |
| 303 key_exchange_group(0), | 309 key_exchange_group(0), |
| 304 security_bits(-1), | 310 security_bits(-1), |
| 305 displayed_mixed_content(false), | 311 displayed_mixed_content(false), |
| 306 ran_mixed_content(false), | 312 ran_mixed_content(false), |
| 307 displayed_content_with_cert_errors(false), | 313 displayed_content_with_cert_errors(false), |
| 308 ran_content_with_cert_errors(false), | 314 ran_content_with_cert_errors(false), |
| 309 pkp_bypassed(false), | 315 pkp_bypassed(false), |
| 310 displayed_password_field_on_http(false), | 316 displayed_password_field_on_http(false), |
| 311 displayed_credit_card_field_on_http(false) {} | 317 displayed_credit_card_field_on_http(false) {} |
| 312 | 318 |
| 313 SecurityStateModel::VisibleSecurityState::~VisibleSecurityState() {} | 319 SecurityStateModel::VisibleSecurityState::~VisibleSecurityState() {} |
| 314 | 320 |
| 315 bool SecurityStateModel::VisibleSecurityState::operator==( | 321 bool SecurityStateModel::VisibleSecurityState::operator==( |
| 316 const SecurityStateModel::VisibleSecurityState& other) const { | 322 const SecurityStateModel::VisibleSecurityState& other) const { |
| 317 return (url == other.url && | 323 return (url == other.url && |
| 318 fails_malware_check == other.fails_malware_check && | 324 malicious_content_status == other.malicious_content_status && |
| 319 !!certificate == !!other.certificate && | 325 !!certificate == !!other.certificate && |
| 320 (certificate ? certificate->Equals(other.certificate.get()) : true) && | 326 (certificate ? certificate->Equals(other.certificate.get()) : true) && |
| 321 connection_status == other.connection_status && | 327 connection_status == other.connection_status && |
| 322 key_exchange_group == other.key_exchange_group && | 328 key_exchange_group == other.key_exchange_group && |
| 323 security_bits == other.security_bits && | 329 security_bits == other.security_bits && |
| 324 sct_verify_statuses == other.sct_verify_statuses && | 330 sct_verify_statuses == other.sct_verify_statuses && |
| 325 displayed_mixed_content == other.displayed_mixed_content && | 331 displayed_mixed_content == other.displayed_mixed_content && |
| 326 ran_mixed_content == other.ran_mixed_content && | 332 ran_mixed_content == other.ran_mixed_content && |
| 327 displayed_content_with_cert_errors == | 333 displayed_content_with_cert_errors == |
| 328 other.displayed_content_with_cert_errors && | 334 other.displayed_content_with_cert_errors && |
| 329 ran_content_with_cert_errors == other.ran_content_with_cert_errors && | 335 ran_content_with_cert_errors == other.ran_content_with_cert_errors && |
| 330 pkp_bypassed == other.pkp_bypassed && | 336 pkp_bypassed == other.pkp_bypassed && |
| 331 displayed_password_field_on_http == | 337 displayed_password_field_on_http == |
| 332 other.displayed_password_field_on_http && | 338 other.displayed_password_field_on_http && |
| 333 displayed_credit_card_field_on_http == | 339 displayed_credit_card_field_on_http == |
| 334 other.displayed_credit_card_field_on_http); | 340 other.displayed_credit_card_field_on_http); |
| 335 } | 341 } |
| 336 | 342 |
| 337 } // namespace security_state | 343 } // namespace security_state |
| OLD | NEW |