1 /*
2  * Copyright (C) 2024 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 #pragma once
18 
19 #include <sys/types.h>
20 
21 #include <optional>
22 #include <vector>
23 
24 #include <com/android/media/permission/PermissionEnum.h>
25 #include <error/BinderResult.h>
26 
27 namespace com::android::media::permission {
28 
29 class IPermissionProvider {
30   public:
31     // Get all package names which run under a certain app-id. Returns non-empty.
32     // Not user specific, since packages are across users. Special app-ids (system,
33     // shell, etc.) are handled.  Fails if the provider does not know about the
34     // app-id or if the provider has not been initialized.
35     virtual ::android::error::BinderResult<std::vector<std::string>> getPackagesForUid(
36             uid_t uid) const = 0;
37     // True iff the provided package name runs under the app-id of uid.
38     // Special app-ids (system, shell, etc.) are handled.
39     // Fails if the provider does not know about the app-id or if the provider has not been
40     // initialized.
41     virtual ::android::error::BinderResult<bool> validateUidPackagePair(
42             uid_t uid, const std::string& packageName) const = 0;
43 
44     // True iff the uid holds the permission (user aware).
45     // Fails with NO_INIT if cache hasn't been populated.
46     virtual ::android::error::BinderResult<bool> checkPermission(PermissionEnum permission,
47                                                                  uid_t uid) const = 0;
48     virtual ~IPermissionProvider() = default;
49 };
50 }  // namespace com::android::media::permission
51