patches/frameworks/base/0008-WebView-Add-check-before-setting-default-or-fallback.patch

87 lines
3.7 KiB
Diff

From 6ffe64fa1e8a012357eb65dcf5ada3e060264a22 Mon Sep 17 00:00:00 2001
From: Pranav Vashi <neobuddy89@gmail.com>
Date: Sat, 21 Sep 2024 13:44:09 +0530
Subject: [PATCH 08/11] WebView: Add check before setting default or fallback
provider
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
---
.../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 9e8dc2690a9d..9e415bf63583 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