webkit: SystemImpl: Filter out unavailable providers
Change-Id: Ibb70503caeeeabd35dbb0e9c54223e306b3dbdca
diff --git a/services/core/java/com/android/server/webkit/SystemImpl.java b/services/core/java/com/android/server/webkit/SystemImpl.java
index a821f545..948845f 100644
--- a/services/core/java/com/android/server/webkit/SystemImpl.java
+++ b/services/core/java/com/android/server/webkit/SystemImpl.java
@@ -49,6 +49,7 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -150,7 +151,9 @@
* */
@Override
public WebViewProviderInfo[] getWebViewPackages() {
- return mWebViewProviderPackages;
+ return Arrays.stream(mWebViewProviderPackages)
+ .filter(x -> isProviderAvailable(x.packageName))
+ .toArray(WebViewProviderInfo[]::new);
}
public long getFactoryPackageVersion(String packageName) throws NameNotFoundException {
@@ -159,6 +162,15 @@
.getLongVersionCode();
}
+ private boolean isProviderAvailable(String packageName) {
+ try {
+ getFactoryPackageVersion(packageName);
+ return true;
+ } catch (NameNotFoundException e) {
+ return false;
+ }
+ }
+
/**
* Reads all signatures at the current depth (within the current provider) from the XML parser.
*/