首先,参看blog:http://blog.youkuaiyun.com/u011882998/article/details/19414669
这是我分析的chromium28启动时候,沙盒的创建历程。
现在我们分析下chromium34的启动时候,沙盒的创建历程。
基本思路还是差不多,只是在chromium34上,没有render_view_host_manager.cc文件了,取而代之的是render_frame_host_manager.cc文件。
下面,我们看看启动路程:
在之前的blog:http://blog.youkuaiyun.com/u011882998/article/details/19414669,前5步是相同的。
之后有所更改如下:
6. navigation_controller_impl.cc文件,NavigationControllerImpl::NavigateToPendingEntry方法中
if (!delegate_->NavigateToPendingEntry(reload_type))
这里的delegate最后实现者还是web_contents_impl.cc
7. 会执行到: returnframe_tree_.root()->navigator()->NavigateToPendingEntry( frame_tree_.GetMainFrame(), reload_type);
8. Navigator_impl.cc文件中,方法:NavigatorImpl::NavigateToPendingEntry
9. Navigator_impl.cc文件中,方法:NavigatorImpl::NavigateToEntry
有代码:RenderFrameHostImpl* dest_render_frame_host =manager->Navigate(entry);
10. Render_frame_host_manager.cc文件中:RenderFrameHostManager::Navigate方法,该方法中:
if(!InitRenderViewNew(dest_render_frame_host->render_view_host(), opener_route_id))
11. Render_frame_host_manager.cc文件中: RenderFrameHostManager::InitRenderView
有代码: return delegate_->CreateRenderViewForRenderManager( render_view_host,opener_route_id, cross_process_frame_connector_);
之后的启动流程就跟tag28相同了,可以参考之前的blog:http://blog.youkuaiyun.com/u011882998/article/details/19414669