summaryrefslogtreecommitdiff
path: root/chromium/weblayer
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-12-03 17:21:27 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-12-03 16:22:15 +0000
commit42165222878a38f10aaedf3a123ae7200a85a091 (patch)
tree808af36aaa46d2bce4e7504832448d3015ffb875 /chromium/weblayer
parent32f5a1c56531e4210bc4cf8d8c7825d66e081888 (diff)
downloadqtwebengine-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.java34
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()