# src/chromeos/dbus
This directory contains client libraries for communication with Chrome OS
system service daemons over D-Bus.
For more information, see [Chrome OS D-Bus Usage in Chrome].
## D-Bus Client Best Practices
An example of a relatively simple client using existing patterns can be found
in [src/chromeos/dbus/dlp].
* Create a subdirectory under `src/chromeos/dbus` for new clients or use an
existing directory. If a new client is ash-specific, create a subdirectory
under `src/chromeos/ash/components/dbus`. Do not add new clients to this
directory. If Lacros wants to talk to D-Bus service, the default
recommendation is to build a crosapi class in ash proxying requests to the
D-Bus service, then let lacros talk to ash. If you need direct communication
from lacros to the D-Bus service, please be consulted by lacros-team@.
* D-Bus clients are explicitly initialized and shut down. They provide a
static getter for the single global instance. In Ash Chrome, initialization
occurs in [ash_dbus_helper.cc]. In Lacros Chrome, initialization occurs in
[lacros_dbus_helper.cc].
* Be careful when providing access to multiple processes (e.g. Ash Chrome and
Lacros Chrome). Not all of the underlying daemons support multiple clients.
* For new clients, if test methods are required, create a `TestInterface` in
the base class with a virtual `GetTestInterface()` method and implement it
only in the fake (return null in the real implementation). See
[src/chromeos/dbus/dlp] for an example.
(Many existing clients provide additional test functionality in the fake
implementation, however this complicates tests and the fake implementation).
* These clients do not have any dependency on FeatureList, and care should be
taken regarding initialization order if such dependencies are added (see
BluezDBusManager for an example of such client).
## Older clients that have been removed:
* Amplifier (`amplifier_client.cc`)
* Audio DSP (`audio_dsp_client.cc`)
* Introspection (`introspectable_client.cc`)
* NFC (`nfc_manager_client.cc`)
* peerd (`peer_daemon_manager_client.cc`)
* privetd (`privet_daemon_manager_client.cc`)
* Wi-Fi AP manager (`ap_manager_client.cc`)
[Chrome OS D-Bus Usage in Chrome]: https://chromium.googlesource.com/chromiumos/docs/+/main/dbus_in_chrome.md
[src/chromeos/dbus/dlp]: https://chromium.googlesource.com/chromium/src/+/HEAD/chromeos/dbus/dlp
[ash_dbus_helper.cc]: https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/ash/dbus/ash_dbus_helper.cc
[lacros_dbus_helper.cc]: https://chromium.googlesource.com/chromium/src/+/HEAD/chromeos/lacros/lacros_dbus_helper.cc
[ash_service.cc]: https://chromium.googlesource.com/chromium/src/+/HEAD/ash/ash_service.cc