首页 > 代码库 > android4.4 webview chromium显示网页的chromium内核结构
android4.4 webview chromium显示网页的chromium内核结构
android4.4 webview chromium是单进程的,图中所有组件都运行在Browser进程中。
按从上而下的顺序介绍这张图中与显示网页相关的chromium内核结构。
1.AwContents->WebContentsImpl
AwContnents的创建过程如下图:
AwContents是WebView接口的主要实现类。
native层的AwContents包含chromium内核browser组件中的类WebContents。
WebContents是chromium内核browser组件的入口。
我们看AwContents的java层和native层的结构。
ContentViewCore:
java层AwContents将WebView的接口调用转接给java层ContentViewCore。native层
ContentViewCore包含Browser组件的入口WebContentsImpl。真正实现WebView功能
的是WebContentsImpl。
AwContentsClient:
AwContentsClient的实现类WebViewContentsClientAdapter包含在WebViewChromium中,
WebViewChromium利用这个类接收AwContents的回调。WebViewContentsClientAdapter
封装了应用层实现的WebViewClient和WebChromeClient.
AwContentsClientBridge:
为AwContentsClient处理js相关的jni通信。
AwWebContentsDelegate:
是AwContentsClient接口的一部分,用于接收WebContentsImpl模块的回调。
AwWebContentsDelegate将具体实现都转接给AwContentsClient。
WebContentsImpl创建过程如下:
2.WebContentsImpl->Renderer host
RenderWidgetHostDelegate:
对RenderWidgetHost的状态感兴趣的类都会实现这个接口。用于接收RenderWidgetHost的状态变化通知。
RenderViewHostDelegate:
对RenderViewHost的状态感兴趣的类都会实现这个接口。用于接收RenderViewHost的状态变化通知。
RenderViewHostManager负责创建和管理WebContentsImpl中用到的RenderViewHosts。
WebContentsImpl的构造函数中创建了RenderViewHostManager实例,并将自身作为RenderWidgetHostDelegate
和RenderViewHostDelegate的实例传给RenderViewHostManager。
RenderViewHostManager通过回调这两个接口通知WebContentsImpl当前RenderWidgetHost和RenderViewHost
的状态变化。
RenderViewHostImpl的创建过程如下。
RenderViewHostImpl与RenderViewImpl是一一对应的。
3.renderer host->renderer
renderer组件中RenderViewImpl是核心模块。
下图是应用层触发的RenderViewImpl创建过程。
4.renderer->webkit glue
RenderViewImpl结构图
WebKit::WebView的创建过程
RenderViewImpl::Create()调用RenderViewImpl的构造函数创建
RenderViewImpl的实例,之后调用RenderViewImpl::Initialize:
RenderViewImpl::Initialize(){
webwidget_ = WebView::create(this);
}
RenderWidget的实例创建是由下来函数触发的:
RenderViewImpl::createPopupMenu(){
RenderWidget* widget =
RenderWidget::Create(routing_id_, popup_type, screen_info_);
return widget->webwidget();
}
RenderWidget::Create()只有这一个入口。
用来创建不同类型的弹出窗口。
5. webkit glue->WebKit
WebViewImpl的结构图: