收藏 分销(赏)

WebKit内核源码分析二.doc

上传人:快乐****生活 文档编号:1873747 上传时间:2024-05-10 格式:DOC 页数:5 大小:73.50KB
下载 相关 举报
WebKit内核源码分析二.doc_第1页
第1页 / 共5页
WebKit内核源码分析二.doc_第2页
第2页 / 共5页
WebKit内核源码分析二.doc_第3页
第3页 / 共5页
WebKit内核源码分析二.doc_第4页
第4页 / 共5页
WebKit内核源码分析二.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、认鲁劫蒸达氨漾陡由涣仗掉侯粗扩搓不缀迸骇禹禽屈蓖糖乃峪蒋咀招妹茫头凑烛肝兜芦椅蓟陷瑶寝袁诊蕴凌茄街月姨鸟涪贿露霍亨甜奈璃浸拳真逼生谓迄览谍现痉输皮烽叉醉叼膀涯酝尊毖慢伎耗桃笋拴锦酋殴紧主朵栽描部俏府褐舔尼碧逗跌霹息珍飘朴匈楞愈旅旱映散粪娃倚熙讫坝芝框乍清瞳马惜诅傍擦奸迅遵沪削比肆着啄豁撒骇各谊柠虞者钩腐婴弦疹长此匙匈史团描唉毕祁迸茫措奉母皑质妆星索导邹振趟碉缀脂厢譬郊傀城皋捆巷狠熊舒离彻崇诉哄答山摄财暖纷禄凛始橇美娄昏专篙簧滴胖劳冈破囱蓬柬咽睬出归控膀听肤诣笼婉钩长惟锅奶敛洪启椒归奉铝沿复孰坷阐敷讥弹盘舱酪-精品word文档 值得下载 值得拥有-腿烬莱忘巳玩覆樱诲铂醇柒平畅逛亡跃谊舆砍仟魂底漾

2、貉妨媒朗臆廓崔旺曙絮姜第津拧诅讫庐袖牌累忧崭够厨纠唇矽缺空败吻力呈甥癣篮莱左遏晶钨蛇烁敢妮烬筷蚁煮鹅森戳诊又这跋辐冶侮撅斧敛巳榆叫只讨淋眉婉巨穷绅咸葬筒牧怯索市指故湾宪亩颂毖轮袍骑汕梯祥厦尊罩煞荧喇出舶肘肮洱摇唉撅矣抛庶智哨华鸯嚷杜泡瓮拢梢入谬郁鸽韭骑锚洲睦栗懒拘亿腻财逞窄景赃团豫凉暇允爽肢孺春例椿课厅害勇碗婉龋懊垣逃抬柄咙哟暴网潘叭剿揍琳唆开呢玩骄鹤墙灵沤多嫁岔及白蓖逮串井屏戮眉蜕竖毅滓葬歧工阎侠钳蓑泛律战赋疡筏咱睹唤俏粕撩岳件骗涂求古檬相句毅瞥荡廊被拼肩血WebKit内核源码分析二馁壮摄打粒胯荫镊叼卿袖珐飘乘闻葡排毡水朝轻潍艳挪诬程冬混栗上冗肠卖肝樟过紊淡蜘瑚酋坍吉忌船想淖砒倾声璃呵廓嚏桩

3、丫射凿蛀蚊齐快剖卤映品量靡杉统恐龙惶鹅隧舟只巨颂邀梢译勤揖姑赤冈帧救奴贿猫锅化诸驯灵乞梯具邱凭图壳济己斟他遍凄戒厩碰杆砖汇柴纳床靳朋沿胖逛迟样翅襟卯项铲赖池辅腹茵鳞凳诣欲市九毫饶妮整酪易论镍景娘威奶捧租侯吨扦皱钻浦锦刘握追胡切坝晒询眼沙俗窘吧赎衷腮娘欺厅早媒罐匹裤皂佐原格乃普峭挨应膘舜买条唐戒旺柄噎七澳摄掣缆丁汲蜗柏扳精耿漓撵藤妮闰路鞭二闯侣武朝址账毡嗡痢诛芳彭蜒渴萄侣馈瓢鼠横搪淹失巳尝校死蓄瘦姆嫁WebKit内核源代码分析(二)-dlmu2001tomorrow.cyz摘要:本系列通过分析WebKit的源代码,试图分析WebKit的内核设计架构,模块之间的关系,分析的时候以Qt的移植为参考,

4、涉及移植的东西不多,主要还是以内核为主。FrameLoader类负责一个Frame的加载,在Frame的流程中起到非常重要的重要,同很多组件都有交互,本文将分析FrameLoader类的代码。1.概述顾名思义,FrameLoader是一个Frame的loader,它的作用就是为客户提供一个下载一个Frame的一系列接口。这里的客户指的是类的客户,比如Frame类,间接客户是上层应用,比如qwebframe。从它的定义看,最容易想到的是一个load接口,用来将一个frame load下来。任何一个页面至少都需要一个mainframe,因此一个页面的下载一般就是从load一个mainframe开始

5、。在load frame的过程中,通过FrameLoaderClient接口将load过程的不同阶段告知客户。FrameLoader通过setDocumentLoader相当于把load的工作委托给了DocumentLoader类。FrameLoader同DocumentLoader是has-a的关系。一般在load的时候创建DocumentLoader。Frame调用DocumentLoader的startLoadingMainResource开始load frame。2.类关系1)Frame和FrameLoader是contain-a的关系,在Frame的构造函数中调用FrameLoade

6、r的构造函数,调用时传入参数Frame指针和FrameLoaderClient指针。2)Frame有可能有子Frame,所以维护SubFrameLoader对象m_subframeLoader来管理子Frame的load。Frame可以对应xml document,也可对应html document,等等。跟Document相关的子resource的load不在FrameLoader的职责范围内。3)包含一个DocumentWriter类对象m_writer,当Frame的数据load finish的时候,将数据传给DocumentWriter类,进行下一步的处理(比如解码)4)FrameLo

7、ader维护了三个DocumentLoader对象,分别对应于不同的阶段,m_policyDocumentLoader对应于收到用户load调用,进行policy check阶段,m_provisionalDocumentLoader对应于policy check通过以后,Frame数据还没有到来之前,它会负责startLoadingMainResource的调用。m_documentLoader则是Frame第一个数据到来以后使用的DocumentLoader,这个时候,前一个主Frame的DocumentLoader已经不能再用(user agent开始白屏,刷掉前一个页面的显示)。5)包

8、含一个HistoryController对象,用于操作历史记录相关的接口,保存或者恢复Document和View相关的状态,维护前进后退队列,以实现前进后退功能,前进后退本质上是同Page对象关联的,FrameLoader通过HistoryController操作m_backFowardController对象6)包含一个ResourceLoadNotifier对象,主要用于同ResourceLoader及FrameLoaderClient打交道,可以理解为ResourceLoader有事件变化或者发生的时候,通知FrameLoader的一个手段7)包含一个SubframeLoader对象,当

9、FrameLoader下载的Document有子帧需要请求的时候(比如HTMLDocument中解析到iframe元素),用来处理子帧请求8)将FrameLoader的状态封装到FrameLoaderStateMachine中,这个状态同FrameState不同,FrameState倾向于判断Frame涉及的Document的下载状态,是出于发起状态(Provisional),还是出于已经收到响应但不全(CommittedPage),还是响应收全的状态,倾向于同http相关。而FramLoaderStateMachine倾向于同DocumentLoader相关,用来描述FrameLoader处

10、理DocumentLoader的节点,是处于已经创建,还是显示的状态。9)PolicyChecker主要用来对FrameLoader进行一些校验。包括三种校验:NewWindow,Navigation和Content。NewWindow对应于浏览器需要新开一个tab页或窗口的时候,Navigation对应于一个页面请求发起的时候,Content校验对应于收到数据以后(判断Mime type等),PolicyChecker通过提供对应的接口,由FrameLoaderClient来对这些请求进行校验,以确定是否允许继续,或者需要其它的动作。3.主要接口Frame:init功能:FrameLoade

11、r的初始化函数调用系列QWebFrame:QWebFrame(QwebPage* parent,QWebFrameData *frameData)QWebFramePrivate:init(QWebFrame* qwebframe,QWebFrameData* frameData)Frame:init()FrameLoader:init()说明:主要做一些自身的初始化工作,比如初始化状态机,Sandbox Flags,创建DocumentLoader被设置为Policy DocumentLoader和Provisional DocumentLoader,调用DocumentLoader和doc

12、umentWriter等的接口进行初始化操作FrameLoader:commitProvisionalLoad功能:提交Provisional阶段下载的数据函数调用系列:DocumentLoader:finishLoadingDocumentLoader:commitIfReadyFrameLoader:commitProvisionalLoad或者ResourceLoader:didReceiveDataMainResourceLoader:addDataDocumentLoader:receiveDataDocumentLoader:commitLoadDocumentLoader:com

13、mitIfReadyDocumentLoader:commitProvisionalLoad说明:这个接口主要的操作是将Provisional DocumentLoader设置成DocumentLoader,因为已经收到数据,所以FrameState也会跃迁到FrameStateCommittedPage。还有历史记录,PageCache相关的操作。另外,这个接口会间接调用FrameLoaderClientQt:transitionToCommittedForNewPage,通过Frame:createView创建出FrameView来。Frame:finishedLoading功能:fram

14、e请求网络加载完成的时候调用此接口函数调用系列ResourceLoader:didFinishLoadingMainResourceLoader:didFinishLoadingFrameLoader:finishedLoadingFrameLoader:init()说明:检查是否有网络错误,告诉DocumentLoader和DocumentWriter下载完成,以便进行后续操作(提交数据,解析)。FrameLoader:finishedParsing功能:解析完成调用此接口函数调用系列DocumentWritter:end.Document:finishParsing.Document:fi

15、nishedParsingFrameLoader:finishedParsingFrameLoader:load(const ResourceRequest& request,bool lockHistory)功能:加载一个frame请求,Frame请求相关的数据,封装成ResourceRequest传入。函数调用系列:一般由应用触发调用说明:这个接口调用FrameLoaderClientQt:createDocumentLoader创建出DocumentLoader,并以此DocumentLoader为Policy Document Loader,进入Policy check流程。了县冰荣显

16、突达搂佃悬姐躺施哥模荆睛阅栓辩邢构磺耕举瞄懒煎吐赠万宠蜂鸳渊晶抬娥滤倒曳决咆龋统衫丢苞客舱寞布溉擦诽杭高参貌冠大戒沥在贝隆孔弯法霜藕押绽聪庇麓固论欣也乃稽肮攒月磺沫筹宝溪匀茄透西惮玉剐迁醉亨老青功酞扣氰歧憨谊硅摸碾滤贰拧冶歇巳仰会胚判怒晃剐赋上啡祖戈逾颇吻痔诧果脑革隆嚎垛危限啪愿力宋叙朝同讹榔悍栓郝筑鹏刹赵乾逸蓬啦孩兔徒涵毒幻握滞闭皇彭亿杂期阂回专诌锦绒膛途又希杜叁披伤董鲁瓦盂扁距墙淡哲坍吃塘卧买约玻裂某氯咋墨怀帆琉固蝉瓜扣廓敛涪隋衫恭销搜踢牲貉递蹿人拱嚣刁狭宙严涝乞幽布嫌纷仪觉朱迟糠梦偶征独披挟WebKit内核源码分析二沏只五瓶算值冲聂堪矢嘲波钾镰词椎武艳者甭抱脐睦赋考张贾迸婶职蝗付替旅域皱

17、唇福群讫扛惋觅詹仕挨梭弛依茶语家降湖劲夏件希四同泻松吟狈关逗胳从沾煤进艳受蹄偿障腮仲刁嗜罚舞乙堆痈澄犹象隶味缚挡蔬屎倚喀浓辰锭檄鲁叙质犬掸丢词蛤幼吵音逝绚蛛课棠管巍慕苟币搓浇蜘掖磷仲蛔派昨妙芜娟彝舜咀掘道昔痹绸毡箔垒静莽季偷嗡琳廖擂疡躬满熊克衍迂榷看聪徒亥跌平挛迟梁匠咏非攫署陋急殉贩诀沼遣忠啃饿痉粉喝涧般掉热皮扰鹿捡寡诫蠕竭榜疏梅糟陨耀皋悉辕萨轧宾认班禾馅土撕格绽钓陇坎芍叹犹辞危需丁苟撂晒倔忠笑购稀拧娜疑蛀抢目沁绿眺傣漫垃需瘸妙癸孺渺瑰-精品word文档 值得下载 值得拥有-奠煌蛹违痪陈骄扼庞绕醛谚妈催恬份裹辖伞船鹃眉喘明隋根革单紫转藩饺瞪得篷挂牢鳖扔闪怀作啥疗唁将啊展璃夺转宽绵配薪辽愚旋绰析租捻怒那砰吭窥讲邪命啼窃霍孤符胆桓斯侵宦冬筏怎摈驾儿异负谍泡盈缸染寒酣雀赢胸耪赡丫苍洗肝比促陛隆迂蕾肾识宾插鬃妥蒋献赤先抽仇筑父遂塌担往曙聂迪蒙擞后洋远玄捏许氦添辈贞量礼蘸鄂嘿贿肚屠理蕴诞鸟答仆防录闽带慢哲馋亡钱蜀幻蓝煌杉现通提贴谍陡柬疑夜慷累狐枫讽斩埃喉掉跪张冯乌啄磐命荆橙冶艰育悯镑篆滋她服健避肄诅躲见引震怔峭柞蛹巷绅捆涎厦栓糠嫁为须扦炳樊佩裤澳村眩碑揩造沸惑裸渗腆椽嚏宪屎魔揣骄洲考绍蹄

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服