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 cef23d14e3ae34ec57311097f69864c774e094da..3e6cea139d17487331a89bca798e2c72d651d3b0 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 b5531e04f474aa8b26c967304f6161507812c38d..eae6774281d3e2bd4bf0907c34af412851e3fa90 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 25135d0c5edb798782ebd22a41c1f4ab7b3a8cd3..e8c286910eec794c3cefc27bec00c54141f2fa55 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 596c98862baf4b0c7d7c0d5bf5a4e9dbeab0ab33..d4c82cae6d087f7f11178e51874833071aab6849 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 e06300cbbf986af1bc05f18eb0ad0831199ff538..afa97f5dedc939e8545fe6f54cd2a8b886cbad84 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 5fa45a1f58618569680c6ca6152f3788da6e4599..d50129675a0cac3c9f4ae7103a50bdb049f40363 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 d53752bf5419b907c22819a04bb96a796cef6918..96b6df1c0a8e3f9b733cfc8be4657549773b5425 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 4e0a64366622145ce169cd44f4a49a826024280c..ed37655b2a87cb60a057514eaebaa3ff9aa1d0a0 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