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