Webkit 网络加载到DOM树创建的堆栈记录
来源:互联网 发布:淘宝儿童玩具大全 编辑:程序博客网 时间:2024/06/12 23:57
##加载完毕数据到开始DOM树的创建
WebCore::RenderObject::addChild()
WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks
WebCore::RenderBlock::addChildIgnoringContinuation
WebCore::RenderBlock::addChild
WebCore::NodeRendererFactory::createRendererIfNeeded()
WebCore::Node::createRendererIfNeeded()
WebCore::Element::attach()
WebCore::HTMLConstructionSite::attach
WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML
>>插入标签
>>HTMLElementStack m_openElements; //将创建的元素压入堆栈,但压入堆栈之前进行attach()操作
m_openElements.pushHTMLHtmlElement(attach(m_attachmentRoot, element.get()));
# WebCore::HTMLTreeBuilder::processStartTag(WebCore::AtomicHTMLToken & token={...})
>>在不同的模式下处理起始标签(html|body|head|noscript|table|col|frameset等标签的前/后/内等采取的解析策略)
WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken & token={...})
>>解析标签的入口函数,状态机函数 (根据标签类型->进行不同的处理,如: data comment eof)
WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken
WebCore::HTMLTreeBuilder::constructTreeFromToken
WebCore::HTMLDocumentParser::pumpTokenizer
WebCore::HTMLDocumentParser::pumpTokenizerIfPossible
WebCore::HTMLDocumentParser::append
>>m_input.appendToEnd(source); // HTMLInputStream,此时的source为加载的html页面数据
>>加载到数据之后就立刻进行pump操作,转为DOM数
WebCore::DecodedDataDocumentParser::appendBytes
>>DocumentWriter负责将创建Decoder解码器来解码接收到的网页数据
>>TextResourceDecoder* decoder = writer->createDecoderIfNeeded();
String decoded = decoder->decode(data, length);
writer->reportDataReceived();
append(decoded); //解码后的数据再用于后面的DOM树的创建
WebCore::DocumentWriter::addData
>> DocumentWriter接受的数据为RawData,进一步交给DocumentParser进行处理
DocumentParser* parser = m_frame->document()->parser();
parser->appendBytes(this, str, len, flush);
WebCore::DocumentWriter::endIfNotLoadingMainResource()
WebCore::DocumentWriter::end()
WebCore::DocumentLoader::finishedLoading()
WebCore::FrameLoader::finishedLoading()
WebCore::MainResourceLoader::didFinishLoading
WebCore::ResourceLoader::didFinishLoading
WebCore::QNetworkReplyHandler::finish()
>>交由Port QtNetwork负责真正的加载动作,加载进度一层层的上报,一旦finish加载则立刻对应于DocumentWriter.end()
>>一边加载、一边DocuentWriter的动作、一边DocuemntParser、DOM构建的流程
- Webkit 网络加载到DOM树创建的堆栈记录
- Webkit之DOM加载&创建
- webkit dom 是如何创建renderobject的
- WEBKIT/CEF DOM树创建过程分析
- Webkit分析传入的url到真正网络模块发起加载请求
- webkit源码阅读:dom树的构建
- Webkit初始化以及加载URL过程中各种对象的建立时序以及DOM树的建立详情分析
- webkit的加载过程
- webkit 获取dom树信息
- 网络栈加载完数据发送消息时的堆栈
- webkit的网络处理
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- WebKit加载网页的流程
- dom的事件传递过程-webkit
- Qt HelloQt
- android开发步步为营之83:android图片处理技术之二(通过Matrix移动缩放旋转错切)
- Week4-1Syntax
- 标准格式模板
- nginx基础
- Webkit 网络加载到DOM树创建的堆栈记录
- C++中获取当前运行路径
- Broadcast Reciever的使用
- chown 使用 ,更改所属主(u),也可以更改所属组(g)
- Qt 建立连接
- coderforce 515A Drazil and Date
- linux __setup
- 关于android开发环境中sdk和adt更新到22.6之后多了appcompat_v7
- 2015 Asia BeiJing Regional Contest A. Xiongnu's Land(二分)