随着chrome内核的不断升级,chrome可以提供的项目也越来越多,chrome for android提供了太多我们可以使用的东西,我们甚至可以把它当做一个小型的操作系统来看待.
不过chrome for android却没有能够提供下载管理以及下载模块接口的暴露(这里面说的接口指直接接口,类似于API性质的接口).
那么chrome是如何处理文件下载的呢?
交给系统downloadManager,没错,就是交给系统.
如果让你来基于chrome来开发一款浏览器,有自己的下载功能和界面管理,那么你会去如何实现呢?当然比较简单的做法是拿到下载链接地址后,建立http请求进行下载,然后做自己的UI界面,不过这样做和chrome又有什么关系呢?
如果是基于chrome做下载管理的功能,那么可能的做法是,基于chrome extention做,或者基于PPAPI做,当然也可以使用chrome自带的为暴露出来的下载功能.
基于chrome extention做的多线程下载插件,大家可以在网上搜索一下,UI做的还是不错的,就是稳定性差了些.
在调试的过程中,如何让chrome判断出的url为下载链接之后,直接使用自己的下载功能进行下载呢?代码需要改的地方比较分散,我这里只贴出调用栈信息,当然,如果你是做chrome相关开发的,也很容易跟踪到调用栈信息,然后进行修改.
void blink::frameLoaderClientImpl::loadURLExternally(const ResourceRequest& request, NavigationPolicy policy, const String& suggestedName)
void content RenderframeImpl::loadURLExternally
RenderframeImpl::Send(new ViewHostMsg_DownloadUrl(render_view_->GetRoutingID(),request.url(), referrer,suggested_name))