原文display a web page in chrome
层
- Browser
- 代码位置:src/chrome/browser
- Tab contents
- 代码位置:src/chrome/browser/tab_content
- Render host
- 代码位置:src/chrome/browser/renderer_host
- Render
- src/chrome/rendererer
- RenderView
- 代码位置:/content/render/renderviewimpl.cc
- 继承于RenderWidget,RenderWidget负责input处理和绘制
- Webkit glue(WebView, WebWidget, WebFrame, etc)
- 代码位置:src/webkit/glue
- 封装webkit接口
- 转化webkit内建类型为chromium类型,如,std::string 代替 WebCore::String;GURL代替KURL。
- 简化webkit对象命名,如:WebCore::Frame 变成 WebFrame
- test shell基于glue的测试程序
- Webkit/Webkit Port
- 代码位置:third_party/Webkit
- webkit开源代码,Port是webcore平台相关接口的实现
- browser process的UI thread创建RenderProcessHost
- RenderProcessHost创建render process并在browser process的I/O thread中创建ChannelProxy
- ChannelProxy监听命名管道,将消息转发给RenderProcessHost
- ChannelProxy中包含ResourceMessageFilter过滤某些消息(如网络通信)直接交给I/O thread 处理
- ResourceMessageFilter::OnMessageReceived()
- RenderProcessHost将view相关消息派发给RenderViewHost处理,本身处理view无关消息
- RenderProcessHost::OnMessageReceived()
- view相关消息在RenderViewHost和RenderWidgetHostView基类中处理
- RenderView(Widget)Host都有与之对应的RenderView(Widget)位于render process,
- 每个平台都有一个 (RenderWidgetHostView[Aura|Gtk|Mac|Win])用于集成至平台。
render process browser process
| |
+--+--------------+ +---------------------+
| \ / \
render thread main thread I/O(IPC) thread Main browser(UI) thread
| | | |
webkit | | |
| | | |
renderWidget::SetCursor | | |
| | | |
renderView::Send() | | |
| | | |
RenderThead::Send() | | |
| IPC::SyncChannel | |
| |-----IPC----| |
| | IPC::ChannelProxy |
| | | |
| | ResourceMessageFilter |
| | | |
| | | RenderProcessHost::OnMessageReceived
| | | |
| | | RenderViewHost::OnMessageReceived
| | | |
| | | RenderViewHost::OnMessageReceived
| | | |
| | | RenderWidgetHost::OnMsgSetCursor
| | | |
render process browser process
| |
+--+------------------------+ +---------------------+
| \ / \
render thread main thread I/O(IPC) thread Main browser(UI) thread
| | | |
| | | RenderWidgetHost:ForwardMouseEventToRenderer
| | | |
| | | WebMouseEvent
| | | |
| | | RenderWidgetHost::ForwardInputEvent
| | | |
| | | RenderWidgetHost::Send
| | IPC::ChannelProxy |
| |----IPC-----| |
| IPC::Channel | |
RenderView::OnMessageReceived | | |
| | | |
RenderViewHost::OnMessageReceived | | |
| | | |
RenderWidgetHost::OnMsgSetCursor | | |
| | | |
标签:
chromium
日期: 2014-07-18 17:30:06, 11 years and 111 days ago
