cef浏览器 url加载内部详解

首先先说明环境cef2623 webkit内核浏览器探索

    void fire(LocalFrame* frame) override
    {
        OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
        FrameLoadRequest frameRequest(originDocument());
        m_submission->populateFrameLoadRequest(frameRequest);
        frameRequest.setReplacesCurrentItem(replacesCurrentItem());
        frameRequest.setTriggeringEvent(m_submission->event());
        frameRequest.setForm(m_submission->form());
        frame->loader().load(frameRequest);
    }

上面代码位置为:D:\cefcode\chromium\src\third_party\WebKit\Source\core\loader\NavigationScheduler.cpp line230

然后进入到了frame->loader().load(frameRequest) 函数里面。这个函数里面包括所有的load行为。

void FrameLoader::load(const FrameLoadRequest& passedRequest, FrameLoadType frameLoadType,
    HistoryItem* historyItem, HistoryLoadType historyLoadType)//line873
{
//...
createWindowForRequest(request, *m_frame, policy, request.shouldSendReferrer(), request.shouldSetOpener());
//... startLoad(request, newLoadType, policy);}
 上面文件是D:\cefcode\chromium\src\third_party\WebKit\Source\core\loader\FrameLoader.cpp 
 

然后第一次是先进入createWindowForRequest 函数里面。然后进入下一个文件

void createWindowForRequest(const FrameLoadRequest& request, LocalFrame& openerFrame, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer, ShouldSetOpener shouldSetOpener)
{
//...
    Frame* newFrame = createWindow(openerFrame, openerFrame, request, features, policy, shouldSetOpener, created);
//...
}
D:\cefcode\chromium\src\third_party\WebKit\Source\core\page\CreateWindow.cpp line 174

然后进入了createwindow


static Frame* createWindow(LocalFrame& openerFrame, LocalFrame& lookupFrame, const FrameLoadRequest& request, const WindowFeatures& features, NavigationPolicy policy, ShouldSetOpener shouldSetOpener, bool& created)
{
//...

    Page* page = oldHost->chromeClient().createWindow(&openerFrame, request, features, policy, shouldSetOpener);
    if (!page)
        return nullptr;
    FrameHost* host = &page->frameHost();

    ASSERT(page->mainFrame());
    Frame& frame = *page->mainFrame();

    if (request.frameName() != "_blank")
        frame.tree().setName(request.frameName());
//...

}


首先进入FrameLoader::loader()

扫描二维码关注公众号,回复: 4642944 查看本文章

D:\cefcode\chromium\src\third_party\WebKit\Source\core\loader\FrameLoader.cpp

猜你喜欢

转载自blog.csdn.net/qd1308504206/article/details/79067466