| // 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. |
| |
| #include "chromeos/dbus/missive/missive_storage_module.h" |
| |
| #include <utility> |
| |
| #include "base/functional/bind.h" |
| #include "base/functional/callback.h" |
| #include "base/logging.h" |
| #include "base/memory/ptr_util.h" |
| #include "base/task/bind_post_task.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/util/status.h" |
| |
| namespace chromeos { |
| |
| MissiveStorageModule::MissiveStorageModule(MissiveClient* missive_client) |
| : add_record_action_(base::BindPostTask( |
| missive_client->origin_task_runner(), |
| base::BindRepeating(&MissiveClient::EnqueueRecord, |
| missive_client->GetWeakPtr()))), |
| flush_action_(base::BindPostTask( |
| missive_client->origin_task_runner(), |
| base::BindRepeating(&MissiveClient::Flush, |
| missive_client->GetWeakPtr()))) {} |
| |
| MissiveStorageModule::~MissiveStorageModule() = default; |
| |
| // static |
| void MissiveStorageModule::Create( |
| base::OnceCallback<void(::reporting::StatusOr<scoped_refptr< |
| ::reporting::StorageModuleInterface>>)> cb) { |
| MissiveClient* const missive_client = MissiveClient::Get(); |
| if (!missive_client) { |
| std::move(cb).Run(base::unexpected(::reporting::Status( |
| ::reporting::error::FAILED_PRECONDITION, |
| "Missive Client unavailable, probably has not been initialized"))); |
| return; |
| } |
| // Refer to the storage module. |
| auto missive_storage_module = |
| base::WrapRefCounted(new MissiveStorageModule(missive_client)); |
| LOG(WARNING) << "Store reporting data by a Missive daemon"; |
| std::move(cb).Run(missive_storage_module); |
| return; |
| } |
| |
| void MissiveStorageModule::AddRecord(::reporting::Priority priority, |
| ::reporting::Record record, |
| EnqueueCallback callback) { |
| add_record_action_.Run(priority, std::move(record), std::move(callback)); |
| } |
| |
| void MissiveStorageModule::Flush(::reporting::Priority priority, |
| FlushCallback callback) { |
| flush_action_.Run(priority, std::move(callback)); |
| } |
| } // namespace chromeos |