From eb22cea2adb0ef2b45ae8dad2d3fc63ca7817bbf Mon Sep 17 00:00:00 2001 From: dy Date: Tue, 14 Jun 2022 10:05:53 +0800 Subject: [PATCH] =?UTF-8?q?IssueNo:#I5BOAL:=E8=A1=A5=E5=85=85=E6=8B=86?= =?UTF-8?q?=E5=88=86ConnectFreeInstall=E7=9A=84=E5=88=A4=E6=96=AD=E5=92=8C?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=20Description:=E6=8B=86=E5=88=86ConnectFreeI?= =?UTF-8?q?nstall=E7=9A=84=E5=88=A4=E6=96=AD=E5=92=8C=E4=B8=9A=E5=8A=A1=20?= =?UTF-8?q?Sig:SIG=5FApplicationFramework=20Feature=20or=20Bugfix:Bugfix?= =?UTF-8?q?=20Binary=20Source:=20No?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dy --- .../include/ability_manager_service.h | 7 +- services/abilitymgr/include/ability_util.h | 9 ++ .../abilitymgr/include/free_install_manager.h | 17 +-- .../src/ability_manager_service.cpp | 64 +++++------ .../abilitymgr/src/free_install_manager.cpp | 103 +++++++----------- 5 files changed, 81 insertions(+), 119 deletions(-) diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 6ac4d8fb36..9d97bed0e8 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -551,9 +551,7 @@ public: int requestCode, int callerUid = DEFAULT_INVAL_VALUE, int32_t userId = DEFAULT_INVAL_VALUE); - - bool IsStartFreeInstall(const Want &want); - int StartFreeInstall(const Want &want, const sptr &callerToken, int requestCode, int32_t userId); + int CheckPermission(const std::string &bundleName, const std::string &permission); void OnAcceptWantResponse(const AAFwk::Want &want, const std::string &flag); @@ -1015,9 +1013,6 @@ private: bool GetValidDataAbilityUri(const std::string &abilityInfoUri, std::string &adjustUri); - int StartFreeInstall(const Want &want, int32_t userId, int requestCode, - const sptr &callerToken); - bool CheckIsFreeInstall(const Want &want); bool CheckTargetBundleList(const Want &want, int32_t userId, const sptr &callerToken); void HandleFreeInstallErrorCode(int &resultCode); int NotifyDmsCallback(const Want &want, int resultCode); diff --git a/services/abilitymgr/include/ability_util.h b/services/abilitymgr/include/ability_util.h index bae48ab909..21c0e58aca 100644 --- a/services/abilitymgr/include/ability_util.h +++ b/services/abilitymgr/include/ability_util.h @@ -137,6 +137,15 @@ static constexpr int64_t MICROSECONDS = 1000000; // MICROSECONDS mean 10^6 mi return (int64_t)(t.tv_sec); } +[[maybe_unused]] static bool IsStartFreeInstall(const Want &want) +{ + auto flags = want.GetFlags(); + if ((flags & Want::FLAG_INSTALL_ON_DEMAND) == Want::FLAG_INSTALL_ON_DEMAND) { + return true; + } + return false; +} + static sptr GetBundleManager() { auto bundleObj = diff --git a/services/abilitymgr/include/free_install_manager.h b/services/abilitymgr/include/free_install_manager.h index df4f231b5c..784f095a96 100644 --- a/services/abilitymgr/include/free_install_manager.h +++ b/services/abilitymgr/include/free_install_manager.h @@ -83,28 +83,16 @@ public: int32_t userId, int requestCode); /** - * Check if the connect request is free install. + * Connect if the request is free install. * @param want, the want of the ability to free install. * @param userId, designation User ID. * @param callerToken, caller ability token. * @param localDeviceId, the device id of local. * @return Returns ERR_OK on success, others on failure. */ - int IsConnectFreeInstall(const Want &want, int32_t userId, const sptr &callerToken, + int ConnectFreeInstall(const Want &want, int32_t userId, const sptr &callerToken, std::string& localDeviceId); - /** - * Check if the connect request is free install. - * @param want, the want of the ability to free install. - * @param userId, designation User ID. - * @param callerToken, caller ability token. - * @param requestCode, ability request code. - * @param isRemote, is remote ability to free install. - * @return Returns ERR_OK on success, others on failure. - */ - int StartFreeInstall(const Want &want, int32_t userId, const sptr &callerToken, - int requestCode, bool isRemote); - private: std::weak_ptr server_; struct FreeInstallInfo { @@ -119,7 +107,6 @@ private: std::vector freeInstallList_; std::vector dmsFreeInstallCbs_; - bool CheckIsFreeInstall(const Want &want); bool CheckTargetBundleList(const Want &want, int32_t userId, const sptr &callerToken); int HandleFreeInstallErrorCode(int resultCode); int NotifyDmsCallback(const Want &want, int resultCode); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 248ae3a4ab..aeddeff708 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -362,8 +362,9 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptrFreeInstall( + want, validUserId, requestCode, callerToken, CheckIfOperateRemote(want)); } if (requestCode == DEFAULT_REQUEST_CODE) { HILOG_INFO("AbilityManagerService::StartAbility. try to StartRemoteAbility"); @@ -376,10 +377,11 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptrFreeInstall( + want, validUserId, requestCode, callerToken, CheckIfOperateRemote(want)); if (ret != ERR_OK) { - HILOG_DEBUG("StartFreeInstall ret : %{public}d", ret); + HILOG_DEBUG("FreeInstall ret : %{public}d", ret); return ret; } } @@ -480,14 +482,15 @@ int AbilityManagerService::StartAbility(const Want &want, const AbilityStartSett int32_t oriValidUserId = GetValidUserId(userId); int32_t validUserId = oriValidUserId; - if (IsStartFreeInstall(want)) { - if (CheckIfOperateRemote(want)) { + if (AbilityUtil::IsStartFreeInstall(want)) { + if (CheckIfOperateRemote(want) || freeInstallManager_ == nullptr) { HILOG_ERROR("can not start remote free install"); return ERR_INVALID_VALUE; } - int ret = StartFreeInstall(want, callerToken, requestCode, validUserId); + int ret = freeInstallManager_->FreeInstall( + want, validUserId, requestCode, callerToken, CheckIfOperateRemote(want)); if (ret != ERR_OK) { - HILOG_DEBUG("StartFreeInstall ret : %{public}d", ret); + HILOG_DEBUG("FreeInstall ret : %{public}d", ret); return ret; } } @@ -614,14 +617,15 @@ int AbilityManagerService::StartAbility(const Want &want, const StartOptions &st int32_t oriValidUserId = GetValidUserId(userId); int32_t validUserId = oriValidUserId; - if (IsStartFreeInstall(want)) { - if (CheckIfOperateRemote(want)) { + if (AbilityUtil::IsStartFreeInstall(want)) { + if (CheckIfOperateRemote(want) || freeInstallManager_ == nullptr) { HILOG_ERROR("can not start remote free install"); return ERR_INVALID_VALUE; } - int ret = StartFreeInstall(want, callerToken, requestCode, validUserId); + int ret = freeInstallManager_->FreeInstall( + want, validUserId, requestCode, callerToken, CheckIfOperateRemote(want)); if (ret != ERR_OK) { - HILOG_DEBUG("StartFreeInstall ret : %{public}d", ret); + HILOG_DEBUG("FreeInstall ret : %{public}d", ret); return ret; } } @@ -711,15 +715,6 @@ int AbilityManagerService::StartAbility(const Want &want, const StartOptions &st return ret; } -bool AbilityManagerService::IsStartFreeInstall(const Want &want) -{ - auto flags = want.GetFlags(); - if ((flags & Want::FLAG_INSTALL_ON_DEMAND) == Want::FLAG_INSTALL_ON_DEMAND) { - return true; - } - return false; -} - bool AbilityManagerService::IsBackgroundTaskUid(const int uid) { #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE @@ -729,13 +724,6 @@ bool AbilityManagerService::IsBackgroundTaskUid(const int uid) #endif } -int AbilityManagerService::StartFreeInstall( - const Want &want, const sptr &callerToken, int requestCode, int32_t userId) -{ - HILOG_INFO("StartAbility with free install flags"); - return freeInstallManager_->StartFreeInstall(want, userId, callerToken, requestCode, CheckIfOperateRemote(want)); -} - int AbilityManagerService::CheckOptExtensionAbility(const Want &want, AbilityRequest &abilityRequest, int32_t validUserId, AppExecFwk::ExtensionAbilityType extensionType) { @@ -1293,12 +1281,14 @@ int AbilityManagerService::ConnectAbility( return ERR_INVALID_VALUE; } - int result = freeInstallManager_->IsConnectFreeInstall(want, validUserId, callerToken, localDeviceId); - if (result != ERR_OK) { - eventInfo.errCode = result; - AAFWK::EventReport::SendExtensionEvent(AAFWK::CONNECT_SERVICE_ERROR, - HiSysEventType::FAULT, eventInfo); - return result; + if (AbilityUtil::IsStartFreeInstall(want) && freeInstallManager_ != nullptr) { + int result = freeInstallManager_->ConnectFreeInstall(want, validUserId, callerToken, localDeviceId); + if (result != ERR_OK) { + eventInfo.errCode = result; + AAFWK::EventReport::SendExtensionEvent(AAFWK::CONNECT_SERVICE_ERROR, + HiSysEventType::FAULT, eventInfo); + return result; + } } Want abilityWant = want; @@ -4672,6 +4662,10 @@ int AbilityManagerService::FreeInstallAbilityFromRemote(const Want &want, const int32_t userId, int requestCode) { int32_t validUserId = GetValidUserId(userId); + if (freeInstallManager_ == nullptr) { + HILOG_ERROR("freeInstallManager_ is nullptr"); + return ERR_INVALID_VALUE; + } return freeInstallManager_->FreeInstallAbilityFromRemote(want, callback, validUserId, requestCode); } diff --git a/services/abilitymgr/src/free_install_manager.cpp b/services/abilitymgr/src/free_install_manager.cpp index db76ec9584..7055465cdc 100644 --- a/services/abilitymgr/src/free_install_manager.cpp +++ b/services/abilitymgr/src/free_install_manager.cpp @@ -32,17 +32,6 @@ FreeInstallManager::FreeInstallManager(const std::weak_ptr &callerToken) { HILOG_INFO("%{public}s", __func__); @@ -301,67 +290,55 @@ int FreeInstallManager::HandleFreeInstallErrorCode(int resultCode) return itToApp->second; } -int FreeInstallManager::IsConnectFreeInstall(const Want &want, int32_t userId, +int FreeInstallManager::ConnectFreeInstall(const Want &want, int32_t userId, const sptr &callerToken, std::string& localDeviceId) { - if (CheckIsFreeInstall(want)) { - auto abilityRecord = Token::GetAbilityRecordByToken(callerToken); - AppExecFwk::AbilityType type = abilityRecord->GetAbilityInfo().type; - if (type == AppExecFwk::AbilityType::PAGE) { - if (!IsTopAbility(callerToken)) { - return NOT_TOP_ABILITY; - } - } - std::string wantBundleName = want.GetElement().GetBundleName(); - std::string wantAbilityName = want.GetElement().GetAbilityName(); - std::string wantDeviceId = want.GetElement().GetDeviceID(); - std::string wantModuleName = want.GetStringParam("moduleName"); - if (!(localDeviceId == wantDeviceId || wantDeviceId.empty())) { - HILOG_ERROR("AbilityManagerService::IsConnectFreeInstall. wantDeviceId error"); - return ERR_INVALID_VALUE; + auto abilityRecord = Token::GetAbilityRecordByToken(callerToken); + if (abilityRecord == nullptr) { + return ERR_INVALID_VALUE; + } + AppExecFwk::AbilityType type = abilityRecord->GetAbilityInfo().type; + if (type == AppExecFwk::AbilityType::PAGE) { + if (!IsTopAbility(callerToken)) { + return NOT_TOP_ABILITY; } + } + std::string wantBundleName = want.GetElement().GetBundleName(); + std::string wantAbilityName = want.GetElement().GetAbilityName(); + std::string wantDeviceId = want.GetElement().GetDeviceID(); + std::string wantModuleName = want.GetStringParam("moduleName"); + if (!(localDeviceId == wantDeviceId || wantDeviceId.empty())) { + HILOG_ERROR("AbilityManagerService::ConnectFreeInstall. wantDeviceId error"); + return ERR_INVALID_VALUE; + } - if (wantBundleName.empty() || wantAbilityName.empty()) { - HILOG_ERROR("AbilityManagerService::IsConnectFreeInstall. wantBundleName or wantAbilityName is empty"); - return ERR_INVALID_VALUE; - } - auto bms = AbilityUtil::GetBundleManager(); - CHECK_POINTER_AND_RETURN(bms, GET_ABILITY_SERVICE_FAILED); - int callerUid = IPCSkeleton::GetCallingUid(); - std::string LocalBundleName; - bms->GetBundleNameForUid(callerUid, LocalBundleName); - if (LocalBundleName != wantBundleName) { - HILOG_ERROR("AbilityManagerService::IsConnectFreeInstall. wantBundleName is not local BundleName"); - return ERR_INVALID_VALUE; - } - AppExecFwk::AbilityInfo abilityInfo; - if (!(bms->QueryAbilityInfo(want, AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_APPLICATION, userId, - abilityInfo))) { - HILOG_INFO("AbilityManagerService::IsConnectFreeInstall. try to FreeInstall"); - int result = FreeInstall(want, userId, DEFAULT_INVAL_VALUE, callerToken, false); - if (result) { - HILOG_ERROR("AbilityManagerService::IsConnectFreeInstall. FreeInstall error"); - return result; - } - HILOG_INFO("AbilityManagerService::IsConnectFreeInstall. FreeInstall success"); + if (wantBundleName.empty() || wantAbilityName.empty()) { + HILOG_ERROR("AbilityManagerService::ConnectFreeInstall. wantBundleName or wantAbilityName is empty"); + return ERR_INVALID_VALUE; + } + auto bms = AbilityUtil::GetBundleManager(); + CHECK_POINTER_AND_RETURN(bms, GET_ABILITY_SERVICE_FAILED); + int callerUid = IPCSkeleton::GetCallingUid(); + std::string localBundleName; + bms->GetBundleNameForUid(callerUid, localBundleName); + if (localBundleName != wantBundleName) { + HILOG_ERROR("AbilityManagerService::ConnectFreeInstall. wantBundleName is not local BundleName"); + return ERR_INVALID_VALUE; + } + AppExecFwk::AbilityInfo abilityInfo; + if (!(bms->QueryAbilityInfo(want, AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_APPLICATION, userId, + abilityInfo))) { + HILOG_INFO("AbilityManagerService::ConnectFreeInstall. try to FreeInstall"); + int result = FreeInstall(want, userId, DEFAULT_INVAL_VALUE, callerToken, false); + if (result) { + HILOG_ERROR("AbilityManagerService::ConnectFreeInstall. FreeInstall error"); + return result; } + HILOG_INFO("AbilityManagerService::ConnectFreeInstall. FreeInstall success"); } return ERR_OK; } - -int FreeInstallManager::StartFreeInstall(const Want &want, int32_t userId, - const sptr &callerToken, int requestCode, bool isRemote) -{ - int result = FreeInstall(want, userId, DEFAULT_INVAL_VALUE, callerToken, isRemote); - if (result) { - HILOG_ERROR("AbilityManagerService::IsConnectFreeInstall. FreeInstall error"); - return result; - } - return ERR_OK; -} - - void FreeInstallManager::OnInstallFinished(int resultCode, const Want &want, int32_t userId) { HILOG_INFO("%{public}s resultCode = %{public}d", __func__, resultCode);