From e4d8c5448db9e53d0e26f17f396d90997ac4958c Mon Sep 17 00:00:00 2001 From: Nathan Yang Date: Tue, 26 Aug 2025 17:27:25 +0800 Subject: [PATCH] feat: add userId to collaborator Signed-off-by: Nathan Yang --- .../include/iability_manager_collaborator.h | 17 +++++++---- .../ability_manager_collaborator_proxy.h | 14 +++++---- .../ability_manager_collaborator_proxy.cpp | 30 +++++++++++++++---- services/abilitymgr/src/ability_record.cpp | 12 ++++---- .../mock_ability_manager_collaborator.h | 8 ++--- ...bility_manager_collaborator_proxy_test.cpp | 15 ++++++---- .../ability_manager_collaborator_stub_mock.h | 10 +++---- .../ability_manager_proxy_second_test.cpp | 8 ++--- 8 files changed, 75 insertions(+), 39 deletions(-) diff --git a/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h b/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h index cef23d14e3a..3e6cea139d1 100644 --- a/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h +++ b/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h @@ -31,6 +31,9 @@ class Configuration; namespace OHOS { namespace AAFwk { +namespace { +constexpr int32_t CURRENT_USER_ID = -1; +} class SessionInfo; class IAbilityManagerCollaborator : public IRemoteBroker { @@ -95,30 +98,34 @@ public: /** * @brief Notify when notify app to background. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify move mission to background success or else failed. */ - virtual int32_t NotifyMoveMissionToBackground(int32_t missionId) = 0; + virtual int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId = CURRENT_USER_ID) = 0; /** * @brief Notify when notify app to foreground. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify move mission to foreground success or else failed. */ - virtual int32_t NotifyMoveMissionToForeground(int32_t missionId) = 0; + virtual int32_t NotifyMoveMissionToForeground(int32_t missionId, int32_t userId = CURRENT_USER_ID) = 0; /** * @brief Notify when notify ability is terminated, but mission is not cleared. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify terminate mission success or else failed. */ - virtual int32_t NotifyTerminateMission(int32_t missionId) = 0; + virtual int32_t NotifyTerminateMission(int32_t missionId, int32_t userId = CURRENT_USER_ID) = 0; /** * @brief Notify to broker when clear mission. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify clear mission success or else failed. */ - virtual int32_t NotifyClearMission(int32_t missionId) = 0; + virtual int32_t NotifyClearMission(int32_t missionId, int32_t userId = CURRENT_USER_ID) = 0; /** * @brief Notify to broker when clear mission. @@ -190,7 +197,7 @@ public: return -1; } - virtual void NotifyMissionBindPid(int32_t missionId, int32_t pid) + virtual void NotifyMissionBindPid(int32_t missionId, int32_t pid, int32_t userId = CURRENT_USER_ID) { return; } diff --git a/services/abilitymgr/include/ability_manager_collaborator_proxy.h b/services/abilitymgr/include/ability_manager_collaborator_proxy.h index b5531e04f47..eae6774281d 100644 --- a/services/abilitymgr/include/ability_manager_collaborator_proxy.h +++ b/services/abilitymgr/include/ability_manager_collaborator_proxy.h @@ -82,30 +82,34 @@ public: /** * @brief Notify when notify app to background. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify move mission to background success or else failed. */ - virtual int32_t NotifyMoveMissionToBackground(int32_t missionId) override; + virtual int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId = CURRENT_USER_ID) override; /** * @brief Notify when notify app to foreground. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify move mission to foreground success or else failed. */ - virtual int32_t NotifyMoveMissionToForeground(int32_t missionId) override; + virtual int32_t NotifyMoveMissionToForeground(int32_t missionId, int32_t userId = CURRENT_USER_ID) override; /** * @brief Notify when notify ability is terminated, but mission is not cleared. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify terminate mission success or else failed. */ - virtual int32_t NotifyTerminateMission(int32_t missionId) override; + virtual int32_t NotifyTerminateMission(int32_t missionId, int32_t userId = CURRENT_USER_ID) override; /** * @brief Notify to broker when clear mission. * @param missionId missionId. + * @param userId, the user id. * @return 0 when notify clear mission success or else failed. */ - virtual int32_t NotifyClearMission(int32_t missionId) override; + virtual int32_t NotifyClearMission(int32_t missionId, int32_t userId = CURRENT_USER_ID) override; /** * @brief Notify to broker when clear mission. @@ -163,7 +167,7 @@ public: */ virtual int32_t RevokeUriPermission(uint32_t tokenId) override; - virtual void NotifyMissionBindPid(int32_t missionId, int32_t pid) override; + virtual void NotifyMissionBindPid(int32_t missionId, int32_t pid, int32_t userId = CURRENT_USER_ID) override; virtual int32_t CheckStaticCfgPermission(const Want &want, bool isImplicit) override; diff --git a/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp b/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp index 25135d0c5ed..e8c286910ee 100644 --- a/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp @@ -197,7 +197,7 @@ int32_t AbilityManagerCollaboratorProxy::NotifyLoadAbility( return NO_ERROR; } -int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToBackground(int32_t missionId) +int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToBackground(int32_t missionId, int32_t userId) { MessageParcel data; MessageParcel reply; @@ -211,6 +211,10 @@ int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToBackground(int32_t m TAG_LOGE(AAFwkTag::ABILITYMGR, "missionId write fail"); return ERR_INVALID_OPERATION; } + if (!data.WriteInt32(userId)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "userId write fail"); + return ERR_INVALID_OPERATION; + } int32_t ret = SendTransactCmd( IAbilityManagerCollaborator::NOTIFY_MOVE_MISSION_TO_BACKGROUND, data, reply, option); if (ret != NO_ERROR) { @@ -248,7 +252,7 @@ int32_t AbilityManagerCollaboratorProxy::NotifyPreloadAbility(const std::string return NO_ERROR; } -int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToForeground(int32_t missionId) +int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToForeground(int32_t missionId, int32_t userId) { MessageParcel data; MessageParcel reply; @@ -262,6 +266,10 @@ int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToForeground(int32_t m TAG_LOGE(AAFwkTag::ABILITYMGR, "missionId write fail"); return ERR_INVALID_OPERATION; } + if (!data.WriteInt32(userId)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "userId write fail"); + return ERR_INVALID_OPERATION; + } int32_t ret = SendTransactCmd( IAbilityManagerCollaborator::NOTIFY_MOVE_MISSION_TO_FOREGROUND, data, reply, option); if (ret != NO_ERROR) { @@ -271,7 +279,7 @@ int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToForeground(int32_t m return NO_ERROR; } -int32_t AbilityManagerCollaboratorProxy::NotifyTerminateMission(int32_t missionId) +int32_t AbilityManagerCollaboratorProxy::NotifyTerminateMission(int32_t missionId, int32_t userId) { MessageParcel data; MessageParcel reply; @@ -285,6 +293,10 @@ int32_t AbilityManagerCollaboratorProxy::NotifyTerminateMission(int32_t missionI TAG_LOGE(AAFwkTag::ABILITYMGR, "missionId write fail"); return ERR_INVALID_OPERATION; } + if (!data.WriteInt32(userId)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "userId write fail"); + return ERR_INVALID_OPERATION; + } int32_t ret = SendTransactCmd( IAbilityManagerCollaborator::NOTIFY_TERMINATE_MISSION, data, reply, option); if (ret != NO_ERROR) { @@ -294,7 +306,7 @@ int32_t AbilityManagerCollaboratorProxy::NotifyTerminateMission(int32_t missionI return NO_ERROR; } -int32_t AbilityManagerCollaboratorProxy::NotifyClearMission(int32_t missionId) +int32_t AbilityManagerCollaboratorProxy::NotifyClearMission(int32_t missionId, int32_t userId) { MessageParcel data; MessageParcel reply; @@ -308,6 +320,10 @@ int32_t AbilityManagerCollaboratorProxy::NotifyClearMission(int32_t missionId) TAG_LOGE(AAFwkTag::ABILITYMGR, "missionId write fail"); return ERR_INVALID_OPERATION; } + if (!data.WriteInt32(userId)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "userId write fail"); + return ERR_INVALID_OPERATION; + } int32_t ret = SendTransactCmd( IAbilityManagerCollaborator::NOTIFY_CLEAR_MISSION, data, reply, option); if (ret != NO_ERROR) { @@ -519,7 +535,7 @@ int32_t AbilityManagerCollaboratorProxy::RevokeUriPermission(uint32_t tokenId) return reply.ReadInt32(); } -void AbilityManagerCollaboratorProxy::NotifyMissionBindPid(int32_t missionId, int32_t pid) +void AbilityManagerCollaboratorProxy::NotifyMissionBindPid(int32_t missionId, int32_t pid, int32_t userId) { MessageParcel data; MessageParcel reply; @@ -536,6 +552,10 @@ void AbilityManagerCollaboratorProxy::NotifyMissionBindPid(int32_t missionId, in TAG_LOGE(AAFwkTag::ABILITYMGR, "write pid fail"); return; } + if (!data.WriteInt32(userId)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "userId write fail"); + return; + } auto error = SendTransactCmd(IAbilityManagerCollaborator::NOTIFY_MISSION_BIND_PID, data, reply, option); if (error != NO_ERROR) { TAG_LOGE(AAFwkTag::ABILITYMGR, "request error:%{public}d", error); diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 596c98862ba..d4c82cae6d0 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1528,11 +1528,11 @@ void AbilityRecord::SetAbilityStateInner(AbilityState state) int32_t persistentId = sessionInfo->persistentId; switch (state) { case AbilityState::BACKGROUNDING: { - ret = collaborator->NotifyMoveMissionToBackground(persistentId); + ret = collaborator->NotifyMoveMissionToBackground(persistentId, GetOwnerMissionUserId()); break; } case AbilityState::TERMINATING: { - ret = collaborator->NotifyTerminateMission(persistentId); + ret = collaborator->NotifyTerminateMission(persistentId, GetOwnerMissionUserId()); break; } default: @@ -1545,15 +1545,15 @@ void AbilityRecord::SetAbilityStateInner(AbilityState state) } switch (state) { case AbilityState::FOREGROUNDING: { - ret = collaborator->NotifyMoveMissionToForeground(missionId_); + ret = collaborator->NotifyMoveMissionToForeground(missionId_, GetOwnerMissionUserId()); break; } case AbilityState::BACKGROUNDING: { - ret = collaborator->NotifyMoveMissionToBackground(missionId_); + ret = collaborator->NotifyMoveMissionToBackground(missionId_, GetOwnerMissionUserId()); break; } case AbilityState::TERMINATING: { - ret = collaborator->NotifyTerminateMission(missionId_); + ret = collaborator->NotifyTerminateMission(missionId_, GetOwnerMissionUserId()); break; } default: @@ -3547,7 +3547,7 @@ void AbilityRecord::NotifyMissionBindPid() TAG_LOGE(AAFwkTag::ABILITYMGR, "null collaborator"); return; } - collaborator->NotifyMissionBindPid(persistentId, pid_); + collaborator->NotifyMissionBindPid(persistentId, pid_, GetOwnerMissionUserId()); } } diff --git a/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h b/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h index e06300cbbf9..afa97f5dedc 100644 --- a/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h +++ b/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h @@ -32,10 +32,10 @@ public: const Want &want)); MOCK_METHOD2(NotifyLoadAbility, int32_t(const AppExecFwk::AbilityInfo &abilityInfo, const sptr &sessionInfo)); - MOCK_METHOD1(NotifyMoveMissionToBackground, int32_t(int32_t missionId)); - MOCK_METHOD1(NotifyMoveMissionToForeground, int32_t(int32_t missionId)); - MOCK_METHOD1(NotifyTerminateMission, int32_t(int32_t missionId)); - MOCK_METHOD1(NotifyClearMission, int32_t(int32_t missionId)); + MOCK_METHOD2(NotifyMoveMissionToBackground, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD2(NotifyMoveMissionToForeground, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD2(NotifyTerminateMission, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD2(NotifyClearMission, int32_t(int32_t missionId, int32_t userId)); MOCK_METHOD3(NotifyRemoveShellProcess, int32_t(int32_t pid, int32_t type, const std::string &reason)); MOCK_METHOD1(UpdateMissionInfo, void(sptr &sessionInfo)); sptr AsObject() override diff --git a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp index 5fa45a1f586..d50129675a0 100644 --- a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp +++ b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp @@ -132,7 +132,8 @@ HWTEST_F(AbilityManagerCollaboratorProxyTest, NotifyMoveMissionToBackground_0100 .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerCollaboratorStubMock::InvokeSendRequest)); int32_t missionId = 0; - int32_t res = proxy_->NotifyMoveMissionToBackground(missionId); + int32_t userId = 100; + int32_t res = proxy_->NotifyMoveMissionToBackground(missionId, userId); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(static_cast(IAbilityManagerCollaborator::NOTIFY_MOVE_MISSION_TO_BACKGROUND), mock_->GetCode()); } @@ -148,7 +149,8 @@ HWTEST_F(AbilityManagerCollaboratorProxyTest, NotifyMoveMissionToForeground_0100 .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerCollaboratorStubMock::InvokeSendRequest)); int32_t missionId = 0; - int32_t res = proxy_->NotifyMoveMissionToForeground(missionId); + int32_t userId = 100; + int32_t res = proxy_->NotifyMoveMissionToForeground(missionId, userId); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(static_cast(IAbilityManagerCollaborator::NOTIFY_MOVE_MISSION_TO_FOREGROUND), mock_->GetCode()); } @@ -164,7 +166,8 @@ HWTEST_F(AbilityManagerCollaboratorProxyTest, NotifyTerminateMission_0100, TestS .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerCollaboratorStubMock::InvokeSendRequest)); int32_t missionId = 0; - int32_t res = proxy_->NotifyTerminateMission(missionId); + int32_t userId = 100; + int32_t res = proxy_->NotifyTerminateMission(missionId, userId); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(static_cast(IAbilityManagerCollaborator::NOTIFY_TERMINATE_MISSION), mock_->GetCode()); } @@ -180,7 +183,8 @@ HWTEST_F(AbilityManagerCollaboratorProxyTest, NotifyClearMission_0100, TestSize. .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerCollaboratorStubMock::InvokeSendRequest)); int32_t missionId = 0; - int32_t res = proxy_->NotifyClearMission(missionId); + int32_t userId = 100; + int32_t res = proxy_->NotifyClearMission(missionId, userId); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(static_cast(IAbilityManagerCollaborator::NOTIFY_CLEAR_MISSION), mock_->GetCode()); } @@ -281,7 +285,8 @@ HWTEST_F(AbilityManagerCollaboratorProxyTest, NotifyMissionBindPid_0100, TestSiz .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerCollaboratorStubMock::InvokeSendRequest)); int32_t missionId = 0; int32_t pid = 0; - proxy_->NotifyMissionBindPid(missionId, pid); + int32_t userId = 100; + proxy_->NotifyMissionBindPid(missionId, pid, userId); EXPECT_EQ(static_cast(IAbilityManagerCollaborator::NOTIFY_MISSION_BIND_PID), mock_->GetCode()); } diff --git a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h index d53752bf541..96b6df1c0a8 100644 --- a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h +++ b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h @@ -59,22 +59,22 @@ public: return 0; } - int32_t NotifyMoveMissionToBackground(int32_t missionId) + int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId) { return 0; } - int32_t NotifyMoveMissionToForeground(int32_t missionId) + int32_t NotifyMoveMissionToForeground(int32_t missionId, int32_t userId) { return 0; } - int32_t NotifyTerminateMission(int32_t missionId) + int32_t NotifyTerminateMission(int32_t missionId, int32_t userId) { return 0; } - int32_t NotifyClearMission(int32_t missionId) + int32_t NotifyClearMission(int32_t missionId, int32_t userId) { return 0; } @@ -88,7 +88,7 @@ public: {} MOCK_METHOD4(SendRequest, int(uint32_t, MessageParcel&, MessageParcel&, MessageOption&)); MOCK_METHOD3(OpenFile, int(const Uri& uri, uint32_t flag, uint32_t tokenId)); - MOCK_METHOD2(NotifyMissionBindPid, void(int32_t missionId, int32_t pid)); + MOCK_METHOD3(NotifyMissionBindPid, void(int32_t missionId, int32_t pid, int32_t userId)); MOCK_METHOD2(CheckStaticCfgPermission, int32_t(const Want &want, bool isImplicit)); MOCK_METHOD2(NotifyKillProcesses, int32_t(const std::string &, int32_t)); diff --git a/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp b/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp index 4e0a6436662..ed37655b2a8 100644 --- a/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp +++ b/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp @@ -93,10 +93,10 @@ public: const Want &want)); MOCK_METHOD2(NotifyLoadAbility, int32_t(const AppExecFwk::AbilityInfo &abilityInfo, const sptr &sessionInfo)); - MOCK_METHOD1(NotifyMoveMissionToBackground, int32_t(int32_t missionId)); - MOCK_METHOD1(NotifyMoveMissionToForeground, int32_t(int32_t missionId)); - MOCK_METHOD1(NotifyTerminateMission, int32_t(int32_t missionId)); - MOCK_METHOD1(NotifyClearMission, int32_t(int32_t missionId)); + MOCK_METHOD2(NotifyMoveMissionToBackground, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD2(NotifyMoveMissionToForeground, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD2(NotifyTerminateMission, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD2(NotifyClearMission, int32_t(int32_t missionId, int32_t userId)); MOCK_METHOD3(NotifyRemoveShellProcess, int32_t(int32_t pid, int32_t type, const std::string &reason)); MOCK_METHOD1(UpdateMissionInfo, void(sptr &sessionInfo)); sptr AsObject() override -- Gitee