1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ENTERPRISE_BROWSER_REPORTING_REAL_TIME_UPLOADER_H_
#define COMPONENTS_ENTERPRISE_BROWSER_REPORTING_REAL_TIME_UPLOADER_H_
#include "base/memory/weak_ptr.h"
#include "base/task/sequenced_task_runner.h"
#include "base/threading/thread_checker.h"
#include "components/reporting/client/report_queue_provider.h"
namespace enterprise_reporting {
// A helper class to upload real time reports with ERP. It needs to be created
// and used on the main thread.
class RealTimeUploader {
public:
using EnqueueCallback = base::OnceCallback<void(bool)>;
static std::unique_ptr<RealTimeUploader> Create(
const std::string& dm_token,
reporting::Destination destination,
reporting::Priority priority);
RealTimeUploader(const RealTimeUploader&) = delete;
RealTimeUploader& operator=(const RealTimeUploader&) = delete;
virtual ~RealTimeUploader();
// Uploads the |report|. This API must be called after CreateReportQueue().
// However, the caller doesn't have to wait for async queue creation. The
// reports that are added before queue is ready will be cached and sent out
// afterwards.
// The |callback| will be called once the report is in the queue. There is no
// callback for report uploading.
virtual void Upload(std::unique_ptr<google::protobuf::MessageLite> report,
EnqueueCallback callback);
reporting::ReportQueue* GetReportQueue() const;
protected:
explicit RealTimeUploader(reporting::Priority priority);
// Creates the reporting::ReportQueue.
void CreateReportQueue(const std::string& dm_token,
reporting::Destination destination);
private:
void OnReportEnqueued(EnqueueCallback callback, reporting::Status status);
std::unique_ptr<reporting::ReportQueue, base::OnTaskRunnerDeleter>
report_queue_;
const reporting::Priority report_priority_;
THREAD_CHECKER(thread_checker_);
base::WeakPtrFactory<RealTimeUploader> weak_factory_{this};
};
} // namespace enterprise_reporting
#endif // COMPONENTS_ENTERPRISE_BROWSER_REPORTING_REAL_TIME_UPLOADER_H_
|