Webkit FrameLoader分析


Webkit FrameLoader分析

FrameLoader是webkit中一个核心的组件,主要是职责是加载一个Frame中的各种资源,比如文档资源,css资源,js资源等等,当然FrameLoader通过组合的方式包含很多其他的组件,它们一起协作,共同完成加载Frame的重任,所以要理解webkit,理解Fameloader就非常的重要。

以下是FrameLoader的一个类图,主要展示了FrameLoader包含的一些其他组件。

Webkit FrameLoader分析_第1张图片

下面分别来解析.

1FrameFrameLoadercontain-a的关系,在Frame的构造函数中调用FrameLoader的构造函数,调用时传入参数Frame指针和FrameLoaderClient指针。
2
Frame有可能有子Frame,所以维护SubFrameLoader对象m_subframeLoader来管理子FrameloadFrame可以对应xml document,也可对应html document,等等。跟Document相关的子resourceload不在FrameLoader的职责范围内。
3
)包含一个DocumentWriter类对象m_writer,当Frame的数据load finish的时候,将数据传给DocumentWriter类,进行下一步的处理(比如解码)
4
FrameLoader维护了三个DocumentLoader对象,分别对应于不同的阶段,m_policyDocumentLoader对应于收到用户load调用,进行policy check阶段,m_provisionalDocumentLoader对应于policy check通过以后,Frame数据还没有到来之前,它会负责startLoadingMainResource的调用。m_documentLoader则是Frame第一个数据到来以后使用的DocumentLoader,这个时候,前一个主FrameDocumentLoader已经不能再用(user agent开始白屏,刷掉前一个页面的显示)
5
)包含一个HistoryController对象,用于操作历史记录相关的接口,保存或者恢复DocumentView相关的状态,维护前进后退队列,以实现前进后退功能,前进后退本质上是同Page对象关联的,FrameLoader通过HistoryController操作m_backFowardController对象
6
)包含一个ResourceLoadNotifier对象,主要用于同ResourceLoaderFrameLoaderClient打交道,可以理解为ResourceLoader有事件变化或者发生的时候,通知FrameLoader的一个手段
7
)包含一个SubframeLoader对象,当FrameLoader下载的Document有子帧需要请求的时候(比如HTMLDocument中解析到iframe元素),用来处理子帧请求
8
)将FrameLoader的状态封装到FrameLoaderStateMachine中,这个状态同FrameState不同,FrameState倾向于判断Frame涉及的Document的下载状态,是出于发起状态(Provisional),还是出于已经收到响应但不全(CommittedPage,还是响应收全的状态,倾向于同http相关。而FramLoaderStateMachine倾向于同DocumentLoader相关,用来描述FrameLoader处理DocumentLoader的节点,是处于已经创建,还是显示的状态。
9
PolicyChecker主要用来对FrameLoader进行一些校验。包括三种校验:NewWindow,NavigationContentNewWindow对应于浏览器需要新开一个tab页或窗口的时候,Navigation对应于一个页面请求发起的时候,Content校验对应于收到数据以后(判断Mime type等),PolicyChecker通过提供对应的接口,由FrameLoaderClient来对这些请求进行校验,以确定是否允许继续,或者需要其它的动作。

你可能感兴趣的:(webkit)