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