#include "chrome/browser/enterprise/connectors/analysis/files_request_handler.h"
#include "base/check_op.h"
#include "base/files/file_path.h"
#include "base/files/scoped_file.h"
#include "base/functional/bind.h"
#include "base/memory/ptr_util.h"
#include "base/no_destructor.h"
#include "base/not_fatal_until.h"
#include "base/ranges/algorithm.h"
#include "chrome/browser/enterprise/connectors/common.h"
#include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/file_opening_job.h"
#include "components/file_access/scoped_file_access.h"
#include "components/file_access/scoped_file_access_delegate.h"
#include "components/safe_browsing/content/browser/web_ui/safe_browsing_ui.h"
namespace enterprise_connectors {
namespace {
FilesRequestHandler::Factory* GetFactoryStorage() { … }
AnalysisConnector AccessPointToEnterpriseConnector(
safe_browsing::DeepScanAccessPoint access_point) { … }
std::string AccessPointToTriggerString(
safe_browsing::DeepScanAccessPoint access_point) { … }
}
FilesRequestHandler::FileInfo::FileInfo() = default;
FilesRequestHandler::FileInfo::FileInfo(FileInfo&& other) = default;
FilesRequestHandler::FileInfo::~FileInfo() = default;
FilesRequestHandler::FilesRequestHandler(
safe_browsing::BinaryUploadService* upload_service,
Profile* profile,
const enterprise_connectors::AnalysisSettings& analysis_settings,
GURL url,
const std::string& source,
const std::string& destination,
const std::string& user_action_id,
const std::string& tab_title,
const std::string& content_transfer_method,
safe_browsing::DeepScanAccessPoint access_point,
ContentAnalysisRequest::Reason reason,
const std::vector<base::FilePath>& paths,
CompletionCallback callback)
: … { … }
std::unique_ptr<FilesRequestHandler> FilesRequestHandler::Create(
safe_browsing::BinaryUploadService* upload_service,
Profile* profile,
const enterprise_connectors::AnalysisSettings& analysis_settings,
GURL url,
const std::string& source,
const std::string& destination,
const std::string& user_action_id,
const std::string& tab_title,
const std::string& content_transfer_method,
safe_browsing::DeepScanAccessPoint access_point,
ContentAnalysisRequest::Reason reason,
const std::vector<base::FilePath>& paths,
CompletionCallback callback) { … }
void FilesRequestHandler::SetFactoryForTesting(Factory factory) { … }
void FilesRequestHandler::ResetFactoryForTesting() { … }
FilesRequestHandler::~FilesRequestHandler() = default;
void FilesRequestHandler::ReportWarningBypass(
std::optional<std::u16string> user_justification) { … }
void FilesRequestHandler::FileRequestCallbackForTesting(
base::FilePath path,
safe_browsing::BinaryUploadService::Result result,
enterprise_connectors::ContentAnalysisResponse response) { … }
bool FilesRequestHandler::UploadDataImpl() { … }
safe_browsing::FileAnalysisRequest* FilesRequestHandler::PrepareFileRequest(
size_t index) { … }
void FilesRequestHandler::OnGotFileInfo(
std::unique_ptr<safe_browsing::BinaryUploadService::Request> request,
size_t index,
safe_browsing::BinaryUploadService::Result result,
safe_browsing::BinaryUploadService::Request::Data data) { … }
void FilesRequestHandler::FinishRequestEarly(
std::unique_ptr<safe_browsing::BinaryUploadService::Request> request,
safe_browsing::BinaryUploadService::Result result) { … }
void FilesRequestHandler::UploadFileForDeepScanning(
safe_browsing::BinaryUploadService::Result result,
const base::FilePath& path,
std::unique_ptr<safe_browsing::BinaryUploadService::Request> request) { … }
void FilesRequestHandler::FileRequestStartCallback(
size_t index,
const safe_browsing::BinaryUploadService::Request& request) { … }
void FilesRequestHandler::FileRequestCallback(
size_t index,
safe_browsing::BinaryUploadService::Result upload_result,
enterprise_connectors::ContentAnalysisResponse response) { … }
void FilesRequestHandler::MaybeCompleteScanRequest() { … }
void FilesRequestHandler::CreateFileOpeningJob(
std::vector<safe_browsing::FileOpeningJob::FileOpeningTask> tasks,
file_access::ScopedFileAccess file_access) { … }
}