// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_DBUS_MISSIVE_MISSIVE_STORAGE_MODULE_H_
#define CHROMEOS_DBUS_MISSIVE_MISSIVE_STORAGE_MODULE_H_
#include "base/component_export.h"
#include "base/functional/callback.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_refptr.h"
#include "chromeos/dbus/missive/missive_client.h"
#include "components/reporting/proto/synced/record.pb.h"
#include "components/reporting/proto/synced/record_constants.pb.h"
#include "components/reporting/storage/storage_module_interface.h"
#include "components/reporting/util/status.h"
#include "components/reporting/util/statusor.h"
namespace chromeos {
// MissiveStorageModule is a `StorageModuleInterface` implementation that
// channels enqueue and flush calls to `MissiveClient`.
class COMPONENT_EXPORT(MISSIVE) MissiveStorageModule
: public ::reporting::StorageModuleInterface {
public:
// Factory method asynchronously creates `MissiveStorageModule` object.
static void Create(
base::OnceCallback<void(::reporting::StatusOr<scoped_refptr<
::reporting::StorageModuleInterface>>)> cb);
MissiveStorageModule(const MissiveStorageModule& other) = delete;
MissiveStorageModule& operator=(const MissiveStorageModule& other) = delete;
private:
friend base::RefCountedThreadSafe<MissiveStorageModule>;
// Constructor can only be called by `Create` factory method.
explicit MissiveStorageModule(MissiveClient* missive_client);
// Refcounted object must have destructor declared protected or private.
~MissiveStorageModule() override;
// Calls `MissiveClient::EnqueueRecord` forwarding the arguments.
void AddRecord(::reporting::Priority priority,
::reporting::Record record,
EnqueueCallback callback) override;
// Calls `MissiveClient::Flush` to initiate upload of collected records
// according to the priority. Called usually for a queue with an infinite or
// very large upload period. Multiple `Flush` calls can safely run in
// parallel. Returns error if cannot start upload.
void Flush(::reporting::Priority priority, FlushCallback callback) override;
const base::RepeatingCallback<void(::reporting::Priority,
::reporting::Record,
MissiveStorageModule::EnqueueCallback)>
add_record_action_;
const base::RepeatingCallback<void(::reporting::Priority,
MissiveStorageModule::FlushCallback)>
flush_action_;
};
} // namespace chromeos
#endif // CHROMEOS_DBUS_MISSIVE_MISSIVE_STORAGE_MODULE_H_