CachedResouce

1.LoadProcess

way one

a.CachedResourceClient

b.->CachedResource.load(CachedResourceLoader* cachedResourceLoader)

c.->CachedResourceLoader::load(CachedResource* resource, bool incremental, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks)

d.->CachedResourceRequest::load(this, resource, incremental, securityCheck, sendResourceLoadCallbacks);

e.ResourceRequest.start()

way two

a.other call CachedResourceClient.XXX() //for example, ImageLoader's updateFromElement.

b.CachedResourceLoader::requestXXX

c.->CachedResource.load(CachedResourceLoader* cachedResourceLoader)

d.->CachedResourceLoader::load(CachedResource* resource, bool incremental, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks)

e.->CachedResourceRequest::load(this, resource, incremental, securityCheck, sendResourceLoadCallbacks);

f.ResourceRequest.start()



2.CachedResource's subclasses

CachedCSSStyleSheet
CachedFont 
CachedImage
CachedScript
CachedXSLStyleSheet
All page information is presented with CachedResource


3.client

A ask B to do something.  B is somethingWorker, and A will have a object "somethingWorkerClient" for B to callback.

or A is a subclass of somethingWorkerClient.

IconLoader inherited from SubResourceLoaderClient

so IconLoader will ask other class to load for it,and using SubResourceLoaderClient to call back。

ImageLoader inherited from CachedResourceClient

so ImageLoader will ask other classes load for it ,and the callback will be finished through CacheResourceClient。

(may not be right)


4.

CacheResourceClient's subclasses:

 CachedScriptSourceProvider

ClipboardAndroid,

CSSFontFaceSource,

CSSImageValue,

CSSImportRule,

HTMLDocument

HTMLDocumentParser,

HTMLLinkElement,

ImageLoader

,PendingScript,

ProcessingInstruction,

RenderObject,

ScriptElement,

SVGFEImageElement

SVGFontFaceUriElement

XMLTokenizer,

XMLDocumentParser,

XSLImportRule


SubResourceLoaderClient was used in  SubResourceLoader, it means that the "SubResourceLoaderClient"'s loading process is done in "SubResourceLoader"

it's subclasses including:CachedResourceRequest,DocumentThreadableLoader,IconLoader


5.CacheResourceLoader's loading process

CacheResource.load----->CachedResourceLoader.load--->CachedResourceRequest.load&add()---->ResourceLoader.start()(through "ResourceLoadScheduler::scheduleLoad")


CachedResourceLoader::requestImage

CachedResourceLoader::requestResource

CachedResourceLoader::loadResource

CachedImage::load

CachedResource::load

CachedResourceRequest::load

ResourceLoadScheduler::scheduleSubresourceLoad

ResourceLoadScheduler::scheduleLoad

ResourceLoadScheduler::servePendingRequests

ResourceLoader::start



6. create HtmlImageElement
HTMLConstructionSite::createHTMLElement(WebCore::AtomicHTMLToken & token={...})
Element::setAttributeMap
StyledElement::attribute
HTMLImageElement::parseMappedAttribute
ImageLoader::updateFromElement() 
CachedResourceLoader::requestImage(WebCore::ResourceRequest & request={...}) 
CachedResourceLoader::requestResource()
CachedResourceLoader::loadResource()
WebCore::CachedImage::load(WebCore::CachedResourceLoader)
CachedResource::load(CachedResourceLoader )





FrameLoader

1.FrameLoader's state
FrameStateComplete
FrameStateProvisional
FrameStateCommittedPage

FrameStateProvisional, FrameLoader's init();
2.FrameLoader has 3 documentLoader
    RefPtr<DocumentLoader> m_documentLoader;
    RefPtr<DocumentLoader> m_provisionalDocumentLoader;
    RefPtr<DocumentLoader> m_policyDocumentLoader;

3. state and loader
a.FrameStateComplete (when last load is finished)
m_documentLoader, last page's documentLoader;
m_provisionalDocumentLoader, null;
m_policyDocumentLoader, null

changing to FrameStateProvisional:

loadWithDocumentLoader, create a new DocumentLoader, evaluate it to m_policyDocumentLoader.

PolicyChecker::checkNavigationPolicy, check the policy and save it to m_policyDocumentLoader.

if checkNavigationPolicy ok, stopAllLoaders and evaluate m_policyDocumentLoader to m_provisionalDocumentLoader.

change state to FrameStateProvisional


b. FrameStateProvisional 

m_documentLoader, last page's documentLoader;

m_policyDocumentLoader, as m_provisionalDocumentLoader;
m_provisionalDocumentLoader, the new documentloader;

(FrameLoader::commitProvisionalLoad())

if history, PageCache to CachePage
else
MainResourceLoader.load()
after receive:
MainResourceLoader::didReceiveData
m_documentLoader= m_provisionalDocumentLoader
m_provisionalDocumentLoader=NULL
change state to FrameStateCommittedPage

c. FrameStateCommittedPage

m_documentLoader, new page's documentLoader;

m_provisionalDocumentLoader, NULL;
m_policyDocumentLoader, NULL;

when the last subresource is OK, documentLoader delete the subResourceLoader from m_subresourceLoaders.
change state to FrameStateComplete .


4. function called in different state
a.FrameStateComplete

b.FrameStateProvisional
FrameLoader::init{
FrameLoader::commitProvisionalLoad
FrameLoader::transitionToCommitted
history()->updateForCommit();
//set document loader
DocumentWriter::begin
FrameLoader::finishedParsing()
FrameLoader::completed()
FrameLoader::checkLoadComplete()//Called every time a resource is completely loaded or an error is received.
}
FrameLoader::load{
m_policyDocumentLoader= m_documentLoader;
FrameLoader::callContinueLoadAfterNavigationPolicy;
FrameLoader::continueLoadAfterNavigationPolicy;
FrameLoader::stopAllLoaders;
m_provisionalDocumentLoader=new;
FrameLoader::provisionalLoadStarted
m_policyDocumentLoader=NULL;
}
MainResourceLoader::didReceiveResponse{
FrameLoader::commitProvisionalLoad()
FrameLoader::transitionToCommitted
m_documentLoader=new
m_provisionalDocumentLoader=NULL:
FrameLoader::receivedFirstData()
FrameLoader::didBeginDocument
FrameLoader::finishedLoading()
FrameLoader::finishedParsing()
FrameLoader::checkLoadCompleteForThisFrame()
}
c.FrameStateCommittedPage


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值