• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 
16 #ifndef OHOS_ABILITY_RUNTIME_BATCH_URI_H
17 #define OHOS_ABILITY_RUNTIME_BATCH_URI_H
18 
19 #include <sys/types.h>
20 #include <vector>
21 
22 #ifdef ABILITY_RUNTIME_FEATURE_SANDBOXMANAGER
23 #include "policy_info.h"
24 #else
25 #include "upms_policy_info.h"
26 #endif
27 
28 #include "uri.h"
29 
30 namespace OHOS {
31 namespace AAFwk {
32 namespace {
33 #ifdef ABILITY_RUNTIME_FEATURE_SANDBOXMANAGER
34 using PolicyInfo = AccessControl::SandboxManager::PolicyInfo;
35 #endif
36 }
37 
38 class BatchUri {
39 public:
BatchUri()40     BatchUri() {}
41 
42     int32_t Init(const std::vector<Uri> &uriVec, uint32_t mode = 0, const std::string &callerBundleName = "",
43         const std::string &targetBundleName = "");
44 
45     void InitFileUriInfo(Uri &uriInner, uint32_t index, const uint32_t mode = 0,
46         const std::string &callerBundleName = "", const std::string &targetBundleName = "");
47 
48     void SetContentUriCheckResult(const std::vector<bool> &contentUriResult);
49     void SetMediaUriCheckResult(const std::vector<bool> &mediaUriResult);
50 
51     void SetOtherUriCheckResult(const std::vector<bool> &otherUriResult);
52 
53     void GetNeedCheckProxyPermissionURI(std::vector<PolicyInfo> &proxyUrisByPolicy, std::vector<Uri> &proxyUrisByMap);
54 
55     void SetCheckProxyByMapResult(std::vector<bool> &proxyResultByMap);
56 
57     void SetCheckProxyByPolicyResult(std::vector<bool> &proxyResultByPolicy);
58 
59     int32_t GetUriToGrantByMap(std::vector<std::string> &uriVec);
60 
61     void SelectPermissionedUri(std::vector<Uri> &uris, std::vector<int32_t> &indexs, std::vector<std::string> &uriVec);
62 
63     int32_t GetUriToGrantByPolicy(std::vector<PolicyInfo> &docsPolicyInfoVec,
64         std::vector<PolicyInfo> &bundlePolicyInfoVec);
65 
66     int32_t GetPermissionedUriCount();
67 
68     // media
69     int32_t GetMediaUriToGrant(std::vector<std::string> &uriVec);
70 
71     // media uri
72     std::vector<Uri> mediaUris;
73     std::vector<int32_t> mediaIndexs;
74 
75     // content uri
76     std::vector<Uri> contentUris;
77     std::vector<int32_t> contentIndexs;
78 
79     // docs and bundle uri
80     std::vector<Uri> otherUris;
81     std::vector<int32_t> otherIndexs;
82     std::vector<PolicyInfo> otherPolicyInfos;
83 
84     // caller's uri
85     std::vector<PolicyInfo> selfBundlePolicyInfos;
86 
87     // for check proxy uri permission
88     std::vector<int32_t> proxyIndexsByMap;
89     std::vector<int32_t> proxyIndexsByPolicy;
90 
91     // result of CheckUriPermission
92     std::vector<bool> result;
93     std::vector<bool> isDocsUriVec;
94 
95     // target's uri
96     int32_t targetBundleUriCount = 0;
97     std::vector<bool> isTargetBundleUri;
98 
99     int32_t validUriCount = 0;
100     int32_t totalUriCount = 0;
101 };
102 } // OHOS
103 } // AAFwk
104 #endif // OHOS_ABILITY_RUNTIME_BATCH_URI_H