• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 #include <dlfcn.h>
17 
18 #include "app_log_wrapper.h"
19 #include "app_log_tag_wrapper.h"
20 #include "bms_extension_data_mgr.h"
21 #include "bms_extension_profile.h"
22 #include "bundle_mgr_ext_register.h"
23 
24 namespace OHOS {
25 namespace AppExecFwk {
26 BmsExtension BmsExtensionDataMgr::bmsExtension_;
27 void *BmsExtensionDataMgr::handler_ = nullptr;
28 namespace {
29 static std::mutex stateMutex;
30 const std::string BMS_EXTENSION_PATH = "/system/etc/app/bms-extensions.json";
31 const uint32_t API_VERSION_BASE = 1000;
32 }
33 
BmsExtensionDataMgr()34 BmsExtensionDataMgr::BmsExtensionDataMgr()
35 {
36 }
37 
Init()38 ErrCode BmsExtensionDataMgr::Init()
39 {
40     std::lock_guard<std::mutex> stateLock(stateMutex);
41     if (bmsExtension_.bmsExtensionBundleMgr.extensionName.empty() || !handler_) {
42         BmsExtensionProfile bmsExtensionProfile;
43         auto res = bmsExtensionProfile.ParseBmsExtension(BMS_EXTENSION_PATH, bmsExtension_);
44         if (res != ERR_OK) {
45             APP_LOGW("ParseBmsExtension failed %{public}d", res);
46             return ERR_APPEXECFWK_PARSE_UNEXPECTED;
47         }
48         APP_LOGD("parse bms-extension.json success, which is: %{public}s", bmsExtension_.ToString().c_str());
49         if (!OpenHandler()) {
50             APP_LOGW("dlopen bms-extension so failed");
51             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
52         }
53     }
54     return ERR_OK;
55 }
56 
OpenHandler()57 bool BmsExtensionDataMgr::OpenHandler()
58 {
59     APP_LOGD("OpenHandler start");
60     auto handle = &handler_;
61     if (handle == nullptr) {
62         APP_LOGE("OpenHandler error handle is nullptr");
63         return false;
64     }
65     auto libPath = bmsExtension_.bmsExtensionBundleMgr.libPath.c_str();
66     auto lib64Path = bmsExtension_.bmsExtensionBundleMgr.lib64Path.c_str();
67     *handle = dlopen(lib64Path, RTLD_NOW | RTLD_GLOBAL);
68     if (*handle == nullptr) {
69         APP_LOGW("open %{public}s failed %{public}s", lib64Path, dlerror());
70         *handle = dlopen(libPath, RTLD_NOW | RTLD_GLOBAL);
71     }
72     if (*handle == nullptr) {
73         APP_LOGE("open %{public}s failed %{public}s", libPath, dlerror());
74         return false;
75     }
76     APP_LOGD("OpenHandler end");
77     return true;
78 }
79 
CheckApiInfo(const BundleInfo & bundleInfo,uint32_t sdkVersion)80 bool BmsExtensionDataMgr::CheckApiInfo(const BundleInfo &bundleInfo, uint32_t sdkVersion)
81 {
82     if ((Init() == ERR_OK) && handler_) {
83         auto bundleMgrExtPtr =
84             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
85         if (bundleMgrExtPtr) {
86             return bundleMgrExtPtr->CheckApiInfo(bundleInfo);
87         }
88         APP_LOGE("create class: %{public}s failed", bmsExtension_.bmsExtensionBundleMgr.extensionName.c_str());
89         return false;
90     }
91     APP_LOGW("access bms-extension failed");
92     return CheckApiInfo(bundleInfo.compatibleVersion, sdkVersion);
93 }
94 
CheckApiInfo(uint32_t compatibleVersion,uint32_t sdkVersion)95 bool BmsExtensionDataMgr::CheckApiInfo(uint32_t compatibleVersion, uint32_t sdkVersion)
96 {
97     APP_LOGD("CheckApiInfo with compatibleVersion:%{public}d, sdkVersion:%{public}d", compatibleVersion, sdkVersion);
98     uint32_t compatibleVersionOHOS = compatibleVersion % API_VERSION_BASE;
99     return compatibleVersionOHOS <= sdkVersion;
100 }
101 
HapVerify(const std::string & filePath,Security::Verify::HapVerifyResult & hapVerifyResult)102 ErrCode BmsExtensionDataMgr::HapVerify(const std::string &filePath, Security::Verify::HapVerifyResult &hapVerifyResult)
103 {
104     if ((Init() == ERR_OK) && handler_) {
105         auto bundleMgrExtPtr =
106             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
107         if (bundleMgrExtPtr == nullptr) {
108             APP_LOGW("bundleMgrExtPtr is nullptr");
109             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
110         }
111         return bundleMgrExtPtr->HapVerify(filePath, hapVerifyResult);
112     }
113     APP_LOGW("access bms-extension failed");
114     return ERR_BUNDLEMANAGER_INSTALL_FAILED_SIGNATURE_EXTENSION_NOT_EXISTED;
115 }
116 
IsRdDevice()117 bool BmsExtensionDataMgr::IsRdDevice()
118 {
119     if ((Init() != ERR_OK) || handler_ == nullptr) {
120         APP_LOGW("link failed");
121         return false;
122     }
123     auto bundleMgrExtPtr =
124         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
125     if (bundleMgrExtPtr == nullptr) {
126         APP_LOGW("GetBundleMgrExt failed");
127         return false;
128     }
129     return bundleMgrExtPtr->IsRdDevice();
130 }
131 
QueryAbilityInfos(const Want & want,int32_t userId,std::vector<AbilityInfo> & abilityInfos)132 ErrCode BmsExtensionDataMgr::QueryAbilityInfos(const Want &want, int32_t userId,
133     std::vector<AbilityInfo> &abilityInfos)
134 {
135     if ((Init() == ERR_OK) && handler_) {
136         auto bundleMgrExtPtr =
137             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
138         if (bundleMgrExtPtr == nullptr) {
139             LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr");
140             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
141         }
142         return bundleMgrExtPtr->QueryAbilityInfos(want, userId, abilityInfos);
143     }
144     LOG_W(BMS_TAG_QUERY, "access bms-extension failed");
145     return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED;
146 }
147 
QueryAbilityInfosWithFlag(const Want & want,int32_t flags,int32_t userId,std::vector<AbilityInfo> & abilityInfos,bool isNewVersion)148 ErrCode BmsExtensionDataMgr::QueryAbilityInfosWithFlag(const Want &want, int32_t flags, int32_t userId,
149     std::vector<AbilityInfo> &abilityInfos, bool isNewVersion)
150 {
151     if ((Init() == ERR_OK) && handler_) {
152         auto bundleMgrExtPtr =
153             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
154         if (bundleMgrExtPtr == nullptr) {
155             LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr");
156             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
157         }
158         return bundleMgrExtPtr->QueryAbilityInfosWithFlag(want, flags, userId, abilityInfos, isNewVersion);
159     }
160     LOG_W(BMS_TAG_QUERY, "access bms-extension failed");
161     return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED;
162 }
163 
GetBundleInfos(int32_t flags,std::vector<BundleInfo> & bundleInfos,int32_t userId,bool isNewVersion)164 ErrCode BmsExtensionDataMgr::GetBundleInfos(int32_t flags, std::vector<BundleInfo> &bundleInfos, int32_t userId,
165     bool isNewVersion)
166 {
167     if ((Init() == ERR_OK) && handler_) {
168         auto bundleMgrExtPtr =
169             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
170         if (bundleMgrExtPtr == nullptr) {
171             LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr");
172             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
173         }
174         return bundleMgrExtPtr->GetBundleInfos(flags, bundleInfos, userId, isNewVersion);
175     }
176     LOG_W(BMS_TAG_QUERY, "access bms-extension failed");
177     return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED;
178 }
179 
GetBundleInfo(const std::string & bundleName,int32_t flags,int32_t userId,BundleInfo & bundleInfo,bool isNewVersion)180 ErrCode BmsExtensionDataMgr::GetBundleInfo(const std::string &bundleName, int32_t flags, int32_t userId,
181     BundleInfo &bundleInfo, bool isNewVersion)
182 {
183     if ((Init() == ERR_OK) && handler_) {
184         auto bundleMgrExtPtr =
185             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
186         if (bundleMgrExtPtr == nullptr) {
187             LOG_W(BMS_TAG_QUERY, "bundleMgrExtPtr is nullptr");
188             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
189         }
190         return bundleMgrExtPtr->GetBundleInfo(bundleName, flags, userId, bundleInfo, isNewVersion);
191     }
192     LOG_W(BMS_TAG_QUERY, "access bms-extension failed");
193     return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED;
194 }
195 
Uninstall(const std::string & bundleName)196 ErrCode BmsExtensionDataMgr::Uninstall(const std::string &bundleName)
197 {
198     if ((Init() == ERR_OK) && handler_) {
199         auto bundleMgrExtPtr =
200             BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
201         if (bundleMgrExtPtr == nullptr) {
202             APP_LOGW("bundleMgrExtPtr is nullptr");
203             return ERR_APPEXECFWK_INSTALL_INTERNAL_ERROR;
204         }
205         return bundleMgrExtPtr->Uninstall(bundleName);
206     }
207     APP_LOGW("access bms-extension failed");
208     return ERR_BUNDLE_MANAGER_INSTALL_FAILED_BUNDLE_EXTENSION_NOT_EXISTED;
209 }
210 
GetBundleStats(const std::string & bundleName,int32_t userId,std::vector<int64_t> & bundleStats)211 ErrCode BmsExtensionDataMgr::GetBundleStats(
212     const std::string &bundleName, int32_t userId, std::vector<int64_t> &bundleStats)
213 {
214     if ((Init() != ERR_OK) || handler_ == nullptr) {
215         APP_LOGW("link failed");
216         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
217     }
218     auto bundleMgrExtPtr =
219         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
220     if (bundleMgrExtPtr == nullptr) {
221         APP_LOGW("GetBundleMgrExt failed");
222         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
223     }
224     return bundleMgrExtPtr->GetBundleStats(bundleName, userId, bundleStats);
225 }
226 
ClearData(const std::string & bundleName,int32_t userId)227 ErrCode BmsExtensionDataMgr::ClearData(const std::string &bundleName, int32_t userId)
228 {
229     if ((Init() != ERR_OK) || handler_ == nullptr) {
230         APP_LOGW("link failed");
231         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
232     }
233     auto bundleMgrExtPtr =
234         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
235     if (bundleMgrExtPtr == nullptr) {
236         APP_LOGW("GetBundleMgrExt failed");
237         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
238     }
239     return bundleMgrExtPtr->ClearData(bundleName, userId);
240 }
241 
ClearCache(const std::string & bundleName,sptr<IRemoteObject> callback,int32_t userId)242 ErrCode BmsExtensionDataMgr::ClearCache(const std::string &bundleName, sptr<IRemoteObject> callback, int32_t userId)
243 {
244     if ((Init() != ERR_OK) || handler_ == nullptr) {
245         APP_LOGW("link failed");
246         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
247     }
248     auto bundleMgrExtPtr =
249         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
250     if (bundleMgrExtPtr == nullptr) {
251         APP_LOGW("GetBundleMgrExt failed");
252         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
253     }
254     return bundleMgrExtPtr->ClearCache(bundleName, callback, userId);
255 }
256 
GetUidByBundleName(const std::string & bundleName,int32_t userId,int32_t & uid)257 ErrCode BmsExtensionDataMgr::GetUidByBundleName(const std::string &bundleName, int32_t userId, int32_t &uid)
258 {
259     if ((Init() != ERR_OK) || handler_ == nullptr) {
260         APP_LOGW("link failed");
261         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
262     }
263     auto bundleMgrExtPtr =
264         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
265     if (bundleMgrExtPtr == nullptr) {
266         APP_LOGW("GetBundleMgrExt failed");
267         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
268     }
269     return bundleMgrExtPtr->GetUidByBundleName(bundleName, userId, uid);
270 }
271 
GetBundleNameByUid(int32_t uid,std::string & bundleName)272 ErrCode BmsExtensionDataMgr::GetBundleNameByUid(int32_t uid, std::string &bundleName)
273 {
274     if ((Init() != ERR_OK) || handler_ == nullptr) {
275         APP_LOGW("link failed");
276         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
277     }
278     auto bundleMgrExtPtr =
279         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
280     if (bundleMgrExtPtr == nullptr) {
281         APP_LOGW("GetBundleMgrExt failed");
282         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
283     }
284     return bundleMgrExtPtr->GetBundleNameByUid(uid, bundleName);
285 }
286 
VerifyActivationLock(bool & res)287 ErrCode BmsExtensionDataMgr::VerifyActivationLock(bool &res)
288 {
289     if ((Init() != ERR_OK) || handler_ == nullptr) {
290         APP_LOGW("link failed");
291         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
292     }
293     auto bundleMgrExtPtr =
294         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
295     if (bundleMgrExtPtr == nullptr) {
296         APP_LOGW("GetBundleMgrExt failed");
297         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
298     }
299     return bundleMgrExtPtr->VerifyActivationLock(res);
300 }
301 
GetBackupUninstallList(int32_t userId,std::set<std::string> & uninstallBundles)302 ErrCode BmsExtensionDataMgr::GetBackupUninstallList(int32_t userId, std::set<std::string> &uninstallBundles)
303 {
304     if (Init() != ERR_OK || handler_ == nullptr) {
305         APP_LOGW("link failed");
306         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
307     }
308     auto bundleMgrExtPtr =
309         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
310     if (bundleMgrExtPtr == nullptr) {
311         APP_LOGW("GetBundleMgrExt failed");
312         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
313     }
314     return bundleMgrExtPtr->GetBackupUninstallList(userId, uninstallBundles);
315 }
316 
ClearBackupUninstallFile(int32_t userId)317 ErrCode BmsExtensionDataMgr::ClearBackupUninstallFile(int32_t userId)
318 {
319     if (Init() != ERR_OK || handler_ == nullptr) {
320         APP_LOGW("link failed");
321         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
322     }
323     auto bundleMgrExtPtr =
324         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
325     if (bundleMgrExtPtr == nullptr) {
326         APP_LOGW("GetBundleMgrExt failed");
327         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
328     }
329     return bundleMgrExtPtr->ClearBackupUninstallFile(userId);
330 }
331 
IsAppInBlocklist(const std::string & bundleName,const int32_t userId)332 bool BmsExtensionDataMgr::IsAppInBlocklist(const std::string &bundleName, const int32_t userId)
333 {
334     if ((Init() != ERR_OK) || handler_ == nullptr) {
335         APP_LOGW("link failed");
336         return false;
337     }
338     auto bundleMgrExtPtr =
339         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
340     if (bundleMgrExtPtr == nullptr) {
341         APP_LOGW("GetBundleMgrExt failed");
342         return false;
343     }
344     return bundleMgrExtPtr->IsAppInBlocklist(bundleName, userId);
345 }
346 
CheckWhetherCanBeUninstalled(const std::string & bundleName)347 bool BmsExtensionDataMgr::CheckWhetherCanBeUninstalled(const std::string &bundleName)
348 {
349     if ((Init() != ERR_OK) || handler_ == nullptr) {
350         APP_LOGW("link failed");
351         return true;
352     }
353     auto bundleMgrExtPtr =
354         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
355     if (bundleMgrExtPtr == nullptr) {
356         APP_LOGW("GetBundleMgrExt failed");
357         return true;
358     }
359     return bundleMgrExtPtr->CheckWhetherCanBeUninstalled(bundleName);
360 }
361 
AddResourceInfoByBundleName(const std::string & bundleName,const int32_t userId)362 ErrCode BmsExtensionDataMgr::AddResourceInfoByBundleName(const std::string &bundleName, const int32_t userId)
363 {
364     if (Init() != ERR_OK || handler_ == nullptr) {
365         APP_LOGW("link failed");
366         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
367     }
368     auto bundleMgrExtPtr =
369         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
370     if (bundleMgrExtPtr == nullptr) {
371         APP_LOGW("GetBundleMgrExt failed");
372         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
373     }
374     ErrCode ret = bundleMgrExtPtr->AddResourceInfoByBundleName(bundleName, userId);
375     APP_LOGD("call bundle mgr ext return %{public}d by bundleName:%{public}s userId:%{private}d",
376         ret, bundleName.c_str(), userId);
377     return ret;
378 }
379 
AddResourceInfoByAbility(const std::string & bundleName,const std::string & moduleName,const std::string & abilityName,const int32_t userId)380 ErrCode BmsExtensionDataMgr::AddResourceInfoByAbility(const std::string &bundleName, const std::string &moduleName,
381     const std::string &abilityName, const int32_t userId)
382 {
383     if (Init() != ERR_OK || handler_ == nullptr) {
384         APP_LOGW("link failed");
385         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
386     }
387     auto bundleMgrExtPtr =
388         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
389     if (bundleMgrExtPtr == nullptr) {
390         APP_LOGW("GetBundleMgrExt failed");
391         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
392     }
393     ErrCode ret = bundleMgrExtPtr->AddResourceInfoByAbility(bundleName, moduleName, abilityName, userId);
394     APP_LOGD("call bundle mgr ext return %{public}d by bundleName:%{public}s moduleName:%{public}s \
395         abilityName:%{public}s userId:%{private}d",
396         ret, bundleName.c_str(), moduleName.c_str(), abilityName.c_str(), userId);
397     return ret;
398 }
399 
DeleteResourceInfo(const std::string & key)400 ErrCode BmsExtensionDataMgr::DeleteResourceInfo(const std::string &key)
401 {
402     if (Init() != ERR_OK || handler_ == nullptr) {
403         APP_LOGW("link failed");
404         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
405     }
406     auto bundleMgrExtPtr =
407         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
408     if (bundleMgrExtPtr == nullptr) {
409         APP_LOGW("GetBundleMgrExt failed");
410         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
411     }
412     ErrCode ret = bundleMgrExtPtr->DeleteResourceInfo(key);
413     APP_LOGD("call bundle mgr ext return %{public}d by key:%{private}s", ret, key.c_str());
414     return ret;
415 }
416 
OptimizeDisposedPredicates(const std::string & callingName,const std::string & appId,int32_t userId,int32_t appIndex,NativeRdb::AbsRdbPredicates & absRdbPredicates)417 ErrCode BmsExtensionDataMgr::OptimizeDisposedPredicates(const std::string &callingName, const std::string &appId,
418     int32_t userId, int32_t appIndex, NativeRdb::AbsRdbPredicates &absRdbPredicates)
419 {
420     if (Init() != ERR_OK || handler_ == nullptr) {
421         APP_LOGW("link failed");
422         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
423     }
424     auto bundleMgrExtPtr =
425         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
426     if (bundleMgrExtPtr == nullptr) {
427         APP_LOGW("GetBundleMgrExt failed");
428         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
429     }
430     ErrCode ret = bundleMgrExtPtr->OptimizeDisposedPredicates(callingName, appId, userId, appIndex, absRdbPredicates);
431     APP_LOGD("call bundle mgr ext OptimizeDisposedPredicates, return %{public}d, result:%{private}s",
432         ret, absRdbPredicates.ToString().c_str());
433     return ret;
434 }
435 
GetBundleResourceInfo(const std::string & bundleName,const uint32_t flags,BundleResourceInfo & bundleResourceInfo,const int32_t appIndex)436 ErrCode BmsExtensionDataMgr::GetBundleResourceInfo(const std::string &bundleName, const uint32_t flags,
437     BundleResourceInfo &bundleResourceInfo, const int32_t appIndex)
438 {
439     if (Init() != ERR_OK || handler_ == nullptr) {
440         APP_LOGW("link failed");
441         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
442     }
443     auto bundleMgrExtPtr =
444         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
445     if (bundleMgrExtPtr == nullptr) {
446         APP_LOGW("GetBundleMgrExt failed");
447         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
448     }
449     ErrCode ret = bundleMgrExtPtr->GetBundleResourceInfo(bundleName, flags, bundleResourceInfo, appIndex);
450     APP_LOGD("call bundle mgr ext GetBundleResourceInfo, return %{public}d, bundleName:%{public}s",
451         ret, bundleName.c_str());
452     return ret;
453 }
454 
GetLauncherAbilityResourceInfo(const std::string & bundleName,const uint32_t flags,std::vector<LauncherAbilityResourceInfo> & launcherAbilityResourceInfo,const int32_t appIndex)455 ErrCode BmsExtensionDataMgr::GetLauncherAbilityResourceInfo(const std::string &bundleName, const uint32_t flags,
456     std::vector<LauncherAbilityResourceInfo> &launcherAbilityResourceInfo, const int32_t appIndex)
457 {
458     if (Init() != ERR_OK || handler_ == nullptr) {
459         APP_LOGW("link failed");
460         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
461     }
462     auto bundleMgrExtPtr =
463         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
464     if (bundleMgrExtPtr == nullptr) {
465         APP_LOGW("GetBundleMgrExt failed");
466         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
467     }
468     ErrCode ret =
469         bundleMgrExtPtr->GetLauncherAbilityResourceInfo(bundleName, flags, launcherAbilityResourceInfo, appIndex);
470     APP_LOGD("call bundle mgr ext GetLauncherAbilityResourceInfo, return %{public}d, bundleName:%{public}s",
471         ret, bundleName.c_str());
472     return ret;
473 }
474 
GetAllBundleResourceInfo(const uint32_t flags,std::vector<BundleResourceInfo> & bundleResourceInfos)475 ErrCode BmsExtensionDataMgr::GetAllBundleResourceInfo(const uint32_t flags,
476     std::vector<BundleResourceInfo> &bundleResourceInfos)
477 {
478     if (Init() != ERR_OK || handler_ == nullptr) {
479         APP_LOGW("link failed");
480         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
481     }
482     auto bundleMgrExtPtr =
483         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
484     if (bundleMgrExtPtr == nullptr) {
485         APP_LOGW("GetBundleMgrExt failed");
486         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
487     }
488     ErrCode ret = bundleMgrExtPtr->GetAllBundleResourceInfo(flags, bundleResourceInfos);
489     APP_LOGD("call bundle mgr ext GetAllBundleResourceInfo, return %{public}d", ret);
490     return ret;
491 }
492 
GetAllLauncherAbilityResourceInfo(const uint32_t flags,std::vector<LauncherAbilityResourceInfo> & launcherAbilityResourceInfos)493 ErrCode BmsExtensionDataMgr::GetAllLauncherAbilityResourceInfo(const uint32_t flags,
494     std::vector<LauncherAbilityResourceInfo> &launcherAbilityResourceInfos)
495 {
496     if (Init() != ERR_OK || handler_ == nullptr) {
497         APP_LOGW("link failed");
498         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
499     }
500     auto bundleMgrExtPtr =
501         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
502     if (bundleMgrExtPtr == nullptr) {
503         APP_LOGW("GetBundleMgrExt failed");
504         return ERR_BUNDLE_MANAGER_EXTENSION_INTERNAL_ERR;
505     }
506     ErrCode ret = bundleMgrExtPtr->GetAllLauncherAbilityResourceInfo(flags, launcherAbilityResourceInfos);
507     APP_LOGD("call bundle mgr ext GetAllLauncherAbilityResourceInfo, return %{public}d", ret);
508     return ret;
509 }
510 
DetermineCloneNum(const std::string & bundleName,const std::string & appIdentifier,int32_t & cloneNum)511 bool BmsExtensionDataMgr::DetermineCloneNum(
512     const std::string &bundleName, const std::string &appIdentifier, int32_t &cloneNum)
513 {
514     if (Init() != ERR_OK || handler_ == nullptr) {
515         APP_LOGW("link failed");
516         return false;
517     }
518     if (bundleName.empty()) {
519         APP_LOGW("bundleName empty");
520         return false;
521     }
522     auto bundleMgrExtPtr =
523         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
524     if (bundleMgrExtPtr == nullptr) {
525         APP_LOGW("GetBundleMgrExt failed");
526         return false;
527     }
528     return bundleMgrExtPtr->DetermineCloneNum(bundleName, appIdentifier, cloneNum);
529 }
530 
CheckBundleNameAndStratAbility(const std::string & bundleName,const std::string & appIdentifier)531 void BmsExtensionDataMgr::CheckBundleNameAndStratAbility(const std::string &bundleName,
532     const std::string &appIdentifier)
533 {
534     if (Init() != ERR_OK || handler_ == nullptr) {
535         APP_LOGW("link failed");
536         return;
537     }
538     if (bundleName.empty()) {
539         APP_LOGW("bundleName empty");
540         return;
541     }
542     auto bundleMgrExtPtr =
543         BundleMgrExtRegister::GetInstance().GetBundleMgrExt(bmsExtension_.bmsExtensionBundleMgr.extensionName);
544     if (bundleMgrExtPtr == nullptr) {
545         APP_LOGW("GetBundleMgrExt failed");
546         return;
547     }
548     bundleMgrExtPtr->CheckBundleNameAndStratAbility(bundleName, appIdentifier);
549 }
550 } // AppExecFwk
551 } // OHOS
552