#include "chrome/browser/policy/messaging_layer/upload/record_handler_impl.h"
#include <cstddef>
#include <cstdint>
#include <memory>
#include <utility>
#include <vector>
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/memory/scoped_refptr.h"
#include "base/metrics/histogram_functions.h"
#include "base/sequence_checker.h"
#include "base/task/bind_post_task.h"
#include "base/task/sequenced_task_runner.h"
#include "base/thread_annotations.h"
#include "base/types/expected.h"
#include "base/types/expected_macros.h"
#include "chrome/browser/enterprise/browser_management/management_service_factory.h"
#include "chrome/browser/policy/messaging_layer/proto/synced/log_upload_event.pb.h"
#include "chrome/browser/policy/messaging_layer/upload/event_upload_size_controller.h"
#include "chrome/browser/policy/messaging_layer/upload/file_upload_job.h"
#include "chrome/browser/policy/messaging_layer/upload/record_upload_request_builder.h"
#include "chrome/browser/policy/messaging_layer/upload/server_uploader.h"
#include "chrome/browser/policy/messaging_layer/util/reporting_server_connector.h"
#include "chrome/browser/policy/messaging_layer/util/upload_declarations.h"
#include "chrome/browser/policy/messaging_layer/util/upload_response_parser.h"
#include "components/reporting/proto/synced/configuration_file.pb.h"
#include "components/reporting/proto/synced/upload_tracker.pb.h"
#include "components/reporting/resources/resource_manager.h"
#include "components/reporting/util/status.h"
#include "components/reporting/util/status_macros.h"
#include "components/reporting/util/statusor.h"
#include "components/reporting/util/task_runner_context.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
namespace reporting {
namespace {
void ProcessFileUpload(
Priority priority,
Record record_copy,
const ScopedReservation& scoped_reservation,
base::RepeatingCallback<FileUploadJob::Delegate::SmartPtr()>
delegate_factory,
base::OnceCallback<void(Status)> done_cb) { … }
}
class RecordHandlerImpl::ReportUploader
: public TaskRunnerContext<CompletionResponse> { … };
RecordHandlerImpl::ReportUploader::ReportUploader(
bool need_encryption_key,
int config_file_version,
std::vector<EncryptedRecord> records,
ScopedReservation scoped_reservation,
base::RepeatingCallback<FileUploadJob::Delegate::SmartPtr()>
delegate_factory,
UploadEnqueuedCallback enqueued_cb,
CompletionCallback completion_cb,
EncryptionKeyAttachedCallback encryption_key_attached_cb,
ConfigFileAttachedCallback config_file_attached_cb,
scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner)
: … { … }
RecordHandlerImpl::ReportUploader::~ReportUploader() = default;
void RecordHandlerImpl::ReportUploader::OnStart() { … }
void RecordHandlerImpl::ReportUploader::OnCompletion(
const CompletionResponse& result) { … }
void RecordHandlerImpl::ReportUploader::StartUpload() { … }
void RecordHandlerImpl::ReportUploader::ResumeUpload(size_t next_record) { … }
void RecordHandlerImpl::ReportUploader::UploadRequest(size_t next_record) { … }
void RecordHandlerImpl::ReportUploader::OnUploadComplete(
StatusOr<UploadResponseParser> response_result) { … }
void RecordHandlerImpl::ReportUploader::Complete(
CompletionResponse completion_result) { … }
RecordHandlerImpl::RecordHandlerImpl(
scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner,
base::RepeatingCallback<FileUploadJob::Delegate::SmartPtr()>
delegate_factory)
: … { … }
RecordHandlerImpl::~RecordHandlerImpl() = default;
void RecordHandlerImpl::HandleRecords(
bool need_encryption_key,
int config_file_version,
std::vector<EncryptedRecord> records,
ScopedReservation scoped_reservation,
UploadEnqueuedCallback enqueued_cb,
CompletionCallback upload_complete_cb,
EncryptionKeyAttachedCallback encryption_key_attached_cb,
ConfigFileAttachedCallback config_file_attached_cb) { … }
}