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 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 DownloadProtectionService* service, | 355 DownloadProtectionService* service, |
356 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, | 356 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, |
357 BinaryFeatureExtractor* binary_feature_extractor) | 357 BinaryFeatureExtractor* binary_feature_extractor) |
358 : item_(item), | 358 : item_(item), |
359 url_chain_(item->GetUrlChain()), | 359 url_chain_(item->GetUrlChain()), |
360 referrer_url_(item->GetReferrerUrl()), | 360 referrer_url_(item->GetReferrerUrl()), |
361 tab_url_(item->GetTabUrl()), | 361 tab_url_(item->GetTabUrl()), |
362 tab_referrer_url_(item->GetTabReferrerUrl()), | 362 tab_referrer_url_(item->GetTabReferrerUrl()), |
363 archived_executable_(false), | 363 archived_executable_(false), |
364 archive_is_valid_(ArchiveValid::UNSET), | 364 archive_is_valid_(ArchiveValid::UNSET), |
| 365 #if defined(OS_MACOSX) |
| 366 disk_image_signature_(nullptr), |
| 367 #endif |
365 callback_(callback), | 368 callback_(callback), |
366 service_(service), | 369 service_(service), |
367 binary_feature_extractor_(binary_feature_extractor), | 370 binary_feature_extractor_(binary_feature_extractor), |
368 database_manager_(database_manager), | 371 database_manager_(database_manager), |
369 pingback_enabled_(service_->enabled()), | 372 pingback_enabled_(service_->enabled()), |
370 finished_(false), | 373 finished_(false), |
371 type_(ClientDownloadRequest::WIN_EXECUTABLE), | 374 type_(ClientDownloadRequest::WIN_EXECUTABLE), |
372 start_time_(base::TimeTicks::Now()), | 375 start_time_(base::TimeTicks::Now()), |
373 skipped_url_whitelist_(false), | 376 skipped_url_whitelist_(false), |
374 skipped_certificate_whitelist_(false), | 377 skipped_certificate_whitelist_(false), |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 else | 822 else |
820 StartExtractFileFeatures(); | 823 StartExtractFileFeatures(); |
821 } | 824 } |
822 | 825 |
823 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { | 826 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { |
824 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 827 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
825 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); | 828 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); |
826 if (!service_) | 829 if (!service_) |
827 return; | 830 return; |
828 | 831 |
| 832 if (results.signature_blob.size() > 0) { |
| 833 disk_image_signature_ = |
| 834 base::MakeUnique<std::vector<uint8_t>>(results.signature_blob); |
| 835 } |
| 836 |
829 // Even if !results.success, some of the DMG may have been parsed. | 837 // Even if !results.success, some of the DMG may have been parsed. |
830 archive_is_valid_ = | 838 archive_is_valid_ = |
831 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); | 839 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); |
832 archived_executable_ = results.has_executable; | 840 archived_executable_ = results.has_executable; |
833 archived_binary_.CopyFrom(results.archived_binary); | 841 archived_binary_.CopyFrom(results.archived_binary); |
834 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() | 842 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() |
835 << ", has_executable=" << results.has_executable | 843 << ", has_executable=" << results.has_executable |
836 << ", success=" << results.success; | 844 << ", success=" << results.success; |
837 | 845 |
838 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( | 846 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1064 item_->GetUserData(kDownloadReferrerChainDataKey)); | 1072 item_->GetUserData(kDownloadReferrerChainDataKey)); |
1065 if (referrer_chain_data && | 1073 if (referrer_chain_data && |
1066 !referrer_chain_data->GetReferrerChain()->empty()) { | 1074 !referrer_chain_data->GetReferrerChain()->empty()) { |
1067 request.mutable_referrer_chain()->Swap( | 1075 request.mutable_referrer_chain()->Swap( |
1068 referrer_chain_data->GetReferrerChain()); | 1076 referrer_chain_data->GetReferrerChain()); |
1069 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) | 1077 if (type_ == ClientDownloadRequest::SAMPLED_UNSUPPORTED_FILE) |
1070 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( | 1078 SafeBrowsingNavigationObserverManager::SanitizeReferrerChain( |
1071 request.mutable_referrer_chain()); | 1079 request.mutable_referrer_chain()); |
1072 } | 1080 } |
1073 | 1081 |
| 1082 #if defined(OS_MACOSX) |
| 1083 UMA_HISTOGRAM_BOOLEAN( |
| 1084 "SBClientDownload." |
| 1085 "DownloadFileHasDmgSignature", |
| 1086 disk_image_signature_ != nullptr); |
| 1087 |
| 1088 if (disk_image_signature_) { |
| 1089 request.set_udif_code_signature(disk_image_signature_->data(), |
| 1090 disk_image_signature_->size()); |
| 1091 } |
| 1092 #endif |
| 1093 |
1074 if (archive_is_valid_ != ArchiveValid::UNSET) | 1094 if (archive_is_valid_ != ArchiveValid::UNSET) |
1075 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); | 1095 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); |
1076 request.mutable_signature()->CopyFrom(signature_info_); | 1096 request.mutable_signature()->CopyFrom(signature_info_); |
1077 if (image_headers_) | 1097 if (image_headers_) |
1078 request.set_allocated_image_headers(image_headers_.release()); | 1098 request.set_allocated_image_headers(image_headers_.release()); |
1079 if (archived_executable_) | 1099 if (archived_executable_) |
1080 request.mutable_archived_binary()->Swap(&archived_binary_); | 1100 request.mutable_archived_binary()->Swap(&archived_binary_); |
1081 if (!request.SerializeToString(&client_download_request_data_)) { | 1101 if (!request.SerializeToString(&client_download_request_data_)) { |
1082 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); | 1102 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); |
1083 return; | 1103 return; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1259 GURL referrer_url_; | 1279 GURL referrer_url_; |
1260 // URL chain of redirects leading to (but not including) |tab_url|. | 1280 // URL chain of redirects leading to (but not including) |tab_url|. |
1261 std::vector<GURL> tab_redirects_; | 1281 std::vector<GURL> tab_redirects_; |
1262 // URL and referrer of the window the download was started from. | 1282 // URL and referrer of the window the download was started from. |
1263 GURL tab_url_; | 1283 GURL tab_url_; |
1264 GURL tab_referrer_url_; | 1284 GURL tab_referrer_url_; |
1265 | 1285 |
1266 bool archived_executable_; | 1286 bool archived_executable_; |
1267 ArchiveValid archive_is_valid_; | 1287 ArchiveValid archive_is_valid_; |
1268 | 1288 |
| 1289 #if defined(OS_MACOSX) |
| 1290 std::unique_ptr<std::vector<uint8_t>> disk_image_signature_; |
| 1291 #endif |
| 1292 |
1269 ClientDownloadRequest_SignatureInfo signature_info_; | 1293 ClientDownloadRequest_SignatureInfo signature_info_; |
1270 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; | 1294 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; |
1271 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> | 1295 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> |
1272 archived_binary_; | 1296 archived_binary_; |
1273 CheckDownloadCallback callback_; | 1297 CheckDownloadCallback callback_; |
1274 // Will be NULL if the request has been canceled. | 1298 // Will be NULL if the request has been canceled. |
1275 DownloadProtectionService* service_; | 1299 DownloadProtectionService* service_; |
1276 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; | 1300 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; |
1277 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; | 1301 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; |
1278 const bool pingback_enabled_; | 1302 const bool pingback_enabled_; |
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2029 out_request->mutable_referrer_chain()); | 2053 out_request->mutable_referrer_chain()); |
2030 UMA_HISTOGRAM_COUNTS_100( | 2054 UMA_HISTOGRAM_COUNTS_100( |
2031 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", | 2055 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", |
2032 out_request->referrer_chain_size()); | 2056 out_request->referrer_chain_size()); |
2033 UMA_HISTOGRAM_ENUMERATION( | 2057 UMA_HISTOGRAM_ENUMERATION( |
2034 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, | 2058 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, |
2035 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); | 2059 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); |
2036 } | 2060 } |
2037 | 2061 |
2038 } // namespace safe_browsing | 2062 } // namespace safe_browsing |
OLD | NEW |