chromium/chromeos/dbus/init/dbus_thread_manager_base.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_INIT_DBUS_THREAD_MANAGER_BASE_H_
#define CHROMEOS_DBUS_INIT_DBUS_THREAD_MANAGER_BASE_H_

#include <memory>

#include "base/component_export.h"
#include "base/memory/ref_counted.h"

namespace base {
class Thread;
}  // namespace base

namespace dbus {
class Bus;
}  // namespace dbus

namespace chromeos {

// DBusThreadManagerBase manages the D-Bus thread (the thread dedicated to
// handling asynchronous D-Bus operations) and the D-Bus connection.

// Derived classes and callers are responsible for managing D-Bus clients (which
// depend on the D-Bus thread), and need to ensure that D-Bus clients shut down
// before the D-Bus connection closes and the D-Bus thread stops in
// ~DBusThreadManagerBase().
class COMPONENT_EXPORT(CHROMEOS_DBUS_INIT) DBusThreadManagerBase {
 public:
  // Returns true if clients are faked.
  bool IsUsingFakes();

  // Returns various D-Bus bus instances, owned by DBusThreadManager.
  dbus::Bus* GetSystemBus();

 protected:
  DBusThreadManagerBase();
  DBusThreadManagerBase(const DBusThreadManagerBase&) = delete;
  const DBusThreadManagerBase& operator=(const DBusThreadManagerBase&) = delete;
  virtual ~DBusThreadManagerBase();

 private:
  // Whether to use real or fake dbus clients.
  const bool use_real_clients_;

  std::unique_ptr<base::Thread> dbus_thread_;
  scoped_refptr<dbus::Bus> system_bus_;
};

}  // namespace chromeos

#endif  // CHROMEOS_DBUS_INIT_DBUS_THREAD_MANAGER_BASE_H_