上一次说到在类
ResourceDispatcher
会收到接收
HTTP
数据消息,并进一步处理数据。那么
ResourceDispatcher
类又把接收到的数据发往何处呢?这是需要我们去搞懂它的。通过进一步的跟踪,会发现在
ResourceDispatcher::OnReceivedData
函数调用
WebCore::ResourceHandleInternal
类来处理,也就是把接收到的数据抛给
WebCore
来处理了。如下面的代码:
#001
void ResourceDispatcher::OnReceivedData(int request_id,
#002
SharedMemoryHandle shm_handle,
#003
int data_len) {
#004
// Acknowlegde the reception of this data.
#005
IPC::Message::Sender* sender = message_sender();
......
#023
if (data_len > 0 && shared_mem.Map(data_len)) {
#024
RESOURCE_LOG("Dispatching " << data_len << " bytes for " <<
#025
request_info.peer->GetURLForDebugging());
#026
const char* data = static_cast<char*>(shared_mem.memory());
#027
request_info.peer->OnReceivedData(data, data_len);
#028
}
#029
}
上面第
27
行代码就是调用
webcore
里类
ResourceHandleInternal::OnReceivedData
函数,这样就把数据保存到
webcore
里面,也就是
webkit
里面了。经过如下面的调用过程:
1)
WebCore::ResourceLoader::didReceiveData
2)
WebCore::SubresourceLoader::didReceiveData
3)
WebCore::Loader::didReceiveData
4)
WebCore::CachedImage::data
这里就是把图像的数据缓存起来,以便后面调用渲染引擎来显示。这一次就分析到这里,总算把数据怎么样放到
webkit
里搞清楚了,下一次再来看看
webkit
是怎么样把数据显示出来的。