• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      */
VerificationParams(Uri verificationURI, Uri originatingURI, Uri referrer, int originatingUid, ManifestDigest manifestDigest)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 
getVerificationURI()81     public Uri getVerificationURI() {
82         return mVerificationURI;
83     }
84 
getOriginatingURI()85     public Uri getOriginatingURI() {
86         return mOriginatingURI;
87     }
88 
getReferrer()89     public Uri getReferrer() {
90         return mReferrer;
91     }
92 
93     /** return NO_UID if not available */
getOriginatingUid()94     public int getOriginatingUid() {
95         return mOriginatingUid;
96     }
97 
getManifestDigest()98     public ManifestDigest getManifestDigest() {
99         return mManifestDigest;
100     }
101 
102     /** @return NO_UID when not set */
getInstallerUid()103     public int getInstallerUid() {
104         return mInstallerUid;
105     }
106 
setInstallerUid(int uid)107     public void setInstallerUid(int uid) {
108         mInstallerUid = uid;
109     }
110 
111     @Override
describeContents()112     public int describeContents() {
113         return 0;
114     }
115 
116     @Override
equals(Object o)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
hashCode()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
toString()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
writeToParcel(Parcel dest, int flags)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 
VerificationParams(Parcel source)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