Chromium contentshell启动分析之sandox process创建历程(chromium:tag28)


首先,chromium是一个多进程多线程的浏览器,在运行的时候,通过查看系统的线程运行状况,可以看到在系统中有个browser process 和至少一个sandbox process。

本文重点介绍在启动contentshell的时候,sandbox process的创建路程。


1. shell.cc文件,Shell::CreateNewWindow方法中,shell->LoadURL(url);

2. shell.cc文件,Shell::LoadURL(const GURL& url)方法;

3. shell.cc文件,Shell::LoadURLForFrame方法中,web_contents_->GetController().LoadURLWithParams(params);

4. navigation_controller_impl.cc文件,NavigationControllerImpl::LoadURLWithParams方法中,LoadEntry(entry);

5. navigation_controller_impl.cc文件,NavigationControllerImpl::LoadEntry方法中,NavigateToPendingEntry(NO_RELOAD);

6. navigation_controller_impl.cc文件,NavigationControllerImpl::NavigateToPendingEntry方法中,

     if (!web_contents_->NavigateToPendingEntry(reload_type))    

7. web_contents_impl.cc文件,WebContentsImpl::NavigateToPendingEntry

8. web_contents_impl.cc文件,WebContentsImpl::NavigateToEntry方法中, RenderViewHostImpl* dest_render_view_host =
                                                                                     static_cast<RenderViewHostImpl*>(render_manager_.Navigate(entry));

9. render_view_host_manager.cc文件,RenderViewHostManager::Navigate方法中,RenderViewHostImpl* dest_render_view_host =
                                                                                      static_cast<RenderViewHostImpl*>(UpdateRendererStateForNavigate(entry));

10.render_view_host_manager.cc文件,RenderViewHostManager::UpdateRendererStateForNavigate方法,

                                                               int route_id = CreateRenderView(new_instance, opener_route_id, false,
                                                                                     delegate_->IsHidden());

11. render_view_host_manager.cc文件,RenderViewHostManager::CreateRenderView方法中,

                                                                bool success = InitRenderView(new_render_view_host, opener_route_id);

12. render_view_host_manager.cc文件,RenderViewHostManager::InitRenderView方法中,

                                                              return delegate_->CreateRenderViewForRenderManager(render_view_host,                                                                                                                                               opener_route_id);

13. web_contents_impl.cc文件, WebContentsImpl::CreateRenderViewForRenderManager方法中,

                                                  (!static_cast<RenderViewHostImpl*>( render_view_host)->CreateRenderView(string16(),
                                              opener_route_id, max_page_id))

14. render_view_host_impl.cc文件,RenderViewHostImpl::CreateRenderView方法中,if (!GetProcess()->Init())。

  之后的创建路程可以参考下面的路径:


    如上便展示了sandbox process 在contentshell的启动过程中的创建历程。

   另外,当在地址栏上输入url的时候,也会创建sandbox process,其创建后面的实现相似,只是上面的第4步由content_view_core_impl.cc文件的

  content::ContentViewCoreImpl::LoadUrl方法出发。

 

   本人菜鸟,写的不好,请多吐槽,只是分享下自己看的心得,方便广大chromium爱好者。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值