Index: chrome/browser/safe_browsing/download_protection_service.cc |
diff --git a/chrome/browser/safe_browsing/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection_service.cc |
index 822e3353b9a3da82be9a99804359dcc5915f5a56..a8400aaf290233ce442e22dbab477185bf2126ce 100644 |
--- a/chrome/browser/safe_browsing/download_protection_service.cc |
+++ b/chrome/browser/safe_browsing/download_protection_service.cc |
@@ -362,6 +362,9 @@ class DownloadProtectionService::CheckClientDownloadRequest |
tab_referrer_url_(item->GetTabReferrerUrl()), |
archived_executable_(false), |
archive_is_valid_(ArchiveValid::UNSET), |
+#if defined(OS_MACOSX) |
+ disk_image_signature_(nullptr), |
+#endif |
callback_(callback), |
service_(service), |
binary_feature_extractor_(binary_feature_extractor), |
@@ -826,6 +829,11 @@ class DownloadProtectionService::CheckClientDownloadRequest |
if (!service_) |
return; |
+ if (results.signature_blob.size() > 0) { |
+ disk_image_signature_ = |
+ base::MakeUnique<std::vector<uint8_t>>(results.signature_blob); |
+ } |
+ |
// Even if !results.success, some of the DMG may have been parsed. |
archive_is_valid_ = |
(results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); |
@@ -1071,6 +1079,18 @@ class DownloadProtectionService::CheckClientDownloadRequest |
request.mutable_referrer_chain()); |
} |
+#if defined(OS_MACOSX) |
+ UMA_HISTOGRAM_BOOLEAN( |
+ "SBClientDownload." |
+ "DownloadFileHasDmgSignature", |
+ disk_image_signature_ != nullptr); |
+ |
+ if (disk_image_signature_) { |
+ request.set_udif_code_signature(disk_image_signature_->data(), |
+ disk_image_signature_->size()); |
+ } |
+#endif |
+ |
if (archive_is_valid_ != ArchiveValid::UNSET) |
request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); |
request.mutable_signature()->CopyFrom(signature_info_); |
@@ -1266,6 +1286,10 @@ class DownloadProtectionService::CheckClientDownloadRequest |
bool archived_executable_; |
ArchiveValid archive_is_valid_; |
+#if defined(OS_MACOSX) |
+ std::unique_ptr<std::vector<uint8_t>> disk_image_signature_; |
+#endif |
+ |
ClientDownloadRequest_SignatureInfo signature_info_; |
std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; |
google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> |