chromium/chromeos/dbus/missive/fake_missive_client.h

// 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 CHROMEOS_DBUS_MISSIVE_FAKE_MISSIVE_CLIENT_H_
#define CHROMEOS_DBUS_MISSIVE_FAKE_MISSIVE_CLIENT_H_

#include <vector>

#include "base/containers/flat_map.h"
#include "base/functional/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/task/sequenced_task_runner.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"

namespace chromeos {

// Fake implementation of MissiveClient. This is currently a no-op fake.
class COMPONENT_EXPORT(MISSIVE) FakeMissiveClient
    : public MissiveClient,
      public MissiveClient::TestInterface {
 public:
  FakeMissiveClient();
  ~FakeMissiveClient() override;

  FakeMissiveClient(const FakeMissiveClient& other) = delete;
  FakeMissiveClient& operator=(const FakeMissiveClient& other) = delete;

  void Init();

  // MissiveClient implementation:
  void EnqueueRecord(
      const reporting::Priority priority,
      reporting::Record record,
      base::OnceCallback<void(reporting::Status)> completion_callback) override;
  void Flush(
      const reporting::Priority priority,
      base::OnceCallback<void(reporting::Status)> completion_callback) override;
  void UpdateEncryptionKey(
      const reporting::SignedEncryptionInfo& encryption_info) override;
  void UpdateConfigInMissive(
      const reporting::ListOfBlockedDestinations& destinations) override;
  void ReportSuccess(const reporting::SequenceInformation& sequence_information,
                     bool force_confirm) override;
  TestInterface* GetTestInterface() override;
  base::WeakPtr<MissiveClient> GetWeakPtr() override;

  // |MissiveClient::TestInterface| implementation:
  const std::vector<::reporting::Record>& GetEnqueuedRecords(
      ::reporting::Priority priority) override;
  void AddObserver(Observer* observer) override;
  void RemoveObserver(Observer* observer) override;

 private:
  base::flat_map<::reporting::Priority, std::vector<::reporting::Record>>
      enqueued_records_;
  base::ObserverList<Observer> observer_list_;

  // Weak pointer factory - must be last member of the class.
  base::WeakPtrFactory<FakeMissiveClient> weak_ptr_factory_{this};
};

}  // namespace chromeos

#endif  // CHROMEOS_DBUS_MISSIVE_FAKE_MISSIVE_CLIENT_H_