Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74473597 authored by Gustav Sennton's avatar Gustav Sennton
Browse files

Store WebView package signatures as Signatures instead of Strings

We are currently storing WebView package signatures as Strings in
WebViewProviderInfo, represent these as Signatures instead.

Bug: 62429931
Test: start WebView app + run WebViewTest GTS tests + WVUS tests
Change-Id: I910db133cd147b44b4b1c63921308d82db44e5b3
parent dc4cb146
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4806,7 +4806,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 {
+13 −6
Original line number Diff line number Diff line
@@ -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;
}
+3 −9
Original line number Diff line number Diff line
@@ -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;
    }