diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-12-03 17:21:27 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-12-03 16:22:15 +0000 |
commit | 42165222878a38f10aaedf3a123ae7200a85a091 (patch) | |
tree | 808af36aaa46d2bce4e7504832448d3015ffb875 /chromium/weblayer | |
parent | 32f5a1c56531e4210bc4cf8d8c7825d66e081888 (diff) | |
download | qtwebengine-chromium-42165222878a38f10aaedf3a123ae7200a85a091.tar.gz |
BASELINE: Update Chromium to 87.0.4280.89
Change-Id: Icee7f7f1a9711f11c4dd69f1a8b019bf6d084359
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/weblayer')
-rw-r--r-- | chromium/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/chromium/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java b/chromium/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java index 33cf0142bcd..2c37a005c41 100644 --- a/chromium/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java +++ b/chromium/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java @@ -708,11 +708,12 @@ public final class WebLayerImpl extends IWebLayer.Stub { String sandboxedServicesName = "org.chromium.weblayer.ChildProcessService$Sandboxed"; boolean isExternalService = false; boolean loadedFromWebView = wasLoadedFromWebView(appContext); - if (loadedFromWebView && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - // On O+ when loading from a WebView implementation, we can just use WebView's declared - // external services as our renderers, which means we benefit from the webview zygote - // process. We still need to use the client's privileged services, as only isolated - // services can be external. + if (loadedFromWebView && supportsBindingToWebViewService(appContext, implPackageName)) { + // When loading from a WebView implementation, use WebView's declared external services + // as our renderers. This means on O+ we benefit from the webview zygote process, and on + // other versions we ensure the client app doesn't slow down isolated process startup. + // We still need to use the client's privileged services, as only isolated services can + // be external. isExternalService = true; sandboxedServicesPackageName = implPackageName; sandboxedServicesName = null; @@ -724,6 +725,29 @@ public final class WebLayerImpl extends IWebLayer.Stub { ignoreVisibilityForImportance); } + private static boolean supportsBindingToWebViewService(Context context, String packageName) { + // BIND_EXTERNAL_SERVICE is not supported before N. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + return false; + } + + // Android N has issues with WebView with the non-system user. + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + try { + PackageInfo packageInfo = + context.getPackageManager().getPackageInfo(packageName, 0); + // Package may be disabled for non-system users. + if (!packageInfo.applicationInfo.enabled) { + return false; + } + } catch (PackageManager.NameNotFoundException e) { + // Package may be uninstalled for non-system users. + return false; + } + } + return true; + } + private static boolean wasLoadedFromWebView(Context appContext) { try { Bundle metaData = appContext.getPackageManager() |