From 49db4c93d5b8a609b6fe83dd02d73dad5a3c77ee Mon Sep 17 00:00:00 2001 From: wendel Date: Wed, 20 Aug 2025 19:55:02 +0800 Subject: [PATCH] fixed index Signed-off-by: wendel Change-Id: I04b59d60a4ed3d205d08f4c8ac8f249b8d512761 --- .../ui_ability_lifecycle_manager.h | 6 ++- .../include/utils/ability_permission_util.h | 4 +- .../include/utils/start_ability_utils.h | 2 +- .../include/utils/start_options_utils.h | 9 +++- .../src/ability_manager_service.cpp | 29 ++++++------ services/abilitymgr/src/ability_record.cpp | 5 +- .../src/mission/mission_list_manager.cpp | 3 +- .../ui_ability_lifecycle_manager.cpp | 47 +++++++------------ .../src/utils/ability_permission_util.cpp | 7 ++- .../src/utils/start_ability_utils.cpp | 9 ++-- .../src/utils/start_options_utils.cpp | 15 +++--- services/appmgr/src/app_mgr_service_inner.cpp | 16 +++---- .../startabilityutils_fuzzer.cpp | 2 +- .../uiabilitylifecyclemanagerb_fuzzer.cpp | 2 +- .../mock_ui_ability_lifecycle_manager.h | 12 ++--- .../mock_ui_ability_lifecycle_manager.h | 12 ++--- .../src/mock_ui_ability_lifecycle_manager.cpp | 4 +- .../ability_permission_util_second_test.cpp | 6 +-- .../ability_permission_util_test.cpp | 16 +++---- .../start_ability_utils_test.cpp | 12 ++--- .../start_options_utils_test/BUILD.gn | 1 + .../mock/include/start_ability_utils.h | 30 ++++++++++++ .../include/ui_ability_lifecycle_manager.h | 3 +- .../mock/src/mock_start_ability_utils.cpp | 27 +++++++++++ .../src/mock_ui_ability_lifecycle_manager.cpp | 2 +- .../start_options_utils_test.cpp | 28 +++++------ .../ui_ability_lifecycle_manager_test.cpp | 18 ++++--- utils/server/startup/src/startup_util.cpp | 17 ++++--- 28 files changed, 196 insertions(+), 148 deletions(-) create mode 100644 test/unittest/start_options_utils_test/mock/include/start_ability_utils.h create mode 100644 test/unittest/start_options_utils_test/mock/src/mock_start_ability_utils.cpp diff --git a/services/abilitymgr/include/scene_board/ui_ability_lifecycle_manager.h b/services/abilitymgr/include/scene_board/ui_ability_lifecycle_manager.h index 8f0e6bdcc56..67702a8885d 100644 --- a/services/abilitymgr/include/scene_board/ui_ability_lifecycle_manager.h +++ b/services/abilitymgr/include/scene_board/ui_ability_lifecycle_manager.h @@ -363,7 +363,8 @@ public: int ChangeUIAbilityVisibilityBySCB(sptr sessionInfo, bool isShow); - std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element, + int32_t appIndex); std::shared_ptr GetAbilityRecordByToken(const sptr &token) const; @@ -446,7 +447,8 @@ private: void HandleAbilitiesRequestDone(int32_t requestId, int32_t requestListId, sptr sessionInfo); bool IsHookModule(const AbilityRequest &abilityRequest) const; int ResolveAbility(const std::shared_ptr &targetAbility, const AbilityRequest &abilityRequest) const; - std::vector> GetAbilityRecordsByNameInner(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByNameInner(const AppExecFwk::ElementName &element, + int32_t appIndex); void HandleForegroundCollaborate(const AbilityRequest &abilityRequest, std::shared_ptr abilityRecord); diff --git a/services/abilitymgr/include/utils/ability_permission_util.h b/services/abilitymgr/include/utils/ability_permission_util.h index 8afd0a84c9f..edd34b810ad 100644 --- a/services/abilitymgr/include/utils/ability_permission_util.h +++ b/services/abilitymgr/include/utils/ability_permission_util.h @@ -85,13 +85,11 @@ public: * * @param want The want. * @param userId The user id. - * @param appIndex The app index. * @param callerToken The caller token. * @param isScbCall The scb call. * @return Whether the app is either multi-instance or app-clone. */ - int32_t CheckMultiInstanceAndAppClone(Want &want, int32_t userId, int32_t appIndex, - sptr callerToken, bool isScbCall); + int32_t CheckMultiInstanceAndAppClone(Want &want, int32_t userId, sptr callerToken, bool isScbCall); /** * CheckMultiInstanceKeyForExtension, check multi-instance key for extension. diff --git a/services/abilitymgr/include/utils/start_ability_utils.h b/services/abilitymgr/include/utils/start_ability_utils.h index 8129583fb41..ca17ea04a1e 100644 --- a/services/abilitymgr/include/utils/start_ability_utils.h +++ b/services/abilitymgr/include/utils/start_ability_utils.h @@ -54,7 +54,7 @@ struct StartAbilityUtils { AppExecFwk::ApplicationInfo &appInfo); static bool GetCallerAbilityInfo(const sptr &callerToken, AppExecFwk::AbilityInfo &abilityInfo); - static int32_t CheckAppProvisionMode(const Want& want, int32_t userId); + static int32_t CheckAppProvisionMode(const Want& want, int32_t userId, sptr callerToken); static int32_t CheckAppProvisionMode(const std::string& bundleName, int32_t userId); static std::vector GetCloneAppIndexes(const std::string &bundleName, int32_t userId); diff --git a/services/abilitymgr/include/utils/start_options_utils.h b/services/abilitymgr/include/utils/start_options_utils.h index 1111b612893..b574c4b321a 100644 --- a/services/abilitymgr/include/utils/start_options_utils.h +++ b/services/abilitymgr/include/utils/start_options_utils.h @@ -18,7 +18,10 @@ #include +#include "refbase.h" + namespace OHOS { +class IRemoteObject; namespace AAFwk { class Want; class StartOptions; @@ -33,10 +36,12 @@ public: StartOptionsUtils() = default; ~StartOptionsUtils() = default; - static int32_t CheckProcessOptions(const Want &want, const StartOptions &options, int32_t userId); + static int32_t CheckProcessOptions(const Want &want, const StartOptions &options, sptr callerToken, + int32_t userId); private: - static int32_t CheckProcessOptionsInner(const Want &want, const StartOptions &options, int32_t userId); + static int32_t CheckProcessOptionsInner(const Want &want, const StartOptions &options, + sptr callerToken, int32_t userIIRemoteObjectd); static int32_t CheckStartSelfUIAbilityStartOptions(const Want &want, const StartOptions &options); }; diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index c831e1e41b1..b7dbd35f152 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -596,7 +596,7 @@ int AbilityManagerService::StartAbility(const Want &want, int32_t userId, int re if (userId == DEFAULT_INVAL_VALUE) { userId = GetValidUserId(userId); } - if ((err = StartAbilityUtils::CheckAppProvisionMode(want, userId)) != ERR_OK) { + if ((err = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr)) != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "checkAppProvisionMode returns errcode=%{public}d", err); return err; } @@ -1242,7 +1242,7 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptr(want), - validUserId, appIndex, callerToken, false); + validUserId, callerToken, false); if (checkRet != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "CheckMultiInstanceAndAppClone failed: %{public}d", checkRet); eventHelper_.SendStartAbilityErrorEvent(eventInfo, checkRet, "CheckMultiInstanceAndAppClone failed"); @@ -1608,7 +1608,7 @@ int AbilityManagerService::StartAbilityDetails(const Want &want, const AbilitySt if (userId == DEFAULT_INVAL_VALUE) { userId = GetValidUserId(userId); } - if ((err = StartAbilityUtils::CheckAppProvisionMode(want, userId)) != ERR_OK) { + if ((err = StartAbilityUtils::CheckAppProvisionMode(want, userId, callerToken)) != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "checkAppProvisionMode returns errcode=%{public}d", err); eventHelper_.SendStartAbilityErrorEvent(eventInfo, err, "checkAppProvisionMode failed"); return err; @@ -1678,7 +1678,7 @@ int AbilityManagerService::StartAbilityDetails(const Want &want, const AbilitySt return ERR_APP_CLONE_INDEX_INVALID; } auto checkRet = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(const_cast(want), - validUserId, appIndex, callerToken, false); + validUserId, callerToken, false); if (checkRet != ERR_OK) { eventHelper_.SendStartAbilityErrorEvent(eventInfo, checkRet, "CheckMultiInstanceAndAppClone failed"); return checkRet; @@ -1873,7 +1873,7 @@ int AbilityManagerService::StartUIAbilityForOptionWrap(const Want &want, const S { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); int32_t ret = ERR_OK; - if ((ret = StartOptionsUtils::CheckProcessOptions(want, options, userId)) != ERR_OK) { + if ((ret = StartOptionsUtils::CheckProcessOptions(want, options, callerToken, userId)) != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "check process oprions failed: %{public}d", ret); return ret; } @@ -2020,7 +2020,7 @@ int AbilityManagerService::StartAbilityForOptionInner(const Want &want, const St return ERR_APP_CLONE_INDEX_INVALID; } auto checkRet = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(const_cast(want), - validUserId, appIndex, callerToken, false); + validUserId, callerToken, false); if (checkRet != ERR_OK) { eventHelper_.SendStartAbilityErrorEvent(eventInfo, checkRet, "CheckMultiInstanceAndAppClone failed"); return checkRet; @@ -2141,7 +2141,7 @@ int AbilityManagerService::StartAbilityForOptionInner(const Want &want, const St abilityRequest.abilityInfo.launchMode == AppExecFwk::LaunchMode::SPECIFIED) { auto uiAbilityManager = GetUIAbilityManagerByUid(IPCSkeleton::GetCallingUid()); CHECK_POINTER_AND_RETURN(uiAbilityManager, ERR_INVALID_VALUE); - auto abilityRecords = uiAbilityManager->GetAbilityRecordsByName(want.GetElement()); + auto abilityRecords = uiAbilityManager->GetAbilityRecordsByName(want.GetElement(), appIndex); if (!abilityRecords.empty() && abilityRecords[0] && !startOptions.processOptions->isRestartKeepAlive && !ProcessOptions::IsAttachToStatusBarItemMode(startOptions.processOptions->processMode) && @@ -2385,7 +2385,7 @@ int32_t AbilityManagerService::StartUIAbilitiesHandleWant(const Want &want, sptr return ret; } ret = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone( - const_cast(want), validUserId, appIndex, callerToken, false); + const_cast(want), validUserId, callerToken, false); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "StartUIAbilities CheckMultiInstanceAndAppClone failed"); return ret; @@ -7314,11 +7314,10 @@ int AbilityManagerService::GenerateAbilityRequest(const Want &want, int requestC (const_cast(want)).SetParam(DLP_PARAMS_SECURITY_FLAG, abilityRecord->GetSecurityFlag()); } - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex); if (abilityRecord != nullptr && abilityRecord->GetApplicationInfo().bundleName == want.GetElement().GetBundleName() && - abilityRecord->GetAppIndex() == appIndex) { + (!want.HasParameter(Want::PARAM_APP_CLONE_INDEX_KEY) || + want.GetIntParam(Want::PARAM_APP_CLONE_INDEX_KEY, 0) == abilityRecord->GetAppIndex())) { (const_cast(want)).SetParam(DEBUG_APP, abilityRecord->IsDebugApp()); } @@ -7334,7 +7333,7 @@ int AbilityManagerService::GenerateAbilityRequest(const Want &want, int requestC auto abilityInfo = StartAbilityUtils::startAbilityInfo; if (abilityInfo == nullptr || abilityInfo->GetAppBundleName() != want.GetElement().GetBundleName()) { int32_t appIndex = 0; - if (!AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex)) { + if (!StartAbilityUtils::GetAppIndex(want, callerToken, appIndex)) { return ERR_APP_CLONE_INDEX_INVALID; } Want localWant = want; @@ -7436,7 +7435,7 @@ int AbilityManagerService::GenerateExtensionAbilityRequest( auto abilityInfo = StartAbilityUtils::startAbilityInfo; if (abilityInfo == nullptr || abilityInfo->GetAppBundleName() != want.GetElement().GetBundleName()) { int32_t appIndex = 0; - if (!AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex)) { + if (!StartAbilityUtils::GetAppIndex(want, callerToken, appIndex)) { return ERR_APP_CLONE_INDEX_INVALID; } abilityInfo = StartAbilityInfo::CreateStartExtensionInfo(want, userId, appIndex); @@ -8562,7 +8561,7 @@ int AbilityManagerService::StartAbilityByCallWithErrMsg(const Want &want, const return ERR_APP_CLONE_INDEX_INVALID; } auto checkRet = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(const_cast(want), - GetUserId(), appIndex, callerToken, false); + GetUserId(), callerToken, false); if (checkRet != ERR_OK) { return checkRet; } @@ -11762,7 +11761,7 @@ int32_t AbilityManagerService::StartSpecifiedAbilityBySCB(const Want &want) return ERR_APP_CLONE_INDEX_INVALID; } auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(const_cast(want), - GetUserId(), appIndex, nullptr, true); + GetUserId(), nullptr, true); if (result != ERR_OK) { return result; } diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 596c98862ba..05653d385d9 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -242,7 +242,10 @@ std::shared_ptr AbilityRecord::CreateAbilityRecord(const AbilityR CHECK_POINTER_AND_RETURN(abilityRecord, nullptr); abilityRecord->SetUid(abilityRequest.uid); int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(abilityRequest.want, appIndex); + if (abilityRequest.abilityInfo.type == AppExecFwk::AbilityType::PAGE || + AbilityRuntime::StartupUtil::IsSupportAppClone(abilityRequest.abilityInfo.extensionAbilityType)) { + appIndex = abilityRequest.abilityInfo.appIndex; + } abilityRecord->SetAppIndex(appIndex); abilityRecord->SetSecurityFlag(abilityRequest.want.GetBoolParam(DLP_PARAMS_SECURITY_FLAG, false)); abilityRecord->SetCallerAccessTokenId(abilityRequest.callerAccessTokenId); diff --git a/services/abilitymgr/src/mission/mission_list_manager.cpp b/services/abilitymgr/src/mission/mission_list_manager.cpp index 5613e33ca60..30717355e18 100644 --- a/services/abilitymgr/src/mission/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission/mission_list_manager.cpp @@ -567,8 +567,7 @@ bool MissionListManager::HandleReusedMissionAndAbility(const AbilityRequest &abi std::string MissionListManager::GetMissionName(const AbilityRequest &abilityRequest) const { - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(abilityRequest.want, appIndex); + int32_t appIndex = abilityRequest.abilityInfo.appIndex; return AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName, abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName, appIndex); } diff --git a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp index 94a1c96d4f8..a0b198413c3 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -77,22 +77,6 @@ auto g_deleteLifecycleEventTask = [](const sptr &token) { CHECK_POINTER_LOG(token, "token is nullptr."); FreezeUtil::GetInstance().DeleteLifecycleEvent(token->AsObject()); }; - -bool CompareTwoRequest(const AbilityRequest &left, const AbilityRequest &right) -{ - int32_t leftIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(left.want, leftIndex); - int32_t rightIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(right.want, rightIndex); - - auto LeftInstanceKey = left.want.GetStringParam(Want::APP_INSTANCE_KEY); - auto RightInstanceKey = right.want.GetStringParam(Want::APP_INSTANCE_KEY); - - return leftIndex == rightIndex && LeftInstanceKey == RightInstanceKey && - left.abilityInfo.name == right.abilityInfo.name && - left.abilityInfo.bundleName == right.abilityInfo.bundleName && - left.abilityInfo.moduleName == right.abilityInfo.moduleName; -} } UIAbilityLifecycleManager::UIAbilityLifecycleManager(int32_t userId): userId_(userId) {} @@ -360,8 +344,7 @@ std::shared_ptr UIAbilityLifecycleManager::GenerateAbilityRecord( std::shared_ptr UIAbilityLifecycleManager::FindRecordFromTmpMap( const AbilityRequest &abilityRequest) { - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(abilityRequest.want, appIndex); + int32_t appIndex = abilityRequest.abilityInfo.appIndex; auto instanceKey = abilityRequest.want.GetStringParam(Want::APP_INSTANCE_KEY); for (const auto &[requestId, abilityRecord] : tmpAbilityMap_) { if (abilityRecord) { @@ -2095,8 +2078,7 @@ bool UIAbilityLifecycleManager::CheckProperties(const std::shared_ptrGetAbilityInfo(); - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(abilityRequest.want, appIndex); + int32_t appIndex = abilityRequest.abilityInfo.appIndex; auto instanceKey = abilityRequest.want.GetStringParam(Want::APP_INSTANCE_KEY); return abilityInfo.launchMode == launchMode && abilityRequest.abilityInfo.name == abilityInfo.name && abilityRequest.abilityInfo.bundleName == abilityInfo.bundleName && @@ -2671,7 +2653,7 @@ int UIAbilityLifecycleManager::ReleaseCallLocked( std::lock_guard guard(sessionLock_); - auto abilityRecords = GetAbilityRecordsByNameInner(element); + auto abilityRecords = GetAbilityRecordsByNameInner(element, -1); auto isExist = [connect] (const std::shared_ptr &abilityRecord) { if (abilityRecord == nullptr) { return false; @@ -2701,7 +2683,7 @@ void UIAbilityLifecycleManager::OnCallConnectDied(const std::shared_ptr guard(sessionLock_); AppExecFwk::ElementName element = callRecord->GetTargetServiceName(); - auto abilityRecords = GetAbilityRecordsByNameInner(element); + auto abilityRecords = GetAbilityRecordsByNameInner(element, -1); auto isExist = [callRecord] (const std::shared_ptr &abilityRecord) { if (abilityRecord == nullptr) { return false; @@ -2719,14 +2701,14 @@ void UIAbilityLifecycleManager::OnCallConnectDied(const std::shared_ptr> UIAbilityLifecycleManager::GetAbilityRecordsByName( - const AppExecFwk::ElementName &element) + const AppExecFwk::ElementName &element, int32_t appIndex) { std::lock_guard guard(sessionLock_); - return GetAbilityRecordsByNameInner(element); + return GetAbilityRecordsByNameInner(element, appIndex); } std::vector> UIAbilityLifecycleManager::GetAbilityRecordsByNameInner( - const AppExecFwk::ElementName &element) + const AppExecFwk::ElementName &element, int32_t appIndex) { std::vector> records; for (const auto& [first, second] : sessionAbilityMap_) { @@ -2735,9 +2717,15 @@ std::vector> UIAbilityLifecycleManager::GetAbilit abilityInfo.name, abilityInfo.moduleName); AppExecFwk::ElementName localElementNoModuleName(abilityInfo.deviceId, abilityInfo.bundleName, abilityInfo.name); - if (localElement == element || localElementNoModuleName == element) { - TAG_LOGD(AAFwkTag::ABILITYMGR, "find element %{public}s", localElement.GetURI().c_str()); - records.push_back(second); + if ((localElement == element || localElementNoModuleName == element) && abilityInfo.appIndex == appIndex) { + TAG_LOGD(AAFwkTag::ABILITYMGR, "find element %{public}s, appIndex:%{public}d", + localElement.GetURI().c_str(), appIndex); + if (appIndex == -1) { + records.push_back(second); + } + if (abilityInfo.appIndex == appIndex) { + records.push_back(second); + } } } return records; @@ -3692,8 +3680,7 @@ void UIAbilityLifecycleManager::EnableListForSCBRecovery() std::shared_ptr UIAbilityLifecycleManager::FindRecordFromSessionMap(const AbilityRequest &abilityRequest) { - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(abilityRequest.want, appIndex); + int32_t appIndex = abilityRequest.abilityInfo.appIndex; auto instanceKey = abilityRequest.want.GetStringParam(Want::APP_INSTANCE_KEY); for (const auto &[sessionId, abilityRecord] : sessionAbilityMap_) { if (abilityRecord) { diff --git a/services/abilitymgr/src/utils/ability_permission_util.cpp b/services/abilitymgr/src/utils/ability_permission_util.cpp index f7e6d447d9f..141182aef9c 100644 --- a/services/abilitymgr/src/utils/ability_permission_util.cpp +++ b/services/abilitymgr/src/utils/ability_permission_util.cpp @@ -130,7 +130,7 @@ bool AbilityPermissionUtil::IsDominateScreen(const Want &want, bool isPendingWan return false; } -int32_t AbilityPermissionUtil::CheckMultiInstanceAndAppClone(Want &want, int32_t userId, int32_t appIndex, +int32_t AbilityPermissionUtil::CheckMultiInstanceAndAppClone(Want &want, int32_t userId, sptr callerToken, bool isScbCall) { auto instanceKey = want.GetStringParam(Want::APP_INSTANCE_KEY); @@ -143,14 +143,13 @@ int32_t AbilityPermissionUtil::CheckMultiInstanceAndAppClone(Want &want, int32_t return ERR_OK; } if (appInfo.multiAppMode.multiAppModeType == AppExecFwk::MultiAppModeType::UNSPECIFIED) { - if (!instanceKey.empty() || isCreating || - (appIndex != 0 && appIndex <= AbilityRuntime::GlobalConstant::MAX_APP_CLONE_INDEX)) { + if (!instanceKey.empty() || isCreating || want.HasParameter(Want::PARAM_APP_CLONE_INDEX_KEY)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "Not support multi-instance or appClone"); return ERR_MULTI_APP_NOT_SUPPORTED; } } if (appInfo.multiAppMode.multiAppModeType == AppExecFwk::MultiAppModeType::MULTI_INSTANCE) { - if (appIndex != 0) { + if (want.HasParameter(Want::PARAM_APP_CLONE_INDEX_KEY)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "Not support appClone"); return ERR_NOT_SUPPORT_APP_CLONE; } diff --git a/services/abilitymgr/src/utils/start_ability_utils.cpp b/services/abilitymgr/src/utils/start_ability_utils.cpp index 32a8ae1f97e..9a7e108455d 100644 --- a/services/abilitymgr/src/utils/start_ability_utils.cpp +++ b/services/abilitymgr/src/utils/start_ability_utils.cpp @@ -41,8 +41,9 @@ thread_local bool StartAbilityUtils::ermsSupportBackToCallerFlag = false; bool StartAbilityUtils::GetAppIndex(const Want &want, sptr callerToken, int32_t &appIndex) { auto abilityRecord = Token::GetAbilityRecordByToken(callerToken); - if (abilityRecord && abilityRecord->GetAppIndex() > AbilityRuntime::GlobalConstant::MAX_APP_CLONE_INDEX && - abilityRecord->GetApplicationInfo().bundleName == want.GetElement().GetBundleName()) { + if (abilityRecord && abilityRecord->GetApplicationInfo().bundleName == want.GetElement().GetBundleName() && + (abilityRecord->GetAppIndex() > AbilityRuntime::GlobalConstant::MAX_APP_CLONE_INDEX || + !want.HasParameter(Want::PARAM_APP_CLONE_INDEX_KEY))) { appIndex = abilityRecord->GetAppIndex(); return true; } @@ -114,12 +115,12 @@ int32_t StartAbilityUtils::CheckAppProvisionMode(const std::string& bundleName, return ERR_OK; } -int32_t StartAbilityUtils::CheckAppProvisionMode(const Want& want, int32_t userId) +int32_t StartAbilityUtils::CheckAppProvisionMode(const Want& want, int32_t userId, sptr callerToken) { auto abilityInfo = StartAbilityUtils::startAbilityInfo; if (!abilityInfo || abilityInfo->GetAppBundleName() != want.GetElement().GetBundleName()) { int32_t appIndex = 0; - if (!AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex)) { + if (!GetAppIndex(want, callerToken, appIndex)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "invalid app clone index"); return ERR_APP_CLONE_INDEX_INVALID; } diff --git a/services/abilitymgr/src/utils/start_options_utils.cpp b/services/abilitymgr/src/utils/start_options_utils.cpp index 40bc9e732f7..d1763e1fb6c 100644 --- a/services/abilitymgr/src/utils/start_options_utils.cpp +++ b/services/abilitymgr/src/utils/start_options_utils.cpp @@ -28,10 +28,11 @@ #include "permission_verification.h" #include "hilog_tag_wrapper.h" #include "ipc_skeleton.h" +#include "iremote_object.h" #include "process_options.h" #include "scene_board_judgement.h" +#include "start_ability_utils.h" #include "start_options.h" -#include "startup_util.h" #include "want.h" namespace OHOS { @@ -40,7 +41,8 @@ namespace { constexpr const char* ACTION_CHOOSE = "ohos.want.action.select"; constexpr const char* FOUNDATION_PROCESS_NAME = "foundation"; } -int32_t StartOptionsUtils::CheckProcessOptions(const Want &want, const StartOptions &options, int32_t userId) +int32_t StartOptionsUtils::CheckProcessOptions(const Want &want, const StartOptions &options, + sptr callerToken, int32_t userId) { if (HiddenStartUtils::IsHiddenStart(options)) { return HiddenStartUtils::CheckHiddenStartSupported(options); @@ -49,10 +51,11 @@ int32_t StartOptionsUtils::CheckProcessOptions(const Want &want, const StartOpti options.processOptions != nullptr && options.processOptions->isStartFromNDK) { return CheckStartSelfUIAbilityStartOptions(want, options); } - return CheckProcessOptionsInner(want, options, userId); + return CheckProcessOptionsInner(want, options, callerToken, userId); } -int32_t StartOptionsUtils::CheckProcessOptionsInner(const Want &want, const StartOptions &options, int32_t userId) +int32_t StartOptionsUtils::CheckProcessOptionsInner(const Want &want, const StartOptions &options, + sptr callerToken, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); if (options.processOptions == nullptr || @@ -77,7 +80,7 @@ int32_t StartOptionsUtils::CheckProcessOptionsInner(const Want &want, const Star } int32_t appIndex = 0; - appIndex = !AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex) ? 0 : appIndex; + appIndex = !StartAbilityUtils::GetAppIndex(want, callerToken, appIndex) ? 0 : appIndex; CHECK_TRUE_RETURN_RET(!DelayedSingleton::GetInstance()->CheckCallingTokenId( element.GetBundleName(), userId, appIndex), ERR_NOT_SELF_APPLICATION, "not self application"); @@ -92,7 +95,7 @@ int32_t StartOptionsUtils::CheckProcessOptionsInner(const Want &want, const Star !uiAbilityManager->IsCallerInStatusBar(processInfo.instanceKey)), ERR_START_OPTIONS_CHECK_FAILED, "not in status bar"); - auto abilityRecords = uiAbilityManager->GetAbilityRecordsByName(element); + auto abilityRecords = uiAbilityManager->GetAbilityRecordsByName(element, appIndex); CHECK_TRUE_RETURN_RET(!abilityRecords.empty() && abilityRecords[0] && abilityRecords[0]->GetAbilityInfo().launchMode != AppExecFwk::LaunchMode::STANDARD && abilityRecords[0]->GetAbilityInfo().launchMode != AppExecFwk::LaunchMode::SPECIFIED, diff --git a/services/appmgr/src/app_mgr_service_inner.cpp b/services/appmgr/src/app_mgr_service_inner.cpp index 749fc44327f..b4d38a41753 100644 --- a/services/appmgr/src/app_mgr_service_inner.cpp +++ b/services/appmgr/src/app_mgr_service_inner.cpp @@ -5632,9 +5632,7 @@ void AppMgrServiceInner::StartSpecifiedAbility(const AAFwk::Want &want, const Ap HapModuleInfo hapModuleInfo; auto appInfo = std::make_shared(abilityInfo.applicationInfo); - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex); - if (!GetBundleAndHapInfo(abilityInfo, appInfo, bundleInfo, hapModuleInfo, appIndex)) { + if (!GetBundleAndHapInfo(abilityInfo, appInfo, bundleInfo, hapModuleInfo, abilityInfo.appIndex)) { return; } if (UserRecordManager::GetInstance().IsLogoutUser(GetUserIdByUid(appInfo->uid))) { @@ -5646,7 +5644,7 @@ void AppMgrServiceInner::StartSpecifiedAbility(const AAFwk::Want &want, const Ap auto abilityInfoPtr = std::make_shared(abilityInfo); std::string processName; if (specifiedProcessFlag == "") { - MakeProcessName(abilityInfoPtr, appInfo, hapModuleInfo, appIndex, "", processName, false); + MakeProcessName(abilityInfoPtr, appInfo, hapModuleInfo, abilityInfo.appIndex, "", processName, false); } else { processName = want.GetStringParam(SPECIFED_PROCESS_CALLER_PROCESS); const_cast(want).RemoveParam(SPECIFED_PROCESS_CALLER_PROCESS); @@ -5703,11 +5701,11 @@ void AppMgrServiceInner::StartSpecifiedAbility(const AAFwk::Want &want, const Ap appRecord->SetTaskHandler(taskHandler_); appRecord->SetEventHandler(eventHandler_); appRecord->SendEventForSpecifiedAbility(); - appRecord->SetAppIndex(appIndex); + appRecord->SetAppIndex(abilityInfo.appIndex); appRecord->SetExtensionSandBoxFlag(isExtensionSandBox); uint32_t startFlags = AppspawnUtil::BuildStartFlags(want, abilityInfo); StartProcess(appInfo->name, processName, startFlags, appRecord, appInfo->uid, bundleInfo, appInfo->bundleName, - appIndex, appExistFlag); + abilityInfo.appIndex, appExistFlag); appRecord->SetSpecifiedAbilityFlagAndWant(requestId, want, hapModuleInfo.moduleName); appRecord->AddModules(appInfo, hapModules); @@ -10121,17 +10119,15 @@ bool AppMgrServiceInner::IsSpecifiedModuleLoaded(const AAFwk::Want &want, const return false; } auto appInfo = std::make_shared(abilityInfo.applicationInfo); - int32_t appIndex = 0; - (void)AbilityRuntime::StartupUtil::GetAppIndex(want, appIndex); BundleInfo bundleInfo; HapModuleInfo hapModuleInfo; - if (!GetBundleAndHapInfo(abilityInfo, appInfo, bundleInfo, hapModuleInfo, appIndex)) { + if (!GetBundleAndHapInfo(abilityInfo, appInfo, bundleInfo, hapModuleInfo, abilityInfo.appIndex)) { return false; } auto abilityInfoPtr = std::make_shared(abilityInfo); std::string processName; - MakeProcessName(abilityInfoPtr, appInfo, hapModuleInfo, appIndex, "", processName, false); + MakeProcessName(abilityInfoPtr, appInfo, hapModuleInfo, abilityInfo.appIndex, "", processName, false); auto instanceKey = want.GetStringParam(Want::APP_INSTANCE_KEY); auto customProcessFlag = abilityInfo.process; auto appRecord = appRunningManager_->CheckAppRunningRecordIsExist(appInfo->name, diff --git a/test/fuzztest/startabilityutils_fuzzer/startabilityutils_fuzzer.cpp b/test/fuzztest/startabilityutils_fuzzer/startabilityutils_fuzzer.cpp index 09c53374a35..730fef0e91e 100755 --- a/test/fuzztest/startabilityutils_fuzzer/startabilityutils_fuzzer.cpp +++ b/test/fuzztest/startabilityutils_fuzzer/startabilityutils_fuzzer.cpp @@ -73,7 +73,7 @@ void StartAbilityUtilsFuzztest1(bool boolParam, std::string &stringParam, int32_ AppExecFwk::AbilityInfo abilityInfo; StartAbilityUtils::GetCallerAbilityInfo(nullptr, abilityInfo); StartAbilityUtils::GetCallerAbilityInfo(callerToken, abilityInfo); - StartAbilityUtils::CheckAppProvisionMode(want, int32Param); + StartAbilityUtils::CheckAppProvisionMode(want, int32Param, callerToken); std::shared_ptr startAbilityInfoWrap = std::make_shared(want, int32Param, int32Param, callerToken, boolParam); StartAbilityInfo::CreateStartAbilityInfo(want, int32Param, int32Param, nullptr); diff --git a/test/fuzztest/uiabilitylifecyclemanagerb_fuzzer/uiabilitylifecyclemanagerb_fuzzer.cpp b/test/fuzztest/uiabilitylifecyclemanagerb_fuzzer/uiabilitylifecyclemanagerb_fuzzer.cpp index 911b9590a94..9d2cd346236 100644 --- a/test/fuzztest/uiabilitylifecyclemanagerb_fuzzer/uiabilitylifecyclemanagerb_fuzzer.cpp +++ b/test/fuzztest/uiabilitylifecyclemanagerb_fuzzer/uiabilitylifecyclemanagerb_fuzzer.cpp @@ -126,7 +126,7 @@ bool DoSomethingInterestingWithMyAPI(const char *data, size_t size) sptr sessionInfo; uIAbilityLifecycleManager->ChangeUIAbilityVisibilityBySCB(sessionInfo, boolParam); AppExecFwk::ElementName element; - uIAbilityLifecycleManager->GetAbilityRecordsByName(element); + uIAbilityLifecycleManager->GetAbilityRecordsByName(element, int32Param); uIAbilityLifecycleManager->GetAbilityRecordByToken(token); #ifdef SUPPORT_GRAPHICS diff --git a/test/unittest/ability_manager_service_fourteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h b/test/unittest/ability_manager_service_fourteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h index 095aed13a78..fa2ffde07b9 100644 --- a/test/unittest/ability_manager_service_fourteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h +++ b/test/unittest/ability_manager_service_fourteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h @@ -250,12 +250,6 @@ public: */ void CallRequestDone(const std::shared_ptr &abilityRecord, const sptr &callStub); - /** - * release the connection of this call. - * - * @param connect caller callback ipc. - * @param element target ability name. - */ int ReleaseCallLocked(const sptr &connect, const AppExecFwk::ElementName &element); /** @@ -361,7 +355,8 @@ public: int ChangeUIAbilityVisibilityBySCB(sptr sessionInfo, bool isShow); - std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element, + int32_t appIndex); std::shared_ptr GetAbilityRecordByToken(const sptr &token) const; @@ -441,7 +436,8 @@ private: int NotifySCBPendingActivation(sptr &sessionInfo, const AbilityRequest &abilityRequest); bool IsHookModule(const AbilityRequest &abilityRequest) const; int ResolveAbility(const std::shared_ptr &targetAbility, const AbilityRequest &abilityRequest) const; - std::vector> GetAbilityRecordsByNameInner(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByNameInner(const AppExecFwk::ElementName &element, + int32_t appIndex); void HandleForegroundCollaborate(const AbilityRequest &abilityRequest, std::shared_ptr abilityRecord); diff --git a/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h b/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h index 736ce51a132..562abe48995 100644 --- a/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h +++ b/test/unittest/ability_manager_service_thirteenth_test/mock/include/mock_ui_ability_lifecycle_manager.h @@ -252,12 +252,6 @@ public: */ void CallRequestDone(const std::shared_ptr &abilityRecord, const sptr &callStub); - /** - * release the connection of this call. - * - * @param connect caller callback ipc. - * @param element target ability name. - */ int ReleaseCallLocked(const sptr &connect, const AppExecFwk::ElementName &element); /** @@ -363,7 +357,8 @@ public: int ChangeUIAbilityVisibilityBySCB(sptr sessionInfo, bool isShow); - std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element, + int32_t appIndex); std::shared_ptr GetAbilityRecordByToken(const sptr &token) const; @@ -444,7 +439,8 @@ private: const AbilityRequest &abilityRequest, std::string &errMsg); bool IsHookModule(const AbilityRequest &abilityRequest) const; int ResolveAbility(const std::shared_ptr &targetAbility, const AbilityRequest &abilityRequest) const; - std::vector> GetAbilityRecordsByNameInner(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByNameInner(const AppExecFwk::ElementName &element, + int32_t appIndex); void HandleForegroundCollaborate(const AbilityRequest &abilityRequest, std::shared_ptr abilityRecord); diff --git a/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_ui_ability_lifecycle_manager.cpp b/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_ui_ability_lifecycle_manager.cpp index d2efdf3bf3b..6f9266807f0 100644 --- a/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_ui_ability_lifecycle_manager.cpp +++ b/test/unittest/ability_manager_service_thirteenth_test/mock/src/mock_ui_ability_lifecycle_manager.cpp @@ -462,13 +462,13 @@ void UIAbilityLifecycleManager::OnCallConnectDied(const std::shared_ptr> UIAbilityLifecycleManager::GetAbilityRecordsByName( - const AppExecFwk::ElementName &element) + const AppExecFwk::ElementName &element, int32_t appIndex) { return {}; } std::vector> UIAbilityLifecycleManager::GetAbilityRecordsByNameInner( - const AppExecFwk::ElementName &element) + const AppExecFwk::ElementName &element, int32_t appIndex) { return {}; } diff --git a/test/unittest/ability_permission_util_second_test/ability_permission_util_second_test.cpp b/test/unittest/ability_permission_util_second_test/ability_permission_util_second_test.cpp index 45de6d82ed0..33ce04e5aed 100644 --- a/test/unittest/ability_permission_util_second_test/ability_permission_util_second_test.cpp +++ b/test/unittest/ability_permission_util_second_test/ability_permission_util_second_test.cpp @@ -181,7 +181,7 @@ HWTEST_F(AbilityPermissionUtilSecondTest, AbilityPermissionUtil_CheckMultiInstan StartAbilityUtils::startAbilityInfo->abilityInfo.extensionAbilityType = ExtensionAbilityType::SERVICE; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo.multiAppMode.multiAppModeType = AppExecFwk::MultiAppModeType::UNSPECIFIED; - int32_t result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 1, 1, nullptr, false); + int32_t result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 1, nullptr, false); EXPECT_EQ(result, ERR_MULTI_APP_NOT_SUPPORTED); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone0100 end"); } @@ -205,7 +205,7 @@ HWTEST_F(AbilityPermissionUtilSecondTest, AbilityPermissionUtil_CheckMultiInstan StartAbilityUtils::startAbilityInfo->abilityInfo.extensionAbilityType = ExtensionAbilityType::SERVICE; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo.multiAppMode.multiAppModeType = AppExecFwk::MultiAppModeType::MULTI_INSTANCE; - int32_t result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 1, 1, nullptr, false); + int32_t result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 1, nullptr, false); EXPECT_EQ(result, ERR_NOT_SUPPORT_APP_CLONE); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone0200 end"); } @@ -229,7 +229,7 @@ HWTEST_F(AbilityPermissionUtilSecondTest, AbilityPermissionUtil_CheckMultiInstan StartAbilityUtils::startAbilityInfo->abilityInfo.extensionAbilityType = ExtensionAbilityType::SERVICE; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo.multiAppMode.multiAppModeType = AppExecFwk::MultiAppModeType::MULTI_INSTANCE; - int32_t result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 1, 0, nullptr, false); + int32_t result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 1, nullptr, false); EXPECT_EQ(result, ERR_INVALID_VALUE); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone0300 end"); } diff --git a/test/unittest/ability_permission_util_test/ability_permission_util_test.cpp b/test/unittest/ability_permission_util_test/ability_permission_util_test.cpp index 658a56c849c..20cb5fb20c9 100644 --- a/test/unittest/ability_permission_util_test/ability_permission_util_test.cpp +++ b/test/unittest/ability_permission_util_test/ability_permission_util_test.cpp @@ -119,7 +119,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA { TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0100 start"); Want want; - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 0, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0100 end"); @@ -138,7 +138,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA Want want; std::string instanceKey = "app_instance_0"; want.SetParam(Want::APP_INSTANCE_KEY, instanceKey); - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 0, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_MULTI_INSTANCE_NOT_SUPPORTED); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0200 end"); @@ -156,7 +156,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA AppUtils::isSupportMultiInstance = false; Want want; want.SetParam(Want::CREATE_APP_INSTANCE_KEY, true); - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 0, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_MULTI_INSTANCE_NOT_SUPPORTED); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0300 end"); @@ -175,7 +175,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA StartAbilityUtils::retGetApplicationInfo = false; Want want; want.SetParam(Want::CREATE_APP_INSTANCE_KEY, true); - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 0, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0400 end"); @@ -195,7 +195,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA StartAbilityUtils::retApplicationInfo.multiAppMode.multiAppModeType = AppExecFwk::MultiAppModeType::UNSPECIFIED; Want want; want.SetParam(Want::CREATE_APP_INSTANCE_KEY, true); - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 0, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_MULTI_APP_NOT_SUPPORTED); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0500 end"); @@ -214,7 +214,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA StartAbilityUtils::retGetApplicationInfo = true; StartAbilityUtils::retApplicationInfo.multiAppMode.multiAppModeType = AppExecFwk::MultiAppModeType::UNSPECIFIED; Want want; - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 1, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_MULTI_APP_NOT_SUPPORTED); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0600 end"); @@ -233,7 +233,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA StartAbilityUtils::retGetApplicationInfo = true; StartAbilityUtils::retApplicationInfo.multiAppMode.multiAppModeType = AppExecFwk::MultiAppModeType::MULTI_INSTANCE; Want want; - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 1, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, ERR_NOT_SUPPORT_APP_CLONE); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0700 end"); @@ -255,7 +255,7 @@ HWTEST_F(AbilityPermissionUtilTest, AbilityPermissionUtil_CheckMultiInstanceAndA StartAbilityUtils::retApplicationInfo.multiAppMode.maxCount = maxCount; Want want; want.SetParam(Want::CREATE_APP_INSTANCE_KEY, true); - auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, 0, nullptr, false); + auto result = AbilityPermissionUtil::GetInstance().CheckMultiInstanceAndAppClone(want, 100, nullptr, false); EXPECT_EQ(result, AbilityPermissionUtil::GetInstance().CheckMultiInstance(want, nullptr, maxCount, false)); TAG_LOGI(AAFwkTag::TEST, "AbilityPermissionUtil_CheckMultiInstanceAndAppClone_0800 end"); diff --git a/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp b/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp index a80f8f8f83d..ca63644b494 100644 --- a/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp +++ b/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp @@ -153,7 +153,7 @@ HWTEST_F(StartAbilityUtilsTest, CheckAppProvisionMode_004, TestSize.Level1) Want want; int32_t userId = 1001; StartAbilityUtils::startAbilityInfo = std::make_shared(); - int32_t ret = StartAbilityUtils::CheckAppProvisionMode(want, userId); + int32_t ret = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr); EXPECT_EQ(ret, ERR_NOT_IN_APP_PROVISION_MODE); } @@ -170,7 +170,7 @@ HWTEST_F(StartAbilityUtilsTest, CheckAppProvisionMode_005, TestSize.Level1) StartAbilityUtils::startAbilityInfo->abilityInfo.bundleName = "bundleName"; StartAbilityUtils::startAbilityInfo->abilityInfo.name = "name"; StartAbilityUtils::startAbilityInfo->status = 1; - int32_t ret = StartAbilityUtils::CheckAppProvisionMode(want, userId); + int32_t ret = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr); EXPECT_EQ(ret, StartAbilityUtils::startAbilityInfo->status); } @@ -189,7 +189,7 @@ HWTEST_F(StartAbilityUtilsTest, CheckAppProvisionMode_006, TestSize.Level1) AppExecFwk::ApplicationInfo applicationInfo; applicationInfo.bundleName = bundleName; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo = applicationInfo; - auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId); + auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr); EXPECT_EQ(ret, ERR_NOT_IN_APP_PROVISION_MODE); } @@ -208,7 +208,7 @@ HWTEST_F(StartAbilityUtilsTest, CheckAppProvisionMode_007, TestSize.Level1) AppExecFwk::ApplicationInfo applicationInfo; applicationInfo.bundleName = bundleName; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo = applicationInfo; - auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId); + auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr); EXPECT_EQ(ret, ERR_APP_CLONE_INDEX_INVALID); } @@ -228,7 +228,7 @@ HWTEST_F(StartAbilityUtilsTest, CheckAppProvisionMode_008, TestSize.Level1) applicationInfo.bundleName = bundleName; applicationInfo.appProvisionType = AppExecFwk::Constants::APP_PROVISION_TYPE_DEBUG; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo = applicationInfo; - auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId); + auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr); EXPECT_EQ(ret, ERR_OK); } @@ -249,7 +249,7 @@ HWTEST_F(StartAbilityUtilsTest, CheckAppProvisionMode_009, TestSize.Level1) AppExecFwk::ApplicationInfo applicationInfo; applicationInfo.bundleName = bundleName; StartAbilityUtils::startAbilityInfo->abilityInfo.applicationInfo = applicationInfo; - auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId); + auto ret = StartAbilityUtils::CheckAppProvisionMode(want, userId, nullptr); EXPECT_EQ(ret, RESOLVE_ABILITY_ERR); } diff --git a/test/unittest/start_options_utils_test/BUILD.gn b/test/unittest/start_options_utils_test/BUILD.gn index 9b69a830fda..b0b81ef0952 100644 --- a/test/unittest/start_options_utils_test/BUILD.gn +++ b/test/unittest/start_options_utils_test/BUILD.gn @@ -44,6 +44,7 @@ ohos_unittest("start_options_utils_test") { "mock/src/mock_hidden_start_utils.cpp", "mock/src/mock_permission_verification.cpp", "mock/src/mock_scene_board_judgement.cpp", + "mock/src/mock_start_ability_utils.cpp", "mock/src/mock_ui_ability_lifecycle_manager.cpp", "start_options_utils_test.cpp", ] diff --git a/test/unittest/start_options_utils_test/mock/include/start_ability_utils.h b/test/unittest/start_options_utils_test/mock/include/start_ability_utils.h new file mode 100644 index 00000000000..e5ae87b742f --- /dev/null +++ b/test/unittest/start_options_utils_test/mock/include/start_ability_utils.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_ABILITY_RUNTIME_START_ABILITY_UTILS_H +#define OHOS_ABILITY_RUNTIME_START_ABILITY_UTILS_H + +#include "iremote_object.h" +#include "refbase.h" +#include "want.h" + +namespace OHOS { +namespace AAFwk { +struct StartAbilityUtils { + static bool GetAppIndex(const Want &want, sptr callerToken, int32_t &appIndex); +}; +} +} +#endif // OHOS_ABILITY_RUNTIME_START_ABILITY_UTILS_H \ No newline at end of file diff --git a/test/unittest/start_options_utils_test/mock/include/ui_ability_lifecycle_manager.h b/test/unittest/start_options_utils_test/mock/include/ui_ability_lifecycle_manager.h index 1f9eaf8d15a..40e56491432 100644 --- a/test/unittest/start_options_utils_test/mock/include/ui_ability_lifecycle_manager.h +++ b/test/unittest/start_options_utils_test/mock/include/ui_ability_lifecycle_manager.h @@ -34,7 +34,8 @@ public: virtual ~UIAbilityLifecycleManager() = default; bool IsCallerInStatusBar(const std::string &instanceKey); - std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element); + std::vector> GetAbilityRecordsByName(const AppExecFwk::ElementName &element, + int32_t appIndex); }; } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/start_options_utils_test/mock/src/mock_start_ability_utils.cpp b/test/unittest/start_options_utils_test/mock/src/mock_start_ability_utils.cpp new file mode 100644 index 00000000000..d2f313e1569 --- /dev/null +++ b/test/unittest/start_options_utils_test/mock/src/mock_start_ability_utils.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "start_ability_utils.h" + +namespace OHOS { +namespace AAFwk { + +bool StartAbilityUtils::GetAppIndex(const Want &want, sptr callerToken, int32_t &appIndex) +{ + appIndex = 0; + return true; +} +} +} \ No newline at end of file diff --git a/test/unittest/start_options_utils_test/mock/src/mock_ui_ability_lifecycle_manager.cpp b/test/unittest/start_options_utils_test/mock/src/mock_ui_ability_lifecycle_manager.cpp index d5c49a3d79c..5b158a11298 100644 --- a/test/unittest/start_options_utils_test/mock/src/mock_ui_ability_lifecycle_manager.cpp +++ b/test/unittest/start_options_utils_test/mock/src/mock_ui_ability_lifecycle_manager.cpp @@ -27,7 +27,7 @@ bool UIAbilityLifecycleManager::IsCallerInStatusBar(const std::string &instanceK } std::vector> UIAbilityLifecycleManager::GetAbilityRecordsByName( - const AppExecFwk::ElementName &element) + const AppExecFwk::ElementName &element, int32_t appIndex) { return MyFlag::GetInstance().abilityRecords_; } diff --git a/test/unittest/start_options_utils_test/start_options_utils_test.cpp b/test/unittest/start_options_utils_test/start_options_utils_test.cpp index eabea7ce320..16dc2f8d169 100644 --- a/test/unittest/start_options_utils_test/start_options_utils_test.cpp +++ b/test/unittest/start_options_utils_test/start_options_utils_test.cpp @@ -63,7 +63,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptions_001, TestSize.Level1) Want want; StartOptions startOptions; - auto ret = StartOptionsUtils::CheckProcessOptions(want, startOptions, -1); + auto ret = StartOptionsUtils::CheckProcessOptions(want, startOptions, nullptr, -1); EXPECT_EQ(ret, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptions_001 end"); @@ -86,7 +86,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptions_002, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->isStartFromNDK = true; - auto ret = StartOptionsUtils::CheckProcessOptions(want, startOptions, -1); + auto ret = StartOptionsUtils::CheckProcessOptions(want, startOptions, nullptr, -1); EXPECT_EQ(ret, StartOptionsUtils::CheckStartSelfUIAbilityStartOptions(want, startOptions)); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptions_002 end"); @@ -107,7 +107,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptions_003, TestSize.Level1) Want want; StartOptions startOptions; - auto ret = StartOptionsUtils::CheckProcessOptions(want, startOptions, -1); + auto ret = StartOptionsUtils::CheckProcessOptions(want, startOptions, nullptr, -1); EXPECT_EQ(ret, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptions_003 end"); @@ -255,7 +255,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_001, TestSize.Level1) TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_001 start"); Want want; StartOptions startOptions; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_001 end"); } @@ -275,7 +275,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_002, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::UNSPECIFIED; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_002 end"); } @@ -297,7 +297,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_003, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::NEW_PROCESS_ATTACH_TO_PARENT; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_CAPABILITY_NOT_SUPPORT); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_003 end"); } @@ -320,7 +320,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_004, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::NEW_PROCESS_ATTACH_TO_PARENT; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_CAPABILITY_NOT_SUPPORT); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_004 end"); @@ -344,7 +344,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_005, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::NEW_PROCESS_ATTACH_TO_PARENT; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_NOT_ALLOW_IMPLICIT_START); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_005 end"); @@ -370,7 +370,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_006, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->isRestartKeepAlive = true; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_006 end"); @@ -397,7 +397,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_007, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::NEW_PROCESS_ATTACH_TO_PARENT; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_NOT_SELF_APPLICATION); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_007 end"); @@ -425,7 +425,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_008, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::NEW_PROCESS_ATTACH_TO_PARENT; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_INVALID_VALUE); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_008 end"); @@ -454,7 +454,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_009, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::ATTACH_TO_STATUS_BAR_ITEM; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_START_OPTIONS_CHECK_FAILED); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_009 end"); @@ -486,7 +486,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_010, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::ATTACH_TO_STATUS_BAR_ITEM; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_ABILITY_ALREADY_RUNNING); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_010 end"); @@ -516,7 +516,7 @@ HWTEST_F(StartOptionsUtilsTest, CheckProcessOptionsInner_011, TestSize.Level1) StartOptions startOptions; startOptions.processOptions = std::make_shared(); startOptions.processOptions->processMode = ProcessMode::ATTACH_TO_STATUS_BAR_ITEM; - auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, -1); + auto retCode = StartOptionsUtils::CheckProcessOptionsInner(want, startOptions, nullptr, -1); EXPECT_EQ(retCode, ERR_OK); TAG_LOGI(AAFwkTag::TEST, "StartOptionsUtilsTest CheckProcessOptionsInner_011 end"); diff --git a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp index 0f4d5e2faaf..8fc11215f04 100644 --- a/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp +++ b/test/unittest/ui_ability_lifecycle_manager_test/ui_ability_lifecycle_manager_test.cpp @@ -3536,7 +3536,8 @@ HWTEST_F(UIAbilityLifecycleManagerTest, GetAbilityRecordsByName_001, TestSize.Le auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); uiAbilityLifecycleManager->sessionAbilityMap_.emplace(1, abilityRecord); AppExecFwk::ElementName element; - auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByName(element); + int32_t appIndex = 0; + auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByName(element, appIndex); EXPECT_EQ(ret.empty(), true); } @@ -3556,7 +3557,8 @@ HWTEST_F(UIAbilityLifecycleManagerTest, GetAbilityRecordsByName_002, TestSize.Le auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); uiAbilityLifecycleManager->sessionAbilityMap_.emplace(1, abilityRecord); AppExecFwk::ElementName element("100", "com.example.unittest", "MainAbility"); - auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByName(element); + int32_t appIndex = 0; + auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByName(element, appIndex); EXPECT_EQ(ret.empty(), false); } @@ -3577,7 +3579,8 @@ HWTEST_F(UIAbilityLifecycleManagerTest, GetAbilityRecordsByName_003, TestSize.Le auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); uiAbilityLifecycleManager->sessionAbilityMap_.emplace(1, abilityRecord); AppExecFwk::ElementName element("100", "com.example.unittest", "MainAbility", "entry"); - auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByName(element); + int32_t appIndex = 0; + auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByName(element, appIndex); EXPECT_EQ(ret.empty(), false); } @@ -3597,7 +3600,8 @@ HWTEST_F(UIAbilityLifecycleManagerTest, GetAbilityRecordsByNameInner_001, TestSi auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); uiAbilityLifecycleManager->sessionAbilityMap_.emplace(1, abilityRecord); AppExecFwk::ElementName element; - auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByNameInner(element); + int32_t appIndex = 0; + auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByNameInner(element, appIndex); EXPECT_EQ(ret.empty(), true); } @@ -3617,7 +3621,8 @@ HWTEST_F(UIAbilityLifecycleManagerTest, GetAbilityRecordsByNameInner_002, TestSi auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); uiAbilityLifecycleManager->sessionAbilityMap_.emplace(1, abilityRecord); AppExecFwk::ElementName element("100", "com.example.unittest", "MainAbility"); - auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByNameInner(element); + int32_t appIndex = 0; + auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByNameInner(element, appIndex); EXPECT_EQ(ret.empty(), false); } @@ -3638,7 +3643,8 @@ HWTEST_F(UIAbilityLifecycleManagerTest, GetAbilityRecordsByNameInner_003, TestSi auto abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest); uiAbilityLifecycleManager->sessionAbilityMap_.emplace(1, abilityRecord); AppExecFwk::ElementName element("100", "com.example.unittest", "MainAbility", "entry"); - auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByNameInner(element); + int32_t appIndex = 0; + auto ret = uiAbilityLifecycleManager->GetAbilityRecordsByNameInner(element, appIndex); EXPECT_EQ(ret.empty(), false); } diff --git a/utils/server/startup/src/startup_util.cpp b/utils/server/startup/src/startup_util.cpp index 0c02ac17d3e..7b10acfb33c 100644 --- a/utils/server/startup/src/startup_util.cpp +++ b/utils/server/startup/src/startup_util.cpp @@ -30,18 +30,16 @@ constexpr int32_t VALID_REQUEST_CODE_LENGTH = 49; } bool StartupUtil::GetAppIndex(const AAFwk::Want &want, int32_t &appIndex) { - appIndex = want.GetIntParam(ServerConstant::DLP_INDEX, 0); - if (appIndex > GlobalConstant::MAX_APP_CLONE_INDEX) { - return true; + if (want.HasParameter(ServerConstant::DLP_INDEX)) { + appIndex = want.GetIntParam(ServerConstant::DLP_INDEX, 0); + return appIndex > GlobalConstant::MAX_APP_CLONE_INDEX; } - if (appIndex == 0) { + if (want.HasParameter(AAFwk::Want::PARAM_APP_CLONE_INDEX_KEY)) { appIndex = want.GetIntParam(AAFwk::Want::PARAM_APP_CLONE_INDEX_KEY, 0); - if (appIndex < 0 || appIndex > GlobalConstant::MAX_APP_CLONE_INDEX) { - return false; - } - return true; + return (appIndex >= 0 && appIndex <= GlobalConstant::MAX_APP_CLONE_INDEX); } - return false; + appIndex = 0; + return true; } int32_t StartupUtil::BuildAbilityInfoFlag() @@ -98,6 +96,7 @@ void StartupUtil::InitAbilityInfoFromExtension(AppExecFwk::ExtensionAbilityInfo abilityInfo.extensionTypeName = extensionInfo.extensionTypeName; abilityInfo.isolationProcess = extensionInfo.isolationProcess; abilityInfo.uid = extensionInfo.uid; + abilityInfo.appIndex = extensionInfo.appIndex; if (!extensionInfo.hapPath.empty()) { abilityInfo.hapPath = extensionInfo.hapPath; } -- Gitee