blink跨线程解析html有点小问题

探讨了在HTML解析过程中,背景解析器向主线程发送编码名称时可能遇到的问题,尤其是在主线程快速接收资源完成消息的情况下,可能导致乱码现象。

BackgroundHTMLParser::updateDocument里会

Platform::current()->mainThread()->postTask(FROM_HERE, 

threadSafeBind(&HTMLDocumentParser::didReceiveEncodingDataFromBackgroundParser, AllowCrossThreadAccess(m_parser), encodingData));


发一个编码名字给主线程,但如果主线程过快的收到资源接收完成的消息:

> node.dll!blink::HTMLDocumentParser::stopBackgroundParser() 行 805 C++
  node.dll!blink::HTMLDocumentParser::end() 行 859 C++
  node.dll!blink::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() 行 873 C++
  node.dll!blink::HTMLDocumentParser::prepareToStopParsing() 行 273 C++
  node.dll!blink::HTMLDocumentParser::processParsedChunkFromBackgroundParser(WTF::PassOwnPtr<blink::HTMLDocumentParser::ParsedChunk> popChunk) 行 511 C++
  node.dll!blink::HTMLDocumentParser::pumpPendingSpeculations() 行 563 C++
  node.dll!blink::HTMLDocumentParser::resumeParsingAfterScriptExecution() 行 1000 C++
  node.dll!blink::HTMLDocumentParser::notifyScriptLoaded(blink::Resource * cachedResource) 行 1036 C++
  node.dll!blink::HTMLScriptRunner::notifyFinished(blink::Resource * cachedResource) 行 200 C++
  node.dll!blink::Resource::checkNotify() 行 253 C++
  node.dll!blink::Resource::finishOnePart() 行 305 C++
  node.dll!blink::Resource::finish() 行 312 C++
  node.dll!blink::ResourceLoader::didFinishLoading(blink::WebURLLoader * __formal, double finishTime, __int64 encodedDataLength) 行 476 C++
  node.dll!net::WebURLLoaderManager::handleDidFinishLoading(net::WebURLLoaderInternal * job, double finishTime, __int64 totalEncodedDataLength) 行 471 C++


就会关掉这个BackgroundHTMLParser,导致这个HTMLDocumentParser::didReceiveEncodingDataFromBackgroundParser,收不到,从而发生乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值