| // Copyright 2021 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MISSIVE_DBUS_UPLOAD_CLIENT_H_ |
| #define MISSIVE_DBUS_UPLOAD_CLIENT_H_ |
| |
| #include <optional> |
| #include <vector> |
| |
| #include <base/functional/callback.h> |
| #include <base/memory/ref_counted_delete_on_sequence.h> |
| #include <base/memory/scoped_refptr.h> |
| #include <base/task/sequenced_task_runner.h> |
| #include <dbus/bus.h> |
| |
| #include "missive/health/health_module.h" |
| #include "missive/proto/interface.pb.h" |
| #include "missive/proto/record.pb.h" |
| #include "missive/util/statusor.h" |
| |
| namespace reporting { |
| |
| // Abstract base class for upload client implementation and use. |
| // Derived from RefCountedDeleteOnSequence in order to allow weak pointers usage |
| // with it (weak pointer factory needs to be deleted on the same thread the weak |
| // pointers are dereferenced). |
| class UploadClient : public base::RefCountedDeleteOnSequence<UploadClient> { |
| public: |
| // The requestor will receive a response to their UploadEncryptedRequest via |
| // the HandleUploadResponseCallback. |
| using HandleUploadResponseCallback = |
| base::OnceCallback<void(StatusOr<UploadEncryptedRecordResponse>)>; |
| |
| // Factory method for asynchronously creating a UploadClient on |
| // bus->OriginThread. |
| static void Create( |
| scoped_refptr<dbus::Bus> bus, |
| base::OnceCallback<void(StatusOr<scoped_refptr<UploadClient>>)> cb); |
| |
| // Utilizes DBus to send a list of encrypted records to Chrome. Caller can |
| // expect a response via the `response_callback`. |
| // `records` may be an empty vector, `need_encryption_key` is true or false, |
| // regardless of `records`, `health_data` is only provided if health module is |
| // in debugging state (it is not counted towards |
| // `remaining_storage_capacity`). |
| virtual void SendEncryptedRecords( |
| std::vector<EncryptedRecord> records, |
| bool need_encryption_keys, |
| scoped_refptr<HealthModule> health_module, |
| uint64_t remaining_storage_capacity, |
| std::optional<uint64_t> new_events_rate, |
| HandleUploadResponseCallback response_callback) = 0; |
| |
| protected: |
| explicit UploadClient(scoped_refptr<base::SequencedTaskRunner> task_runner) |
| : base::RefCountedDeleteOnSequence<UploadClient>(task_runner) {} |
| virtual ~UploadClient() = default; |
| |
| private: |
| friend class base::RefCountedDeleteOnSequence<UploadClient>; |
| friend class base::DeleteHelper<UploadClient>; |
| }; |
| } // namespace reporting |
| |
| #endif // MISSIVE_DBUS_UPLOAD_CLIENT_H_ |