summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-01-25 22:58:49 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-01-25 22:58:49 +0000
commit854211d15bb3ae42af156b5fa997d3a1792a79fb (patch)
treec61ac01ceb7cb64341e97ceb9be77f3a87f5d31c
parent839c570b203defd67414e88744f6c32629bfb721 (diff)
parent74473597dcec337c4f6ea91fa1ea7edc619adf22 (diff)
Merge "Store WebView package signatures as Signatures instead of Strings"
-rw-r--r--api/system-current.txt2
-rw-r--r--core/java/android/webkit/WebViewProviderInfo.java19
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdater.java12
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;
}