WebKit源码解析之network移植接口

转载,请注明出处!

        WebCore模块需要下载某资源时,会使用ResourceRequest对象来记录资源的地址,然后将资源地址传递给目标平台网络模块,最后利用目标平台网络模块下载资源。为了方便移植,WebCore模块严格定义了网络模块需要提供的功能。主要功能如下:

  1. 具有一个接受下载请求的接口。现在这个接口由ResourceHandle类提供,是一个静态方法。方法名称是ResourceHandle::create。
  2. 自主维护下载请求队列。WebCore模块不关心下载队列的具体形式,只要网络模块处理所有的下载请求就可以了。
  3. 每当下载到数据时,调用“指定接口”将数据传递给“指定对象”。WebCore模块在传递请求的同时,会传递一个接受下载数据的ResourceHandleClient对象。每当网络模块下载到数据时,就要调用ResourceHandleClient::didReceiveData接口传递数据。
  4. 当下载完所有数据时,调用“指定接口”将“完成时间”传递给“指定对象”。WebCore模块在传递请求的同时,会传递一个接受下载数据的ResourceHandleClient对象。每当网络模块下载到数据时,就要调用ResourceHandleClient::didFinishLoading接口传递完成时间。
        network移植层的模型如下图所示:


目标平台网络模块的工作模型


        WebKit内核可用的网络接口完全由ResourceHandle对象类确定。目前ResourceHandle类提供的功能为:

  • 发送异步下载请求。方法是执行静态方法ResourceHandle::create。
  • 发送同步下载请求。方法是执行静态方法ResourceHandle::loadResourceSynchronously。
  • 确定请求的目标资源是否在缓存池中。目前只有固定的几个平台支持这个功能,具体有Android平台、qt平台。方法是执行静态方法ResourceHandle::willLoadFromCache。
  • 把指定资源与一串特殊信息存储到缓存池中。目前只有chrome浏览器支持这个功能。方法是执行静态方法ResourceHandle::cacheMetaData。
  • 网页侦测相关接口,具体接口有shouldContentSniff, shouldContentSniffURL, forceConentSniffing。这些接口的作用和意义我不太明白。
  • 检测是否正在处理同步下载请求,接口为loadsBlocked。此接口的意义是我的猜测。
  • 认证功能,具体接口有hasAuthenticationChallenge, clearAuthentication。
  • 取消对异步下载请求的处理。方法是执行实例方法cancel。
  • 设置以及获取网络数据的客户。如果网络模块下载到了数据,会将数据传给这个客户。方法是执行实例方法client, setClient。
  • 延迟处理异步下载请求。android平台以及windows平台不支持。方法是执行实例方法 setDeferLoading。
  • 查询异步请求的信息。方法有firstRequest, loastHTTPMethod,这些方法都是实例方法。
  • 错误处理。错误处理是通过timer事件触发的。因此,错误处理肯定是由主线程完成的。方法是fireFailure。
  • 允许客户端扩展协议的处理方法。方法是用静态方法ResourceHandle::registerBuiltinConstructor注册指定协议的处理函数。
        平台网络模块下载到的数据后,会执行ResourceHandleClient接口的方法将数据传递给WebKit内核。只有实现ResourceHandleClient接口,才能使用网络模块下载的数据。WebKit内核提供了接口ResourcHandleClient的一个默认实现ResourceLoader类。ResourceLoader类作为ResourceHandlerClient,提供了两个基本的功能:第一、接收、解析、存储应答报文的首部行;第二、接收应答报文的有效数据。另外,ResourceLoader还负责创建ResourceHandle对象,封装、使用ResourceHandle的方法。简单来说,只要WebKit内核创建了ResourceLoader对象,那么既可以向平台的网络模块发送下载请求,也可以接收网络模块下载的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值