Chromium进程间通信Mojo chromium中使用


发布于 2020-01-04


Chromium进程间通信Mojo bindings已经描述了怎么使用Mojo接口进行IPC通信。我们在Chromium中的使用方法差不多。不过我们不需要显式的去建立进程间的IPC连接,因为这些Chromium代码已经做好了。

Chromium的每个进程都有一个Service Manage,它管理着多个Service。每个Server又管理者多个Mojo接口。在Chromium中我们需要做的是定义Mojo接口,然后在恰当的地方去实现注册接口、实现接口。

因为历史原因,不同从场景,Chromium中接口的注册和绑定方法各种各样。通常的套路以下:

  1. 发送方定义一个mojo::Remote<xxx>的变量remote
  2. 通过remote.BindNewPipeAndPassReceiver()获得远程接口
  3. 调用remote接口上方法
  4. 接收方收到mojo::PendingReceiver<xxx>pr,生成mojo::Receiver<xxx>receiver
  5. receiver相应的方法被调用

或者:

  1. 定义一个mojo::Receiver<xxx>的变量receiver
  2. 通过receiver.BindNewPipeAndPassRemote()获得远程调用
  3. 远程收到mojo::PendingRemote<xxx>pr,生成ojo::Remote<xxx>remote
  4. remote 调用接口
  5. receiver相应的方法被调用

其中第二步处理remote.BindNewPipeAndPassReceiver()receiver.BindNewPipeAndPassRemote()很关键。在你想添加代码文件的目录,搜一下BindNewPipeAndPassReceiver或者BindNewPipeAndPassRemote,具体的方法参考对应的代码上下文。