该特性主要包含两个js接口:window.external.AddSearchProvider(sUrl) 和 pdwResult = window.external.IsSearchProviderInstalled(sUrl)。主要功能是可以通过js来提示用户添加和管理搜索引擎。可以参见这个网页的介绍。
既然是js接口,那么首要的任务就是让v8能够识别这两个函数。自然的想法是在WebCore中增加C++文件External.cpp及相应的External.idl,就像其他的js调用所做的那样。但chromium中用了另外一种js外部扩展的方法,即继承v8::Extension类,将要实现的函数写到子类里,可以参见external_extension.cc文件的实现。按我的猜测V8如果通过正常途径无法识别js函数,就会找v8::Extension类中是否有同名函数可供使用。这种外部扩展的方法可以完全的绕过WebKit,不修改其任何代码。
通过标准的介绍可以知道,AddSearchProvider函数的参数是一个xml文件,那么浏览器需要做的事情有两件:一是下载该xml文件,二是解析xml文件的内容。
chromium通过net::URLFetcher这个类来下载文件,向其传入url等参数构建