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/download_protection_service.h" | 5 #include "chrome/browser/safe_browsing/download_protection_service.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 DownloadProtectionService* service, | 342 DownloadProtectionService* service, |
343 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, | 343 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, |
344 BinaryFeatureExtractor* binary_feature_extractor) | 344 BinaryFeatureExtractor* binary_feature_extractor) |
345 : item_(item), | 345 : item_(item), |
346 url_chain_(item->GetUrlChain()), | 346 url_chain_(item->GetUrlChain()), |
347 referrer_url_(item->GetReferrerUrl()), | 347 referrer_url_(item->GetReferrerUrl()), |
348 tab_url_(item->GetTabUrl()), | 348 tab_url_(item->GetTabUrl()), |
349 tab_referrer_url_(item->GetTabReferrerUrl()), | 349 tab_referrer_url_(item->GetTabReferrerUrl()), |
350 archived_executable_(false), | 350 archived_executable_(false), |
351 archive_is_valid_(ArchiveValid::UNSET), | 351 archive_is_valid_(ArchiveValid::UNSET), |
| 352 #if defined(OS_MACOSX) |
| 353 disk_image_signature_(nullptr), |
| 354 #endif |
352 callback_(callback), | 355 callback_(callback), |
353 service_(service), | 356 service_(service), |
354 binary_feature_extractor_(binary_feature_extractor), | 357 binary_feature_extractor_(binary_feature_extractor), |
355 database_manager_(database_manager), | 358 database_manager_(database_manager), |
356 pingback_enabled_(service_->enabled()), | 359 pingback_enabled_(service_->enabled()), |
357 finished_(false), | 360 finished_(false), |
358 type_(ClientDownloadRequest::WIN_EXECUTABLE), | 361 type_(ClientDownloadRequest::WIN_EXECUTABLE), |
359 start_time_(base::TimeTicks::Now()), | 362 start_time_(base::TimeTicks::Now()), |
360 skipped_url_whitelist_(false), | 363 skipped_url_whitelist_(false), |
361 skipped_certificate_whitelist_(false), | 364 skipped_certificate_whitelist_(false), |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
806 else | 809 else |
807 StartExtractFileFeatures(); | 810 StartExtractFileFeatures(); |
808 } | 811 } |
809 | 812 |
810 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { | 813 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { |
811 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 814 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
812 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); | 815 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); |
813 if (!service_) | 816 if (!service_) |
814 return; | 817 return; |
815 | 818 |
| 819 if (results.signature_blob.size() > 0) { |
| 820 disk_image_signature_ = |
| 821 base::MakeUnique<std::vector<uint8_t>>(results.signature_blob); |
| 822 } |
| 823 |
816 // Even if !results.success, some of the DMG may have been parsed. | 824 // Even if !results.success, some of the DMG may have been parsed. |
817 archive_is_valid_ = | 825 archive_is_valid_ = |
818 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); | 826 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); |
819 archived_executable_ = results.has_executable; | 827 archived_executable_ = results.has_executable; |
820 archived_binary_.CopyFrom(results.archived_binary); | 828 archived_binary_.CopyFrom(results.archived_binary); |
821 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() | 829 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() |
822 << ", has_executable=" << results.has_executable | 830 << ", has_executable=" << results.has_executable |
823 << ", success=" << results.success; | 831 << ", success=" << results.success; |
824 | 832 |
825 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( | 833 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 item_->GetUserData(kDownloadReferrerChainDataKey)); | 1059 item_->GetUserData(kDownloadReferrerChainDataKey)); |
1052 if (referrer_chain_data && | 1060 if (referrer_chain_data && |
1053 !referrer_chain_data->GetReferrerChain()->empty()) { | 1061 !referrer_chain_data->GetReferrerChain()->empty()) { |
1054 request.mutable_referrer_chain()->Swap( | 1062 request.mutable_referrer_chain()->Swap( |
1055 referrer_chain_data->GetReferrerChain()); | 1063 referrer_chain_data->GetReferrerChain()); |
1056 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) | 1064 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) |
1057 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( | 1065 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( |
1058 request.mutable_referrer_chain()); | 1066 request.mutable_referrer_chain()); |
1059 } | 1067 } |
1060 | 1068 |
| 1069 #if defined(OS_MACOSX) |
| 1070 UMA_HISTOGRAM_BOOLEAN( |
| 1071 "SBClientDownload." |
| 1072 "DownloadFileHasDmgSignature", |
| 1073 disk_image_signature_ != nullptr); |
| 1074 |
| 1075 if (disk_image_signature_) { |
| 1076 request.set_udif_code_signature(disk_image_signature_->data(), |
| 1077 disk_image_signature_->size()); |
| 1078 } |
| 1079 #endif |
| 1080 |
1061 if (archive_is_valid_ != ArchiveValid::UNSET) | 1081 if (archive_is_valid_ != ArchiveValid::UNSET) |
1062 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); | 1082 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); |
1063 request.mutable_signature()->CopyFrom(signature_info_); | 1083 request.mutable_signature()->CopyFrom(signature_info_); |
1064 if (image_headers_) | 1084 if (image_headers_) |
1065 request.set_allocated_image_headers(image_headers_.release()); | 1085 request.set_allocated_image_headers(image_headers_.release()); |
1066 if (archived_executable_) | 1086 if (archived_executable_) |
1067 request.mutable_archived_binary()->Swap(&archived_binary_); | 1087 request.mutable_archived_binary()->Swap(&archived_binary_); |
1068 if (!request.SerializeToString(&client_download_request_data_)) { | 1088 if (!request.SerializeToString(&client_download_request_data_)) { |
1069 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); | 1089 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); |
1070 return; | 1090 return; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 GURL referrer_url_; | 1266 GURL referrer_url_; |
1247 // URL chain of redirects leading to (but not including) |tab_url|. | 1267 // URL chain of redirects leading to (but not including) |tab_url|. |
1248 std::vector<GURL> tab_redirects_; | 1268 std::vector<GURL> tab_redirects_; |
1249 // URL and referrer of the window the download was started from. | 1269 // URL and referrer of the window the download was started from. |
1250 GURL tab_url_; | 1270 GURL tab_url_; |
1251 GURL tab_referrer_url_; | 1271 GURL tab_referrer_url_; |
1252 | 1272 |
1253 bool archived_executable_; | 1273 bool archived_executable_; |
1254 ArchiveValid archive_is_valid_; | 1274 ArchiveValid archive_is_valid_; |
1255 | 1275 |
| 1276 #if defined(OS_MACOSX) |
| 1277 std::unique_ptr<std::vector<uint8_t>> disk_image_signature_; |
| 1278 #endif |
| 1279 |
1256 ClientDownloadRequest_SignatureInfo signature_info_; | 1280 ClientDownloadRequest_SignatureInfo signature_info_; |
1257 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; | 1281 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; |
1258 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> | 1282 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> |
1259 archived_binary_; | 1283 archived_binary_; |
1260 CheckDownloadCallback callback_; | 1284 CheckDownloadCallback callback_; |
1261 // Will be NULL if the request has been canceled. | 1285 // Will be NULL if the request has been canceled. |
1262 DownloadProtectionService* service_; | 1286 DownloadProtectionService* service_; |
1263 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; | 1287 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; |
1264 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; | 1288 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; |
1265 const bool pingback_enabled_; | 1289 const bool pingback_enabled_; |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2015 out_request->mutable_referrer_chain()); | 2039 out_request->mutable_referrer_chain()); |
2016 UMA_HISTOGRAM_COUNTS_100( | 2040 UMA_HISTOGRAM_COUNTS_100( |
2017 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", | 2041 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", |
2018 out_request->referrer_chain_size()); | 2042 out_request->referrer_chain_size()); |
2019 UMA_HISTOGRAM_ENUMERATION( | 2043 UMA_HISTOGRAM_ENUMERATION( |
2020 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, | 2044 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, |
2021 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); | 2045 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); |
2022 } | 2046 } |
2023 | 2047 |
2024 } // namespace safe_browsing | 2048 } // namespace safe_browsing |
OLD | NEW |