| 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 |