• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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_MGR_H
17 #define BUNDLE_MGR_H
18 #include <vector>
19 
20 #include "napi/native_api.h"
21 #include "napi/native_common.h"
22 #include "napi/native_node_api.h"
23 
24 #include "application_info.h"
25 #include "bundle_death_recipient.h"
26 #include "bundle_mgr_interface.h"
27 #include "cleancache_callback.h"
28 #include "js_runtime_utils.h"
29 #ifdef BUNDLE_FRAMEWORK_GRAPHICS
30 #include "pixel_map.h"
31 #endif
32 #include "want.h"
33 
34 namespace OHOS {
35 namespace AppExecFwk {
36 struct AsyncWorkData {
37     explicit AsyncWorkData(napi_env napiEnv);
38     virtual ~AsyncWorkData();
39     napi_env env;
40     napi_async_work asyncWork = nullptr;
41     napi_deferred deferred = nullptr;
42     napi_ref callback = nullptr;
43 };
44 
45 struct BaseCallbackInfo: public AsyncWorkData {
BaseCallbackInfoBaseCallbackInfo46     explicit BaseCallbackInfo(napi_env napiEnv) : AsyncWorkData(napiEnv) {}
47     int32_t err = 0;
48     std::string message;
49 };
50 
51 struct QueryParameter {
52     int flags;
53     std::string userId;
54 };
55 
56 struct BundleOptions {
57     int32_t userId = Constants::UNSPECIFIED_USERID;
58 };
59 
60 struct AbilityEnableCallbackInfo : public BaseCallbackInfo {
AbilityEnableCallbackInfoAbilityEnableCallbackInfo61     explicit AbilityEnableCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
62     bool isEnable = false;
63     AbilityInfo abilityInfo;
64 };
65 
66 struct ApplicationEnableCallbackInfo : public BaseCallbackInfo {
ApplicationEnableCallbackInfoApplicationEnableCallbackInfo67     explicit ApplicationEnableCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
68     bool isEnable = false;
69     std::string bundleName;
70 };
71 
72 struct LaunchWantCallbackInfo : public BaseCallbackInfo {
LaunchWantCallbackInfoLaunchWantCallbackInfo73     explicit LaunchWantCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
74     int32_t userId = Constants::UNSPECIFIED_USERID;
75     ErrCode ret = ERR_OK;
76     std::string bundleName;
77     OHOS::AAFwk::Want want;
78 };
79 
80 struct GetBundleArchiveInfoCallbackInfo : public BaseCallbackInfo {
GetBundleArchiveInfoCallbackInfoGetBundleArchiveInfoCallbackInfo81     explicit GetBundleArchiveInfoCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
82     bool ret = false;
83     int32_t flags = 0;
84     std::string hapFilePath;
85     BundleInfo bundleInfo;
86 };
87 
88 struct AbilityIconCallbackInfo : public BaseCallbackInfo {
AbilityIconCallbackInfoAbilityIconCallbackInfo89     explicit AbilityIconCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {}
90     bool hasModuleName = false;
91     ErrCode ret = ERR_OK;
92     std::string bundleName;
93     std::string moduleName;
94     std::string abilityName;
95 #ifdef BUNDLE_FRAMEWORK_GRAPHICS
96     std::shared_ptr<Media::PixelMap> pixelMap = nullptr;
97 #endif
98 };
99 
100 struct AsyncAbilityInfoCallbackInfo : public AsyncWorkData {
AsyncAbilityInfoCallbackInfoAsyncAbilityInfoCallbackInfo101     explicit AsyncAbilityInfoCallbackInfo(napi_env env) : AsyncWorkData(env) {}
102     bool ret = false;
103     int32_t err = 0;
104     int32_t flags = 0;
105     int32_t userId = Constants::UNSPECIFIED_USERID;
106     std::vector<OHOS::AppExecFwk::AbilityInfo> abilityInfos;
107     OHOS::AAFwk::Want want;
108 };
109 
110 struct AsyncAbilityInfosCallbackInfo : public AsyncWorkData {
AsyncAbilityInfosCallbackInfoAsyncAbilityInfosCallbackInfo111     explicit AsyncAbilityInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
112     bool hasModuleName = false;
113     bool ret = false;
114     int32_t err = 0;
115     int32_t flags = 0;
116     std::string message;
117     std::string bundleName;
118     std::string abilityName;
119     std::string moduleName = "";
120     OHOS::AppExecFwk::AbilityInfo abilityInfo;
121 };
122 
123 struct AsyncBundleInfoCallbackInfo : public AsyncWorkData {
AsyncBundleInfoCallbackInfoAsyncBundleInfoCallbackInfo124     explicit AsyncBundleInfoCallbackInfo(napi_env env) : AsyncWorkData(env) {}
125     bool ret = false;
126     int32_t err = 0;
127     int32_t flags = 0;
128     std::string param;
129     std::string message;
130     OHOS::AppExecFwk::BundleInfo bundleInfo;
131     BundleOptions bundleOptions;
132 };
133 
134 struct AsyncApplicationInfoCallbackInfo : public AsyncWorkData {
AsyncApplicationInfoCallbackInfoAsyncApplicationInfoCallbackInfo135     explicit AsyncApplicationInfoCallbackInfo(napi_env env) : AsyncWorkData(env) {}
136     bool ret = false;
137     int32_t flags = 0;
138     int32_t userId = Constants::UNSPECIFIED_USERID;
139     int32_t err = 0;
140     std::string bundleName;
141     std::string message;
142     OHOS::AppExecFwk::ApplicationInfo appInfo;
143 };
144 
145 struct AsyncPermissionDefCallbackInfo : public AsyncWorkData {
AsyncPermissionDefCallbackInfoAsyncPermissionDefCallbackInfo146     explicit AsyncPermissionDefCallbackInfo(napi_env env) : AsyncWorkData(env) {}
147     bool ret = false;
148     int32_t err = 0;
149     std::string message;
150     std::string permissionName;
151     OHOS::AppExecFwk::PermissionDef permissionDef;
152 };
153 
154 struct AsyncBundleInfosCallbackInfo : public AsyncWorkData {
AsyncBundleInfosCallbackInfoAsyncBundleInfosCallbackInfo155     explicit AsyncBundleInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
156     bool ret = false;
157     int32_t flags = 0;
158     int32_t err = 0;
159     int32_t userId = Constants::UNSPECIFIED_USERID;
160     std::string message;
161     std::vector<OHOS::AppExecFwk::BundleInfo> bundleInfos;
162 };
163 
164 struct AsyncApplicationInfosCallbackInfo : public AsyncWorkData {
AsyncApplicationInfosCallbackInfoAsyncApplicationInfosCallbackInfo165     explicit AsyncApplicationInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
166     bool ret = false;
167     int32_t flags = 0;
168     int32_t userId = Constants::UNSPECIFIED_USERID;
169     int32_t err = 0;
170     std::string message;
171     std::vector<OHOS::AppExecFwk::ApplicationInfo> appInfos;
172 };
173 
174 struct AsyncAbilityLabelCallbackInfo : public AsyncWorkData {
AsyncAbilityLabelCallbackInfoAsyncAbilityLabelCallbackInfo175     explicit AsyncAbilityLabelCallbackInfo(napi_env env) : AsyncWorkData(env) {}
176     bool hasModuleName = false;
177     int32_t err = 0;
178     std::string bundleName;
179     std::string className;
180     std::string moduleName = "";
181     std::string abilityLabel;
182     std::string message;
183 };
184 
185 struct InstallResult {
186     int32_t resultCode = 0;
187     std::string resultMsg;
188 };
189 
190 struct AsyncInstallCallbackInfo : public AsyncWorkData {
AsyncInstallCallbackInfoAsyncInstallCallbackInfo191     explicit AsyncInstallCallbackInfo(napi_env env) : AsyncWorkData(env) {}
192     int32_t errCode = 0;
193     std::string bundleName;
194     std::string param;
195     std::vector<std::string> hapFiles;
196     OHOS::AppExecFwk::InstallParam installParam;
197     InstallResult installResult;
198 };
199 
200 struct AsyncGetBundleInstallerCallbackInfo : public AsyncWorkData {
AsyncGetBundleInstallerCallbackInfoAsyncGetBundleInstallerCallbackInfo201     explicit AsyncGetBundleInstallerCallbackInfo(napi_env env) : AsyncWorkData(env) {}
202 };
203 
204 struct AsyncFormInfosCallbackInfo : public AsyncWorkData {
AsyncFormInfosCallbackInfoAsyncFormInfosCallbackInfo205     explicit AsyncFormInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
206     bool ret = false;
207     std::vector<OHOS::AppExecFwk::FormInfo> formInfos;
208 };
209 
210 struct AsyncFormInfosByModuleCallbackInfo : public AsyncWorkData {
AsyncFormInfosByModuleCallbackInfoAsyncFormInfosByModuleCallbackInfo211     explicit AsyncFormInfosByModuleCallbackInfo(napi_env env) : AsyncWorkData(env) {}
212     bool ret = false;
213     std::string bundleName;
214     std::string moduleName;
215     std::vector<OHOS::AppExecFwk::FormInfo> formInfos;
216 };
217 
218 struct AsyncFormInfosByAppCallbackInfo : public AsyncWorkData {
AsyncFormInfosByAppCallbackInfoAsyncFormInfosByAppCallbackInfo219     explicit AsyncFormInfosByAppCallbackInfo(napi_env env) : AsyncWorkData(env) {}
220     bool ret = false;
221     std::string bundleName;
222     std::vector<OHOS::AppExecFwk::FormInfo> formInfos;
223 };
224 
225 struct AsyncLaunchWantForBundleCallbackInfo : public AsyncWorkData {
AsyncLaunchWantForBundleCallbackInfoAsyncLaunchWantForBundleCallbackInfo226     explicit AsyncLaunchWantForBundleCallbackInfo(napi_env env) : AsyncWorkData(env) {}
227     bool ret = false;
228     int32_t err = 0;
229     std::string bundleName;
230     OHOS::AAFwk::Want want;
231 };
232 
233 struct AsyncGetBundleGidsCallbackInfo : public AsyncWorkData {
AsyncGetBundleGidsCallbackInfoAsyncGetBundleGidsCallbackInfo234     explicit AsyncGetBundleGidsCallbackInfo(napi_env env) : AsyncWorkData(env) {}
235     bool ret = false;
236     int32_t err = 0;
237     std::string message;
238     std::string bundleName;
239     std::vector<int32_t> gids;
240 };
241 
242 struct AsyncGetNameByUidInfo : public AsyncWorkData {
AsyncGetNameByUidInfoAsyncGetNameByUidInfo243     explicit AsyncGetNameByUidInfo(napi_env env) : AsyncWorkData(env) {}
244     bool ret = false;
245     int32_t uid = 0;
246     int32_t err = 0;
247     std::string bundleName;
248 };
249 
250 struct AsyncHandleBundleContext : public AsyncWorkData {
AsyncHandleBundleContextAsyncHandleBundleContext251     explicit AsyncHandleBundleContext(napi_env env) : AsyncWorkData(env) {}
252     bool ret = false;
253     uint32_t labelId = 0;
254     uint32_t iconId = 0;
255     int32_t err = 0;
256     std::string bundleName;
257     std::string className;
258     OHOS::sptr<CleanCacheCallback> cleanCacheCallback;
259 };
260 
261 struct EnabledInfo : public AsyncWorkData {
EnabledInfoEnabledInfo262     explicit EnabledInfo(napi_env env) : AsyncWorkData(env) {}
263     bool isEnable = false;
264     bool result = false;
265     int32_t errCode = 0;
266     std::string errMssage;
267     std::string bundleName;
268     OHOS::AppExecFwk::AbilityInfo abilityInfo;
269 };
270 
271 struct AsyncAbilityInfo : public AsyncWorkData {
AsyncAbilityInfoAsyncAbilityInfo272     explicit AsyncAbilityInfo(napi_env env) : AsyncWorkData(env) {}
273     bool hasModuleName = false;
274     bool result = false;
275     int32_t errCode = 0;
276     std::string bundleName;
277     std::string abilityName;
278     std::string moduleName = "";
279     std::string errMssage;
280 #ifdef BUNDLE_FRAMEWORK_GRAPHICS
281     std::shared_ptr<Media::PixelMap> pixelMap;
282 #endif
283 };
284 
285 struct Query {
286     std::string bundleName_;
287     std::string interfaceType_;
288     int32_t flags_ = 0;
289     int32_t userId_ = Constants::UNSPECIFIED_USERID;
290     napi_env env_;
QueryQuery291     Query(const std::string &bundleName, const std::string &interfaceType, int32_t flags, int32_t userId, napi_env env)
292         : bundleName_(bundleName), interfaceType_(interfaceType), flags_(flags), userId_(userId), env_(env) {}
293 
294     bool operator==(const Query &query) const
295     {
296         return bundleName_ == query.bundleName_ && interfaceType_ == query.interfaceType_ &&
297             flags_ == query.flags_ && userId_ == query.userId_ && env_ == query.env_;
298     }
299 };
300 
301 struct QueryHash  {
operatorQueryHash302     size_t operator()(const Query &query) const
303     {
304         return std::hash<std::string>()(query.bundleName_) ^ std::hash<std::string>()(query.interfaceType_) ^
305             std::hash<int32_t>()(query.flags_) ^ std::hash<int32_t>()(query.userId_);
306     }
307 };
308 
309 class BundleMgrDeathRecipient : public IRemoteObject::DeathRecipient {
310     virtual void OnRemoteDied([[maybe_unused]] const wptr<IRemoteObject>& remote) override;
311 };
312 
313 extern thread_local napi_ref g_classBundleInstaller;
314 
315 napi_value WrapVoidToJS(napi_env env);
316 napi_value GetApplicationInfos(napi_env env, napi_callback_info info);
317 napi_value QueryAbilityInfos(napi_env env, napi_callback_info info);
318 napi_value GetBundleInfos(napi_env env, napi_callback_info info);
319 napi_value GetPermissionDef(napi_env env, napi_callback_info info);
320 napi_value GetBundleInfo(napi_env env, napi_callback_info info);
321 napi_value GetNameForUid(napi_env env, napi_callback_info info);
322 napi_value GetPermissionDef(napi_env env, napi_callback_info info);
323 napi_value GetAllFormsInfo(napi_env env, napi_callback_info info);
324 napi_value GetFormsInfoByApp(napi_env env, napi_callback_info info);
325 napi_value GetFormsInfoByModule(napi_env env, napi_callback_info info);
326 napi_value GetShortcutInfos(napi_env env, napi_callback_info info);
327 napi_value UnregisterPermissionsChanged(napi_env env, napi_callback_info info);
328 napi_value ClearBundleCache(napi_env env, napi_callback_info info);
329 napi_value GetBundleArchiveInfo(napi_env env, napi_callback_info info);
330 napi_value GetAbilityIcon(napi_env env, napi_callback_info info);
331 napi_value GetLaunchWantForBundle(napi_env env, napi_callback_info info);
332 napi_value IsApplicationEnabled(napi_env env, napi_callback_info info);
333 napi_value IsAbilityEnabled(napi_env env, napi_callback_info info);
334 napi_value SetAbilityEnabled(napi_env env, napi_callback_info info);
335 napi_value SetApplicationEnabled(napi_env env, napi_callback_info info);
336 napi_value GetBundleGids(napi_env env, napi_callback_info info);
337 napi_value GetAbilityInfo(napi_env env, napi_callback_info info);
338 napi_value GetAbilityLabel(napi_env env, napi_callback_info info);
339 napi_value GetBundleInstaller(napi_env env, napi_callback_info info);
340 napi_value Install(napi_env env, napi_callback_info info);
341 napi_value Recover(napi_env env, napi_callback_info info);
342 napi_value Uninstall(napi_env env, napi_callback_info info);
343 napi_value BundleInstallerConstructor(napi_env env, napi_callback_info info);
344 bool UnwrapAbilityInfo(napi_env env, napi_value param, OHOS::AppExecFwk::AbilityInfo& abilityInfo);
345 void CreateInstallErrorCodeObject(napi_env env, napi_value value);
346 
347 napi_value CreateAbilityTypeObject(napi_env env);
348 napi_value CreateAbilitySubTypeObject(napi_env env);
349 napi_value CreateDisplayOrientationObject(napi_env env);
350 napi_value CreateLaunchModeObject(napi_env env);
351 napi_value CreateColorModeObject(napi_env env);
352 napi_value CreateGrantStatusObject(napi_env env);
353 napi_value CreateModuleRemoveFlagObject(napi_env env);
354 napi_value CreateSignatureCompareResultObject(napi_env env);
355 napi_value CreateShortcutExistenceObject(napi_env env);
356 napi_value CreateQueryShortCutFlagObject(napi_env env);
357 napi_value CreateBundleFlagObject(napi_env env);
358 napi_value GetAllApplicationInfo(napi_env env, napi_callback_info info);
359 napi_value GetApplicationInfo(napi_env env, napi_callback_info info);
360 class JsBundleMgr {
361 public:
362     JsBundleMgr() = default;
363     ~JsBundleMgr() = default;
364 
365     struct JsAbilityInfo {
366         bool hasModuleName = false;
367         bool ret = false;
368         std::string bundleName;
369         std::string abilityName;
370         std::string moduleName = "";
371         OHOS::AppExecFwk::AbilityInfo abilityInfo;
372     };
373 
374     struct JsNameForUid {
375         bool ret = false;
376         int32_t uid;
377         std::string bundleName;
378     };
379 
380     struct JsAbilityLabel {
381         bool hasModuleName = false;
382         std::string bundleName;
383         std::string className;
384         std::string moduleName = "";
385         std::string abilityLabel;
386     };
387 
388     struct JsAbilityIcon {
389         bool hasModuleName = false;
390         std::string bundleName;
391         std::string abilityName;
392         std::string moduleName = "";
393     };
394 
395     struct JsGetPermissionDef {
396         bool ret = false;
397         std::string permissionName;
398         OHOS::AppExecFwk::PermissionDef permissionDef;
399     };
400 
401     struct JsQueryAbilityInfo {
402         bool ret = false;
403         bool getCache = false;
404         std::vector<AbilityInfo> abilityInfos;
405     };
406     std::string errMessage_;
407 
408 private:
409 };
410 
411 class JsBundleInstall {
412 public:
413     JsBundleInstall() = default;
414     ~JsBundleInstall() = default;
415     struct BundleInstallResult {
416         int32_t resCode = 0;
417         std::string resMessage;
418     };
419 private:
420     static void ConvertInstallResult(std::shared_ptr<BundleInstallResult> installResult);
421 };
422 
423 }  // namespace AppExecFwk
424 }  // namespace OHOS
425 #endif /* BUNDLE_MGR_H */
426