Chrome浏览器上集成IE内核方案

1. 架构图

双核功能的基本思路是,在chrome原有的render 管理的基础上,添加trident内核对象并在切换时将两个渲染的内核数据进行同步,进而将内核网络请求分发下来的数据,趋于一致,从而达到双核的无缝切换,内核数据同步主要包括cookie 数据同步和post 数据同步。

主要的流程包括:

窗口关联概要流程:由主窗口创建对应widget_host(即主窗口要bind的窗口)并与 trident 的容器窗口做bind(父子窗口关系设置)

Cookie数据同步概要流程:V68代码chrome中的网络模型是在主进程管理网络进程和cookie,V87独立network网络模型,需要注意。需要将trident 内核网络数据的cookie的获取和存储均通过进程去管理。

Post,Refere等数据同步概要流程:渲染内核在开启新页面或者页面内刷新时会将一部分数据(主要包括post,refere等)放入到要导航的页面中,如果跳转的页面需要切换内核,那么需要这部分数据从内核中取出来,并将这些数据放入新的核心去导航。

2. chrome内核模型

浏览器启动的时候会创建一个browser类,

启动流程期间会创建tab页面,然后渲染

StartupBrowserCreator::Start

StartupBrowserCreator::LaunchBrowser

StartupBrowserCreatorImpl::Launch

StartupBrowserCreatorImpl::DetermineURLsAndLaunch

StartupBrowserCreatorImpl::RestoreOrCreateBrowser

StartupBrowserCreatorImpl::OpenTabsInBrowser

void Navigate(NavigateParams* params)

NavigatorImpl::NavigateToEntry

NavigationRequest::BeginNavigation()

NavigationHandleImpl::WillStartRequest

NavigationURLLoader::Create

3 IE内核接管

RenderFrameHostImpl::NavigateTrident

RenderFrameTrident::OnNavigate

TridentView::Navigate

TridentViewMessageHandlerImpl::OnNavigate

TridentView::DoNavigate

TridentControl::Navigate2

CHtmlView::Navigate2 系统函数

知识店铺
1 声望1 粉丝