在前面的webview创建过程分析(二)中我们分析了WebViewChromium的创建过程,在文章的最后我们把AwContents的创建过程先忽略了,在这篇文章里我们将接着前面的内容来分析AwContents的创建过程。先看下AwContents的构造函数代码
public AwContents(AwBrowserContext browserContext, ViewGroup containerView, Context context,
InternalAccessDelegate internalAccessAdapter,
NativeDrawFunctorFactory nativeDrawFunctorFactory, AwContentsClient contentsClient,
AwSettings settings, DependencyFactory dependencyFactory) {
try (ScopedSysTraceEvent e1 = ScopedSysTraceEvent.scoped("AwContents.constructor")) {
mRendererPriority = RendererPriority.HIGH;
mSettings = settings;
updateDefaultLocale();
mBrowserContext = browserContext;
// setWillNotDraw(false) is required since WebView draws its own contents using its
// container view. If this is ever not the case we should remove this, as it removes
// Android's gatherTransparentRegion optimization for the view.
mContainerView = containerView;
mContainerView.setWillNotDraw(false);
mContext = context;
mAutofillProvider = dependencyFactory.createAutofillProvider(context, mContainerView);
mAppTargetSdkVersion = mContext.getApplicationInfo().targetSdkVersion;
mInternalAccessAdapter = internalAccessAdapter;
mNativeDrawFunctorFactory = nativeDrawFunctorFactory;
mContentsClient = contentsClient;
mContentsClient.getCallbackHelper().setCancelCallbackPoller(
() -> AwContents.this.isDestroyedOrNoOperation(NO_WARN));
mAwViewMethods = new AwViewMethodsImpl();
mFullScreenTransitionsState = new FullScreenTransitionsState(
mContainerView, mInternalAccessAdapter, mAwViewMethods);
mLayoutSizer = dependencyFactory.createLayoutSizer();
mLayoutSizer.setDelegate(new AwLayoutSizerDelegate());
//1.创建AwWebContentsDelegateAdapter
mWebContentsDelegate = new AwWebContentsDelegateAdapter(
this, contentsClient, settings, mContext, mContainerView);
//2.创建AwContentsClientBridge,用来包装contentsClient
mContentsClientBridge = new AwContentsClientBridge(
mContext, contentsClient, AwContentsStatics.getClientCertLookupTable());
//3.创建AwZoomControls
mZoomControls = new AwZoomControls(