loader()->load函數(shù)里面,那么在這個(gè)函數(shù)里面到底是怎么樣處理的呢,只有去分析它的代碼,我們才能找到它的答案,現(xiàn)在就來(lái)開始看吧,如下:#001voidFrameLoader::load(constResourceRequest&request)#002{#003load(request,SubstituteData());#004}在這個(gè)函數(shù)也只是一個(gè)中間者,它又調(diào)用函數(shù)loa" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

谷歌瀏覽器的源碼分析(24)

系統(tǒng) 2287 0
繼續(xù)上一次的分析,這里開始把連接址和其它相關(guān)的信息傳送 frame_->loader()->load 函數(shù)里面,那么在這個(gè)函數(shù)里面到底是怎么樣處理的呢,只有去分析它的代碼,我們才能找到它的答案,現(xiàn)在就來(lái)開始看吧,如下:

#001 ? void FrameLoader::load(const ResourceRequest& request)

#002 ? {

#003 ????? load(request, SubstituteData());

#004 ? }

在這個(gè)函數(shù)也只是一個(gè)中間者,它又調(diào)用函數(shù) load 函數(shù)的重載函數(shù)來(lái)實(shí)現(xiàn)了。

#001 ? void FrameLoader::load(const ResourceRequest& request, const SubstituteData& substituteData)

#002 ? {

#003 ????? if (m_inStopAllLoaders)

#004 ?? ??????? return;

#005 ?????????

#006 ????? // FIXME: is this the right place to reset loadType? Perhaps this should be done after loading is finished or aborted.

# 007 ????? m _loadType = FrameLoadTypeStandard;

#008 ????? load(m_client->createDocumentLoader(request, substituteData).get());

#009 ? }

#010 ?

在這個(gè)函數(shù)里,第一個(gè)參數(shù) request 是連接相關(guān)的信息,第二個(gè)參數(shù) substituteData 是一些狀態(tài)數(shù)據(jù)。然后在第 7 行里設(shè)置加載的類型,第 8 行里調(diào)用 WebFrameLoaderClient::createDocumentLoader 函數(shù)來(lái)創(chuàng)建 WebDocumentLoaderImpl 對(duì)象,然后再通過 get 函數(shù)返回來(lái),這樣就知道 load 函數(shù)又調(diào)用那個(gè)重載函數(shù)了,原來(lái)它是調(diào)用這個(gè)函數(shù),如下:

#001 ? void FrameLoader::load(DocumentLoader* newDocumentLoader)

#002 ? {

#003 ????? ResourceRequest& r = newDocumentLoader->request();

#004 ????? addExtraFieldsToRequest(r, true, false);

#005 ????? FrameLoadType type;

#006 ?

#007 ????? if (shouldTreatURLAsSameAsCurrent(newDocumentLoader->originalRequest().url())) {

#008 ????????? r.setCachePolicy(ReloadIgnoringCacheData);

#009 ????????? type = FrameLoadTypeSame;

#010 ????? } else

#011 ????????? type = FrameLoadTypeStandard;

#012 ?

#013 ????? // Do not use original encoding override since it is not loaded by user

#014 ????? // selecting encoding.

#015 ????? if (m_documentLoader)

#016 ????????? newDocumentLoader->setOverrideEncoding(String());

#017 ?????

#018 ????? // When we loading alternate content for an unreachable URL that we're

#019 ????? // visiting in the b/f list, we treat it as a reload so the b/f list

#020 ????? // is appropriately maintained.

#021 ????? if (shouldReloadToHandleUnreachableURL(newDocumentLoader)) {

#022 ????????? ASSERT(type == FrameLoadTypeStandard);

#023 ???????? ? type = FrameLoadTypeReload;

#024 ????? }

#025 ?

#026 ????? load(newDocumentLoader, type, 0);

#027 ? }

上面只對(duì) newDocumentLoader 做一些準(zhǔn)備工作,并沒有真正地去加載任何東西,接著又調(diào)用函數(shù):

void FrameLoader::load(DocumentLoader* loader, FrameLoadType type, PassRefPtr<FormState> formState)

在上面這個(gè)函數(shù)進(jìn)行安全策略的處理,然后再經(jīng)過 N 個(gè)函數(shù)處理之后,就調(diào)用下面的函數(shù):

void FrameLoader::continueLoadAfterWillSubmitForm(PolicyAction)

在這個(gè)函數(shù)開始使用類 DocumentLoader 來(lái)設(shè)置下載請(qǐng)求,主要通過函數(shù)

bool DocumentLoader::startLoadingMainResource(unsigned long identifier)

來(lái)實(shí)現(xiàn)的,緊跟后面調(diào)用加載函數(shù):

bool MainResourceLoader::load(const ResourceRequest& r, const SubstituteData& ? substituteData)

在這個(gè)函數(shù)里又開始分為兩種情況處理,一種是延進(jìn)加載數(shù)據(jù),一種是立即加載數(shù)據(jù),下面主要介紹立即加載數(shù)據(jù)函數(shù):

bool MainResourceLoader::loadNow(ResourceRequest& r)

在類 MainResourceLoader 是主要資源下載的管理類, loadNow 函數(shù)是把資源請(qǐng)求 ResourceRequest 變成一個(gè) IPC 消息又發(fā)送給資源下載進(jìn)程去處理。它的簡(jiǎn)略代碼如下:

#001 ? bool MainResourceLoader::loadNow(ResourceRequest& r)

#002 ? {

......

#011 ????? willSendRequest(r, ResourceResponse());

#012 ?

......

?

#015 ????? if (!frameLoader())

#016 ? ???????? return false;

#017 ?????

......

#023 ?

#024 ????? if (m_substituteData.isValid())

#025 ????????? handleDataLoadSoon(r);

#026 ????? else if (shouldLoadEmpty || frameLoader()->representationExistsForURLScheme(url.protocol()))

#027 ????????? handleEmptyLoad(url, !shouldLoadEmpty);

#028 ????? else

# 029 ????????? m _handle = ResourceHandle::create(r, this, m_frame.get(), false, true, true);

#030 ?

#031 ????? return false;

#032 ? }

在這個(gè)函數(shù)的第 29 行里,就會(huì)通過 ResourceHandle::create 函數(shù)創(chuàng)建一個(gè)資源消息,并把這個(gè)消息發(fā)送出去,到底它是怎么樣實(shí)現(xiàn)的呢?下一次再來(lái)分析它。

谷歌瀏覽器的源碼分析(24)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩成人在线网站 | 中文字幕网在线 | 欧美精品一区二区三区在线播放 | 国产69精品久久久久99不卡 | 精品国产精品 | 久久久99精品 | 一级毛片免费毛片一级毛片免费 | 99国产精品久久久久久久成人热 | 精品无人区乱码一区二区三区手机 | sss欧美华人整片在线观看 | 4hu四虎最新免费地址 | 久久ri精品高清一区二区三区 | 亚洲一区小说区中文字幕 | 精品久久亚洲 | 国产真实强j视频在线观看 国产真实偷乱视频在线观看 | 九九在线视频 | 欧美高清理论片在线观看 | 国产a毛片高清视 | 久久久99视频| 乡下女色又黄一级毛片 | 狠狠色丁香婷婷久久综合考虑 | 日本不卡高清免费v日本 | 国产成人免费不卡在线观看 | 国产成人精视频在线观看免费 | 一级毛片aa高清免费观看 | 欧美激情在线观看一区二区三区 | 精品欧美一区二区三区在线 | 午夜影院0606 | 国产一区二区三区免费视频 | 亚洲精品欧美日韩 | 久久国产精品久久精 | 香蕉国产在线观看免费 | 一级毛片视频播放 | 亚洲欧美一区在线 | 国产在线播放一区 | 日本成年一区久久综合 | 天天干夜夜艹 | 国产亚洲欧洲国产综合一区 | 成人久久久精品乱码一区二区三区 | 九九热在线视频观看 | 亚洲午夜视频在线 |