1 /*
2  * Copyright (c) 2022-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 BUNDLE_FRAMEWORK_INTERFACES_KITS_JS_BUNDLE_MANAGER_BUNDLE_MANAGER_H
17 #define BUNDLE_FRAMEWORK_INTERFACES_KITS_JS_BUNDLE_MANAGER_BUNDLE_MANAGER_H
18 
19 #include "ability_info.h"
20 #include "app_provision_info.h"
21 #include "base_cb_info.h"
22 #include "bundle_constants.h"
23 #include "bundle_info.h"
24 #include "bundle_mgr_interface.h"
25 #include "clean_cache_callback.h"
26 #include "common_event_manager.h"
27 #include "common_event_subscriber.h"
28 #include "common_event_support.h"
29 #include "napi/native_api.h"
30 #include "napi/native_common.h"
31 #include "napi/native_node_api.h"
32 #ifdef BUNDLE_FRAMEWORK_GET_ABILITY_ICON_ENABLED
33 #include "pixel_map.h"
34 #endif
35 #include "preinstalled_application_info.h"
36 #include "recoverable_application_info.h"
37 #include "shared/shared_bundle_info.h"
38 #include "want.h"
39 
40 namespace OHOS {
41 namespace AppExecFwk {
42 class ClearCacheListener final : public EventFwk::CommonEventSubscriber {
43 public:
44     explicit ClearCacheListener(const EventFwk::CommonEventSubscribeInfo &subscribeInfo);
45     virtual ~ClearCacheListener() = default;
46     void OnReceiveEvent(const EventFwk::CommonEventData &data) override;
47     static void HandleCleanEnv(void *data);
48 };
49 struct GetBundleArchiveInfoCallbackInfo : public BaseCallbackInfo {
GetBundleArchiveInfoCallbackInfoGetBundleArchiveInfoCallbackInfo50     explicit GetBundleArchiveInfoCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
51 
52     std::string hapFilePath;
53     int32_t flags = 0;
54     BundleInfo bundleInfo;
55 };
56 struct GetBundleNameByUidCallbackInfo : public BaseCallbackInfo {
GetBundleNameByUidCallbackInfoGetBundleNameByUidCallbackInfo57     explicit GetBundleNameByUidCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
58 
59     int32_t uid = 0;
60     std::string bundleName;
61 };
62 struct GetAppCloneIdentityCallbackInfo : public GetBundleNameByUidCallbackInfo {
GetAppCloneIdentityCallbackInfoGetAppCloneIdentityCallbackInfo63     explicit GetAppCloneIdentityCallbackInfo(napi_env env) : GetBundleNameByUidCallbackInfo(env) {}
64 
65     int32_t appIndex = 0;
66 };
67 struct AbilityCallbackInfo : public BaseCallbackInfo {
AbilityCallbackInfoAbilityCallbackInfo68     explicit AbilityCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
69 
70     OHOS::AAFwk::Want want;
71     int32_t flags = 0;
72     int32_t userId = Constants::UNSPECIFIED_USERID;
73     bool isSavedInCache = false;
74     std::vector<AbilityInfo> abilityInfos;
75 };
76 
77 struct BatchAbilityCallbackInfo : public BaseCallbackInfo {
BatchAbilityCallbackInfoBatchAbilityCallbackInfo78     explicit BatchAbilityCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
79 
80     std::vector<OHOS::AAFwk::Want> wants;
81     int32_t flags = 0;
82     int32_t userId = Constants::UNSPECIFIED_USERID;
83     bool isSavedInCache = false;
84     std::vector<AbilityInfo> abilityInfos;
85 };
86 
87 struct ExtensionCallbackInfo : public BaseCallbackInfo {
ExtensionCallbackInfoExtensionCallbackInfo88     explicit ExtensionCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
89 
90     OHOS::AAFwk::Want want;
91     int32_t extensionAbilityType = static_cast<int32_t>(ExtensionAbilityType::UNSPECIFIED);
92     int32_t flags = 0;
93     int32_t userId = Constants::UNSPECIFIED_USERID;
94     bool isSavedInCache = false;
95     std::vector<ExtensionAbilityInfo> extensionInfos;
96 };
97 
98 struct CleanBundleCacheCallbackInfo : public BaseCallbackInfo {
CleanBundleCacheCallbackInfoCleanBundleCacheCallbackInfo99     explicit CleanBundleCacheCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
100     std::string bundleName;
101     OHOS::sptr<CleanCacheCallback> cleanCacheCallback;
102 };
103 
104 struct AbilityIconCallbackInfo : public BaseCallbackInfo {
AbilityIconCallbackInfoAbilityIconCallbackInfo105     explicit AbilityIconCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
106     std::string bundleName;
107     std::string moduleName;
108     std::string abilityName;
109 #ifdef BUNDLE_FRAMEWORK_GET_ABILITY_ICON_ENABLED
110     std::shared_ptr<Media::PixelMap> pixelMap = nullptr;
111 #endif
112 };
113 
114 struct AbilityLabelCallbackInfo : public BaseCallbackInfo {
AbilityLabelCallbackInfoAbilityLabelCallbackInfo115     explicit AbilityLabelCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
116     std::string bundleName;
117     std::string moduleName;
118     std::string abilityName;
119     std::string abilityLabel;
120 };
121 
122 struct ApplicationEnableCallbackInfo : public BaseCallbackInfo {
ApplicationEnableCallbackInfoApplicationEnableCallbackInfo123     explicit ApplicationEnableCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
124     std::string bundleName;
125     bool isEnable = false;
126     int32_t appIndex = 0;
127 };
128 
129 struct LaunchWantCallbackInfo : public BaseCallbackInfo {
LaunchWantCallbackInfoLaunchWantCallbackInfo130     explicit LaunchWantCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
131     std::string bundleName;
132     int32_t userId = Constants::UNSPECIFIED_USERID;
133     OHOS::AAFwk::Want want;
134 };
135 
136 struct VerifyCallbackInfo : public BaseCallbackInfo {
VerifyCallbackInfoVerifyCallbackInfo137     explicit VerifyCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
138     std::vector<std::string> abcPaths;
139     bool flag = false;
140     std::string deletePath;
141 };
142 
143 struct DynamicIconCallbackInfo : public BaseCallbackInfo {
DynamicIconCallbackInfoDynamicIconCallbackInfo144     explicit DynamicIconCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
145     std::string bundleName;
146     std::string moduleName;
147     std::vector<std::string> moduleNames;
148 };
149 
150 enum AbilityProfileType : uint32_t {
151     ABILITY_PROFILE = 0,
152     EXTENSION_PROFILE,
153     UNKNOWN_PROFILE
154 };
155 
156 struct GetProfileCallbackInfo : public BaseCallbackInfo {
GetProfileCallbackInfoGetProfileCallbackInfo157     explicit GetProfileCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
158     AbilityProfileType type = AbilityProfileType::UNKNOWN_PROFILE;
159     std::string moduleName;
160     std::string abilityName;
161     std::string metadataName;
162     std::vector<std::string> profileVec;
163 };
164 
165 struct AbilityEnableCallbackInfo : public BaseCallbackInfo {
AbilityEnableCallbackInfoAbilityEnableCallbackInfo166     explicit AbilityEnableCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
167     AbilityInfo abilityInfo;
168     bool isEnable = false;
169     int32_t appIndex = 0;
170 };
171 
172 struct ApplicationInfoCallbackInfo : public BaseCallbackInfo {
ApplicationInfoCallbackInfoApplicationInfoCallbackInfo173     explicit ApplicationInfoCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
174 
175     std::string bundleName;
176     int32_t flags = 0;
177     int32_t userId = Constants::UNSPECIFIED_USERID;
178     ApplicationInfo appInfo;
179 };
180 
181 struct ApplicationInfosCallbackInfo : public BaseCallbackInfo {
ApplicationInfosCallbackInfoApplicationInfosCallbackInfo182     explicit ApplicationInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
183 
184     int32_t flags = 0;
185     int32_t userId = Constants::UNSPECIFIED_USERID;
186     std::vector<ApplicationInfo> appInfos;
187 };
188 
189 struct AsyncPermissionDefineCallbackInfo : public BaseCallbackInfo {
AsyncPermissionDefineCallbackInfoAsyncPermissionDefineCallbackInfo190     explicit AsyncPermissionDefineCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
191     std::string permissionName;
192     OHOS::AppExecFwk::PermissionDef permissionDef;
193 };
194 
195 struct Query {
196     std::string bundleName_;
197     std::string interfaceType_;
198     int32_t flags_ = 0;
199     int32_t userId_ = Constants::UNSPECIFIED_USERID;
200     napi_env env_;
QueryQuery201     Query(const std::string &bundleName, const std::string &interfaceType, int32_t flags, int32_t userId, napi_env env)
202         : bundleName_(bundleName), interfaceType_(interfaceType), flags_(flags), userId_(userId), env_(env) {}
203 
204     bool operator==(const Query &query) const
205     {
206         return bundleName_ == query.bundleName_ && interfaceType_ == query.interfaceType_ &&
207             flags_ == query.flags_ && userId_ == query.userId_ && env_ == query.env_;
208     }
209 };
210 
211 struct QueryHash  {
operatorQueryHash212     size_t operator()(const Query &query) const
213     {
214         return std::hash<std::string>()(query.bundleName_) ^ std::hash<std::string>()(query.interfaceType_) ^
215             std::hash<int32_t>()(query.flags_) ^ std::hash<int32_t>()(query.userId_) ^
216             std::hash<napi_env>()(query.env_);
217     }
218 };
219 
220 struct BundleInfosCallbackInfo : public BaseCallbackInfo {
BundleInfosCallbackInfoBundleInfosCallbackInfo221     explicit BundleInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
222 
223     int32_t flags = 0;
224     int32_t userId = Constants::UNSPECIFIED_USERID;
225     std::vector<BundleInfo> bundleInfos;
226 };
227 
228 struct BundleInfoCallbackInfo : public BaseCallbackInfo {
BundleInfoCallbackInfoBundleInfoCallbackInfo229     explicit BundleInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
230     std::string bundleName;
231     int32_t flags = 0;
232     int32_t userId = Constants::UNSPECIFIED_USERID;
233     bool isSavedInCache = false;
234     int32_t uid = 0;
235     BundleInfo bundleInfo;
236 };
237 
238 struct BatchBundleInfoCallbackInfo : public BaseCallbackInfo {
BatchBundleInfoCallbackInfoBatchBundleInfoCallbackInfo239     explicit BatchBundleInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
240     std::vector<std::string> bundleNames;
241     int32_t flags = 0;
242     int32_t userId = Constants::UNSPECIFIED_USERID;
243     bool isSavedInCache = false;
244     int32_t uid = 0;
245     std::vector<BundleInfo> bundleInfos;
246 };
247 
248 struct SharedBundleCallbackInfo : public BaseCallbackInfo {
SharedBundleCallbackInfoSharedBundleCallbackInfo249     explicit SharedBundleCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
250 
251     std::string bundleName;
252     std::string moduleName;
253     std::vector<SharedBundleInfo> sharedBundles;
254 };
255 
256 struct AppProvisionInfoCallbackInfo : public BaseCallbackInfo {
AppProvisionInfoCallbackInfoAppProvisionInfoCallbackInfo257     explicit AppProvisionInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
258     std::string bundleName;
259     int32_t userId = Constants::UNSPECIFIED_USERID;
260     AppProvisionInfo appProvisionInfo;
261 };
262 
263 struct RecoverableApplicationCallbackInfo : public BaseCallbackInfo {
RecoverableApplicationCallbackInfoRecoverableApplicationCallbackInfo264     explicit RecoverableApplicationCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
265 
266     std::vector<RecoverableApplicationInfo> recoverableApplicationInfos;
267 };
268 
269 struct PreinstalledApplicationInfosCallbackInfo : public BaseCallbackInfo {
PreinstalledApplicationInfosCallbackInfoPreinstalledApplicationInfosCallbackInfo270     explicit PreinstalledApplicationInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
271     std::vector<PreinstalledApplicationInfo> preinstalledApplicationInfos;
272 };
273 
274 struct CloneAppBundleInfoCallbackInfo : public BaseCallbackInfo {
CloneAppBundleInfoCallbackInfoCloneAppBundleInfoCallbackInfo275     explicit CloneAppBundleInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
276 
277     std::string bundleName;
278     int32_t appIndex = 0;
279     int32_t bundleFlags = 0;
280     int32_t userId = Constants::UNSPECIFIED_USERID;
281     BundleInfo bundleInfo;
282 };
283 
284 struct CloneAppBundleInfosCallbackInfo : public BaseCallbackInfo {
CloneAppBundleInfosCallbackInfoCloneAppBundleInfosCallbackInfo285     explicit CloneAppBundleInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {}
286 
287     std::string bundleName;
288     int32_t bundleFlags = 0;
289     int32_t userId = Constants::UNSPECIFIED_USERID;
290     std::vector<BundleInfo> bundleInfos;
291 };
292 
293 napi_value GetBundleArchiveInfo(napi_env env, napi_callback_info info);
294 napi_value GetBundleNameByUid(napi_env env, napi_callback_info info);
295 napi_value SetApplicationEnabled(napi_env env, napi_callback_info info);
296 napi_value SetAbilityEnabled(napi_env env, napi_callback_info info);
297 napi_value IsApplicationEnabled(napi_env env, napi_callback_info info);
298 napi_value IsAbilityEnabled(napi_env env, napi_callback_info info);
299 napi_value QueryAbilityInfos(napi_env env, napi_callback_info info);
300 napi_value BatchQueryAbilityInfos(napi_env env, napi_callback_info info);
301 napi_value QueryAbilityInfosSync(napi_env env, napi_callback_info info);
302 napi_value QueryExtensionInfos(napi_env env, napi_callback_info info);
303 napi_value GetAbilityLabel(napi_env env, napi_callback_info info);
304 napi_value GetAbilityIcon(napi_env env, napi_callback_info info);
305 napi_value CleanBundleCacheFiles(napi_env env, napi_callback_info info);
306 napi_value GetPermissionDef(napi_env env, napi_callback_info info);
307 napi_value GetLaunchWantForBundle(napi_env env, napi_callback_info info);
308 napi_value GetProfile(napi_env env, napi_callback_info info, const AbilityProfileType &profileType);
309 napi_value GetProfileByAbility(napi_env env, napi_callback_info info);
310 napi_value GetProfileByExAbility(napi_env env, napi_callback_info info);
311 napi_value GetApplicationInfo(napi_env env, napi_callback_info info);
312 napi_value GetApplicationInfos(napi_env env, napi_callback_info info);
313 napi_value GetBundleInfos(napi_env env, napi_callback_info info);
314 napi_value GetBundleInfo(napi_env env, napi_callback_info info);
315 napi_value GetApplicationInfoSync(napi_env env, napi_callback_info info);
316 napi_value GetBundleInfoSync(napi_env env, napi_callback_info info);
317 napi_value GetBundleInfoForSelf(napi_env env, napi_callback_info info);
318 napi_value GetAllSharedBundleInfo(napi_env env, napi_callback_info info);
319 napi_value GetSharedBundleInfo(napi_env env, napi_callback_info info);
320 napi_value GetAppProvisionInfo(napi_env env, napi_callback_info info);
321 napi_value GetSpecifiedDistributionType(napi_env env, napi_callback_info info);
322 napi_value GetAdditionalInfo(napi_env env, napi_callback_info info);
323 napi_value GetBundleInfoForSelfSync(napi_env env, napi_callback_info info);
324 napi_value VerifyAbc(napi_env env, napi_callback_info info);
325 napi_value DeleteAbc(napi_env env, napi_callback_info info);
326 napi_value GetExtResource(napi_env env, napi_callback_info info);
327 napi_value EnableDynamicIcon(napi_env env, napi_callback_info info);
328 napi_value DisableDynamicIcon(napi_env env, napi_callback_info info);
329 napi_value GetDynamicIcon(napi_env env, napi_callback_info info);
330 napi_value GetJsonProfile(napi_env env, napi_callback_info info);
331 napi_value GetRecoverableApplicationInfo(napi_env env, napi_callback_info info);
332 napi_value SetAdditionalInfo(napi_env env, napi_callback_info info);
333 napi_value CanOpenLink(napi_env env, napi_callback_info info);
334 napi_value GetAllPreinstalledApplicationInfos(napi_env env, napi_callback_info info);
335 napi_value GetAllBundleInfoByDeveloperId(napi_env env, napi_callback_info info);
336 napi_value GetDeveloperIds(napi_env env, napi_callback_info info);
337 napi_value SwitchUninstallState(napi_env env, napi_callback_info info);
338 napi_value GetAppCloneBundleInfo(napi_env env, napi_callback_info info);
339 napi_value GetAllAppCloneBundleInfo(napi_env env, napi_callback_info info);
340 napi_value GetAppCloneIdentity(napi_env env, napi_callback_info info);
341 napi_value GetLaunchWant(napi_env env, napi_callback_info info);
342 void CreateApplicationFlagObject(napi_env env, napi_value value);
343 void CreateAbilityFlagObject(napi_env env, napi_value value);
344 void CreateExtensionAbilityFlagObject(napi_env env, napi_value value);
345 void CreateExtensionAbilityTypeObject(napi_env env, napi_value value);
346 void CreateBundleFlagObject(napi_env env, napi_value value);
347 void CreatePermissionGrantStateObject(napi_env env, napi_value value);
348 void CreateAbilityTypeObject(napi_env env, napi_value value);
349 void CreateDisplayOrientationObject(napi_env env, napi_value value);
350 void CreateOrientationRelatedToSensor(napi_env env, napi_value value);
351 void CreateLaunchTypeObject(napi_env env, napi_value value);
352 void CreateSupportWindowModesObject(napi_env env, napi_value value);
353 void CreateModuleTypeObject(napi_env env, napi_value value);
354 void CreateBundleTypeObject(napi_env env, napi_value value);
355 void CreateCompatiblePolicyObject(napi_env env, napi_value value);
356 void CreateProfileTypeObject(napi_env env, napi_value value);
357 void CreateAppDistributionTypeObject(napi_env env, napi_value value);
358 void RegisterClearCacheListener();
359 void CreateMultiAppModeTypeObject(napi_env env, napi_value value);
360 void CreateApplicationInfoFlagObject(napi_env env, napi_value value);
361 }  // namespace AppExecFwk
362 }  // namespace OHOS
363 #endif // BUNDLE_FRAMEWORK_INTERFACES_KITS_JS_BUNDLE_MANAGER_BUNDLE_MANAGER_H
364