首先先说明环境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()
D:\cefcode\chromium\src\third_party\WebKit\Source\core\loader\FrameLoader.cpp