Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/safe_browsing/protocol_manager.h" | 5 #include "chrome/browser/safe_browsing/protocol_manager.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/environment.h" | 10 #include "base/environment.h" |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 void SafeBrowsingProtocolManager::RecordGetHashResult(bool is_download, | 210 void SafeBrowsingProtocolManager::RecordGetHashResult(bool is_download, |
| 211 ResultType result_type) { | 211 ResultType result_type) { |
| 212 if (is_download) { | 212 if (is_download) { |
| 213 UMA_HISTOGRAM_ENUMERATION("SB2.GetHashResultDownload", result_type, | 213 UMA_HISTOGRAM_ENUMERATION("SB2.GetHashResultDownload", result_type, |
| 214 GET_HASH_RESULT_MAX); | 214 GET_HASH_RESULT_MAX); |
| 215 } else { | 215 } else { |
| 216 UMA_HISTOGRAM_ENUMERATION("SB2.GetHashResult", result_type, | 216 UMA_HISTOGRAM_ENUMERATION("SB2.GetHashResult", result_type, |
| 217 GET_HASH_RESULT_MAX); | 217 GET_HASH_RESULT_MAX); |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 void SafeBrowsingProtocolManager::RecordParseGetHashResult( | |
| 221 ParseResultType result_type) { | |
| 222 UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.ParseV4HashResult", result_type, | |
| 223 PARSE_GET_HASH_RESULT_MAX); | |
| 224 } | |
| 220 | 225 |
| 221 // static | 226 // static |
| 222 void SafeBrowsingProtocolManager::RecordGetV4HashResult( | 227 void SafeBrowsingProtocolManager::RecordGetV4HashResult( |
| 223 ResultType result_type) { | 228 ResultType result_type) { |
| 224 UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.GetV4HashResult", result_type, | 229 UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.GetV4HashResult", result_type, |
| 225 GET_HASH_RESULT_MAX); | 230 GET_HASH_RESULT_MAX); |
| 226 } | 231 } |
| 227 | 232 |
| 228 void SafeBrowsingProtocolManager::RecordHttpResponseOrErrorCode( | 233 void SafeBrowsingProtocolManager::RecordHttpResponseOrErrorCode( |
| 229 const char* metric_name, | 234 const char* metric_name, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 307 return req_base64; | 312 return req_base64; |
| 308 } | 313 } |
| 309 | 314 |
| 310 bool SafeBrowsingProtocolManager::ParseV4HashResponse( | 315 bool SafeBrowsingProtocolManager::ParseV4HashResponse( |
| 311 const std::string& data, | 316 const std::string& data, |
| 312 std::vector<SBFullHashResult>* full_hashes, | 317 std::vector<SBFullHashResult>* full_hashes, |
| 313 base::TimeDelta* negative_cache_duration) { | 318 base::TimeDelta* negative_cache_duration) { |
| 314 FindFullHashesResponse response; | 319 FindFullHashesResponse response; |
| 315 | 320 |
| 316 if (!response.ParseFromString(data)) { | 321 if (!response.ParseFromString(data)) { |
| 317 // TODO(kcarattini): Add UMA. | 322 RecordParseGetHashResult(PARSE_FROM_STRING_ERROR); |
| 318 return false; | 323 return false; |
| 319 } | 324 } |
| 320 | 325 |
| 321 if (response.has_negative_cache_duration()) { | 326 if (response.has_negative_cache_duration()) { |
| 322 // Seconds resolution is good enough so we ignore the nanos field. | 327 // Seconds resolution is good enough so we ignore the nanos field. |
| 323 *negative_cache_duration = base::TimeDelta::FromSeconds( | 328 *negative_cache_duration = base::TimeDelta::FromSeconds( |
| 324 response.negative_cache_duration().seconds()); | 329 response.negative_cache_duration().seconds()); |
| 325 } | 330 } |
| 326 | 331 |
| 327 if (response.has_minimum_wait_duration()) { | 332 if (response.has_minimum_wait_duration()) { |
| 328 // Seconds resolution is good enough so we ignore the nanos field. | 333 // Seconds resolution is good enough so we ignore the nanos field. |
| 329 next_gethash_v4_time_ = Time::Now() + base::TimeDelta::FromSeconds( | 334 next_gethash_v4_time_ = Time::Now() + base::TimeDelta::FromSeconds( |
| 330 response.minimum_wait_duration().seconds()); | 335 response.minimum_wait_duration().seconds()); |
| 331 } | 336 } |
| 332 | 337 |
| 333 // Loop over the threat matches and fill in full_hashes. | 338 // Loop over the threat matches and fill in full_hashes. |
| 334 for (const ThreatMatch& match : response.matches()) { | 339 for (const ThreatMatch& match : response.matches()) { |
| 335 // Make sure the platform and threat entry type match. | 340 // Make sure the platform and threat entry type match. |
| 336 if (!(match.has_threat_entry_type() && | 341 if (!(match.has_threat_entry_type() && |
| 337 match.threat_entry_type() == URL_EXPRESSION && | 342 match.threat_entry_type() == URL_EXPRESSION && |
| 338 match.has_threat())) { | 343 match.has_threat())) { |
| 344 RecordParseGetHashResult(UNEXPECTED_THREAT_ENTRY_TYPE_ERROR); | |
| 339 continue; | 345 continue; |
| 340 } | 346 } |
| 341 | 347 |
| 342 // Fill in the full hash. | 348 // Fill in the full hash. |
| 343 SBFullHashResult result; | 349 SBFullHashResult result; |
| 344 result.hash = StringToSBFullHash(match.threat().hash()); | 350 result.hash = StringToSBFullHash(match.threat().hash()); |
| 345 | 351 |
| 346 if (match.has_cache_duration()) { | 352 if (match.has_cache_duration()) { |
| 347 // Seconds resolution is good enough so we ignore the nanos field. | 353 // Seconds resolution is good enough so we ignore the nanos field. |
| 348 result.cache_duration = base::TimeDelta::FromSeconds( | 354 result.cache_duration = base::TimeDelta::FromSeconds( |
| 349 match.cache_duration().seconds()); | 355 match.cache_duration().seconds()); |
| 350 } | 356 } |
| 351 | 357 |
| 352 // Different threat types will handle the metadata differently. | 358 // Different threat types will handle the metadata differently. |
| 353 if (match.has_threat_type() && match.threat_type() == API_ABUSE && | 359 if (match.has_threat_type() && match.threat_type() == API_ABUSE) { |
| 354 match.has_platform_type() && | 360 if (match.has_platform_type() && |
| 355 match.platform_type() == CHROME_PLATFORM && | 361 match.platform_type() == CHROME_PLATFORM) { |
| 356 match.has_threat_entry_metadata()) { | 362 if (match.has_threat_entry_metadata()) { |
| 357 // For API Abuse, store a csv of the returned permissions. | 363 // For API Abuse, store a csv of the returned permissions. |
| 358 for (const ThreatEntryMetadata::MetadataEntry& m : | 364 for (const ThreatEntryMetadata::MetadataEntry& m : |
| 359 match.threat_entry_metadata().entries()) { | 365 match.threat_entry_metadata().entries()) { |
| 360 if (m.key() == "permission") { | 366 if (m.key() == "permission") { |
| 361 result.metadata += m.value() + ","; | 367 result.metadata += m.value() + ","; |
| 368 } | |
| 369 } | |
| 370 } else { | |
| 371 RecordParseGetHashResult(NO_METADATA_ERROR); | |
| 362 } | 372 } |
| 373 } else { | |
| 374 RecordParseGetHashResult(UNEXPECTED_PLATFORM_TYPE_ERROR); | |
| 363 } | 375 } |
| 364 } else { | 376 } else { |
| 365 // TODO(kcarattini): Add UMA for unexpected threat type match. | 377 RecordParseGetHashResult(UNEXPECTED_THREAT_TYPE_ERROR); |
| 366 return false; | 378 return false; |
|
Nathan Parker
2016/01/15 19:34:42
Why does this this one return and the rest dont?
kcarattini
2016/01/20 04:02:05
I made them all return false, that way there is on
| |
| 367 } | 379 } |
| 368 | 380 |
| 369 full_hashes->push_back(result); | 381 full_hashes->push_back(result); |
| 370 } | 382 } |
| 371 return true; | 383 return true; |
| 372 } | 384 } |
| 373 | 385 |
| 374 void SafeBrowsingProtocolManager::GetV4FullHashes( | 386 void SafeBrowsingProtocolManager::GetV4FullHashes( |
| 375 const std::vector<SBPrefix>& prefixes, | 387 const std::vector<SBPrefix>& prefixes, |
| 376 const std::vector<PlatformType>& platforms, | 388 const std::vector<PlatformType>& platforms, |
| (...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1034 SafeBrowsingProtocolManager::FullHashDetails::FullHashDetails( | 1046 SafeBrowsingProtocolManager::FullHashDetails::FullHashDetails( |
| 1035 FullHashCallback callback, | 1047 FullHashCallback callback, |
| 1036 bool is_download) | 1048 bool is_download) |
| 1037 : callback(callback), is_download(is_download) {} | 1049 : callback(callback), is_download(is_download) {} |
| 1038 | 1050 |
| 1039 SafeBrowsingProtocolManager::FullHashDetails::~FullHashDetails() {} | 1051 SafeBrowsingProtocolManager::FullHashDetails::~FullHashDetails() {} |
| 1040 | 1052 |
| 1041 SafeBrowsingProtocolManagerDelegate::~SafeBrowsingProtocolManagerDelegate() {} | 1053 SafeBrowsingProtocolManagerDelegate::~SafeBrowsingProtocolManagerDelegate() {} |
| 1042 | 1054 |
| 1043 } // namespace safe_browsing | 1055 } // namespace safe_browsing |
| OLD | NEW |