From e068de30782d29356b87b204f86bc006db90876b Mon Sep 17 00:00:00 2001 From: wangbing Date: Sat, 5 Jul 2025 20:12:59 +0800 Subject: [PATCH] not transmitting ability name Signed-off-by: wangbing --- .../native/ability/native/extension_impl.cpp | 2 +- .../dialog_session/dialog_session_manager.h | 2 ++ .../ui_ability_lifecycle_manager.h | 1 + .../dialog_session/dialog_session_manager.cpp | 24 ++++++++++++++++- .../ui_ability_lifecycle_manager.cpp | 15 +++++++++-- .../dialog_session_manager_test.cpp | 17 ++++++++++++ .../ui_ability_lifecycle_manager_test.cpp | 27 +++++++++++++++++++ 7 files changed, 84 insertions(+), 4 deletions(-) diff --git a/frameworks/native/ability/native/extension_impl.cpp b/frameworks/native/ability/native/extension_impl.cpp index 1733397a6a..590c6602c8 100644 --- a/frameworks/native/ability/native/extension_impl.cpp +++ b/frameworks/native/ability/native/extension_impl.cpp @@ -485,7 +485,7 @@ void ExtensionImpl::ScheduleAbilityRequestSuccess(const std::string &requestId, { TAG_LOGD(AAFwkTag::EXT, "ScheduleAbilityRequestSuccess called"); if (extension_ == nullptr) { - TAG_LOGE(AAFwkTag::EXT, "null ability_"); + TAG_LOGE(AAFwkTag::EXT, "null extension_"); return; } nlohmann::json jsonObject = nlohmann::json { diff --git a/services/abilitymgr/include/dialog_session/dialog_session_manager.h b/services/abilitymgr/include/dialog_session/dialog_session_manager.h index e7a25b1a31..e7a73ac469 100644 --- a/services/abilitymgr/include/dialog_session/dialog_session_manager.h +++ b/services/abilitymgr/include/dialog_session/dialog_session_manager.h @@ -132,6 +132,8 @@ private: void NotifyAbilityRequestFailure(const std::string &dialogSessionId, const Want &want); + AppExecFwk::ElementName GetWantElement(const Want &want); + mutable ffrt::mutex dialogSessionRecordLock_; std::unordered_map> dialogSessionInfoMap_; std::unordered_map> dialogCallerInfoMap_; 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 04dbebcd0f..8efcacd136 100644 --- a/services/abilitymgr/include/scene_board/ui_ability_lifecycle_manager.h +++ b/services/abilitymgr/include/scene_board/ui_ability_lifecycle_manager.h @@ -460,6 +460,7 @@ private: void SetLastExitReason(std::shared_ptr &abilityRecord) const; void SetReceiverInfo(const AbilityRequest &abilityRequest, std::shared_ptr &abilityRecord) const; + AppExecFwk::ElementName GetWantElement(sptr &sessionInfo, const AbilityRequest &abilityRequest); /** * @brief Execute PrepareTerminateApp when it is implemented diff --git a/services/abilitymgr/src/dialog_session/dialog_session_manager.cpp b/services/abilitymgr/src/dialog_session/dialog_session_manager.cpp index 987030f74d..e601f47d40 100644 --- a/services/abilitymgr/src/dialog_session/dialog_session_manager.cpp +++ b/services/abilitymgr/src/dialog_session/dialog_session_manager.cpp @@ -234,6 +234,28 @@ void DialogSessionManager::GenerateDialogCallerInfo(AbilityRequest &abilityReque dialogCallerInfo->needGrantUriPermission = needGrantUriPermission; } +AppExecFwk::ElementName DialogSessionManager::GetWantElement(const Want &want) +{ + auto bms = AbilityUtil::GetBundleManagerHelper(); + auto abilityMgr = DelayedSingleton::GetInstance(); + if (bms == nullptr || abilityMgr == nullptr) { + return want.GetElement(); + } + AppExecFwk::BundleInfo bundleInfo; + if (!IN_PROCESS_CALL(bms->GetBundleInfo(want.GetBundle(), + static_cast(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_APPLICATION), + bundleInfo, abilityMgr->GetUserId()))) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "GetBundleInfo failed"); + return want.GetElement(); + } + if (bundleInfo.applicationInfo.bundleType == AppExecFwk::BundleType::ATOMIC_SERVICE) { + AppExecFwk::ElementName element; + element.SetBundleName(want.GetElement().GetBundleName()); + return element; + } + return want.GetElement(); +} + void DialogSessionManager::NotifyAbilityRequestFailure(const std::string &dialogSessionId, const Want &want) { auto callerInfo = GetDialogCallerInfo(dialogSessionId); @@ -254,7 +276,7 @@ void DialogSessionManager::NotifyAbilityRequestFailure(const std::string &dialog } else if (callerInfo->type == SelectorType::INTERCEPTOR_SELECTOR) { message = "User closed the interceptor picker"; } - abilityRecord->NotifyAbilityRequestFailure(requestId, want.GetElement(), message); + abilityRecord->NotifyAbilityRequestFailure(requestId, GetWantElement(want), message); } int DialogSessionManager::SendDialogResult(const Want &want, const std::string &dialogSessionId, bool isAllowed) 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 1740f7f516..efd0d6f396 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -1493,6 +1493,17 @@ sptr UIAbilityLifecycleManager::CreateSessionInfo(const AbilityRequ return sessionInfo; } +AppExecFwk::ElementName UIAbilityLifecycleManager::GetWantElement( + sptr &sessionInfo, const AbilityRequest &abilityRequest) +{ + if (sessionInfo != nullptr && sessionInfo->isAtomicService) { + AppExecFwk::ElementName element; + element.SetBundleName(abilityRequest.want.GetElement().GetBundleName()); + return element; + } + return abilityRequest.want.GetElement(); +} + int UIAbilityLifecycleManager::NotifySCBPendingActivation(sptr &sessionInfo, const AbilityRequest &abilityRequest, std::string &errMsg) { @@ -1527,7 +1538,7 @@ int UIAbilityLifecycleManager::NotifySCBPendingActivation(sptr &ses CheckCallerFromBackground(abilityRecord, sessionInfo); auto requestId = abilityRequest.want.GetStringParam(KEY_REQUEST_ID); if (!requestId.empty()) { - abilityRecord->NotifyAbilityRequestSuccess(requestId, abilityRequest.want.GetElement()); + abilityRecord->NotifyAbilityRequestSuccess(requestId, GetWantElement(sessionInfo, abilityRequest)); } const_cast(abilityRequest).want.RemoveParam(KEY_REQUEST_ID); TAG_LOGI(AAFwkTag::ABILITYMGR, "scb call, NotifySCBPendingActivation for callerSession, target: %{public}s" @@ -1545,7 +1556,7 @@ int UIAbilityLifecycleManager::NotifySCBPendingActivation(sptr &ses auto requestId = abilityRequest.want.GetStringParam(KEY_REQUEST_ID); if (!requestId.empty()) { TAG_LOGI(AAFwkTag::ABILITYMGR, "notify request success, requestId:%{public}s", requestId.c_str()); - abilityRecord->NotifyAbilityRequestSuccess(requestId, abilityRequest.want.GetElement()); + abilityRecord->NotifyAbilityRequestSuccess(requestId, GetWantElement(sessionInfo, abilityRequest)); } const_cast(abilityRequest).want.RemoveParam(KEY_REQUEST_ID); } diff --git a/test/unittest/dialog_session_manager_test/dialog_session_manager_test.cpp b/test/unittest/dialog_session_manager_test/dialog_session_manager_test.cpp index 4e5cbea235..3897f6ccc5 100644 --- a/test/unittest/dialog_session_manager_test/dialog_session_manager_test.cpp +++ b/test/unittest/dialog_session_manager_test/dialog_session_manager_test.cpp @@ -872,5 +872,22 @@ HWTEST_F(DialogSessionManagerTest, HandleErmsResultBySCB_001, TestSize.Level1) EXPECT_NE(result, ERR_INVALID_VALUE); GTEST_LOG_(INFO) << "HandleErmsResultBySCB_001 end"; } + +/** + * @tc.name: GetWantElement_001 + * @tc.desc: test GetWantElement function + * @tc.type: FUNC + */ +HWTEST_F(DialogSessionManagerTest, GetWantElement_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "GetWantElement_001 start"; + DialogSessionManager dialogSessionManager; + Want want; + AppExecFwk::ElementName element("", "com.test.demo", "MainAbility"); + want.SetElement(element); + AppExecFwk::ElementName result = dialogSessionManager.GetWantElement(want); + EXPECT_EQ(result.GetAbilityName(), "MainAbility"); + GTEST_LOG_(INFO) << "GetWantElement_001 end"; +} } // namespace AAFwk } // namespace OHOS 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 3440d01691..ae3ae19ab1 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 @@ -6724,5 +6724,32 @@ HWTEST_F(UIAbilityLifecycleManagerTest, EnableListForSCBRecovery_001, TestSize.L EXPECT_TRUE(mgr->isSCBRecovery_); EXPECT_TRUE(mgr->coldStartInSCBRecovery_.empty()); } + + +/** + * @tc.name: UIAbilityLifecycleManager_GetWantElement_0100 + * @tc.desc: GetWantElement + * @tc.type: FUNC + */ +HWTEST_F(UIAbilityLifecycleManagerTest, GetWantElement_0100, TestSize.Level1) +{ + auto mgr = std::make_unique(); + Want want; + AppExecFwk::ElementName element("", "com.test.demo", "MainAbility"); + want.SetElement(element); + AbilityRequest abilityRequest; + abilityRequest.want = want; + sptr sessionInfo = nullptr; + AppExecFwk::ElementName result = mgr->GetWantElement(sessionInfo, abilityRequest); + EXPECT_EQ(result.GetAbilityName(), "MainAbility"); + sessionInfo = new SessionInfo(); + ASSERT_NE(sessionInfo, nullptr); + sessionInfo->isAtomicService = false; + result = mgr->GetWantElement(sessionInfo, abilityRequest); + EXPECT_EQ(result.GetAbilityName(), "MainAbility"); + sessionInfo->isAtomicService = true; + result = mgr->GetWantElement(sessionInfo, abilityRequest); + EXPECT_TRUE(result.GetAbilityName().empty()); +} } // namespace AAFwk } // namespace OHOS