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