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.
      */