diff options
| author | 2018-01-25 22:58:49 +0000 | |
|---|---|---|
| committer | 2018-01-25 22:58:49 +0000 | |
| commit | 854211d15bb3ae42af156b5fa997d3a1792a79fb (patch) | |
| tree | c61ac01ceb7cb64341e97ceb9be77f3a87f5d31c | |
| parent | 839c570b203defd67414e88744f6c32629bfb721 (diff) | |
| parent | 74473597dcec337c4f6ea91fa1ea7edc619adf22 (diff) | |
Merge "Store WebView package signatures as Signatures instead of Strings"
| -rw-r--r-- | api/system-current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewProviderInfo.java | 19 | ||||
| -rw-r--r-- | services/core/java/com/android/server/webkit/WebViewUpdater.java | 12 |
3 files changed, 17 insertions, 16 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 6be004c5e82d..91270599f62b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5625,7 +5625,7 @@ package android.webkit { 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; + field public final android.content.pm.Signature[] signatures; } public final class WebViewUpdateService { diff --git a/core/java/android/webkit/WebViewProviderInfo.java b/core/java/android/webkit/WebViewProviderInfo.java index 5d091c91abfb..b0e9f0194ed4 100644 --- a/core/java/android/webkit/WebViewProviderInfo.java +++ b/core/java/android/webkit/WebViewProviderInfo.java @@ -17,10 +17,10 @@ package android.webkit; import android.annotation.SystemApi; +import android.content.pm.Signature; import android.os.Parcel; import android.os.Parcelable; - -import java.util.Arrays; +import android.util.Base64; /** * @hide @@ -34,7 +34,14 @@ public final class WebViewProviderInfo implements Parcelable { this.description = description; this.availableByDefault = availableByDefault; this.isFallback = isFallback; - this.signatures = signatures; + if (signatures == null) { + this.signatures = new Signature[0]; + } else { + this.signatures = new Signature[signatures.length]; + for (int n = 0; n < signatures.length; n++) { + this.signatures[n] = new Signature(Base64.decode(signatures[n], Base64.DEFAULT)); + } + } } // aidl stuff @@ -54,7 +61,7 @@ public final class WebViewProviderInfo implements Parcelable { description = in.readString(); availableByDefault = (in.readInt() > 0); isFallback = (in.readInt() > 0); - signatures = in.createStringArray(); + signatures = in.createTypedArray(Signature.CREATOR); } @Override @@ -68,7 +75,7 @@ public final class WebViewProviderInfo implements Parcelable { out.writeString(description); out.writeInt(availableByDefault ? 1 : 0); out.writeInt(isFallback ? 1 : 0); - out.writeStringArray(signatures); + out.writeTypedArray(signatures, 0); } // fields read from framework resource @@ -76,5 +83,5 @@ public final class WebViewProviderInfo implements Parcelable { public final String description; public final boolean availableByDefault; public final boolean isFallback; - public final String[] signatures; + public final Signature[] signatures; } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdater.java b/services/core/java/com/android/server/webkit/WebViewUpdater.java index 7e05e46a2637..61a3c0951f64 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdater.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdater.java @@ -507,22 +507,16 @@ class WebViewUpdater { if (systemInterface.systemIsDebuggable()) { return true; } - Signature[] packageSignatures; // If no signature is declared, instead check whether the package is included in the // system. if (provider.signatures == null || provider.signatures.length == 0) { return packageInfo.applicationInfo.isSystemApp(); } - packageSignatures = packageInfo.signatures; - if (packageSignatures.length != 1) - return false; + if (packageInfo.signatures.length != 1) return false; - final byte[] packageSignature = packageSignatures[0].toByteArray(); // Return whether the package signature matches any of the valid signatures - for (String signature : provider.signatures) { - final byte[] validSignature = Base64.decode(signature, Base64.DEFAULT); - if (Arrays.equals(packageSignature, validSignature)) - return true; + for (Signature signature : provider.signatures) { + if (signature.equals(packageInfo.signatures[0])) return true; } return false; } |