diff --git a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp index 5fd4c54bcd..8eeea56ea1 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp @@ -69,6 +69,12 @@ NativeValue* JsAbilityContext::StartAbility(NativeEngine* engine, NativeCallback return (me != nullptr) ? me->OnStartAbility(*engine, *info) : nullptr; } +NativeValue* JsAbilityContext::StartRecentAbility(NativeEngine* engine, NativeCallbackInfo* info) +{ + JsAbilityContext* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnStartAbility(*engine, *info, true) : nullptr; +} + NativeValue* JsAbilityContext::StartAbilityWithAccount(NativeEngine* engine, NativeCallbackInfo* info) { JsAbilityContext* me = CheckParamsAndGetThis(engine, info); @@ -167,7 +173,7 @@ NativeValue* JsAbilityContext::IsTerminating(NativeEngine* engine, NativeCallbac return (me != nullptr) ? me->OnIsTerminating(*engine, *info) : nullptr; } -NativeValue* JsAbilityContext::OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info) +NativeValue* JsAbilityContext::OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info, bool isStartRecent) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); HILOG_INFO("OnStartAbility is called."); @@ -190,6 +196,12 @@ NativeValue* JsAbilityContext::OnStartAbility(NativeEngine& engine, NativeCallba reinterpret_cast(info.argv[1]), startOptions); unwrapArgc++; } + + if (isStartRecent) { + HILOG_INFO("OnStartRecentAbility is called"); + want.SetParam(Want::PARAM_RESV_START_RECENT, true); + } + AsyncTask::CompleteCallback complete = [weak = context_, want, startOptions, unwrapArgc](NativeEngine& engine, AsyncTask& task, int32_t status) { auto context = weak.lock(); @@ -1163,6 +1175,8 @@ NativeValue* CreateJsAbilityContext(NativeEngine& engine, std::shared_ptrOnStartAbility(*engine, *info) : nullptr; } + static NativeValue* StartRecentAbility(NativeEngine* engine, NativeCallbackInfo* info) + { + JsServiceExtensionContext* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnStartAbility(*engine, *info, true) : nullptr; + } + static NativeValue* StartAbilityByCall(NativeEngine* engine, NativeCallbackInfo* info) { JsServiceExtensionContext* me = CheckParamsAndGetThis(engine, info); @@ -134,7 +140,7 @@ public: private: std::weak_ptr context_; - NativeValue* OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info) + NativeValue* OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info, bool isStartRecent = false) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); HILOG_INFO("OnStartAbility is called"); @@ -152,6 +158,11 @@ private: return engine.CreateUndefined(); } + if (isStartRecent) { + HILOG_INFO("OnStartRecentAbility is called"); + want.SetParam(Want::PARAM_RESV_START_RECENT, true); + } + AsyncTask::CompleteCallback complete = [weak = context_, want, startOptions, unwrapArgc](NativeEngine& engine, AsyncTask& task, int32_t status) { HILOG_INFO("startAbility begin"); @@ -872,6 +883,8 @@ NativeValue* CreateJsServiceExtensionContext(NativeEngine& engine, std::shared_p JsServiceExtensionContext::StopServiceExtensionAbility); BindNativeFunction(engine, *object, "stopServiceExtensionAbilityWithAccount", moduleName, JsServiceExtensionContext::StopServiceExtensionAbilityWithAccount); + BindNativeFunction(engine, *object, "startRecentAbility", moduleName, + JsServiceExtensionContext::StartRecentAbility); return objValue; } diff --git a/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h b/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h index d5ec0d30f9..a54e935f64 100644 --- a/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h +++ b/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h @@ -39,6 +39,7 @@ public: static void Finalizer(NativeEngine* engine, void* data, void* hint); static NativeValue* StartAbility(NativeEngine* engine, NativeCallbackInfo* info); + static NativeValue* StartRecentAbility(NativeEngine* engine, NativeCallbackInfo* info); static NativeValue* StartAbilityWithAccount(NativeEngine* engine, NativeCallbackInfo* info); static NativeValue* StartAbilityByCall(NativeEngine* engine, NativeCallbackInfo* info); static NativeValue* StartAbilityForResult(NativeEngine* engine, NativeCallbackInfo* info); @@ -75,7 +76,7 @@ private: #endif private: - NativeValue* OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info); + NativeValue* OnStartAbility(NativeEngine& engine, NativeCallbackInfo& info, bool isStartRecent = false); NativeValue* OnStartAbilityWithAccount(NativeEngine& engine, NativeCallbackInfo& info); NativeValue* OnStartAbilityByCall(NativeEngine& engine, NativeCallbackInfo& info); NativeValue* OnStartAbilityForResult(NativeEngine& engine, NativeCallbackInfo& info); diff --git a/services/abilitymgr/include/ability_record.h b/services/abilitymgr/include/ability_record.h index a7999f979b..0e8eea5e38 100644 --- a/services/abilitymgr/include/ability_record.h +++ b/services/abilitymgr/include/ability_record.h @@ -198,6 +198,7 @@ struct AbilityRequest { int requestCode = -1; bool restart = false; int32_t restartCount = -1; + bool startRecent = false; // call ability int callerUid = -1; diff --git a/services/abilitymgr/include/mission.h b/services/abilitymgr/include/mission.h index eb75eca573..46050f1ca8 100644 --- a/services/abilitymgr/include/mission.h +++ b/services/abilitymgr/include/mission.h @@ -55,6 +55,13 @@ public: */ bool IsSpecifiedAbility() const; + /** + * check whether ability contains by this mission is standard. + * + * @return is ability contains by this mission is standard. + */ + bool IsStandardAbility() const; + /** * get owner mission list. * @@ -188,6 +195,16 @@ public: return needNotifyUpdateLabel_; } + inline void UpdateMissionTime(const std::string &missionTime) + { + missionTime_ = missionTime; + } + + inline std::string GetMissionTime() const + { + return missionTime_; + } + private: int32_t missionId_; int32_t startMethod_; @@ -200,6 +217,7 @@ private: bool isANRState_ = false; bool needNotify_ = true; bool needNotifyUpdateLabel_ = false; + std::string missionTime_ = "0"; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/include/mission_info_mgr.h b/services/abilitymgr/include/mission_info_mgr.h index 1d5ed841fd..4d730d3dc1 100644 --- a/services/abilitymgr/include/mission_info_mgr.h +++ b/services/abilitymgr/include/mission_info_mgr.h @@ -97,10 +97,12 @@ public: * * @param missionName name of mission. * @param flag name of specified mission flag. + * @param isFindRecentStandard find recent standard mission. * @param info found mission info. * @return true if success. */ - bool FindReusedMissionInfo(const std::string &missionName, const std::string &flag, InnerMissionInfo &info); + bool FindReusedMissionInfo(const std::string &missionName, const std::string &flag, + bool isFindRecentStandard, InnerMissionInfo &info); /** * @brief Delete all the mission info. diff --git a/services/abilitymgr/include/mission_list.h b/services/abilitymgr/include/mission_list.h index d7d8e1a704..70f3c9430c 100644 --- a/services/abilitymgr/include/mission_list.h +++ b/services/abilitymgr/include/mission_list.h @@ -70,6 +70,14 @@ public: */ std::shared_ptr GetSpecifiedMission(const std::string& missionName, const std::string& flag) const; + /** + * Get recent standard mission by name. + * + * @param missionName target mission name. + * @return founded mission. + */ + std::shared_ptr GetRecentStandardMission(const std::string& missionName) const; + /** * Get top mission of this mission list. * diff --git a/services/abilitymgr/include/mission_list_manager.h b/services/abilitymgr/include/mission_list_manager.h index 4cf743558d..86d1fa8bff 100644 --- a/services/abilitymgr/include/mission_list_manager.h +++ b/services/abilitymgr/include/mission_list_manager.h @@ -392,11 +392,12 @@ private: const std::shared_ptr &callerAbility, const AbilityRequest &abilityRequest); std::shared_ptr GetReusedMission(const AbilityRequest &abilityRequest); std::shared_ptr GetReusedSpecifiedMission(const AbilityRequest &abilityRequest); + std::shared_ptr GetReusedStandardMission(const AbilityRequest &abilityRequest); void GetTargetMissionAndAbility(const AbilityRequest &abilityRequest, std::shared_ptr &targetMission, std::shared_ptr &targetRecord); bool HandleReusedMissionAndAbility(const AbilityRequest &abilityRequest, std::shared_ptr &targetMission, std::shared_ptr &targetRecord); - std::string GetMissionName(const AbilityRequest &abilityRequest, bool isStandard) const; + std::string GetMissionName(const AbilityRequest &abilityRequest) const; bool CreateOrReusedMissionInfo(const AbilityRequest &abilityRequest, InnerMissionInfo &info) const; void MoveMissionToTargetList(bool isCallFromLauncher, const std::shared_ptr &targetMissionList, diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 3a50c7eb71..b49eb96ffb 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3269,6 +3269,11 @@ int AbilityManagerService::GenerateAbilityRequest( HILOG_INFO("GenerateAbilityRequest, moduleName: %{public}s.", request.abilityInfo.moduleName.c_str()); request.want.SetModuleName(request.abilityInfo.moduleName); + if (want.GetBoolParam(Want::PARAM_RESV_START_RECENT, false) && + AAFwk::PermissionVerification::GetInstance()->VerifyMissionPermission()) { + request.startRecent = true; + } + return ERR_OK; } diff --git a/services/abilitymgr/src/mission.cpp b/services/abilitymgr/src/mission.cpp index 7e889244ca..cc6bf611f3 100644 --- a/services/abilitymgr/src/mission.cpp +++ b/services/abilitymgr/src/mission.cpp @@ -68,6 +68,15 @@ bool Mission::IsSpecifiedAbility() const return false; } +bool Mission::IsStandardAbility() const +{ + if (abilityRecord_) { + return abilityRecord_->GetAbilityInfo().launchMode == AppExecFwk::LaunchMode::STANDARD; + } + + return false; +} + void Mission::SetSpecifiedFlag(const std::string &flag) { specifiedFlag_ = flag; diff --git a/services/abilitymgr/src/mission_info_mgr.cpp b/services/abilitymgr/src/mission_info_mgr.cpp index a84c2bad5d..16762bfc59 100644 --- a/services/abilitymgr/src/mission_info_mgr.cpp +++ b/services/abilitymgr/src/mission_info_mgr.cpp @@ -289,25 +289,32 @@ int MissionInfoMgr::GetInnerMissionInfoById(int32_t missionId, InnerMissionInfo } bool MissionInfoMgr::FindReusedMissionInfo(const std::string &missionName, - const std::string &flag, InnerMissionInfo &info) + const std::string &flag, bool isFindRecentStandard, InnerMissionInfo &info) { if (missionName.empty()) { return false; } + + std::lock_guard lock(mutex_); auto it = std::find_if(missionInfoList_.begin(), missionInfoList_.end(), - [&missionName, &flag](const InnerMissionInfo item) { - if (item.launchMode == static_cast(AppExecFwk::LaunchMode::STANDARD)) { + [&missionName, &flag, &isFindRecentStandard](const InnerMissionInfo item) { + if (missionName != item.missionName) { return false; } + // already sorted, return head of list + if (isFindRecentStandard && item.launchMode == static_cast(AppExecFwk::LaunchMode::STANDARD)) { + return true; + } + if (item.launchMode == static_cast(AppExecFwk::LaunchMode::SINGLETON)) { - return missionName == item.missionName; + return true; } if (item.launchMode == static_cast(AppExecFwk::LaunchMode::SPECIFIED)) { - return missionName == item.missionName && flag == item.specifiedFlag; + return flag == item.specifiedFlag; } return false; } diff --git a/services/abilitymgr/src/mission_list.cpp b/services/abilitymgr/src/mission_list.cpp index 781c4f70e0..0ab9c4d074 100644 --- a/services/abilitymgr/src/mission_list.cpp +++ b/services/abilitymgr/src/mission_list.cpp @@ -94,6 +94,25 @@ std::shared_ptr MissionList::GetSpecifiedMission( return nullptr; } +std::shared_ptr MissionList::GetRecentStandardMission(const std::string &missionName) const +{ + if (missionName.empty()) { + return nullptr; + } + + std::string missionTime = "0"; + std::shared_ptr result = nullptr; + for (auto& mission : missions_) { + if (mission && mission->IsStandardAbility() && mission->GetMissionName() == missionName && + mission->GetMissionTime() >= missionTime) { + result = mission; + missionTime = mission->GetMissionTime(); + } + } + + return result; +} + std::shared_ptr MissionList::GetAbilityRecordByToken(const sptr &token) const { for (auto mission : missions_) { diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index 803c831d35..75db0e2eac 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -384,30 +384,46 @@ bool MissionListManager::HandleReusedMissionAndAbility(const AbilityRequest &abi HILOG_DEBUG("mission exists. No update required"); return true; } - HILOG_DEBUG("mission exists. need to be updated"); - return false; + + auto missionId = targetMission->GetMissionId(); + HILOG_INFO("mission exists. need to be updated, missionId:%{public}d", missionId); + InnerMissionInfo info; + if (DelayedSingleton::GetInstance()->GetInnerMissionInfoById( + targetMission->GetMissionId(), info) == 0) { + info.missionInfo.time = GetCurrentTime(); + info.missionInfo.runningState = 0; + info.startMethod = CallType2StartMethod(abilityRequest.callType); + DelayedSingleton::GetInstance()->UpdateMissionInfo(info); + targetMission->UpdateMissionId(missionId, info.startMethod); + targetMission->UpdateMissionTime(info.missionInfo.time); + } + + return true; } -std::string MissionListManager::GetMissionName(const AbilityRequest &abilityRequest, bool isStandard) const +std::string MissionListManager::GetMissionName(const AbilityRequest &abilityRequest) const { int32_t appIndex = abilityRequest.want.GetIntParam(DLP_INDEX, 0); - std::string missionName = isStandard ? abilityRequest.abilityInfo.bundleName : - AbilityUtil::ConvertBundleNameSingleton( - abilityRequest.abilityInfo.bundleName, abilityRequest.abilityInfo.name, - abilityRequest.abilityInfo.moduleName, appIndex); - - return missionName; + return AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName, + abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName, appIndex); } bool MissionListManager::CreateOrReusedMissionInfo(const AbilityRequest &abilityRequest, InnerMissionInfo &info) const { // get mission name. bool reUsedMissionInfo = false; - bool isStandard = abilityRequest.abilityInfo.launchMode == AppExecFwk::LaunchMode::STANDARD; - std::string missionName = GetMissionName(abilityRequest, isStandard); + bool needFind = false; + bool isFindRecentStandard = abilityRequest.abilityInfo.launchMode == AppExecFwk::LaunchMode::STANDARD && + abilityRequest.startRecent; + if (abilityRequest.abilityInfo.launchMode != AppExecFwk::LaunchMode::STANDARD || isFindRecentStandard) { + needFind = true; + } + + std::string missionName = GetMissionName(abilityRequest); auto mgr = DelayedSingleton::GetInstance(); - if (!isStandard && !abilityRequest.abilityInfo.applicationInfo.isLauncherApp && mgr && - mgr->FindReusedMissionInfo(missionName, abilityRequest.specifiedFlag, info) && info.missionInfo.id > 0) { + if (needFind && !abilityRequest.abilityInfo.applicationInfo.isLauncherApp && mgr && + mgr->FindReusedMissionInfo(missionName, abilityRequest.specifiedFlag, isFindRecentStandard, info) + && info.missionInfo.id > 0) { reUsedMissionInfo = true; } HILOG_INFO("try find reused mission info. result:%{public}d", reUsedMissionInfo); @@ -439,27 +455,21 @@ void MissionListManager::GetTargetMissionAndAbility(const AbilityRequest &abilit targetMission = std::make_shared(info.missionInfo.id, targetRecord, info.missionName, info.startMethod); targetMission->SetLockedState(info.missionInfo.lockedState); + targetMission->UpdateMissionTime(info.missionInfo.time); targetRecord->SetMission(targetMission); targetRecord->SetOwnerMissionUserId(userId_); - } else { - HILOG_DEBUG("Update old mission data."); - auto state = targetMission->UpdateMissionId(info.missionInfo.id, info.startMethod); - if (!state) { - HILOG_INFO("targetMission UpdateMissionId(%{public}d, %{public}d) failed", info.missionInfo.id, - info.startMethod); + + // handle specified + if (abilityRequest.abilityInfo.launchMode == AppExecFwk::LaunchMode::SPECIFIED) { + targetMission->SetSpecifiedFlag(abilityRequest.specifiedFlag); + targetRecord->SetSpecifiedFlag(abilityRequest.specifiedFlag); } - HILOG_DEBUG("Update MissionId (%{public}d, %{public}d) end", info.missionInfo.id, info.startMethod); } if (!findReusedMissionInfo && targetRecord) { info.missionInfo.label = targetRecord->GetLabel(); } - if (abilityRequest.abilityInfo.launchMode == AppExecFwk::LaunchMode::SPECIFIED) { - targetMission->SetSpecifiedFlag(abilityRequest.specifiedFlag); - targetRecord->SetSpecifiedFlag(abilityRequest.specifiedFlag); - } - if (abilityRequest.abilityInfo.applicationInfo.isLauncherApp || abilityRequest.abilityInfo.excludeFromMissions) { return; } @@ -572,14 +582,16 @@ std::shared_ptr MissionListManager::GetReusedMission(const AbilityReque return GetReusedSpecifiedMission(abilityRequest); } + if (abilityRequest.abilityInfo.launchMode == AppExecFwk::LaunchMode::STANDARD) { + return GetReusedStandardMission(abilityRequest); + } + if (abilityRequest.abilityInfo.launchMode != AppExecFwk::LaunchMode::SINGLETON) { return nullptr; } std::shared_ptr reUsedMission = nullptr; - int32_t appIndex = abilityRequest.want.GetIntParam(DLP_INDEX, 0); - std::string missionName = AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName, - abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName, appIndex); + std::string missionName = GetMissionName(abilityRequest); // find launcher first. if (abilityRequest.abilityInfo.applicationInfo.isLauncherApp) { @@ -611,9 +623,7 @@ std::shared_ptr MissionListManager::GetReusedSpecifiedMission(const Abi // specified mission name format is same as singleton. std::shared_ptr reUsedMission = nullptr; - int32_t appIndex = abilityRequest.want.GetIntParam(DLP_INDEX, 0); - std::string missionName = AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName, - abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName, appIndex); + std::string missionName = GetMissionName(abilityRequest); std::string flag = abilityRequest.specifiedFlag; // find launcher first. @@ -638,6 +648,49 @@ std::shared_ptr MissionListManager::GetReusedSpecifiedMission(const Abi return nullptr; } +std::shared_ptr MissionListManager::GetReusedStandardMission(const AbilityRequest &abilityRequest) +{ + if (abilityRequest.abilityInfo.launchMode != AppExecFwk::LaunchMode::STANDARD) { + return nullptr; + } + + if (!abilityRequest.startRecent) { + return nullptr; + } + + // all mission name format is same. + std::string missionName = GetMissionName(abilityRequest); + std::shared_ptr reUsedMission = nullptr; + + // find launcher first, if find it in launcher list, no need to find in other list. + if (abilityRequest.abilityInfo.applicationInfo.isLauncherApp) { + if ((reUsedMission = launcherList_->GetRecentStandardMission(missionName)) != nullptr) { + return reUsedMission; + } + } + + // try find it from current and default standard. + std::string missionTime = "0"; + for (const auto &missionList : currentMissionLists_) { + if (!missionList) { + continue; + } + + auto mission = missionList->GetRecentStandardMission(missionName); + if (mission && mission->GetMissionTime() >= missionTime) { + missionTime = mission->GetMissionTime(); + reUsedMission = mission; + } + } + + auto mission = defaultStandardList_->GetRecentStandardMission(missionName); + if (mission && mission->GetMissionTime() >= missionTime) { + reUsedMission = mission; + } + + return reUsedMission; +} + void MissionListManager::MoveMissionToTargetList(bool isCallFromLauncher, const std::shared_ptr &targetMissionList, const std::shared_ptr &mission) @@ -1031,10 +1084,12 @@ void MissionListManager::CompleteForegroundSuccess(const std::shared_ptrGetMission(); if (mission) { + auto currentTime = GetCurrentTime(); + mission->UpdateMissionTime(currentTime); InnerMissionInfo info; if (DelayedSingleton::GetInstance()->GetInnerMissionInfoById( mission->GetMissionId(), info) == 0) { - info.missionInfo.time = GetCurrentTime(); + info.missionInfo.time = currentTime; info.missionInfo.runningState = 0; DelayedSingleton::GetInstance()->UpdateMissionInfo(info); } diff --git a/test/fuzztest/missioninfomgrb_fuzzer/missioninfomgrb_fuzzer.cpp b/test/fuzztest/missioninfomgrb_fuzzer/missioninfomgrb_fuzzer.cpp index 38af64a3ad..e9eedd055f 100755 --- a/test/fuzztest/missioninfomgrb_fuzzer/missioninfomgrb_fuzzer.cpp +++ b/test/fuzztest/missioninfomgrb_fuzzer/missioninfomgrb_fuzzer.cpp @@ -31,6 +31,7 @@ namespace OHOS { namespace { constexpr size_t FOO_MAX_LEN = 1024; constexpr size_t U32_AT_SIZE = 4; +constexpr uint8_t ENABLE = 2; } uint32_t GetU32Data(const char* ptr) @@ -43,6 +44,7 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) { int32_t int32Param = static_cast(GetU32Data(data)); std::string stringParam(data, size); + bool boolParam = *data % ENABLE; InnerMissionInfo innerMissionInfo; // fuzz for MissionInfoMgr @@ -52,7 +54,7 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) MissionInfo missionInfo; missionInfoMgr->GetMissionInfoById(int32Param, missionInfo); missionInfoMgr->GetInnerMissionInfoById(int32Param, innerMissionInfo); - missionInfoMgr->FindReusedMissionInfo(stringParam, stringParam, innerMissionInfo); + missionInfoMgr->FindReusedMissionInfo(stringParam, stringParam, boolParam, innerMissionInfo); return true; } @@ -90,4 +92,3 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) ch = nullptr; return 0; } - diff --git a/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp b/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp index 299d3b2447..a43ec2cfc6 100755 --- a/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp +++ b/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp @@ -105,7 +105,7 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) missionListManager->StartAbilityLocked(abilityRecord, abilityRecord, abilityRequest); std::shared_ptr mission = std::make_shared(int32Param, abilityRecord); missionListManager->HandleReusedMissionAndAbility(abilityRequest, mission, abilityRecord); - missionListManager->GetMissionName(abilityRequest, boolParam); + missionListManager->GetMissionName(abilityRequest); InnerMissionInfo innerMissionInfo; missionListManager->CreateOrReusedMissionInfo(abilityRequest, innerMissionInfo); missionListManager->GetTargetMissionAndAbility(abilityRequest, mission, abilityRecord); @@ -165,4 +165,3 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) ch = nullptr; return 0; } - diff --git a/test/unittest/mission_info_mgr_test/mission_info_mgr_test.cpp b/test/unittest/mission_info_mgr_test/mission_info_mgr_test.cpp index 1e03fd589a..e76806d7a6 100755 --- a/test/unittest/mission_info_mgr_test/mission_info_mgr_test.cpp +++ b/test/unittest/mission_info_mgr_test/mission_info_mgr_test.cpp @@ -388,44 +388,50 @@ HWTEST_F(MissionInfoMgrTest, FindReusedMissionInfo_001, TestSize.Level1) int userId = 0; missionInfoMgr->Init(userId); InnerMissionInfo missionInfo; - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("", "", missionInfo)); - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("", "", false, missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfo.missionInfo.id = 1; missionInfo.launchMode = static_cast(AppExecFwk::LaunchMode::STANDARD); missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfoMgr->missionInfoList_.clear(); missionInfo.launchMode = static_cast(AppExecFwk::LaunchMode::SINGLETON); missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfoMgr->missionInfoList_.clear(); missionInfo.missionName = "test"; missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_TRUE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_TRUE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfoMgr->missionInfoList_.clear(); missionInfo.launchMode = static_cast(AppExecFwk::LaunchMode::SPECIFIED); missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_TRUE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_TRUE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfoMgr->missionInfoList_.clear(); missionInfo.missionName = "test1"; missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfoMgr->missionInfoList_.clear(); missionInfo.missionName = "test"; missionInfo.specifiedFlag = "flag"; missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); missionInfoMgr->missionInfoList_.clear(); missionInfo.specifiedFlag = ""; missionInfo.launchMode = 1000; missionInfoMgr->missionInfoList_.push_back(missionInfo); - EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", missionInfo)); + EXPECT_FALSE(missionInfoMgr->FindReusedMissionInfo("test", "", false, missionInfo)); + + missionInfoMgr->missionInfoList_.clear(); + missionInfo.missionName = "test"; + missionInfo.launchMode = static_cast(AppExecFwk::LaunchMode::STANDARD); + missionInfoMgr->missionInfoList_.push_back(missionInfo); + EXPECT_TRUE(missionInfoMgr->FindReusedMissionInfo("test", "", true, missionInfo)); } /*