cef支持各类语言和多种操做系统。在设计的时候充分考虑了性能和易用性。cef核心功能提供了c和c++的接口。cef提供了和主程序之间的通讯能力(利用 custom plugins, protocols,javascrpit object 和 javascript extensions)。主应用程序能够选择性的使用控制 资源的加载,切换, context menus, printing等。javascript
依赖
- chromium
- webkit
- v8
- skia
- angle
线程注意事项
CEF线程有以下几种java
typedef enum {
TID_UI,
TID_DB,
TID_FILE,
TID_FILE_USER_BLOCKING,
TID_PROCESS_LAUNCHER,
TID_CACHE,
TID_IO,
TID_RENDERER,
} cef_thread_id_t;
在使用线程的时候须要注意以下几点:c++
- 千万不要阻塞UI线程
- UI线程会任务是主线程,当 CefSettings.multi_threaded_message_loop = false的时候。
- 全部的webkit和V8的交互必须用 TID_RENDERER线程
- CefPostTask 方法能够再不一样线程中进行异步调用
接口
- CefApp,此接口用来传递到CefInitialize(),和容许应用程序定制全局,如资源加载,代理。这些功能是由全部进程共享的,有些必须实现浏览器的过程当中,必须在渲染过程当中执行。见详情头文件的注释。
- CefClient,此接口用来传递到CefCreateBrowser() or CefCreateBrowserSync(),和充当单独CEF Browser事例和客户端应用程序的链接,也负责请求和显示处理的接口。请求处理,显示处理等额外的接口,经过这个接口暴露。
- CefBrowser,公开由浏览器提供的功能。包括前进后退导航,来源检索,加载请求等,一个CefBrowser可能有一到多个子类的CefFrame对象。在一个特定的过程或一个特定的线程必须调用一些方法,因此仔细阅读文档。
- CefBrowserHost - 公开有关运行browser进程中惟一可用的browser窗口的功能。例如,检索本地父窗口句柄,或销毁browser窗口。
CefRenderProcessHandler - 公开WebKit和V8对渲染进程中应用程序的集成能力。经过CefApp返回此对象的一个实例。
进程注意事项
CEF3使用了不少不一样的进程:web
- Broser process- 这个进程能够认为是应该程序的主进程,当调用CefInitialize()的时候创建
- Render process- web容器(webkit和v8)在此进程中执行
- plugin process- 插件(如 Flash)
- GPU process-GPU渲染进程
- Utility process- 各类其余任务在这个进程中跑。
全部关于chrome 进程的资料能够在这里和这里找到。chrome
CefBrowser 和 CefFrame 在browser和render进程中都存在,而且传递一系列callbacks。 CefProcessMessage可以在browser进中利用CefBrowser::SendProcessMessage 函数发出, 而且在CefClient::OnProcessMessageRecieved 和CefRenderProcessHandler::OnProcessMessageRecieved 接收。浏览器
重要的细节
CEF3 有以下几个比较重要的类:异步
- CefMainDelegate - 用于普通进程的逻辑过程
- CefContentClient- 在普通进程 展示Content Api的回调。
- CefContext-在browser进程中,展示全局的CEF上下文。 一个单独的CefContext对象时由CefInitialize()创建,有CefShutdown销毁。
- CefBrowserMainParts- browser 进程的逻辑
- CefContentBrowserClient-在browser 进程展示Content Api的回调。
- CefBrowserHostImpl-是CefBrowserHost 的实现
- CefContentRendererClient- 在render 进程中展示Content Api的回调
- CefBrowserImpl- CefBrowser的实现者