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 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 DownloadProtectionService* service, | 343 DownloadProtectionService* service, |
344 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, | 344 const scoped_refptr<SafeBrowsingDatabaseManager>& database_manager, |
345 BinaryFeatureExtractor* binary_feature_extractor) | 345 BinaryFeatureExtractor* binary_feature_extractor) |
346 : item_(item), | 346 : item_(item), |
347 url_chain_(item->GetUrlChain()), | 347 url_chain_(item->GetUrlChain()), |
348 referrer_url_(item->GetReferrerUrl()), | 348 referrer_url_(item->GetReferrerUrl()), |
349 tab_url_(item->GetTabUrl()), | 349 tab_url_(item->GetTabUrl()), |
350 tab_referrer_url_(item->GetTabReferrerUrl()), | 350 tab_referrer_url_(item->GetTabReferrerUrl()), |
351 archived_executable_(false), | 351 archived_executable_(false), |
352 archive_is_valid_(ArchiveValid::UNSET), | 352 archive_is_valid_(ArchiveValid::UNSET), |
| 353 #if defined(OS_MACOSX) |
| 354 disk_image_signature_length_(0), |
| 355 disk_image_signature_(nullptr), |
| 356 #endif |
353 callback_(callback), | 357 callback_(callback), |
354 service_(service), | 358 service_(service), |
355 binary_feature_extractor_(binary_feature_extractor), | 359 binary_feature_extractor_(binary_feature_extractor), |
356 database_manager_(database_manager), | 360 database_manager_(database_manager), |
357 pingback_enabled_(service_->enabled()), | 361 pingback_enabled_(service_->enabled()), |
358 finished_(false), | 362 finished_(false), |
359 type_(ClientDownloadRequest::WIN_EXECUTABLE), | 363 type_(ClientDownloadRequest::WIN_EXECUTABLE), |
360 start_time_(base::TimeTicks::Now()), | 364 start_time_(base::TimeTicks::Now()), |
361 skipped_url_whitelist_(false), | 365 skipped_url_whitelist_(false), |
362 skipped_certificate_whitelist_(false), | 366 skipped_certificate_whitelist_(false), |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 dmg_analyzer_->Start(); | 782 dmg_analyzer_->Start(); |
779 dmg_analysis_start_time_ = base::TimeTicks::Now(); | 783 dmg_analysis_start_time_ = base::TimeTicks::Now(); |
780 } | 784 } |
781 | 785 |
782 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { | 786 void OnDmgAnalysisFinished(const ArchiveAnalyzerResults& results) { |
783 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 787 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
784 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); | 788 DCHECK_EQ(ClientDownloadRequest::MAC_EXECUTABLE, type_); |
785 if (!service_) | 789 if (!service_) |
786 return; | 790 return; |
787 | 791 |
| 792 #if defined(OS_MACOSX) |
| 793 disk_image_signature_length_ = results.signature_blob.size(); |
| 794 if (disk_image_signature_length_ > 0) { |
| 795 disk_image_signature_ = |
| 796 std::unique_ptr<uint8_t[]>(new uint8_t[disk_image_signature_length_]); |
| 797 memcpy(disk_image_signature_.get(), results.signature_blob.data(), |
| 798 disk_image_signature_length_); |
| 799 } |
| 800 #endif |
| 801 |
788 // Even if !results.success, some of the DMG may have been parsed. | 802 // Even if !results.success, some of the DMG may have been parsed. |
789 archive_is_valid_ = | 803 archive_is_valid_ = |
790 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); | 804 (results.success ? ArchiveValid::VALID : ArchiveValid::INVALID); |
791 archived_executable_ = results.has_executable; | 805 archived_executable_ = results.has_executable; |
792 archived_binary_.CopyFrom(results.archived_binary); | 806 archived_binary_.CopyFrom(results.archived_binary); |
793 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() | 807 DVLOG(1) << "DMG analysis has finished for " << item_->GetFullPath().value() |
794 << ", has_executable=" << results.has_executable | 808 << ", has_executable=" << results.has_executable |
795 << ", success=" << results.success; | 809 << ", success=" << results.success; |
796 | 810 |
797 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( | 811 int64_t uma_file_type = FileTypePolicies::GetInstance()->UmaValueForFile( |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1029 | 1043 |
1030 ReferrerChainData* referrer_chain_data = | 1044 ReferrerChainData* referrer_chain_data = |
1031 static_cast<ReferrerChainData*>( | 1045 static_cast<ReferrerChainData*>( |
1032 item_->GetUserData(kDownloadReferrerChainDataKey)); | 1046 item_->GetUserData(kDownloadReferrerChainDataKey)); |
1033 if (referrer_chain_data && | 1047 if (referrer_chain_data && |
1034 !referrer_chain_data->GetReferrerChain()->empty()) { | 1048 !referrer_chain_data->GetReferrerChain()->empty()) { |
1035 request.mutable_referrer_chain()->Swap( | 1049 request.mutable_referrer_chain()->Swap( |
1036 referrer_chain_data->GetReferrerChain()); | 1050 referrer_chain_data->GetReferrerChain()); |
1037 } | 1051 } |
1038 | 1052 |
| 1053 // TODO(mortonm): add UMA stats to keep track of % of DMG use new format |
| 1054 #if defined(OS_MACOSX) |
| 1055 if (disk_image_signature_length_ > 0) { |
| 1056 request.set_udif_code_signature(disk_image_signature_.get(), |
| 1057 disk_image_signature_length_); |
| 1058 } |
| 1059 #endif |
| 1060 |
1039 if (archive_is_valid_ != ArchiveValid::UNSET) | 1061 if (archive_is_valid_ != ArchiveValid::UNSET) |
1040 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); | 1062 request.set_archive_valid(archive_is_valid_ == ArchiveValid::VALID); |
1041 request.mutable_signature()->CopyFrom(signature_info_); | 1063 request.mutable_signature()->CopyFrom(signature_info_); |
1042 if (image_headers_) | 1064 if (image_headers_) |
1043 request.set_allocated_image_headers(image_headers_.release()); | 1065 request.set_allocated_image_headers(image_headers_.release()); |
1044 if (archived_executable_) | 1066 if (archived_executable_) |
1045 request.mutable_archived_binary()->Swap(&archived_binary_); | 1067 request.mutable_archived_binary()->Swap(&archived_binary_); |
1046 if (!request.SerializeToString(&client_download_request_data_)) { | 1068 if (!request.SerializeToString(&client_download_request_data_)) { |
1047 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); | 1069 FinishRequest(UNKNOWN, REASON_INVALID_REQUEST_PROTO); |
1048 return; | 1070 return; |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1224 GURL referrer_url_; | 1246 GURL referrer_url_; |
1225 // URL chain of redirects leading to (but not including) |tab_url|. | 1247 // URL chain of redirects leading to (but not including) |tab_url|. |
1226 std::vector<GURL> tab_redirects_; | 1248 std::vector<GURL> tab_redirects_; |
1227 // URL and referrer of the window the download was started from. | 1249 // URL and referrer of the window the download was started from. |
1228 GURL tab_url_; | 1250 GURL tab_url_; |
1229 GURL tab_referrer_url_; | 1251 GURL tab_referrer_url_; |
1230 | 1252 |
1231 bool archived_executable_; | 1253 bool archived_executable_; |
1232 ArchiveValid archive_is_valid_; | 1254 ArchiveValid archive_is_valid_; |
1233 | 1255 |
| 1256 #if defined(OS_MACOSX) |
| 1257 uint64_t disk_image_signature_length_; |
| 1258 std::unique_ptr<uint8_t[]> disk_image_signature_; |
| 1259 #endif |
| 1260 |
1234 ClientDownloadRequest_SignatureInfo signature_info_; | 1261 ClientDownloadRequest_SignatureInfo signature_info_; |
1235 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; | 1262 std::unique_ptr<ClientDownloadRequest_ImageHeaders> image_headers_; |
1236 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> | 1263 google::protobuf::RepeatedPtrField<ClientDownloadRequest_ArchivedBinary> |
1237 archived_binary_; | 1264 archived_binary_; |
1238 CheckDownloadCallback callback_; | 1265 CheckDownloadCallback callback_; |
1239 // Will be NULL if the request has been canceled. | 1266 // Will be NULL if the request has been canceled. |
1240 DownloadProtectionService* service_; | 1267 DownloadProtectionService* service_; |
1241 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; | 1268 scoped_refptr<BinaryFeatureExtractor> binary_feature_extractor_; |
1242 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; | 1269 scoped_refptr<SafeBrowsingDatabaseManager> database_manager_; |
1243 const bool pingback_enabled_; | 1270 const bool pingback_enabled_; |
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1991 out_request->mutable_referrer_chain()); | 2018 out_request->mutable_referrer_chain()); |
1992 UMA_HISTOGRAM_COUNTS_100( | 2019 UMA_HISTOGRAM_COUNTS_100( |
1993 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", | 2020 "SafeBrowsing.ReferrerURLChainSize.PPAPIDownloadAttribution", |
1994 out_request->referrer_chain_size()); | 2021 out_request->referrer_chain_size()); |
1995 UMA_HISTOGRAM_ENUMERATION( | 2022 UMA_HISTOGRAM_ENUMERATION( |
1996 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, | 2023 "SafeBrowsing.ReferrerAttributionResult.PPAPIDownloadAttribution", result, |
1997 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); | 2024 SafeBrowsingNavigationObserverManager::ATTRIBUTION_FAILURE_TYPE_MAX); |
1998 } | 2025 } |
1999 | 2026 |
2000 } // namespace safe_browsing | 2027 } // namespace safe_browsing |
OLD | NEW |