WebKit(Blink分支)各组件的创建与逻辑关系

从render_view_impl.cc開始说起。

1.     方法RenderViewImpl::Initialize中有:

WebLocalFrame* web_frame = WebLocalFrame::create(main_render_frame_.get()); 

这里会创建WebLocalFrame对象。

之后有webwidget_ = WebView::create(this); 这里会创建WebViewImpl对象。且后面将两者关联起来。

2. 我们来先来看看WebLocalFrame::create

1. WebLocalFrameImpl的构造函数中,创建FrameLoaderClientImpl对象。

3. WebViewImpl的创建

WebViewImpl在创建中,会创建Page对象。

一个WebViewImpl相应一个Page。

4.WebViewImpl的setMainFrame

这里的调用逻辑例如以下:

WebViewImpl::setMainFrame
WebLocalFrameImpl::initializeCoreFrame
LocalFrame::LocalFrame

在LocalFrame的构造函数中。会创建FrameLoader对象和ScriptController对象

4. Document对象及相关逻辑

FrameLoader::init()和   FrameLoader::startLoad函数中,创建了多个DocumentLoader对象。

RawResource::didAddClient
DocumentLoader::dataReceived
DocumentLoader::commitData
DocumentLoader::ensureWriter
DocumentLoader::createWriterFor
(LocalDOMWindow::create)
LocalDOMWindow::installNewDocument
LocalDOMWindow::createDocument
Document::Document

5.归纳

1. LocalFrame主要处理逻辑,含有FrameView对象,用于处理内容显示。FrameView继承ScrollViewArea类,故,FrameView内容可超过屏幕。

(未完待续)

时间: 2024-12-04 11:36:51

WebKit(Blink分支)各组件的创建与逻辑关系的相关文章

WebKit(Blink分支)各组件的创建(FrameView)

从render_view_impl.cc开始说起. 1.     方法RenderViewImpl::Initialize中有:   webview()->setMainFrame(WebFrame::create(main_render_frame_.get())); 2.     先看里面的参数,即WebFrame::create 此代码执行:文件WebFraemImpl.cc中方法:WebFrame::create 3.     上面方法执行同文件中方法:WebFrameImpl::cre

vue组件的创建

vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使用组件吧! 这里有一个Vue组件的示例: Vue.component('Vheader',{ data:function(){ return { } }, template:`<div class="header"> <div class="w"> <

Vue——组件的创建

vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例中使用组件吧! 这里有一个Vue组件的示例: Vue.component('Vheader',{ data:function(){ return { } }, template:`<div class="header"> <div class="w"> <

react组件的创建

最近项目接触react和rn,之前会一些vue和小程序,起初写react是很难受的,尤其是jsx的写法,不过2周过后感觉写起来有点舒服了... 目前react的组件一共有3种方式:React.createClass,React.Component,函数式 React.createClass(API已经移除) 这是早期react组件的创建方式,如果你看的文章是几年之前写的,很多都是这种方式(比如阮老师这篇React 入门实例教程) React.createClass现在这一API已经移除,如果非要

创建增加逻辑卷

逻辑卷:是由逻辑磁盘形成的虚拟盘,也可称为磁盘分区.逻辑卷的扩展支持在线扩展 目 录 一.建立逻辑卷 二.增加逻辑卷 逻辑卷图 一.建立逻辑卷 可以从上面的图看出,物理卷pv 由物理设备生成,卷组vg 由一个或多个pv组成,逻辑卷lv来自vg,如果要建立逻辑卷首先要建立pv ,vg,然后是lv 实验1:创建一个10G的逻辑卷 说明:可以用两个10G的磁盘分区建立两个10G的pv ,组成20G的vg ,用卷组10G的空间创建10G的lv,卷组剩余的10G空间,可以在日后扩展逻辑卷lv. 1.分区,

javascript动手写日历组件(1)——构建日历逻辑 (by vczero)

一.分析日历的组成部分和交互要素 (1)组成部分:选择年月部分.星期显示.包含本月(或者有前月和下一个月部分日子) (2)根据选择的年和月份,动态绘制日历面板. (3)一个日历 7(天) * 5(周) = 35格表格. (4)一个月份是统一的一个面板:一个月的头一天一定在日历面板的第一行,根据该天的“星期几”确定位置. (5)第一格子是星期一,最后一个格子是星期日,为5周的日历面板. 二.确定逻辑设计 日历上面的日历,8月1号建军节为什么会出现在这一格?因为一个月的天数是小于5周(35天)的,因

事件日志ID 2511:服务器服务无法重新创建 &lt;sharename&gt; 共享关系,因为 &lt;address&gt; 目录已不再存在

服务器服务无法重新创建 QQMusicDownload 共享关系,因为 D:\QQMusic\QQMusicDownload 目录已不再存在.请运行 "net share QQMusicDownload /delete" 来删除此共享,或重新创建目录 D:\QQMusic\QQMusicDownload. 在 net share 和 fsmgmt.msc 中无此共享. 解决办法:删除 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\service

Linux中创建LVM逻辑卷并限制磁盘配额

本文重点:关于在Linux中如何建立物理卷.卷组最后生成逻辑卷?如何生成磁盘配额文件,启动磁盘配额,限制和使用磁盘配额. 这里再次说明一下,本人自己手写的Linux原理文档已经上传到我的下载里面地址:Linux原理解释技术文档 所以关于原理在实验里面就不在多说了,不然两天都写不了一篇(压力山大啊). 下面开始首先在虚拟机上添加三块硬盘(建议同样大小,不然就会造成不必要的浪费),添加完成之后需要重启才能生效. 1.添加三块硬盘.大小为5G,点击下面的添加根据引导添加就OK. 2.为各个硬盘创建分区

第六章、创建多对多关系的三种方式

目录 第六章.创建多对多关系的三种方式 一.创建多对多关系的三种方式 1. 全自动(推荐指度**) 2. 纯手动(不推荐) 3. 半自动(******) 第六章.创建多对多关系的三种方式 一.创建多对多关系的三种方式 1. 全自动(推荐指度**) 全自动:利用 ManyToManyField 让 django 自动创建第三张表 优点:不需要手动创建第三张表 不足:由于第三张表不是你手动创建的,也就意味着第三张表中字段是固定的,无法做扩展 class Book(models.Model): ...