// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Utilities for the SafeBrowsing download protection code. #ifndef CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_PROTECTION_DOWNLOAD_PROTECTION_UTIL_H_ #define CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_PROTECTION_DOWNLOAD_PROTECTION_UTIL_H_ #include "base/callback_list.h" #include "components/download/public/common/download_danger_type.h" #include "components/download/public/common/download_item.h" #include "components/safe_browsing/content/browser/safe_browsing_navigation_observer_manager.h" #include "components/safe_browsing/core/browser/download_check_result.h" #include "components/safe_browsing/core/common/proto/csd.pb.h" #include "content/public/browser/file_system_access_write_item.h" #include "net/cert/x509_certificate.h" namespace safe_browsing { // Enum to keep track why a particular download verdict was chosen. // Used for UMA metrics. Do not reorder. // // The UMA enum is called SBClientDownloadCheckDownloadStats. enum DownloadCheckResultReason { … }; // Enumerate for histogramming purposes. // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will // be mixed together based on their values). enum SBStatsType { … }; enum AllowlistType { … }; // Enum for events related to the deep scanning of a download. These values // are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class DeepScanEvent { … }; void LogDeepScanEvent(download::DownloadItem* item, DeepScanEvent event); void LogLocalDecryptionEvent(DeepScanEvent event); // Callback type which is invoked once the download request is done. CheckDownloadCallback; // Callback type which is invoked once the download request is done. This is // used in cases where asynchronous scanning is allowed, so the callback is // triggered multiple times (once when asynchronous scanning begins, once when // the final result is ready). CheckDownloadRepeatingCallback; // Callbacks run on the main thread when a ClientDownloadRequest has // been formed for a download, or when one has not been formed for a supported // download. ClientDownloadRequestCallbackList; ClientDownloadRequestCallback; // Callbacks run on the main thread when a FileSystemAccessWriteRequest has been // formed for a write operation. FileSystemAccessWriteRequestCallbackList; FileSystemAccessWriteRequestCallback; // Callbacks run on the main thread when a PPAPI ClientDownloadRequest has been // formed for a download. PPAPIDownloadRequestCallbackList; PPAPIDownloadRequestCallback; // Given a certificate and its immediate issuer certificate, generates the // list of strings that need to be checked against the download allowlist to // determine whether the certificate is allowlisted. void GetCertificateAllowlistStrings( const net::X509Certificate& certificate, const net::X509Certificate& issuer, std::vector<std::string>* allowlist_strings); GURL GetFileSystemAccessDownloadUrl(const GURL& frame_url); // Determine which entries from `src_binaries` should be sent in the download // ping. google::protobuf::RepeatedPtrField<ClientDownloadRequest::ArchivedBinary> SelectArchiveEntries(const google::protobuf::RepeatedPtrField< ClientDownloadRequest::ArchivedBinary>& src_binaries); // Identify referrer chain info of a download. This function also // records UMA stats of download attribution result. The referrer chain // will include at most `user_gesture_limit` user gestures. std::unique_ptr<ReferrerChainData> IdentifyReferrerChain( const download::DownloadItem& item, int user_gesture_limit); // Identify referrer chain info of a File System Access write. This // function also records UMA stats of download attribution result. The // referrer chain will include at most `user_gesture_limit` user // gestures. std::unique_ptr<ReferrerChainData> IdentifyReferrerChain( const content::FileSystemAccessWriteItem& item, int user_gesture_limit); } // namespace safe_browsing #endif // CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_PROTECTION_DOWNLOAD_PROTECTION_UTIL_H_