diff --git a/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h index a5ad2966ef49f1a9991d9da530ddb0a9c96fa228..96a117d8f56e2026b8f37ca99cdbb79186939fee 100644 --- a/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/ability/ability_runtime/test/mock/AMS/mock_serviceability_manager_service.h @@ -95,7 +95,7 @@ public: MOCK_METHOD1(GetAllStackInfo, int(StackInfo &stackInfo)); MOCK_METHOD1(MoveMissionToTop, int(int32_t missionId)); MOCK_METHOD1(KillProcess, int(const std::string &bundleName)); - MOCK_METHOD1(UninstallApp, int(const std::string &bundleName)); + MOCK_METHOD2(UninstallApp, int(const std::string &bundleName, int32_t uid)); MOCK_METHOD2( GetWantSender, sptr(const WantSenderInfo &wantSenderInfo, const sptr &callerToken)); MOCK_METHOD2(SendWantSender, int(const sptr &target, const SenderInfo &senderInfo)); diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.cpp b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.cpp index afac3de2feb90e046efe6ee7b2dca1100bb4d7c0..311935a24685e41784e7eb373703a6f173227057 100644 --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.cpp +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.cpp @@ -173,7 +173,7 @@ int MockAbilityManagerService::KillProcess(const std::string &bundleName) return 0; } -int MockAbilityManagerService::UninstallApp(const std::string &bundleName) +int MockAbilityManagerService::UninstallApp(const std::string &bundleName, int32_t uid) { return 0; } diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h index 21f571f8d064376f97f0511099b88251d24347a8..6507c54c2773d56bd4a0b151d80af9bd8f7e88ff 100644 --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h @@ -198,7 +198,7 @@ public: int KillProcess(const std::string &bundleName) override; - int UninstallApp(const std::string &bundleName) override; + int UninstallApp(const std::string &bundleName, int32_t uid) override; int TerminateAbilityByCaller(const sptr &callerToken, int requestCode) override { diff --git a/frameworks/kits/appkit/native/ability_runtime/context/context_impl.cpp b/frameworks/kits/appkit/native/ability_runtime/context/context_impl.cpp index 732cd45765524da7ab5ad9387a5a7311e9302135..6be853a6fe6ef301f7205d9b562e04c63b4c904b 100644 --- a/frameworks/kits/appkit/native/ability_runtime/context/context_impl.cpp +++ b/frameworks/kits/appkit/native/ability_runtime/context/context_impl.cpp @@ -70,7 +70,7 @@ std::string ContextImpl::GetBundleCodeDir() if (IsCreateBySystemApp()) { dir = std::regex_replace(appInfo->codePath, std::regex(ABS_CODE_PATH), LOCAL_BUNDLES); } else { - dir = CONTEXT_DATA_STORAGE + CONTEXT_ELS[0] + CONTEXT_BUNDLE; + dir = LOCAL_CODE_PATH; } CreateDirIfNotExist(dir); HILOG_DEBUG("ContextImpl::GetBundleCodeDir:%{public}s", dir.c_str()); diff --git a/frameworks/kits/appkit/test/Mock/include/mock_ability_mgr_service.h b/frameworks/kits/appkit/test/Mock/include/mock_ability_mgr_service.h index 936f084101c137f184d185d552fab104e8aca6c0..e42934ca350d25c6e7425eed15ea6f3b30e167c0 100644 --- a/frameworks/kits/appkit/test/Mock/include/mock_ability_mgr_service.h +++ b/frameworks/kits/appkit/test/Mock/include/mock_ability_mgr_service.h @@ -60,7 +60,7 @@ public: MOCK_METHOD1(MoveMissionToTop, int(int32_t)); MOCK_METHOD1(KillProcess, int(const std::string &bundleName)); - MOCK_METHOD2(UninstallApp, int(const std::string &bundleName, const int userId)); + MOCK_METHOD2(UninstallApp, int(const std::string &bundleName, int32_t uid)); MOCK_METHOD1(TerminateAbilityByRecordId, int(const int64_t recordId)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); diff --git a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h index 5f7106cf5b4cfe9482bb9b727df924b33c18ce96..4ffd856bb52e9e1c7fe05ddf7c86ddbdc28d3768 100644 --- a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h @@ -91,7 +91,7 @@ public: MOCK_METHOD1(MoveMissionToTop, int(int32_t missionId)); MOCK_METHOD1(KillProcess, int(const std::string &bundleName)); - MOCK_METHOD1(UninstallApp, int(const std::string &bundleName)); + MOCK_METHOD2(UninstallApp, int(const std::string &bundleName, int32_t uid)); MOCK_METHOD2( GetWantSender, sptr(const WantSenderInfo &wantSenderInfo, const sptr &callerToken)); MOCK_METHOD2(SendWantSender, int(const sptr &target, const SenderInfo &senderInfo)); diff --git a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h index 5101d21735aca93319c6169c8df8313df76ccfae..cb5bac1fb716c003352ede541ed105e43d7cef25 100644 --- a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h @@ -91,7 +91,7 @@ public: MOCK_METHOD1(GetAllStackInfo, int(StackInfo &stackInfo)); MOCK_METHOD1(MoveMissionToTop, int(int32_t missionId)); MOCK_METHOD1(KillProcess, int(const std::string &bundleName)); - MOCK_METHOD1(UninstallApp, int(const std::string &bundleName)); + MOCK_METHOD2(UninstallApp, int(const std::string &bundleName, int32_t uid)); MOCK_METHOD2( GetWantSender, sptr(const WantSenderInfo &wantSenderInfo, const sptr &callerToken)); MOCK_METHOD2(SendWantSender, int(const sptr &target, const SenderInfo &senderInfo)); diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h index 82b3b7035b67c9301422064da52685c359fd663a..d9bfadc867456080cf2d4c761bf160a8e7915280 100644 --- a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h @@ -394,10 +394,11 @@ public: /** * Uninstall app * - * @param bundleName. + * @param bundleName bundle name of uninstalling app. + * @param uid uid of bundle. * @return Returns ERR_OK on success, others on failure. */ - virtual int UninstallApp(const std::string &bundleName) = 0; + virtual int UninstallApp(const std::string &bundleName, int32_t uid) = 0; /** * Moving mission to the specified stack by mission option(Enter floating window mode). diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 9de5f09d6f95ef04dbee1d4f32a2c9e6480d4ec4..f7223ac3434d1b003abf2c1f1135f1b327b8d0a1 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -357,10 +357,11 @@ public: /** * Uninstall app * - * @param bundleName. + * @param bundleName bundle name of uninstalling app. + * @param uid uid of bundle. * @return Returns ERR_OK on success, others on failure. */ - virtual int UninstallApp(const std::string &bundleName) override; + virtual int UninstallApp(const std::string &bundleName, int32_t uid) override; /** * Moving mission to the specified stack by mission option(Enter floating window mode). diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 3117878227e266109ca1fa203a24b83f39c431dc..da54a0d8f271183c2990dc494494d4d364645f60 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -475,10 +475,11 @@ public: /** * Uninstall app * - * @param bundleName. + * @param bundleName bundle name of uninstalling app. + * @param uid uid of bundle. * @return Returns ERR_OK on success, others on failure. */ - virtual int UninstallApp(const std::string &bundleName) override; + virtual int UninstallApp(const std::string &bundleName, int32_t uid) override; /** * Moving mission to the specified stack by mission option(Enter floating window mode). diff --git a/services/abilitymgr/include/app_scheduler.h b/services/abilitymgr/include/app_scheduler.h index dbf3c483d02b34f93458a99ce2b406820358a605..f4e99b41711097ea0d73d2939ed5d93e75c7b5ce 100644 --- a/services/abilitymgr/include/app_scheduler.h +++ b/services/abilitymgr/include/app_scheduler.h @@ -210,6 +210,15 @@ public: */ int KillApplication(const std::string &bundleName); + /** + * kill the application by uid + * + * @param bundleName name of bundle. + * @param uid uid of bundle. + * @return 0 if success. + */ + int KillApplicationByUid(const std::string &bundleName, int32_t uid); + /** * clear the application data * diff --git a/services/abilitymgr/include/inner_mission_info.h b/services/abilitymgr/include/inner_mission_info.h index af13a48e3507e0f7dc6aa8e64eb9e79781889cf6..0b811ec6bd39e6ea54bada75dab1c0dce0038cda 100644 --- a/services/abilitymgr/include/inner_mission_info.h +++ b/services/abilitymgr/include/inner_mission_info.h @@ -45,6 +45,8 @@ struct InnerMissionInfo { std::string missionName; bool isSingletonMode; int32_t startMethod; + std::string bundleName; + int32_t uid; std::string ToJsonStr() const; bool FromJsonStr(const std::string &jsonStr); diff --git a/services/abilitymgr/include/mission_info_mgr.h b/services/abilitymgr/include/mission_info_mgr.h index f3757a4e4622659ad75aa189e92960b150ecafab..5289421796e14142f44c83cb789b0c4adeb1afa9 100644 --- a/services/abilitymgr/include/mission_info_mgr.h +++ b/services/abilitymgr/include/mission_info_mgr.h @@ -157,6 +157,8 @@ public: * @param handler the snapshotHandler */ void RegisterSnapshotHandler(const sptr& handler); + + void HandleUnInstallApp(const std::string &bundleName, int32_t uid, std::list &missions); private: /** * @brief Boot query mission info. @@ -164,7 +166,10 @@ private: */ bool LoadAllMissionInfo(); + void GetMatchedMission(const std::string &bundleName, int32_t uid, std::list &missions); + private: + int32_t currentMisionId_ = MIN_MISSION_ID; std::unordered_map missionIdMap_; // key:distributed misisonid, vaule: has been saved std::list missionInfoList_; std::shared_ptr taskDataPersistenceMgr_; diff --git a/services/abilitymgr/include/mission_list.h b/services/abilitymgr/include/mission_list.h index 30b4140bdccb8cc55bb67d272d8929f197d6595f..1f78d3d0452283c6732e1b49e488ad2068a4a54a 100644 --- a/services/abilitymgr/include/mission_list.h +++ b/services/abilitymgr/include/mission_list.h @@ -161,6 +161,14 @@ public: */ sptr GetAbilityTokenByMissionId(int32_t missionId); + /** + * Handle uninstall bundle. + * + * @param bundleName name of bundle. + * @param uid the uid of bundle. + */ + void HandleUnInstallApp(const std::string &bundleName, int32_t uid); + /** * @brief dump mission * @@ -181,6 +189,7 @@ public: std::shared_ptr GetMissionBySpecifiedFlag(const std::string &flag) const; private: std::string GetTypeName(); + bool MatchedInitialMission(const std::shared_ptr& mission, const std::string &bundleName, int32_t uid); MissionListType type_; std::list> missions_ {}; diff --git a/services/abilitymgr/include/mission_list_manager.h b/services/abilitymgr/include/mission_list_manager.h index 9c224d7a8eb8246bca4a6632be21c6de1e8ac758..5e60dc091b70383580a3dab35665e68eac53c834 100644 --- a/services/abilitymgr/include/mission_list_manager.h +++ b/services/abilitymgr/include/mission_list_manager.h @@ -339,6 +339,8 @@ public: */ std::shared_ptr GetCurrentTopAbility(const std::string &bundleName); + void UninstallApp(const std::string &bundleName, int32_t uid); + bool IsStarted(); void PauseManager(); void ResumeManager(); @@ -407,6 +409,8 @@ private: int CallAbilityLocked(const AbilityRequest &abilityRequest); void UpdateMissionSnapshot(const std::shared_ptr& abilityRecord); + void AddUninstallTags(const std::string &bundleName, int32_t uid); + private: int userId_; std::recursive_mutex managerLock_; diff --git a/services/abilitymgr/include/mission_listener_controller.h b/services/abilitymgr/include/mission_listener_controller.h index 7a20272afc12ae984fb3a6edbcdd305fe9ac9afe..ee003f2b3781315b4b6cd4cb43e120a6206d9d43 100644 --- a/services/abilitymgr/include/mission_listener_controller.h +++ b/services/abilitymgr/include/mission_listener_controller.h @@ -82,6 +82,8 @@ public: */ void NotifyMissionMovedToFront(int32_t missionId); + void HandleUnInstallApp(const std::list &missions); + private: void NotifyListeners(int32_t missionId, IMissionListener::MissionListenerCmd cmd); void OnListenerDied(const wptr &remote); diff --git a/services/abilitymgr/include/pending_want_manager.h b/services/abilitymgr/include/pending_want_manager.h index 55852046f41d0d826e3ed4d9318a7afcf3a8b0e4..7c5d2c38beddd88b45fc84cdcab13bb1fd53a3dc 100644 --- a/services/abilitymgr/include/pending_want_manager.h +++ b/services/abilitymgr/include/pending_want_manager.h @@ -156,7 +156,7 @@ public: int32_t DeviceIdDetermine( const Want &want, const sptr &callerToken, int32_t requestCode, const int32_t callerUid); int32_t PendingWantPublishCommonEvent(const Want &want, const SenderInfo &senderInfo, int32_t callerUid); - void ClearPendingWantRecord(const std::string &bundleName); + void ClearPendingWantRecord(const std::string &bundleName, int32_t uid); void Dump(std::vector &info); void DumpByRecordId(std::vector &info, const std::string &args); @@ -172,7 +172,7 @@ private: sptr GetPendingWantRecordByCode(int32_t code); static int32_t PendingRecordIdCreate(); - void ClearPendingWantRecordTask(const std::string &bundleName); + void ClearPendingWantRecordTask(const std::string &bundleName, int32_t uid); private: std::map, sptr> wantRecords_; diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index f713cac88f2de216ddfbeca688b0772b8b746a7e..dd27b84d444791b4811ed8796949009e91ea9de7 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -931,7 +931,7 @@ int AbilityManagerProxy::ClearUpApplicationData(const std::string &bundleName) return reply.ReadInt32(); } -int AbilityManagerProxy::UninstallApp(const std::string &bundleName) +int AbilityManagerProxy::UninstallApp(const std::string &bundleName, int32_t uid) { MessageParcel data; MessageParcel reply; @@ -944,6 +944,10 @@ int AbilityManagerProxy::UninstallApp(const std::string &bundleName) HILOG_ERROR("bundleName write failed."); return ERR_INVALID_VALUE; } + if (!data.WriteInt32(uid)) { + HILOG_ERROR("uid write failed."); + return ERR_INVALID_VALUE; + } int error = Remote()->SendRequest(IAbilityManager::UNINSTALL_APP, data, reply, option); if (error != NO_ERROR) { HILOG_ERROR("Send request error: %{public}d", error); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index efa9380595929fa81f37d5e995e7d3b212474e87..88d95881bfd77b33d873eb864797557b65c35f32 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -2685,7 +2685,7 @@ int AbilityManagerService::ClearUpApplicationData(const std::string &bundleName) return ERR_OK; } -int AbilityManagerService::UninstallApp(const std::string &bundleName) +int AbilityManagerService::UninstallApp(const std::string &bundleName, int32_t uid) { HILOG_DEBUG("Uninstall app, bundleName: %{public}s", bundleName.c_str()); pid_t callingPid = IPCSkeleton::GetCallingPid(); @@ -2695,11 +2695,13 @@ int AbilityManagerService::UninstallApp(const std::string &bundleName) return CHECK_PERMISSION_FAILED; } - CHECK_POINTER_AND_RETURN(currentStackManager_, ERR_NO_INIT); - currentStackManager_->UninstallApp(bundleName); + int32_t targetUserId = uid / BASE_USER_RANGE; + auto listManager = GetListManagerByUserId(targetUserId); + CHECK_POINTER_AND_RETURN(listManager, ERR_NO_INIT); + listManager->UninstallApp(bundleName, uid); CHECK_POINTER_AND_RETURN(pendingWantManager_, ERR_NO_INIT); - pendingWantManager_->ClearPendingWantRecord(bundleName); - int ret = DelayedSingleton::GetInstance()->KillApplication(bundleName); + pendingWantManager_->ClearPendingWantRecord(bundleName, uid); + int ret = DelayedSingleton::GetInstance()->KillApplicationByUid(bundleName, uid); if (ret != ERR_OK) { return UNINSTALL_APP_FAILED; } diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 54580c6b32b5b81bec2aabc98c74e917b373c5a9..b4c62ee5de93e678bd60af3d0e15088a5919e096 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -422,7 +422,8 @@ int AbilityManagerStub::ClearUpApplicationDataInner(MessageParcel &data, Message int AbilityManagerStub::UninstallAppInner(MessageParcel &data, MessageParcel &reply) { std::string bundleName = Str16ToStr8(data.ReadString16()); - int result = UninstallApp(bundleName); + int32_t uid = data.ReadInt32(); + int result = UninstallApp(bundleName, uid); if (!reply.WriteInt32(result)) { HILOG_ERROR("remove stack error"); return ERR_INVALID_VALUE; diff --git a/services/abilitymgr/src/app_scheduler.cpp b/services/abilitymgr/src/app_scheduler.cpp index 6cd186b67c9d1c4f7d43ce7a2a9a21ea70cd7b3f..ed3d0ad8e092c3b4e1d88238a1561b01439397dd 100644 --- a/services/abilitymgr/src/app_scheduler.cpp +++ b/services/abilitymgr/src/app_scheduler.cpp @@ -198,6 +198,19 @@ int AppScheduler::KillApplication(const std::string &bundleName) return ERR_OK; } +int AppScheduler::KillApplicationByUid(const std::string &bundleName, int32_t uid) +{ + HILOG_INFO("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); + CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR); + int ret = (int)appMgrClient_->KillApplicationByUid(bundleName, uid); + if (ret != ERR_OK) { + HILOG_ERROR("Fail to kill application by uid."); + return INNER_ERR; + } + + return ERR_OK; +} + int AppScheduler::ClearUpApplicationData(const std::string &bundleName) { CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR); diff --git a/services/abilitymgr/src/inner_mission_info.cpp b/services/abilitymgr/src/inner_mission_info.cpp index 2198f0df7ed3b311e87ef5494c2b2e88ea14512e..9902f6d3c4f28df039289baf1c2a7244524537f0 100644 --- a/services/abilitymgr/src/inner_mission_info.cpp +++ b/services/abilitymgr/src/inner_mission_info.cpp @@ -20,20 +20,36 @@ namespace OHOS { namespace AAFwk { +namespace { +const std::string KEY_MISSION_NAME = "MissionName"; +const std::string KEY_IS_SINGLETON = "IsSingleton"; +const std::string KEY_MISSION_ID = "MissionId"; +const std::string KEY_RUNNING_STATE = "RunningState"; +const std::string KEY_LOCKED_STATE = "LockedState"; +const std::string KEY_CONTINUABLE = "Continuable"; +const std::string KEY_TIME = "Time"; +const std::string KEY_LABEL = "Label"; +const std::string KEY_ICON_PATH = "IconPath"; +const std::string KEY_WANT = "Want"; +const std::string KEY_START_METHOD = "StartMethod"; +const std::string KEY_BUNDLE_NAME = "BundleName"; +const std::string KEY_UID = "Uid"; +} std::string InnerMissionInfo::ToJsonStr() const { nlohmann::json value; - value["MissionName"] = missionName; - value["IsSingleton"] = isSingletonMode; - value["StartMethod"] = startMethod; - value["MissionId"] = missionInfo.id; - value["RunningState"] = missionInfo.runningState; - value["LockedState"] = missionInfo.lockedState; - value["Continuable"] = missionInfo.continuable; - value["Time"] = missionInfo.time; - value["Label"] = missionInfo.label; - value["IconPath"] = missionInfo.iconPath; - value["Want"] = missionInfo.want.ToUri(); + value[KEY_MISSION_NAME] = missionName; + value[KEY_IS_SINGLETON] = isSingletonMode; + value[KEY_BUNDLE_NAME] = bundleName; + value[KEY_UID] = uid; + value[KEY_MISSION_ID] = missionInfo.id; + value[KEY_RUNNING_STATE] = missionInfo.runningState; + value[KEY_LOCKED_STATE] = missionInfo.lockedState; + value[KEY_CONTINUABLE] = missionInfo.continuable; + value[KEY_TIME] = missionInfo.time; + value[KEY_LABEL] = missionInfo.label; + value[KEY_ICON_PATH] = missionInfo.iconPath; + value[KEY_WANT] = missionInfo.want.ToUri(); return value.dump(); } @@ -64,50 +80,58 @@ bool InnerMissionInfo::FromJsonStr(const std::string &jsonStr) } return false; }; - if (!CheckJsonNode("MissionName", JsonType::STRING)) { + if (!CheckJsonNode(KEY_MISSION_NAME, JsonType::STRING)) { + return false; + } + missionName = value[KEY_MISSION_NAME].get(); + if (!CheckJsonNode(KEY_IS_SINGLETON, JsonType::BOOLEAN)) { + return false; + } + isSingletonMode = value[KEY_IS_SINGLETON].get(); + if (!CheckJsonNode(KEY_START_METHOD, JsonType::NUMBER)) { return false; } - missionName = value["MissionName"].get(); - if (!CheckJsonNode("IsSingleton", JsonType::BOOLEAN)) { + startMethod = value[KEY_START_METHOD].get(); + if (!CheckJsonNode(KEY_BUNDLE_NAME, JsonType::STRING)) { return false; } - isSingletonMode = value["IsSingleton"].get(); - if (!CheckJsonNode("StartMethod", JsonType::NUMBER)) { + bundleName = value[KEY_BUNDLE_NAME].get(); + if (!CheckJsonNode(KEY_UID, JsonType::NUMBER)) { return false; } - startMethod = value["StartMethod"].get(); - if (!CheckJsonNode("MissionId", JsonType::NUMBER)) { + uid = value[KEY_UID].get(); + if (!CheckJsonNode(KEY_MISSION_ID, JsonType::NUMBER)) { return false; } - missionInfo.id = value["MissionId"].get(); - if (!CheckJsonNode("RunningState", JsonType::NUMBER)) { + missionInfo.id = value[KEY_MISSION_ID].get(); + if (!CheckJsonNode(KEY_RUNNING_STATE, JsonType::NUMBER)) { return false; } - missionInfo.runningState = value["RunningState"].get(); - if (!CheckJsonNode("LockedState", JsonType::BOOLEAN)) { + missionInfo.runningState = value[KEY_RUNNING_STATE].get(); + if (!CheckJsonNode(KEY_LOCKED_STATE, JsonType::BOOLEAN)) { return false; } - missionInfo.lockedState = value["LockedState"].get(); - if (!CheckJsonNode("Continuable", JsonType::BOOLEAN)) { + missionInfo.lockedState = value[KEY_LOCKED_STATE].get(); + if (!CheckJsonNode(KEY_CONTINUABLE, JsonType::BOOLEAN)) { return false; } - missionInfo.continuable = value["Continuable"].get(); - if (!CheckJsonNode("Time", JsonType::STRING)) { + missionInfo.continuable = value[KEY_CONTINUABLE].get(); + if (!CheckJsonNode(KEY_TIME, JsonType::STRING)) { return false; } - missionInfo.time = value["Time"].get(); - if (!CheckJsonNode("Label", JsonType::STRING)) { + missionInfo.time = value[KEY_TIME].get(); + if (!CheckJsonNode(KEY_LABEL, JsonType::STRING)) { return false; } - missionInfo.label = value["Label"].get(); - if (!CheckJsonNode("IconPath", JsonType::STRING)) { + missionInfo.label = value[KEY_LABEL].get(); + if (!CheckJsonNode(KEY_ICON_PATH, JsonType::STRING)) { return false; } - missionInfo.iconPath = value["IconPath"].get(); - if (!CheckJsonNode("Want", JsonType::STRING)) { + missionInfo.iconPath = value[KEY_ICON_PATH].get(); + if (!CheckJsonNode(KEY_WANT, JsonType::STRING)) { return false; } - Want* want = Want::ParseUri(value["Want"].get()); + Want* want = Want::ParseUri(value[KEY_WANT].get()); if (want) { missionInfo.want = *want; } diff --git a/services/abilitymgr/src/mission_info_mgr.cpp b/services/abilitymgr/src/mission_info_mgr.cpp index 224364b1b2cf0976000d8ff0b896816fdc12c328..aeaa0e3207a9cdfbca04c8b06530d3c0600af1fc 100644 --- a/services/abilitymgr/src/mission_info_mgr.cpp +++ b/services/abilitymgr/src/mission_info_mgr.cpp @@ -29,12 +29,17 @@ MissionInfoMgr::~MissionInfoMgr() HILOG_INFO("MissionInfoMgr instance is destroyed"); } -bool MissionInfoMgr::GenerateMissionId(int32_t &misisonId) +bool MissionInfoMgr::GenerateMissionId(int32_t &missionId) { - for (int32_t index = MIN_MISSION_ID; index <= MAX_MISSION_ID; index++) { + if (currentMisionId_ == MAX_MISSION_ID) { + currentMisionId_ = MIN_MISSION_ID; + } + + for (int32_t index = currentMisionId_; index < MAX_MISSION_ID; index++) { if (missionIdMap_.find(index) == missionIdMap_.end()) { - misisonId = index; - missionIdMap_[misisonId] = false; + missionId = index; + missionIdMap_[missionId] = false; + currentMisionId_ = missionId + 1; return true; } } @@ -351,6 +356,28 @@ bool MissionInfoMgr::LoadAllMissionInfo() return true; } +void MissionInfoMgr::HandleUnInstallApp(const std::string &bundleName, int32_t uid, std::list &missions) +{ + HILOG_INFO("HandleUnInstallApp, bundleName:%{public}s, uid:%{public}d", bundleName.c_str(), uid); + GetMatchedMission(bundleName, uid, missions); + if (missions.empty()) { + return; + } + + for (auto missionId : missions) { + DeleteMissionInfo(missionId); + } +} + +void MissionInfoMgr::GetMatchedMission(const std::string &bundleName, int32_t uid, std::list &missions) +{ + for (const auto& innerMissionInfo : missionInfoList_) { + if (innerMissionInfo.bundleName == bundleName && innerMissionInfo.uid == uid) { + missions.push_back(innerMissionInfo.missionInfo.id); + } + } +} + void MissionInfoMgr::Dump(std::vector &info) { for (const auto& innerMissionInfo : missionInfoList_) { diff --git a/services/abilitymgr/src/mission_list.cpp b/services/abilitymgr/src/mission_list.cpp index 3771dc7c029bddb245d249cb0c387c3e81f65c4d..cf0b32ad72874ce4d43fe65b2df1872748dcc236 100644 --- a/services/abilitymgr/src/mission_list.cpp +++ b/services/abilitymgr/src/mission_list.cpp @@ -253,6 +253,41 @@ std::string MissionList::GetTypeName() } } +void MissionList::HandleUnInstallApp(const std::string &bundleName, int32_t uid) +{ + for (auto it = missions_.begin(); it != missions_.end();) { + auto mission = *it; + if (MatchedInitialMission(mission, bundleName, uid)) { + missions_.erase(it++); + } else { + it++; + } + } +} + +bool MissionList::MatchedInitialMission(const std::shared_ptr& mission, + const std::string &bundleName, int32_t uid) +{ + if (!mission) { + return false; + } + + auto abilityRecord = mission->GetAbilityRecord(); + if (!abilityRecord) { + return false; + } + + if (abilityRecord->GetAbilityInfo().bundleName == bundleName && abilityRecord->GetUid() == uid) { + abilityRecord->SetIsUninstallAbility(); + if (abilityRecord->IsAbilityState(AbilityState::INITIAL)) { + return true; + } + } + + return false; +} + + void MissionList::Dump(std::vector& info) { std::string dumpInfo = " MissionList Type #" + GetTypeName(); diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index b220cab98686632df52908b8ae4dcc420d3293f9..534c7fac38d6d6635ce230e44cf9b878423d1d5d 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -352,6 +352,8 @@ void MissionListManager::GetTargetMissionAndAbility(const AbilityRequest &abilit info.missionName = missionName; info.isSingletonMode = isSingleton; info.startMethod = startMethod; + info.bundleName = abilityRequest.abilityInfo.bundleName; + info.uid = abilityRequest.uid; info.missionInfo.runningState = 0; info.missionInfo.continuable = abilityRequest.abilityInfo.continuable; info.missionInfo.time = Time2str(time(0)); @@ -1769,10 +1771,13 @@ void MissionListManager::HandleAbilityDiedByDefault(std::shared_ptr::GetInstance()->GetInnerMissionInfoById(mission->GetMissionId(), info) == 0) { - info.missionInfo.runningState = -1; - DelayedSingleton::GetInstance()->UpdateMissionInfo(info); + if (!ability->IsUninstallAbility()) { + InnerMissionInfo info; + if (DelayedSingleton::GetInstance()->GetInnerMissionInfoById( + mission->GetMissionId(), info) == 0) { + info.missionInfo.runningState = -1; + DelayedSingleton::GetInstance()->UpdateMissionInfo(info); + } } // start launcher @@ -2283,6 +2288,44 @@ std::shared_ptr MissionListManager::GetCurrentTopAbility(const st return {}; } +void MissionListManager::UninstallApp(const std::string &bundleName, int32_t uid) +{ + HILOG_INFO("Uninstall app, bundleName: %{public}s, uid:%{public}d", bundleName.c_str(), uid); + auto abilityManagerService = DelayedSingleton::GetInstance(); + CHECK_POINTER(abilityManagerService); + auto handler = abilityManagerService->GetEventHandler(); + CHECK_POINTER(handler); + std::weak_ptr wpMgr = shared_from_this(); + auto task = [wpMgr, bundleName, uid]() { + HILOG_INFO("Handle Uninstall app, bundleName: %{public}s, uid:%{public}d", bundleName.c_str(), uid); + auto mgr = wpMgr.lock(); + if (mgr) { + mgr->AddUninstallTags(bundleName, uid); + } + }; + handler->PostTask(task); +} + +void MissionListManager::AddUninstallTags(const std::string &bundleName, int32_t uid) +{ + HILOG_INFO("AddUninstallTags, bundleName: %{public}s, uid:%{public}d", bundleName.c_str(), uid); + for (auto& missionList : currentMissionLists_) { + if (missionList) { + missionList->HandleUnInstallApp(bundleName, uid); // add tag here. + if (missionList->IsEmpty()) { + currentMissionLists_.remove(missionList); + } + } + } + defaultSingleList_->HandleUnInstallApp(bundleName, uid); + defaultStandardList_->HandleUnInstallApp(bundleName, uid); + std::list matchedMissions; + DelayedSingleton::GetInstance()->HandleUnInstallApp(bundleName, uid, matchedMissions); + if (listenerController_) { + listenerController_->HandleUnInstallApp(matchedMissions); + } +} + bool MissionListManager::IsStarted() { std::lock_guard guard(managerLock_); diff --git a/services/abilitymgr/src/mission_listener_controller.cpp b/services/abilitymgr/src/mission_listener_controller.cpp index fc3b6753b82af214f5ab684b9f3c3dfa5c3f6509..c53591d8e05f79d0d4d098b1629a8ebc85358562 100644 --- a/services/abilitymgr/src/mission_listener_controller.cpp +++ b/services/abilitymgr/src/mission_listener_controller.cpp @@ -133,6 +133,31 @@ void MissionListenerController::NotifyMissionDestroyed(int32_t missionId) handler_->PostTask(task); } +void MissionListenerController::HandleUnInstallApp(const std::list &missions) +{ + if (!handler_) { + HILOG_ERROR("handler not init"); + return; + } + + if (missions.empty()) { + return; + } + + auto task = [weak = weak_from_this(), missions]() { + auto self = weak.lock(); + if (self == nullptr) { + HILOG_ERROR("self is nullptr, NotifyMissionDestroyed failed."); + return; + } + for (auto id : missions) { + self->NotifyListeners(id, Cmd::ON_MISSION_DESTROYED); + } + }; + handler_->PostTask(task); + +} + void MissionListenerController::NotifyMissionSnapshotChanged(int32_t missionId) { if (!handler_) { diff --git a/services/abilitymgr/src/pending_want_manager.cpp b/services/abilitymgr/src/pending_want_manager.cpp index 0f4c522e1bfb23e1d520a61eb71585d99f17ac3d..665e4dcafc07ab5e82152bbcc888ba35f067e186 100644 --- a/services/abilitymgr/src/pending_want_manager.cpp +++ b/services/abilitymgr/src/pending_want_manager.cpp @@ -481,18 +481,18 @@ int32_t PendingWantManager::GetWantSenderInfo(const sptr &target, s return NO_ERROR; } -void PendingWantManager::ClearPendingWantRecord(const std::string &bundleName) +void PendingWantManager::ClearPendingWantRecord(const std::string &bundleName, int32_t uid) { HILOG_INFO("ClearPendingWantRecord, bundleName: %{public}s", bundleName.c_str()); auto abilityManagerService = DelayedSingleton::GetInstance(); CHECK_POINTER(abilityManagerService); auto handler = abilityManagerService->GetEventHandler(); CHECK_POINTER(handler); - auto task = [bundleName, self = shared_from_this()]() { self->ClearPendingWantRecordTask(bundleName); }; + auto task = [bundleName, uid, self = shared_from_this()]() { self->ClearPendingWantRecordTask(bundleName, uid); }; handler->PostTask(task); } -void PendingWantManager::ClearPendingWantRecordTask(const std::string &bundleName) +void PendingWantManager::ClearPendingWantRecordTask(const std::string &bundleName, int32_t uid) { HILOG_INFO("ClearPendingWantRecordTask, bundleName: %{public}s", bundleName.c_str()); std::lock_guard locker(mutex_); @@ -503,7 +503,7 @@ void PendingWantManager::ClearPendingWantRecordTask(const std::string &bundleNam if ((pendingRecord != nullptr)) { auto wantInfos = pendingRecord->GetKey()->GetAllWantsInfos(); for (const auto &wantInfo: wantInfos) { - if (wantInfo.want.GetBundle() == bundleName) { + if (wantInfo.want.GetBundle() == bundleName && uid == pendingRecord->GetUid()) { hasBundle = true; break; } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h b/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h index 2d4167321eee6daa818f23e6f5a054a5621d1373..15f7db62acf3b4e2c58a5ee9bf3e405fc3fc2b54 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_client_test/ability_manager_stub_mock_test.h @@ -212,7 +212,7 @@ public: return 0; } - virtual int UninstallApp(const std::string &bundleName) + virtual int UninstallApp(const std::string &bundleName, int32_t uid) { return 0; } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h index 3c2a6b1714f262652b0640f5cc03cb1c4960f82f..7b42f112271ca533ab2444bb784572cfcad2ad0b 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h @@ -212,7 +212,7 @@ public: return 0; } - virtual int UninstallApp(const std::string &bundleName) + virtual int UninstallApp(const std::string &bundleName, int32_t uid) { return 0; } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp b/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp index c75b01ef44cf47bf91c6ec133d60c2564f1c5fcb..bb85e1dfd8aa18106f09246b492421676419a4bd 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp +++ b/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp @@ -1262,7 +1262,7 @@ HWTEST_F(AbilityManagerServiceTest, Interface_029, TestSize.Level1) HWTEST_F(AbilityManagerServiceTest, Interface_030, TestSize.Level1) { abilityMs_->currentStackManager_ = nullptr; - auto result = abilityMs_->UninstallApp("bundle"); + auto result = abilityMs_->UninstallApp("bundle", -1); EXPECT_EQ(ERR_NO_INIT, result); } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h index 9a128f97072c611cf37e6cdb7f647dd6864c19c8..5aab9e935fcc004902ba05b0f0310739917d8b7c 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h @@ -225,7 +225,7 @@ public: return 0; } - virtual int UninstallApp(const std::string &bundleName) + virtual int UninstallApp(const std::string &bundleName, int32_t uid) { return 0; } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h index 86e8505154fc367c2106b4b06fdcdc5da46e7504..b311541fe551eb97c60b49d0486fc6d9adb5c2f5 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h @@ -65,7 +65,7 @@ public: MOCK_METHOD1(RemoveStack, int(int)); MOCK_METHOD1(MoveMissionToTop, int(int32_t)); MOCK_METHOD1(KillProcess, int(const std::string &)); - MOCK_METHOD1(UninstallApp, int(const std::string &)); + MOCK_METHOD2(UninstallApp, int(const std::string &, int32_t)); MOCK_METHOD2(TerminateAbilityByCaller, int(const sptr &callerToken, int requestCode)); MOCK_METHOD3(StartAbility, int(const Want &want, const sptr &callerToken, int requestCode)); MOCK_METHOD2(MoveMissionToEnd, int(const sptr &token, const bool nonFirst)); diff --git a/services/abilitymgr/test/unittest/phone/pending_want_manager_test/pending_want_manager_test.cpp b/services/abilitymgr/test/unittest/phone/pending_want_manager_test/pending_want_manager_test.cpp index 3007f1aed7179bcbd5228ada1f00a6608aa76005..38d97defaae86c1ff58ae4569af9a686c0dabc05 100644 --- a/services/abilitymgr/test/unittest/phone/pending_want_manager_test/pending_want_manager_test.cpp +++ b/services/abilitymgr/test/unittest/phone/pending_want_manager_test/pending_want_manager_test.cpp @@ -928,7 +928,7 @@ HWTEST_F(PendingWantManagerTest, PendingWantManagerTest_3500, TestSize.Level1) pendingManager_->GetWantSenderLocked(1, 1, wantSenderInfo1.userId, wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)pendingManager_->wantRecords_.size(), 2); - pendingManager_->ClearPendingWantRecordTask("bundleName2"); + pendingManager_->ClearPendingWantRecordTask("bundleName2", 1); EXPECT_EQ((int)pendingManager_->wantRecords_.size(), 0); } @@ -965,7 +965,7 @@ HWTEST_F(PendingWantManagerTest, PendingWantManagerTest_3600, TestSize.Level1) pendingManager_->GetWantSenderLocked(1, 1, wantSenderInfo1.userId, wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)pendingManager_->wantRecords_.size(), 2); - pendingManager_->ClearPendingWantRecordTask("bundleName1"); + pendingManager_->ClearPendingWantRecordTask("bundleName1", 1); EXPECT_EQ((int)pendingManager_->wantRecords_.size(), 1); } @@ -1002,7 +1002,7 @@ HWTEST_F(PendingWantManagerTest, PendingWantManagerTest_3700, TestSize.Level1) pendingManager_->GetWantSenderLocked(1, 1, wantSenderInfo1.userId, wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)pendingManager_->wantRecords_.size(), 2); - pendingManager_->ClearPendingWantRecordTask("bundleName3"); + pendingManager_->ClearPendingWantRecordTask("bundleName3", 1); EXPECT_EQ((int)pendingManager_->wantRecords_.size(), 2); } diff --git a/services/formmgr/test/mock/include/mock_ability_manager.h b/services/formmgr/test/mock/include/mock_ability_manager.h index 1f8ee784e80b8cedc67062d8cffdb95de0b1d6cd..7ac8b5e28e24058d71d0ef9dc6444a639d4ede6a 100644 --- a/services/formmgr/test/mock/include/mock_ability_manager.h +++ b/services/formmgr/test/mock/include/mock_ability_manager.h @@ -225,7 +225,7 @@ public: { return 0; } - virtual int UninstallApp(const std::string &bundleName) + virtual int UninstallApp(const std::string &bundleName, int32_t uid) { return 0; } @@ -616,7 +616,7 @@ public: { return 0; } - virtual int UninstallApp(const std::string &bundleName) + virtual int UninstallApp(const std::string &bundleName, int32_t uid) { return 0; } diff --git a/services/test/mock/include/appmgr/mock_ability_mgr_host.h b/services/test/mock/include/appmgr/mock_ability_mgr_host.h index f0f005064d2d148f51636d0537ede2c6f144e7a7..8cfefb75165c6639024517980b6a38657e26d945 100644 --- a/services/test/mock/include/appmgr/mock_ability_mgr_host.h +++ b/services/test/mock/include/appmgr/mock_ability_mgr_host.h @@ -150,7 +150,7 @@ public: { return 0; } - virtual int UninstallApp(const std::string &bundleName) override + virtual int UninstallApp(const std::string &bundleName, int32_t uid) override { return 0; } diff --git a/services/test/mock/include/mock_ability_manager_proxy.h b/services/test/mock/include/mock_ability_manager_proxy.h index c65309aabf5e174346441176c85d0325cadf299a..35d3dcaec0c0ea0ddb3dd6d679b5f34f5b050ad7 100644 --- a/services/test/mock/include/mock_ability_manager_proxy.h +++ b/services/test/mock/include/mock_ability_manager_proxy.h @@ -56,7 +56,7 @@ public: MOCK_METHOD1(RemoveStack, int(int)); MOCK_METHOD1(MoveMissionToTop, int(int32_t)); MOCK_METHOD1(KillProcess, int(const std::string &)); - MOCK_METHOD1(UninstallApp, int(const std::string &)); + MOCK_METHOD2(UninstallApp, int(const std::string &, int32_t)); MOCK_METHOD4(OnRemoteRequest, int(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)); MOCK_METHOD2(TerminateAbilityByCaller, int(const sptr &callerToken, int requestCode)); MOCK_METHOD3(StartAbility, int(const Want &want, const sptr &callerToken, int requestCode)); diff --git a/services/test/mock/include/mock_ability_mgr_service.h b/services/test/mock/include/mock_ability_mgr_service.h index ad54fb74ae0e45ebf71f79e748e930cf3edc3a70..9b0460bed84231f2ac07846d59c2a954e66600cd 100644 --- a/services/test/mock/include/mock_ability_mgr_service.h +++ b/services/test/mock/include/mock_ability_mgr_service.h @@ -64,7 +64,7 @@ public: MOCK_METHOD1(RemoveStack, int(int)); MOCK_METHOD1(MoveMissionToTop, int(int32_t)); MOCK_METHOD1(KillProcess, int(const std::string &)); - MOCK_METHOD1(UninstallApp, int(const std::string &)); + MOCK_METHOD2(UninstallApp, int(const std::string &, int32_t)); MOCK_METHOD4(OnRemoteRequest, int(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)); MOCK_METHOD2(MoveMissionToEnd, int(const sptr &token, const bool nonFirst)); MOCK_METHOD1(IsFirstInMission, bool(const sptr &token)); diff --git a/services/test/moduletest/ability_mgr_service_test/ability_mgr_module_test.cpp b/services/test/moduletest/ability_mgr_service_test/ability_mgr_module_test.cpp index 12e14d6aecf4c8fe4c7f72c1abf18cf7f653b95b..9d030f31fcf52abb7d1fde4d5b6656475a551681 100644 --- a/services/test/moduletest/ability_mgr_service_test/ability_mgr_module_test.cpp +++ b/services/test/moduletest/ability_mgr_service_test/ability_mgr_module_test.cpp @@ -1245,7 +1245,7 @@ HWTEST_F(AbilityMgrModuleTest, UninstallApp_001, TestSize.Level1) wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 2); - abilityMgrServ_->UninstallApp("bundleName3"); + abilityMgrServ_->UninstallApp("bundleName3", 1); WaitAMS(); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 2); } @@ -1288,7 +1288,7 @@ HWTEST_F(AbilityMgrModuleTest, UninstallApp_002, TestSize.Level1) wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 2); - abilityMgrServ_->UninstallApp("bundleName2"); + abilityMgrServ_->UninstallApp("bundleName2", 1); WaitAMS(); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 0); } @@ -1331,7 +1331,7 @@ HWTEST_F(AbilityMgrModuleTest, UninstallApp_003, TestSize.Level1) wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 2); - abilityMgrServ_->UninstallApp("bundleName1"); + abilityMgrServ_->UninstallApp("bundleName1", 1); WaitAMS(); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 1); } @@ -1374,7 +1374,7 @@ HWTEST_F(AbilityMgrModuleTest, UninstallApp_004, TestSize.Level1) wantSenderInfo1, nullptr)->AsObject()); EXPECT_NE(pendingRecord1, nullptr); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 2); - abilityMgrServ_->UninstallApp("bundleName3"); + abilityMgrServ_->UninstallApp("bundleName3", 1); WaitAMS(); EXPECT_EQ((int)abilityMgrServ_->pendingWantManager_->wantRecords_.size(), 1); } diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h index 6e99eac731d00630d5123ffd66322f0469a0726f..045f75333cfa987d0687931988c8e2323d7c7f4f 100644 --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -85,7 +85,7 @@ public: MOCK_METHOD1(RemoveMission, int(int id)); MOCK_METHOD1(RemoveStack, int(int id)); MOCK_METHOD1(KillProcess, int(const std::string &bundleName)); - MOCK_METHOD1(UninstallApp, int(const std::string &bundleName)); + MOCK_METHOD2(UninstallApp, int(const std::string &bundleName, int32_t uid)); MOCK_METHOD2(MoveMissionToEnd, int(const sptr &token, const bool nonFirst)); MOCK_METHOD1(IsFirstInMission, bool(const sptr &token));