
This CL is part of the Chrome OS source code directory migration: https://docs.google.com/document/d/1g-98HpzA8XcoGBWUv1gQNr4rbnD5yfvbtYZyPDDbkaE. Change-Id: Ic8ba8bf79d84fc92f34a126f38e930386900d57f Bug: 1164001 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2960289 Commit-Queue: Yeunjoo Choi <ychoi@igalia.com> Reviewed-by: Hidehiko Abe <hidehiko@chromium.org> Owners-Override: Hidehiko Abe <hidehiko@chromium.org> Cr-Commit-Position: refs/heads/master@{#892453}
51 lines
2.6 KiB
Markdown
51 lines
2.6 KiB
Markdown
# D-Bus Mojo Connection Service
|
||
|
||
## Overview
|
||
|
||
D-Bus Mojo Connection Service in Chrome is a D-Bus service that helps to
|
||
bootstrap CrOS services' Mojo connection.
|
||
|
||
## Bootstrap a new CrOS service
|
||
|
||
D-Bus Mojo Connection Service lives in [//chrome/browser/ash/dbus/mojo_connection_service_provider.h](https://chromium.googlesource.com/chromium/src.git/+/main/chrome/browser/ash/dbus/mojo_connection_service_provider.h).
|
||
|
||
Follow the example of CrOS Sensors' [changelist](https://chromium-review.googlesource.com/c/chromium/src/+/2352298).
|
||
|
||
### Steps to Add a usage for a CrOS process with a new D-Bus method:
|
||
1. Add a method name in both CrOS platform and Chrome.
|
||
(Recommend: `platform2/system_api`)
|
||
2. Add the busconfig policy in [MojoConnectionService.conf].
|
||
3. Upon a D-Bus request coming from the CrOS service, pass one endpoint of the
|
||
generated Mojo pipe to the component in Chrome that needs a Mojo channel to
|
||
the CrOS service. Ex: [RegisterServer](https://chromium-review.googlesource.com/c/chromium/src/+/2352298/16/chrome/browser/ash/dbus/mojo_connection_service_provider.cc#74) in CrOS Sensors' usage.
|
||
4. Respond to the D-Bus request with the other endpoint of the generated Mojo
|
||
pipe. (Recommend: use the helper function [SendResponse](https://chromium-review.googlesource.com/c/chromium/src/+/2352298/16/chrome/browser/ash/dbus/mojo_connection_service_provider.h#75))
|
||
|
||
The Mojo pipe can also be generated in the CrOS process, and pass the endpoint
|
||
of it as the D-Bus argument to the service provider, instead of allowing Chrome
|
||
to generate the pipe.
|
||
|
||
### Steps to Add a usage for a CrOS process with an existing D-Bus method:
|
||
1. Add the busconfig policy in [MojoConnectionService.conf].
|
||
|
||
And that’s it. The method name and the logic in the service provider can be
|
||
reused.
|
||
|
||
## Security
|
||
|
||
UID filtering should be used to ensure only the needed processes are calling
|
||
the specific D-Bus methods, as processes/applications calling D-Bus APIs are
|
||
trusted (written and reviewed by Chromium/CrOS teams) and should have a
|
||
well-known UID to be filtered.
|
||
|
||
UID filtering: Define access permission for each UID in
|
||
[MojoConnectionService.conf]. Only the processes run under the specific UIDs can
|
||
send respective D-Bus requests to the service provider.
|
||
|
||
Arguments/tokens in D-Bus methods are still available if needed, which should
|
||
be enough for multi-login situations and handling failures. The arguments can
|
||
also be used to determine if Chromium should accept the request, and which Mojo
|
||
interface should be used to establish the Mojo channel.
|
||
|
||
[MojoConnectionService.conf]: https://chromium.googlesource.com/chromium/src.git/+/main/chrome/browser/ash/dbus/org.chromium.MojoConnectionService.conf
|