From 1c177d8dae45e72a4709cd023415d98544e756a3 Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Tue, 29 Mar 2016 20:43:11 +0100 Subject: [PATCH] Add system api to reach WebViewUpdateService Binder interface. Instead of using reflection in XTS tests we add some system-apis to enable fetching information about webview packages. Bug: 26381867 Change-Id: If983a01b6855e4a4c08ef0b5873304918d499b76 --- api/system-current.txt | 18 +++++ core/java/android/webkit/WebViewFactory.java | 8 ++- .../android/webkit/WebViewProviderInfo.java | 6 +- .../android/webkit/WebViewUpdateService.java | 66 +++++++++++++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 core/java/android/webkit/WebViewUpdateService.java diff --git a/api/system-current.txt b/api/system-current.txt index b4ee8dd44bb49..b80c4131aa333 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -48858,6 +48858,24 @@ package android.webkit { method public abstract boolean shouldDelayChildPressedState(); } + public final class WebViewProviderInfo implements android.os.Parcelable { + ctor public WebViewProviderInfo(java.lang.String, java.lang.String, boolean, boolean, java.lang.String[]); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public final boolean availableByDefault; + field public final java.lang.String description; + field public final boolean isFallback; + field public final java.lang.String packageName; + field public final java.lang.String[] signatures; + } + + public final class WebViewUpdateService { + method public static android.webkit.WebViewProviderInfo[] getAllWebViewPackages(); + method public static java.lang.String getCurrentWebViewPackageName(); + method public static android.webkit.WebViewProviderInfo[] getValidWebViewPackages(); + } + } package android.widget { diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index d884f199dd863..cc496dc72d7c0 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -573,8 +573,12 @@ public final class WebViewFactory { intent.getDataString().substring("package:".length())); } - private static IWebViewUpdateService getUpdateService() { - return IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate")); + private static String WEBVIEW_UPDATE_SERVICE_NAME = "webviewupdate"; + + /** @hide */ + public static IWebViewUpdateService getUpdateService() { + return IWebViewUpdateService.Stub.asInterface( + ServiceManager.getService(WEBVIEW_UPDATE_SERVICE_NAME)); } private static native boolean nativeReserveAddressSpace(long addressSpaceToReserve); diff --git a/core/java/android/webkit/WebViewProviderInfo.java b/core/java/android/webkit/WebViewProviderInfo.java index d106dba4dd3a1..5d091c91abfbb 100644 --- a/core/java/android/webkit/WebViewProviderInfo.java +++ b/core/java/android/webkit/WebViewProviderInfo.java @@ -16,12 +16,16 @@ package android.webkit; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import java.util.Arrays; -/** @hide */ +/** + * @hide + */ +@SystemApi public final class WebViewProviderInfo implements Parcelable { public WebViewProviderInfo(String packageName, String description, diff --git a/core/java/android/webkit/WebViewUpdateService.java b/core/java/android/webkit/WebViewUpdateService.java new file mode 100644 index 0000000000000..4e83d88340627 --- /dev/null +++ b/core/java/android/webkit/WebViewUpdateService.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.webkit; + +import android.annotation.SystemApi; +import android.os.RemoteException; + +/** + * @hide + */ +@SystemApi +public final class WebViewUpdateService { + + private WebViewUpdateService () {} + + /** + * Fetch all packages that could potentially implement WebView. + */ + public static WebViewProviderInfo[] getAllWebViewPackages() { + try { + return getUpdateService().getAllWebViewPackages(); + } catch (RemoteException e) { + throw new RuntimeException(e); + } + } + + /** + * Fetch all packages that could potentially implement WebView and are currently valid. + */ + public static WebViewProviderInfo[] getValidWebViewPackages() { + try { + return getUpdateService().getValidWebViewPackages(); + } catch (RemoteException e) { + throw new RuntimeException(e); + } + } + + /** + * Used by DevelopmentSetting to get the name of the WebView provider currently in use. + */ + public static String getCurrentWebViewPackageName() { + try { + return getUpdateService().getCurrentWebViewPackageName(); + } catch (RemoteException e) { + throw new RuntimeException(e); + } + } + + private static IWebViewUpdateService getUpdateService() { + return WebViewFactory.getUpdateService(); + } +}