构建windows桌面应用程序,使用cef3框架,其中实现加载本地资源方式为zip压缩包的形式(同样的方式也可以做成动态库形式,或者直接以win32资源加载的形式)。
具体实现如下:
实现自己的provider
class PcmBinaryResourceProvider : public CefResourceManager::Provider {
public:
explicit PcmBinaryResourceProvider(const std::string& url_path)
: url_path_(url_path) {
DCHECK(!url_path.empty());
}
bool OnRequest(scoped_refptr<CefResourceManager::Request> request) OVERRIDE
{
CEF_REQUIRE_IO_THREAD();
const std::string& url = request->url();
if (url.find(url_path_) != 0L) {
// Not handled by this provider.
return false;
}
CefRefPtr<CefResourceHandler> handler;
const std::string& relative_path = url.substr(url_path_.length());
if (!relative_path.empty()) {
CefRefPtr<CefStreamReader> stream =
GetBinaryResourceReader(relative_path.data());
if (stream.get()) {
handler = new CefStreamResourceHandler(
request->mime_type_resolver().Run(url),
stream);
}
}
request->Continue(handler);
return true;
}
private:
std::string url_path_;
DISALLOW_COPY_AND_ASSIGN(PcmBinaryResourceProvider);
};
CefResourceManager::Provider* CreatePcmBinaryResourceProvider(
const std::string& url_path)
{
return new PcmBinaryResourceProvider(url_path);
}
最后在test_runner.cc中添加(标红字段):
void SetupResourceManager(CefRefPtr<CefResourceManager> resource_manager) {
if (!CefCurrentlyOn(TID_IO)) {
// Execute on the browser IO thread.
CefPostTask(TID_IO, base::Bind(SetupResourceManager, resource_manager));
return;
}
const std::string& test_origin = kTestOrigin;
// Add the URL filter.
resource_manager->SetUrlFilter(base::Bind(RequestUrlFilter));
// Add provider for resource dumps.
resource_manager->AddProvider(
new RequestDumpResourceProvider(test_origin + "request.html"), 0,
std::string());
// Add provider for bundled resource files.
#if defined(OS_WIN)
// Read resources from the binary.
//resource_manager->AddProvider(
// CreateBinaryResourceProvider(test_origin, std::string()), 100,
// std::string());
const std::string& pcm_origin = kPcmOrigin;
resource_manager->AddProvider(CreatePcmBinaryResourceProvider(pcm_origin),
100, std::string());
#elif defined(OS_POSIX)
// Read resources from a directory on disk.
std::stri