欢迎来到天天文库
浏览记录
ID:15288033
大小:158.50 KB
页数:6页
时间:2018-08-02
《webkit内核源代码分析(三)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、WebKit内核源代码分析(三)红心地瓜(tomorrow.cyz@gmail.com)摘要:浏览器的请求一般是以页面请求为单位,当用户通过网址栏输入一个url,浏览器就开始一个页面请求。而一个页面请求可能包含有一到多个页面子帧,以及图片、CSS和插件等派生子资源。Page类就是用来对应这样的页面请求。Page类是WebKit中非常重要的一个类,它就像内核对外的一个聚合器。关键词:WebKit内核源代码,WebCore,Page,Frame,WebKit架构1.概述浏览器的请求一般是以页面请求为单位,
2、当用户通过网址栏输入一个url,浏览器就开始一个页面请求。而一个页面请求可能包含有一到多个页面子帧,以及图片、CSS和插件等派生子资源。Page类就是用来对应这样的页面请求。前进后退,导航,编辑,右键菜单,设置,Inspector等这些用户参与的动作,大部分是同Page相关的。而标记语言解析、排版、加载则更多地同Frame相关。我们通过几个图来看下Qt移植中Page类同应用之间的关系。QWebPage通过QWebPagePrivate维护Page类的指针,并在QWebPagePrivate的构造函数中
3、实例化Page对象。QWebPage类通过之后的createMainFrame调用实例化QwebFrame,而在QwebFrameData的构造函数中,以Page指针为参数调用了Frame::create创建出Frame对象。Page类通过组合其它类的方式,实现了很多功能,Page类本身并没有多少代码。2.类关系2.1PageGroupPageGroup并不是用来对Page进行管理的,而是设计用来将一些具有共同的属性或者设置的Page编成组的,以方便对这些属性进行管理。目前这样的属性包括localSt
4、orage的属性,IndexDB,UserScript,UserStyleSheet等。最常见的同PageGroup相关的操作是维护已访问链接(如addVisitedLink等接口)。根据地瓜的理解,假设WebKit内核之上架设多个应用(浏览器是一个应用),比较可能的是,一个应用独立一个PageGroup。这里同多tab页没有关系,多tab页属于同一个PageGroup。地瓜曾在mailinggroup上就这个问题咨询过,一位RIM的同学给我举了一个例子,比如一个基于WebKit的邮件程序,一方面他可
5、能调用基于webkit的browser来显示网页,另外他本身也基于webkit来显示一些邮件,这两个之间的setting有很大可能不一样,他们就使用不同的PageGroup。PageGroup中有这个Group已经安装并且使用的UserScript和UserStyleSheet的集合,一般在网页解析完毕后,这些UserScript和UserStyleSheet会插入到Document中。PageGroup中还维护了LocalStorage和IndexDB相关的设置,比如它们的Path,上限等,通过Gr
6、oupSettings类实现。PageGroup创建以后,每次创建一个新的Page对象,会通过addPage接口加入到这个PageGroup的m_pages中。每次有导航行为发生的时候,会调用addVisitedLink来将url加入到已访问链接中。如果浏览器要跟踪已访问的接口,则在初始化的时候必须调用PageGroup::setShouldTrackVisitedLinks,且参数为true。此处shouldTrackVisitedLinks是一个静态的全局变量,也就是说,所有应用维护一样的行为(一
7、个应用将其设置为false会影响到其它同样基于此核的应用)?Page类中维护了PageGroup的指针,并提供了group接口,这是个lazy接口,如果m_group不存在,会调用InitGroup来创建一个。对于Page类来说,如果没有设置GroupName,则在初始化的时候会生成一个空GroupName的PageGroup,由m_singlePageGroup维护,并把指针赋给m_group,如果以非空的名字调用了setGroupName,则会重新创建PageGroup,此时这个PageGroup
8、由m_group来维护。2.2SettingWebCore中的设置相关的类,浏览器应用的不少配置、选项同该类相关,Qt移植中,应用在创建Page对象后,会根据Page::settings来实例化QwebSetting。2.3Chrome原生窗口接口类,参考地瓜写的”WebKit中的Chrome和ChromeClient”。2.4其它SelectionController:负责管理Page中的选取操作,绝大部分选取操作是基于Frame的,只在Frame的S
此文档下载收益归作者所有