1 /*
2  * Copyright (C) 2018 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 com.android.server.uri;
18 
19 import android.content.Intent;
20 import android.content.pm.ProviderInfo;
21 import android.net.Uri;
22 import android.os.IBinder;
23 import android.os.UserHandle;
24 
25 import java.io.PrintWriter;
26 
27 /**
28  * Uri Grants local system service interface.
29  * @hide Only for use within system server
30  */
31 public interface UriGrantsManagerInternal {
onSystemReady()32     void onSystemReady();
onActivityManagerInternalAdded()33     void onActivityManagerInternalAdded();
removeUriPermissionIfNeeded(UriPermission perm)34     void removeUriPermissionIfNeeded(UriPermission perm);
grantUriPermission(int callingUid, String targetPkg, GrantUri grantUri, final int modeFlags, UriPermissionOwner owner, int targetUserId)35     void grantUriPermission(int callingUid, String targetPkg, GrantUri grantUri,
36             final int modeFlags, UriPermissionOwner owner, int targetUserId);
revokeUriPermission(String targetPackage, int callingUid, GrantUri grantUri, final int modeFlags)37     void revokeUriPermission(String targetPackage, int callingUid,
38             GrantUri grantUri, final int modeFlags);
checkUriPermission(GrantUri grantUri, int uid, final int modeFlags)39     boolean checkUriPermission(GrantUri grantUri, int uid, final int modeFlags);
checkGrantUriPermission(int callingUid, String targetPkg, GrantUri grantUri, final int modeFlags, int lastTargetUid)40     int checkGrantUriPermission(int callingUid, String targetPkg, GrantUri grantUri,
41             final int modeFlags, int lastTargetUid);
checkGrantUriPermission( int callingUid, String targetPkg, Uri uri, int modeFlags, int userId)42     int checkGrantUriPermission(
43             int callingUid, String targetPkg, Uri uri, int modeFlags, int userId);
checkGrantUriPermissionFromIntent(int callingUid, String targetPkg, Intent intent, int mode, NeededUriGrants needed, int targetUserId)44     NeededUriGrants checkGrantUriPermissionFromIntent(int callingUid,
45             String targetPkg, Intent intent, int mode, NeededUriGrants needed, int targetUserId);
46     /**
47      * Grant Uri permissions from one app to another. This method only extends
48      * permission grants if {@code callingUid} has permission to them.
49      */
grantUriPermissionFromIntent(int callingUid, String targetPkg, Intent intent, int targetUserId)50     void grantUriPermissionFromIntent(int callingUid,
51             String targetPkg, Intent intent, int targetUserId);
grantUriPermissionFromIntent(int callingUid, String targetPkg, Intent intent, UriPermissionOwner owner, int targetUserId)52     void grantUriPermissionFromIntent(int callingUid,
53             String targetPkg, Intent intent, UriPermissionOwner owner, int targetUserId);
grantUriPermissionUncheckedFromIntent( NeededUriGrants needed, UriPermissionOwner owner)54     void grantUriPermissionUncheckedFromIntent(
55             NeededUriGrants needed, UriPermissionOwner owner);
newUriPermissionOwner(String name)56     IBinder newUriPermissionOwner(String name);
57     /**
58      * Remove any {@link UriPermission} granted <em>from</em> or <em>to</em> the
59      * given package.
60      *
61      * @param packageName Package name to match, or {@code null} to apply to all
62      *            packages.
63      * @param userHandle User to match, or {@link UserHandle#USER_ALL} to apply
64      *            to all users.
65      * @param persistable If persistable grants should be removed.
66      * @param targetOnly When {@code true}, only remove permissions where the app is the target,
67      * not source.
68      */
removeUriPermissionsForPackage( String packageName, int userHandle, boolean persistable, boolean targetOnly)69     void removeUriPermissionsForPackage(
70             String packageName, int userHandle, boolean persistable, boolean targetOnly);
71     /**
72      * @param uri This uri must NOT contain an embedded userId.
73      * @param userId The userId in which the uri is to be resolved.
74      */
revokeUriPermissionFromOwner(IBinder token, Uri uri, int mode, int userId)75     void revokeUriPermissionFromOwner(IBinder token, Uri uri, int mode, int userId);
checkAuthorityGrants( int callingUid, ProviderInfo cpi, int userId, boolean checkUser)76     boolean checkAuthorityGrants(
77             int callingUid, ProviderInfo cpi, int userId, boolean checkUser);
dump(PrintWriter pw, boolean dumpAll, String dumpPackage)78     void dump(PrintWriter pw, boolean dumpAll, String dumpPackage);
79 }
80