webcore执行的大致流程如下:
1 通过URL构造请求
1 WebMutableURLRequest::initWithURL(
BSTR url,
WebURLRequestCachePolicy cachePolicy,
double timeoutInterval);
url:URL地址
cachePolicy:这实际是个枚举类型
typedef enum _WebURLRequestCachePolicy
{
WebURLRequestUseProtocolCachePolicy,
WebURLRequestReloadIgnoringCacheData,
WebURLRequestReturnCacheDataElseLoad,
WebURLRequestReturnCacheDataDontLoad
} WebURLRequestCachePolicy;
timeoutInterval:用来设置超时的时间
2 WebMutableURLRequest::setHTTPMethod(
BSTR method)
method:GET or POST
2 载入请求
WebFrame::loadRequest(
IWebURLRequest* request);
Request:请求对象指针
具体的函数调用栈如下:
3 资源的下载
Loader模块会首先判断资源是否在cache中,如果没有,会调用相关平台的下载库,这里是CFNetwork,调用的是CFNetwork.dll
4 数据的接收
具体过程如下
static void didReceiveData(CFURLConnectionRef conn, CFDataRef data, CFIndex originalLength, const void* clientInfo);
void FrameLoader::receivedFirstData()
HRESULT WinLauncherWebHost::updateAddressBar(IWebView* webView)
函数调用栈如下:
5 数据的处理---创建dom树和render树
入口点:
void HTMLDocumentParser::pumpTokenizer(SynchronousMode mode)
在生成DOM树每个节点的同时,同步生成Layout树的每个节点,其中保存了布局信息,和CSS样式信息。
6数据的显示
调用平台相关的图形库,我这里是CoreGraphics库