Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(323)

Side by Side Diff: components/security_state/security_state_model.cc

Issue 2481743009: Expose malware/phishing/etc. distinction from SafeBrowsingUIManager (Closed)
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « components/security_state/security_state_model.h ('k') | components/security_state/security_state_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698