##加载完毕数据到开始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构建的流程