外部辅助应用程序服务

外部辅助应用程序服务负责确定如何处理尝试加载浏览器本身无法加载的内容。

这部分涉及使用处理程序服务,该服务管理用户对不同内容的默认操作偏好。

加载期间

当内容正在加载时,URI 加载器服务 会确定浏览器是否可以处理该内容。如果不能,则它会通过 nsExternalHelperAppService::DoContent 调用外部辅助应用程序服务器。

加载内容的内容类型从通道中检索。文件扩展名也是使用 Content-Disposition 标头生成的,或者如果加载不是 HTTP POST 请求,则文件扩展名是从请求的 URL 生成的。

然后,我们查询 MIME 服务以获取 nsIMIMEInfo 以查找有关可以处理内容类型或文件扩展名的应用程序的信息(基于操作系统和用户设置),请参见下文 以获取更多详细信息。结果用于创建一个 nsExternalAppHandler,然后将其用作内容的流监听器。

MIME 信息对象包含控制在执行任何操作之前是否提示用户以及默认操作应是什么的设置。如果我们需要询问用户,则会显示一个对话框,允许用户取消加载、将内容保存到磁盘或将其发送到注册的应用程序处理程序。

假设加载未取消,则内容将使用具有目标 nsITransfer 的后台文件保存器流式传输到磁盘。nsITransfer 负责在 UI 中显示下载。

如果用户选择使用应用程序打开文件,则传输完成后,将使用 nsIMIMEInfo::LaunchWithFile 启动应用程序

MIME 服务

MIME 服务负责获取内容类型或文件扩展名的 nsIMIMEInfo 对象。

  1. 基于操作系统提供的信息填写 nsIMIMEInfo。这是特定于平台的,但应尝试查找注册为处理内容的默认应用程序。

  2. 请求处理程序服务使用浏览器设置中保存的信息填写 nsIMIMEInfo。这不会覆盖从操作系统找到的任何应用程序。

  3. 如果尚未找到,则尝试从 查找表 中查找类型描述,或者仅通过在文件扩展名后附加“文件”来查找。