“委托”代表的数量是多少?
一个URLRequest通过两个主要接口向使用者通报重要事件:URLRequest::Delegate接口和NetworkDelegate接口。
URLRequest::Delegate接口由一小组回调函数组成,用于让嵌入式设备驱动请求前进。NetworkDelegate是由所有请求共享的由URLRequestContext指向的对象,并包括对应于大部分URLRequest::Delegate回调函数的回调以及其他各种方法。
网络服务和Mojo 网络服务位于//services/network/,封装了//net/对象,并为Chrome的其余部分提供跨进程网络API及其实现。网络服务使用“network”这个名称空间来定义其所有类。它提供的Mojo接口在network::mojom命名空间中。Mojo是Chrome的IPC层。一般来说,在使用者的过程中有一个mojo::Remotenetwork::mojom::Foo代理对象,同时也实现了network::mojom::Foo接口。当调用代理对象的方法时,它会通过Mojo IPC通道将调用及其参数传递给网络服务中的network::mojom::Foo接口的实现(通常是命名为network::Foo的类),该实现可能在另一个进程、使用者过程中的另一个线程,甚至是使用者过程中的同一线程中运行。
network::NetworkService对象是单例对象,用于创建所有其他网络服务对象。它主要用于创建network::NetworkContexts,每个NetworkContext都拥有自己独立的URLRequestContext。Chrome有许多不同的NetworkContext,因为通常需要针对不同类型的请求(根据发出请求的内容)分别保留cookie、缓存和套接字池等状态。以下是Chrome使用的主要NetworkContext:
系统NetworkContext由Chrome的SystemNetworkContextManager创建和拥有,用于与特定用户或配置文件无关联的请求。它没有磁盘存储,因此在每次浏览器重新启动时会丢失所有状态,如cookie。它也没有内存中的http缓存。SystemNetworkContextManager还设置全局网络服务首选项。 每个Chrome配置文件(包括隐身配置文件)都有自己的NetworkContext。除了隐身和来宾配置文件之外,这些上下文将信息存储在它们自己的磁盘存储器中,其中包括cookie和HTTP缓存等内容。每个NetworkContext都是由浏览器进程中的一个StoragePartition对象拥有并由Profile的ProfileNetworkContextService创建。 在支持应用程序的平台上,每个配置文件都有一个适用于该配置文件上安装的每个应用程序的NetworkContext。与主NetworkContext一样,这些可能具有磁盘数据,具体取决于配置文件和应用程序。