Chrome OS D-Bus
D-Bus用于在Chrome OS上执行进程间通信。本文档介绍如何使用D-Bus在Chrome和系统守护(daemon)程序之间进行通信。
共享常量(Sharing constants)
system_api
库包含了C++常量和协议缓冲器( protocol buffer)的.proto
文件,这些文件在浏览器(chrome)和系统(chrome OS)
之间进行共享数据。这包括D-Bus服务名称,路径和接口,信号和方法名称以及作为D-Bus参数传递的枚举值。系统守护程序基本上
总是使用最新版本的存储库,而Chrome使用src / DEPS中指定的修订版。在使用新常量或删除已弃用的常量时要小心。要创建更新
以将Chrome使用的版本更新为ToT,请运行roll-dep src/third_party/cros_system_api。
创建Chrome D-Bus服务
接收方法调用或发出信号需要注册服务。Chrome使用各种服务名称注册服务,包括org.chromium.DisplayService
和org.chromium.NetworkProxyService。
服务实现了chromeos::CrosDBusService::ServiceProviderInterface
接口。
代码位置
mus + ash
(发音为“mustash”)是一个将chrome的shell/window management代码(/ash)与chrome浏览器代码(/chrome)分开的项目。
优点是浏览器之外的系统组件的性能隔离,以及哪些组件被视为ChromeOS UX的一部分以及浏览器的一部分之间的界限。mus + ash建立
在Mandoline UI Service(“Mus”)和Ash系统UI和窗口管理器之上。如果服务不依赖于任何//chrome
目录下的浏览器代码,则提供该服务的
类应该存放在ash/dbus目录下,并且被ash_dbus_services.cc
实例化
依赖于/chrome
实现的服务应该在chrome/browser/chromeos/dbus
中实现,并由chrome_browser_main_chromeos.cc
实例化。
策略文件(Policy files)
为了使Chrome能够获得服务名称的所有权以及其他进程能够调用其方法,每个服务在ash/dbus
或chrome/browser/chromeos/dbus
都有
一个后缀名为.conf
的XML策略文件。这些规则文件被dbus-daemon
服务加载,并指定那些unix用户可以拥有服务名称或调用服务的方法。
chrome的策略文件安装在/opt/google/chrome/dbus
目录下,并且必须列在dbus_service_files
目标下(在 ash/BUILD.gn或 chrome/browser/chromeos/BUILD.gn中)中。
使用系统守护进程的D-Bus服务
chrome使用在chromeos/dbus下的Client类调用系统守护进程的方法或检测信号。
Client 类都属于chromeos::DBusClientCommon和chromeos::DBusClientsBrowser,这两个类都属于chromeos::DBusThreadManager。