首先贴出一张来自于Chrome官网上design document上的图。这张图描述了Browser进程中主要几个类之间的相互关系。
这张图仅仅列出了Browser进程里的2个线程:UI线程和IPC线程。UI线程是主线程,主要负责整个UI的渲染和消息的响应,包括自身的消息和从Render 进程发过来的消息。IPC线程负责Browser进程与Render进程之间的通信和网络资源消息的过滤。
一个Render Process Host对应一个Channel Proxy,负责跟一个Render Process通信,同时多个Render View Host可以share同一个Render Process Host,对应Render进程中的多个RenderView。RenderViewHost以IPC::Channel::Listener的身份出现在RenderProcessHost的listeners_列表中。一个WebContents对应一个RenderViewHost,以RenderViewHostDelegate的身份出现在RenderViewHost中。
当一个RenderProcessHost(BrowerRenderProcessHost的基类)初始化在主线程上是,它也同时创建了一个新的RenderProcess和一个ChannelProxy IPC对象实例,这个IPC::ChannelProxy会建立一个命名管道连接到render进程。需要注意的是IPC::ChannelProxy运行在IPC线程中,监听着那个命令管道&#