diff options
| -rw-r--r-- | services/core/java/com/android/server/webkit/SystemImpl.java | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/webkit/SystemImpl.java b/services/core/java/com/android/server/webkit/SystemImpl.java index ed935ced0037..a5d68dabbdeb 100644 --- a/services/core/java/com/android/server/webkit/SystemImpl.java +++ b/services/core/java/com/android/server/webkit/SystemImpl.java @@ -34,7 +34,6 @@ import android.provider.Settings.Global; import android.provider.Settings; import android.util.AndroidRuntimeException; import android.util.Log; -import android.webkit.WebViewFactory.MissingWebViewPackageException; import android.webkit.WebViewFactory; import android.webkit.WebViewProviderInfo; @@ -68,6 +67,7 @@ public class SystemImpl implements SystemInterface { @Override public WebViewProviderInfo[] getWebViewPackages() { int numFallbackPackages = 0; + int numAvailableByDefaultPackages = 0; XmlResourceParser parser = null; List<WebViewProviderInfo> webViewProviders = new ArrayList<WebViewProviderInfo>(); try { @@ -83,12 +83,12 @@ public class SystemImpl implements SystemInterface { if (element.equals(TAG_WEBVIEW_PROVIDER)) { String packageName = parser.getAttributeValue(null, TAG_PACKAGE_NAME); if (packageName == null) { - throw new MissingWebViewPackageException( + throw new AndroidRuntimeException( "WebView provider in framework resources missing package name"); } String description = parser.getAttributeValue(null, TAG_DESCRIPTION); if (description == null) { - throw new MissingWebViewPackageException( + throw new AndroidRuntimeException( "WebView provider in framework resources missing description"); } boolean availableByDefault = "true".equals( @@ -100,22 +100,33 @@ public class SystemImpl implements SystemInterface { readSignatures(parser)); if (currentProvider.isFallback) { numFallbackPackages++; + if (!currentProvider.availableByDefault) { + throw new AndroidRuntimeException( + "Each WebView fallback package must be available by default."); + } if (numFallbackPackages > 1) { throw new AndroidRuntimeException( - "There can be at most one webview fallback package."); + "There can be at most one WebView fallback package."); } } + if (currentProvider.availableByDefault) { + numAvailableByDefaultPackages++; + } webViewProviders.add(currentProvider); } else { - Log.e(TAG, "Found an element that is not a webview provider"); + Log.e(TAG, "Found an element that is not a WebView provider"); } } } catch (XmlPullParserException | IOException e) { - throw new MissingWebViewPackageException("Error when parsing WebView meta data " + e); + throw new AndroidRuntimeException("Error when parsing WebView config " + e); } finally { if (parser != null) parser.close(); } + if (numAvailableByDefaultPackages == 0) { + throw new AndroidRuntimeException("There must be at least one WebView package " + + "that is available by default"); + } return webViewProviders.toArray(new WebViewProviderInfo[webViewProviders.size()]); } |