首先先说明环境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 { //...
//... startLoad(request, newLoadType, policy);} 上面文件是D:\cefcode\chromium\src\third_party\WebKit\Source\core\loader\FrameLoader.cppcreateWindowForRequest(request, *m_frame, policy, request.shouldSendReferrer(), request.shouldSetOpener());
然后第一次是先进入createWindowForRequest 函数里面。然后进入下一个文件
D:\cefcode\chromium\src\third_party\WebKit\Source\core\page\CreateWindow.cpp line 174void createWindowForRequest(const FrameLoadRequest& request, LocalFrame& openerFrame, NavigationPolicy policy, ShouldSendReferrer shouldSendReferrer, ShouldSetOpener shouldSetOpener) { //... Frame* newFrame = createWindow(openerFrame, openerFrame, request, features, policy, shouldSetOpener, created); //... }
然后进入了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