From 2f4c395069d1dfd7cce9a896f17868aa4aaf91c4 Mon Sep 17 00:00:00 2001 From: Pranav Vashi Date: Sat, 21 Sep 2024 13:44:09 +0530 Subject: [PATCH 09/11] WebView: Add check before setting default or fallback provider Signed-off-by: Pranav Vashi --- .../webkit/WebViewUpdateServiceImpl2.java | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java index 9e8dc2690..9e415bf63 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java @@ -15,6 +15,7 @@ */ package com.android.server.webkit; +import android.app.AppGlobals; import android.annotation.Nullable; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; @@ -113,7 +114,7 @@ class WebViewUpdateServiceImpl2 { WebViewProviderInfo defaultProvider = null; for (WebViewProviderInfo provider : webviewProviders) { - if (provider.availableByDefault) { + if (provider.availableByDefault && isPackageAvailable(provider.packageName)) { defaultProvider = provider; break; } @@ -182,6 +183,15 @@ class WebViewUpdateServiceImpl2 { } } + private static boolean isPackageAvailable(String packageName) { + try { + AppGlobals.getInitialApplication().getPackageManager().getPackageInfo(packageName, 0); + return true; + } catch (NameNotFoundException e) { + return false; + } + } + private boolean shouldTriggerRepairLocked() { if (mAttemptedToRepairBefore) { return false; @@ -208,12 +218,20 @@ class WebViewUpdateServiceImpl2 { } mAttemptedToRepairBefore = true; } - Slog.w( - TAG, - "No provider available for all users, trying to install and enable " - + mDefaultProvider.packageName); - mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); - mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); + + WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages(); + WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); + if (fallbackProvider != null) { + Slog.w(TAG, "No valid provider, trying to install and enable " + + fallbackProvider.packageName); + mSystemInterface.installExistingPackageForAllUsers(fallbackProvider.packageName); + mSystemInterface.enablePackageForAllUsers(fallbackProvider.packageName, true); + } else { + Slog.w(TAG, "No provider available for all users, trying to install and enable " + + mDefaultProvider.packageName); + mSystemInterface.installExistingPackageForAllUsers(mDefaultProvider.packageName); + mSystemInterface.enablePackageForAllUsers(mDefaultProvider.packageName, true); + } } public void prepareWebViewInSystemServer() { @@ -691,7 +709,7 @@ class WebViewUpdateServiceImpl2 { */ private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { for (WebViewProviderInfo provider : webviewPackages) { - if (provider.isFallback) { + if (provider.isFallback && isPackageAvailable(provider.packageName)) { return provider; } } -- 2.48.1