• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 QueryParameter {
46     int flags;
47     std::string userId;
48 };
49 
50 struct BundleOptions {
51     int32_t userId = Constants::UNSPECIFIED_USERID;
52 };
53 
54 struct AsyncAbilityInfoCallbackInfo : public AsyncWorkData {
AsyncAbilityInfoCallbackInfoAsyncAbilityInfoCallbackInfo55     explicit AsyncAbilityInfoCallbackInfo(napi_env env) : AsyncWorkData(env) {}
56     OHOS::AAFwk::Want want;
57     int32_t flags = 0;
58     int32_t userId = Constants::UNSPECIFIED_USERID;
59     std::vector<OHOS::AppExecFwk::AbilityInfo> abilityInfos;
60     bool ret = false;
61     int32_t err = 0;
62 };
63 
64 struct AsyncAbilityInfosCallbackInfo : public AsyncWorkData {
AsyncAbilityInfosCallbackInfoAsyncAbilityInfosCallbackInfo65     explicit AsyncAbilityInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
66     int32_t flags = 0;
67     std::string bundleName;
68     std::string abilityName;
69     std::string moduleName = "";
70     bool hasModuleName = false;
71     OHOS::AppExecFwk::AbilityInfo abilityInfo;
72     bool ret = false;
73     int32_t err = 0;
74     std::string message;
75 };
76 
77 struct AsyncBundleInfoCallbackInfo : public AsyncWorkData {
AsyncBundleInfoCallbackInfoAsyncBundleInfoCallbackInfo78     explicit AsyncBundleInfoCallbackInfo(napi_env env) : AsyncWorkData(env) {}
79     std::string param;
80     int32_t flags = 0;
81     OHOS::AppExecFwk::BundleInfo bundleInfo;
82     bool ret = false;
83     int32_t err = 0;
84     std::string message;
85     BundleOptions bundleOptions;
86 };
87 
88 struct AsyncApplicationInfoCallbackInfo : public AsyncWorkData {
AsyncApplicationInfoCallbackInfoAsyncApplicationInfoCallbackInfo89     explicit AsyncApplicationInfoCallbackInfo(napi_env env) : AsyncWorkData(env) {}
90     std::string bundleName;
91     int32_t flags = 0;
92     int32_t userId = Constants::UNSPECIFIED_USERID;
93     OHOS::AppExecFwk::ApplicationInfo appInfo;
94     bool ret = false;
95     int32_t err = 0;
96     std::string message;
97 };
98 
99 struct AsyncPermissionDefCallbackInfo : public AsyncWorkData {
AsyncPermissionDefCallbackInfoAsyncPermissionDefCallbackInfo100     explicit AsyncPermissionDefCallbackInfo(napi_env env) : AsyncWorkData(env) {}
101     std::string permissionName;
102     OHOS::AppExecFwk::PermissionDef permissionDef;
103     bool ret = false;
104     int32_t err = 0;
105     std::string message;
106 };
107 
108 struct AsyncBundleInfosCallbackInfo : public AsyncWorkData {
AsyncBundleInfosCallbackInfoAsyncBundleInfosCallbackInfo109     explicit AsyncBundleInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
110     int32_t flags = 0;
111     std::vector<OHOS::AppExecFwk::BundleInfo> bundleInfos;
112     bool ret = false;
113     int32_t err = 0;
114     std::string message;
115     int32_t userId = Constants::UNSPECIFIED_USERID;
116 };
117 
118 struct AsyncApplicationInfosCallbackInfo : public AsyncWorkData {
AsyncApplicationInfosCallbackInfoAsyncApplicationInfosCallbackInfo119     explicit AsyncApplicationInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
120     int32_t flags = 0;
121     int32_t userId = Constants::UNSPECIFIED_USERID;
122     std::vector<OHOS::AppExecFwk::ApplicationInfo> appInfos;
123     bool ret = false;
124     int32_t err = 0;
125     std::string message;
126 };
127 
128 struct AsyncAbilityLabelCallbackInfo : public AsyncWorkData {
AsyncAbilityLabelCallbackInfoAsyncAbilityLabelCallbackInfo129     explicit AsyncAbilityLabelCallbackInfo(napi_env env) : AsyncWorkData(env) {}
130     std::string bundleName;
131     std::string className;
132     std::string moduleName = "";
133     bool hasModuleName = false;
134     std::string abilityLabel;
135     int32_t err = 0;
136     std::string message;
137 };
138 
139 struct InstallResult {
140     std::string resultMsg;
141     int32_t resultCode = 0;
142 };
143 
144 struct AsyncInstallCallbackInfo : public AsyncWorkData {
AsyncInstallCallbackInfoAsyncInstallCallbackInfo145     explicit AsyncInstallCallbackInfo(napi_env env) : AsyncWorkData(env) {}
146     std::vector<std::string> hapFiles;
147     std::string bundleName;
148     std::string param;
149     OHOS::AppExecFwk::InstallParam installParam;
150     InstallResult installResult;
151     int32_t errCode = 0;
152 };
153 
154 struct AsyncGetBundleInstallerCallbackInfo : public AsyncWorkData {
AsyncGetBundleInstallerCallbackInfoAsyncGetBundleInstallerCallbackInfo155     explicit AsyncGetBundleInstallerCallbackInfo(napi_env env) : AsyncWorkData(env) {}
156 };
157 
158 struct AsyncFormInfosCallbackInfo : public AsyncWorkData {
AsyncFormInfosCallbackInfoAsyncFormInfosCallbackInfo159     explicit AsyncFormInfosCallbackInfo(napi_env env) : AsyncWorkData(env) {}
160     std::vector<OHOS::AppExecFwk::FormInfo> formInfos;
161     bool ret = false;
162 };
163 
164 struct AsyncFormInfosByModuleCallbackInfo : public AsyncWorkData {
AsyncFormInfosByModuleCallbackInfoAsyncFormInfosByModuleCallbackInfo165     explicit AsyncFormInfosByModuleCallbackInfo(napi_env env) : AsyncWorkData(env) {}
166     std::string bundleName;
167     std::string moduleName;
168     std::vector<OHOS::AppExecFwk::FormInfo> formInfos;
169     bool ret = false;
170 };
171 
172 struct AsyncFormInfosByAppCallbackInfo : public AsyncWorkData {
AsyncFormInfosByAppCallbackInfoAsyncFormInfosByAppCallbackInfo173     explicit AsyncFormInfosByAppCallbackInfo(napi_env env) : AsyncWorkData(env) {}
174     std::string bundleName;
175     std::vector<OHOS::AppExecFwk::FormInfo> formInfos;
176     bool ret = false;
177 };
178 
179 struct AsyncLaunchWantForBundleCallbackInfo : public AsyncWorkData {
AsyncLaunchWantForBundleCallbackInfoAsyncLaunchWantForBundleCallbackInfo180     explicit AsyncLaunchWantForBundleCallbackInfo(napi_env env) : AsyncWorkData(env) {}
181     std::string bundleName;
182     OHOS::AAFwk::Want want;
183     bool ret = false;
184     int32_t err = 0;
185 };
186 
187 struct AsyncGetBundleGidsCallbackInfo : public AsyncWorkData {
AsyncGetBundleGidsCallbackInfoAsyncGetBundleGidsCallbackInfo188     explicit AsyncGetBundleGidsCallbackInfo(napi_env env) : AsyncWorkData(env) {}
189     std::string bundleName;
190     std::vector<int32_t> gids;
191     int32_t err = 0;
192     bool ret = false;
193     std::string message;
194 };
195 
196 struct AsyncGetNameByUidInfo : public AsyncWorkData {
AsyncGetNameByUidInfoAsyncGetNameByUidInfo197     explicit AsyncGetNameByUidInfo(napi_env env) : AsyncWorkData(env) {}
198     int32_t uid = 0;
199     std::string bundleName;
200     int32_t err = 0;
201     bool ret = false;
202 };
203 
204 struct AsyncHandleBundleContext : public AsyncWorkData {
AsyncHandleBundleContextAsyncHandleBundleContext205     explicit AsyncHandleBundleContext(napi_env env) : AsyncWorkData(env) {}
206     OHOS::sptr<CleanCacheCallback> cleanCacheCallback;
207     std::string bundleName;
208     std::string className;
209     int32_t labelId = 0;
210     int32_t iconId = 0;
211     bool ret = false;
212     int32_t err = 0;
213 };
214 
215 struct EnabledInfo : public AsyncWorkData {
EnabledInfoEnabledInfo216     explicit EnabledInfo(napi_env env) : AsyncWorkData(env) {}
217     std::string bundleName;
218     OHOS::AppExecFwk::AbilityInfo abilityInfo;
219     bool isEnable = false;
220     bool result = false;
221     int32_t errCode = 0;
222     std::string errMssage;
223 };
224 
225 struct AsyncAbilityInfo : public AsyncWorkData {
AsyncAbilityInfoAsyncAbilityInfo226     explicit AsyncAbilityInfo(napi_env env) : AsyncWorkData(env) {}
227     std::string bundleName;
228     std::string abilityName;
229     std::string moduleName = "";
230     bool hasModuleName = false;
231 #ifdef BUNDLE_FRAMEWORK_GRAPHICS
232     std::shared_ptr<Media::PixelMap> pixelMap;
233 #endif
234     int32_t errCode = 0;
235     bool result = false;
236     std::string errMssage;
237 };
238 
239 struct Query {
240     std::string bundleName_;
241     std::string interfaceType_;
242     int32_t flags_ = 0;
243     int32_t userId_ = Constants::UNSPECIFIED_USERID;
244     napi_env env_;
QueryQuery245     Query(const std::string &bundleName, const std::string &interfaceType, int32_t flags, int32_t userId, napi_env env)
246         : bundleName_(bundleName), interfaceType_(interfaceType), flags_(flags), userId_(userId), env_(env) {}
247 
248     bool operator==(const Query &query) const
249     {
250         return bundleName_ == query.bundleName_ && interfaceType_ == query.interfaceType_ &&
251             flags_ == query.flags_ && userId_ == query.userId_ && env_ == query.env_;
252     }
253 };
254 
255 struct QueryHash  {
operatorQueryHash256     size_t operator()(const Query &query) const
257     {
258         return std::hash<std::string>()(query.bundleName_) ^ std::hash<std::string>()(query.interfaceType_) ^
259             std::hash<int32_t>()(query.flags_) ^ std::hash<int32_t>()(query.userId_);
260     }
261 };
262 
263 class BundleMgrDeathRecipient : public IRemoteObject::DeathRecipient {
264     virtual void OnRemoteDied([[maybe_unused]] const wptr<IRemoteObject>& remote) override;
265 };
266 
267 extern thread_local napi_ref g_classBundleInstaller;
268 
269 napi_value WrapVoidToJS(napi_env env);
270 napi_value GetApplicationInfos(napi_env env, napi_callback_info info);
271 napi_value GetApplicationInfo(napi_env env, napi_callback_info info);
272 napi_value GetAbilityInfo(napi_env env, napi_callback_info info);
273 napi_value QueryAbilityInfos(napi_env env, napi_callback_info info);
274 napi_value GetBundleInfos(napi_env env, napi_callback_info info);
275 napi_value GetBundleInfo(napi_env env, napi_callback_info info);
276 napi_value GetBundleArchiveInfo(napi_env env, napi_callback_info info);
277 napi_value GetLaunchWantForBundle(napi_env env, napi_callback_info info);
278 napi_value GetPermissionDef(napi_env env, napi_callback_info info);
279 napi_value GetBundleInstaller(napi_env env, napi_callback_info info);
280 napi_value Install(napi_env env, napi_callback_info info);
281 napi_value Recover(napi_env env, napi_callback_info info);
282 napi_value Uninstall(napi_env env, napi_callback_info info);
283 napi_value BundleInstallerConstructor(napi_env env, napi_callback_info info);
284 napi_value GetAllFormsInfo(napi_env env, napi_callback_info info);
285 napi_value GetFormsInfoByApp(napi_env env, napi_callback_info info);
286 napi_value GetFormsInfoByModule(napi_env env, napi_callback_info info);
287 napi_value GetShortcutInfos(napi_env env, napi_callback_info info);
288 napi_value UnregisterPermissionsChanged(napi_env env, napi_callback_info info);
289 napi_value ClearBundleCache(napi_env env, napi_callback_info info);
290 napi_value SetApplicationEnabled(napi_env env, napi_callback_info info);
291 napi_value SetAbilityEnabled(napi_env env, napi_callback_info info);
292 napi_value GetNameForUid(napi_env env, napi_callback_info info);
293 napi_value GetAbilityLabel(napi_env env, napi_callback_info info);
294 napi_value GetAbilityIcon(napi_env env, napi_callback_info info);
295 napi_value GetBundleGids(napi_env env, napi_callback_info info);
296 napi_value IsAbilityEnabled(napi_env env, napi_callback_info info);
297 napi_value IsApplicationEnabled(napi_env env, napi_callback_info info);
298 bool UnwrapAbilityInfo(napi_env env, napi_value param, OHOS::AppExecFwk::AbilityInfo& abilityInfo);
299 void CreateAbilityTypeObject(napi_env env, napi_value value);
300 void CreateAbilitySubTypeObject(napi_env env, napi_value value);
301 void CreateDisplayOrientationObject(napi_env env, napi_value value);
302 void CreateLaunchModeObject(napi_env env, napi_value value);
303 void CreateFormTypeObject(napi_env env, napi_value value);
304 void CreateColorModeObject(napi_env env, napi_value value);
305 void CreateGrantStatusObject(napi_env env, napi_value value);
306 void CreateModuleRemoveFlagObject(napi_env env, napi_value value);
307 void CreateSignatureCompareResultObject(napi_env env, napi_value value);
308 void CreateShortcutExistenceObject(napi_env env, napi_value value);
309 void CreateQueryShortCutFlagObject(napi_env env, napi_value value);
310 void CreateBundleFlagObject(napi_env env, napi_value value);
311 void CreateInstallErrorCodeObject(napi_env env, napi_value value);
312 class JsBundleMgr {
313 public:
314     JsBundleMgr() = default;
315     ~JsBundleMgr() = default;
316 
317     struct JsAbilityInfo {
318         std::string bundleName;
319         std::string abilityName;
320         std::string moduleName = "";
321         bool hasModuleName = false;
322         OHOS::AppExecFwk::AbilityInfo abilityInfo;
323         bool ret = false;
324     };
325 
326     struct JsNameForUid {
327         std::string bundleName;
328         int32_t uid;
329         bool ret = false;
330     };
331 
332     struct JsAbilityLabel {
333         std::string bundleName;
334         std::string className;
335         std::string moduleName = "";
336         bool hasModuleName = false;
337         std::string abilityLabel;
338     };
339 
340     struct JsAbilityIcon {
341         std::string bundleName;
342         std::string abilityName;
343         std::string moduleName = "";
344         bool hasModuleName = false;
345     };
346     static void Finalizer(NativeEngine *engine, void *data, void *hint);
347     static NativeValue* GetAllApplicationInfo(NativeEngine *engine, NativeCallbackInfo *info);
348     static NativeValue* GetApplicationInfo(NativeEngine *engine, NativeCallbackInfo *info);
349     static NativeValue* GetBundleArchiveInfo(NativeEngine *engine, NativeCallbackInfo *info);
350     static NativeValue* GetLaunchWantForBundle(NativeEngine *engine, NativeCallbackInfo *info);
351     static NativeValue* IsAbilityEnabled(NativeEngine *engine, NativeCallbackInfo *info);
352     static NativeValue* IsApplicationEnabled(NativeEngine *engine, NativeCallbackInfo *info);
353     std::string errMessage_;
354 
355 private:
356     NativeValue* OnGetAllApplicationInfo(NativeEngine &engine, NativeCallbackInfo &info);
357     NativeValue* OnGetApplicationInfo(NativeEngine &engine, NativeCallbackInfo &info);
358     NativeValue* OnGetBundleArchiveInfo(NativeEngine &engine, NativeCallbackInfo &info);
359     NativeValue* OnGetLaunchWantForBundle(NativeEngine &engine, NativeCallbackInfo &info);
360     NativeValue* OnIsAbilityEnabled(NativeEngine &engine, NativeCallbackInfo &info);
361     NativeValue* OnIsApplicationEnabled(NativeEngine &engine, NativeCallbackInfo &info);
362     NativeValue* CreateCustomizeMetaDatas(
363         NativeEngine &engine, const std::map<std::string, std::vector<CustomizeData>> &metaData);
364 
365     NativeValue* CreateInnerMetaDatas(
366         NativeEngine &engine, const std::map<std::string, std::vector<Metadata>> &metaData);
367     NativeValue* CreateInnerMetaDatas(NativeEngine &engine, const std::vector<Metadata> &metaData);
368     NativeValue* CreateCustomizeMetaData(NativeEngine &engine, const CustomizeData &customizeData);
369     NativeValue* CreateInnerMetaData(NativeEngine &engine, const Metadata &metadata);
370     NativeValue* CreateResource(NativeEngine &engine, const Resource &resource);
371     NativeValue* CreateModuleInfos(NativeEngine &engine, const std::vector<ModuleInfo> &moduleInfos);
372     NativeValue* CreateModuleInfo(NativeEngine &engine, const ModuleInfo &modInfo);
373     NativeValue* CreateAppInfo(NativeEngine &engine, const ApplicationInfo &appInfo);
374     int32_t InitGetAbilityInfo(NativeEngine &engine, NativeCallbackInfo &info,
375         NativeValue *&lastParam, std::string &errMessage, std::shared_ptr<JsAbilityInfo> abilityInfo);
376     NativeValue* CreateAbilityInfo(NativeEngine &engine,  const AbilityInfo &abilityInfo);
377     NativeValue* CreateMetaData(NativeEngine &engine, const MetaData &metaData);
378     NativeValue* CreateUsedScene(NativeEngine &engine, const RequestPermissionUsedScene &usedScene);
379     NativeValue* CreateAppInfos(NativeEngine &engine, const std::vector<ApplicationInfo> &appInfos);
380     NativeValue* CreateBundleInfos(NativeEngine &engine, const std::vector<BundleInfo> &bundleInfos);
381     NativeValue* CreateBundleInfo(NativeEngine &engine, const BundleInfo &bundleInfo);
382     NativeValue* CreateAbilityInfos(NativeEngine &engine, const std::vector<AbilityInfo> &abilityInfos);
383     NativeValue* CreateHapModuleInfos(NativeEngine &engine, const std::vector<HapModuleInfo> &hapModuleInfos);
384     NativeValue* CreateHapModuleInfo(NativeEngine &engine, const HapModuleInfo &hapModuleInfo);
385     NativeValue* CreateRequestPermissions(NativeEngine &engine,
386         const std::vector<RequestPermission> &requestPermissions);
387     NativeValue* CreateRequestPermission(NativeEngine &engine, const RequestPermission &requestPermission);
388     NativeValue* CreateWant(NativeEngine &engine, const OHOS::AAFwk::Want &want);
389     NativeValue* UnwarpQueryAbilityInfolastParams(NativeCallbackInfo &info);
390     static bool UnwarpUserIdThreeParams(NativeEngine &engine, NativeCallbackInfo &info, int32_t &userId);
391     static bool UnwarpUserIdFourParams(NativeEngine &engine, NativeCallbackInfo &info, int32_t &userId);
392     static bool UnwarpUserIdFiveParams(NativeEngine &engine, NativeCallbackInfo &info, int32_t &userId);
393     static bool UnwarpBundleOptionsParams(
394         NativeEngine &engine, NativeCallbackInfo &info, BundleOptions &options, bool &result);
395 };
396 
397 }  // namespace AppExecFwk
398 }  // namespace OHOS
399 #endif /* BUNDLE_MGR_H */
400