Home | History | Annotate | Download | only in pm
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.content.pm;
     18 
     19 import android.content.pm.ManifestDigest;
     20 import android.net.Uri;
     21 import android.os.Parcel;
     22 import android.os.Parcelable;
     23 
     24 /**
     25  * Represents verification parameters used to verify packages to be installed.
     26  *
     27  * @hide
     28  */
     29 public class VerificationParams implements Parcelable {
     30     /** A constant used to indicate that a uid value is not present. */
     31     public static final int NO_UID = -1;
     32 
     33     /** What we print out first when toString() is called. */
     34     private static final String TO_STRING_PREFIX = "VerificationParams{";
     35 
     36     /** The location of the supplementary verification file. */
     37     private final Uri mVerificationURI;
     38 
     39     /** URI referencing where the package was downloaded from. */
     40     private final Uri mOriginatingURI;
     41 
     42     /** HTTP referrer URI associated with the originatingURI. */
     43     private final Uri mReferrer;
     44 
     45     /** UID of the application that the install request originated from. */
     46     private final int mOriginatingUid;
     47 
     48     /** UID of application requesting the install */
     49     private int mInstallerUid;
     50 
     51     /**
     52      * An object that holds the digest of the package which can be used to
     53      * verify ownership.
     54      */
     55     private final ManifestDigest mManifestDigest;
     56 
     57     /**
     58      * Creates verification specifications for installing with application verification.
     59      *
     60      * @param verificationURI The location of the supplementary verification
     61      *            file. This can be a 'file:' or a 'content:' URI. May be {@code null}.
     62      * @param originatingURI URI referencing where the package was downloaded
     63      *            from. May be {@code null}.
     64      * @param referrer HTTP referrer URI associated with the originatingURI.
     65      *            May be {@code null}.
     66      * @param originatingUid UID of the application that the install request originated
     67      *            from, or NO_UID if not present
     68      * @param manifestDigest an object that holds the digest of the package
     69      *            which can be used to verify ownership. May be {@code null}.
     70      */
     71     public VerificationParams(Uri verificationURI, Uri originatingURI, Uri referrer,
     72             int originatingUid, ManifestDigest manifestDigest) {
     73         mVerificationURI = verificationURI;
     74         mOriginatingURI = originatingURI;
     75         mReferrer = referrer;
     76         mOriginatingUid = originatingUid;
     77         mManifestDigest = manifestDigest;
     78         mInstallerUid = NO_UID;
     79     }
     80 
     81     public Uri getVerificationURI() {
     82         return mVerificationURI;
     83     }
     84 
     85     public Uri getOriginatingURI() {
     86         return mOriginatingURI;
     87     }
     88 
     89     public Uri getReferrer() {
     90         return mReferrer;
     91     }
     92 
     93     /** return NO_UID if not available */
     94     public int getOriginatingUid() {
     95         return mOriginatingUid;
     96     }
     97 
     98     public ManifestDigest getManifestDigest() {
     99         return mManifestDigest;
    100     }
    101 
    102     /** @return NO_UID when not set */
    103     public int getInstallerUid() {
    104         return mInstallerUid;
    105     }
    106 
    107     public void setInstallerUid(int uid) {
    108         mInstallerUid = uid;
    109     }
    110 
    111     @Override
    112     public int describeContents() {
    113         return 0;
    114     }
    115 
    116     @Override
    117     public boolean equals(Object o) {
    118         if (this == o) {
    119             return true;
    120         }
    121 
    122         if (!(o instanceof VerificationParams)) {
    123             return false;
    124         }
    125 
    126         final VerificationParams other = (VerificationParams) o;
    127 
    128         if (mVerificationURI == null) {
    129             if (other.mVerificationURI != null) {
    130                 return false;
    131             }
    132         } else if (!mVerificationURI.equals(other.mVerificationURI)) {
    133             return false;
    134         }
    135 
    136         if (mOriginatingURI == null) {
    137             if (other.mOriginatingURI != null) {
    138                 return false;
    139             }
    140         } else if (!mOriginatingURI.equals(other.mOriginatingURI)) {
    141             return false;
    142         }
    143 
    144         if (mReferrer == null) {
    145             if (other.mReferrer != null) {
    146                 return false;
    147             }
    148         } else if (!mReferrer.equals(other.mReferrer)) {
    149             return false;
    150         }
    151 
    152         if (mOriginatingUid != other.mOriginatingUid) {
    153             return false;
    154         }
    155 
    156         if (mManifestDigest == null) {
    157             if (other.mManifestDigest != null) {
    158                 return false;
    159             }
    160         } else if (!mManifestDigest.equals(other.mManifestDigest)) {
    161             return false;
    162         }
    163 
    164         if (mInstallerUid != other.mInstallerUid) {
    165             return false;
    166         }
    167 
    168         return true;
    169     }
    170 
    171     @Override
    172     public int hashCode() {
    173         int hash = 3;
    174 
    175         hash += 5 * (mVerificationURI == null ? 1 : mVerificationURI.hashCode());
    176         hash += 7 * (mOriginatingURI == null ? 1 : mOriginatingURI.hashCode());
    177         hash += 11 * (mReferrer == null ? 1 : mReferrer.hashCode());
    178         hash += 13 * mOriginatingUid;
    179         hash += 17 * (mManifestDigest == null ? 1 : mManifestDigest.hashCode());
    180         hash += 19 * mInstallerUid;
    181 
    182         return hash;
    183     }
    184 
    185     @Override
    186     public String toString() {
    187         final StringBuilder sb = new StringBuilder(TO_STRING_PREFIX);
    188 
    189         sb.append("mVerificationURI=");
    190         sb.append(mVerificationURI.toString());
    191         sb.append(",mOriginatingURI=");
    192         sb.append(mOriginatingURI.toString());
    193         sb.append(",mReferrer=");
    194         sb.append(mReferrer.toString());
    195         sb.append(",mOriginatingUid=");
    196         sb.append(mOriginatingUid);
    197         sb.append(",mManifestDigest=");
    198         sb.append(mManifestDigest.toString());
    199         sb.append(",mInstallerUid=");
    200         sb.append(mInstallerUid);
    201         sb.append('}');
    202 
    203         return sb.toString();
    204     }
    205 
    206     @Override
    207     public void writeToParcel(Parcel dest, int flags) {
    208         dest.writeParcelable(mVerificationURI, 0);
    209         dest.writeParcelable(mOriginatingURI, 0);
    210         dest.writeParcelable(mReferrer, 0);
    211         dest.writeInt(mOriginatingUid);
    212         dest.writeParcelable(mManifestDigest, 0);
    213         dest.writeInt(mInstallerUid);
    214     }
    215 
    216 
    217     private VerificationParams(Parcel source) {
    218         mVerificationURI = source.readParcelable(Uri.class.getClassLoader());
    219         mOriginatingURI = source.readParcelable(Uri.class.getClassLoader());
    220         mReferrer = source.readParcelable(Uri.class.getClassLoader());
    221         mOriginatingUid = source.readInt();
    222         mManifestDigest = source.readParcelable(ManifestDigest.class.getClassLoader());
    223         mInstallerUid = source.readInt();
    224     }
    225 
    226     public static final Parcelable.Creator<VerificationParams> CREATOR =
    227             new Parcelable.Creator<VerificationParams>() {
    228         public VerificationParams createFromParcel(Parcel source) {
    229                 return new VerificationParams(source);
    230         }
    231 
    232         public VerificationParams[] newArray(int size) {
    233             return new VerificationParams[size];
    234         }
    235     };
    236 }
    237