Signed-off-by: caochunlei <caochunlei1@huawei.com>
This commit is contained in:
caochunlei
2022-12-15 17:30:01 +08:00
parent e7e7ec4470
commit 8d4eaffa93
16 changed files with 214 additions and 55 deletions
@@ -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<JsAbilityContext>(engine, info);
return (me != nullptr) ? me->OnStartAbility(*engine, *info, true) : nullptr;
}
NativeValue* JsAbilityContext::StartAbilityWithAccount(NativeEngine* engine, NativeCallbackInfo* info)
{
JsAbilityContext* me = CheckParamsAndGetThis<JsAbilityContext>(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<napi_value>(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_ptr<Abilit
JsAbilityContext::RequestPermissionsFromUser);
BindNativeFunction(engine, *object, "restoreWindowStage", moduleName, JsAbilityContext::RestoreWindowStage);
BindNativeFunction(engine, *object, "isTerminating", moduleName, JsAbilityContext::IsTerminating);
BindNativeFunction(engine, *object, "startRecentAbility", moduleName,
JsAbilityContext::StartRecentAbility);
#ifdef SUPPORT_GRAPHICS
BindNativeFunction(engine, *object, "setMissionLabel", moduleName, JsAbilityContext::SetMissionLabel);
@@ -72,6 +72,12 @@ public:
return (me != nullptr) ? me->OnStartAbility(*engine, *info) : nullptr;
}
static NativeValue* StartRecentAbility(NativeEngine* engine, NativeCallbackInfo* info)
{
JsServiceExtensionContext* me = CheckParamsAndGetThis<JsServiceExtensionContext>(engine, info);
return (me != nullptr) ? me->OnStartAbility(*engine, *info, true) : nullptr;
}
static NativeValue* StartAbilityByCall(NativeEngine* engine, NativeCallbackInfo* info)
{
JsServiceExtensionContext* me = CheckParamsAndGetThis<JsServiceExtensionContext>(engine, info);
@@ -134,7 +140,7 @@ public:
private:
std::weak_ptr<ServiceExtensionContext> 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;
}
@@ -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);
@@ -198,6 +198,7 @@ struct AbilityRequest {
int requestCode = -1;
bool restart = false;
int32_t restartCount = -1;
bool startRecent = false;
// call ability
int callerUid = -1;
+18
View File
@@ -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
@@ -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.
@@ -70,6 +70,14 @@ public:
*/
std::shared_ptr<Mission> 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<Mission> GetRecentStandardMission(const std::string& missionName) const;
/**
* Get top mission of this mission list.
*
@@ -392,11 +392,12 @@ private:
const std::shared_ptr<AbilityRecord> &callerAbility, const AbilityRequest &abilityRequest);
std::shared_ptr<Mission> GetReusedMission(const AbilityRequest &abilityRequest);
std::shared_ptr<Mission> GetReusedSpecifiedMission(const AbilityRequest &abilityRequest);
std::shared_ptr<Mission> GetReusedStandardMission(const AbilityRequest &abilityRequest);
void GetTargetMissionAndAbility(const AbilityRequest &abilityRequest, std::shared_ptr<Mission> &targetMission,
std::shared_ptr<AbilityRecord> &targetRecord);
bool HandleReusedMissionAndAbility(const AbilityRequest &abilityRequest, std::shared_ptr<Mission> &targetMission,
std::shared_ptr<AbilityRecord> &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<MissionList> &targetMissionList,
@@ -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;
}
+9
View File
@@ -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;
+12 -5
View File
@@ -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<std::recursive_mutex> lock(mutex_);
auto it = std::find_if(missionInfoList_.begin(), missionInfoList_.end(),
[&missionName, &flag](const InnerMissionInfo item) {
if (item.launchMode == static_cast<int32_t>(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<int32_t>(AppExecFwk::LaunchMode::STANDARD)) {
return true;
}
if (item.launchMode == static_cast<int32_t>(AppExecFwk::LaunchMode::SINGLETON)) {
return missionName == item.missionName;
return true;
}
if (item.launchMode == static_cast<int32_t>(AppExecFwk::LaunchMode::SPECIFIED)) {
return missionName == item.missionName && flag == item.specifiedFlag;
return flag == item.specifiedFlag;
}
return false;
}
+19
View File
@@ -94,6 +94,25 @@ std::shared_ptr<Mission> MissionList::GetSpecifiedMission(
return nullptr;
}
std::shared_ptr<Mission> MissionList::GetRecentStandardMission(const std::string &missionName) const
{
if (missionName.empty()) {
return nullptr;
}
std::string missionTime = "0";
std::shared_ptr<Mission> 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<AbilityRecord> MissionList::GetAbilityRecordByToken(const sptr<IRemoteObject> &token) const
{
for (auto mission : missions_) {
@@ -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<MissionInfoMgr>::GetInstance()->GetInnerMissionInfoById(
targetMission->GetMissionId(), info) == 0) {
info.missionInfo.time = GetCurrentTime();
info.missionInfo.runningState = 0;
info.startMethod = CallType2StartMethod(abilityRequest.callType);
DelayedSingleton<MissionInfoMgr>::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<MissionInfoMgr>::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<Mission>(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<Mission> 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<Mission> 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<Mission> MissionListManager::GetReusedSpecifiedMission(const Abi
// specified mission name format is same as singleton.
std::shared_ptr<Mission> 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<Mission> MissionListManager::GetReusedSpecifiedMission(const Abi
return nullptr;
}
std::shared_ptr<Mission> 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<Mission> 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<MissionList> &targetMissionList,
const std::shared_ptr<Mission> &mission)
@@ -1031,10 +1084,12 @@ void MissionListManager::CompleteForegroundSuccess(const std::shared_ptr<Ability
auto mission = abilityRecord->GetMission();
if (mission) {
auto currentTime = GetCurrentTime();
mission->UpdateMissionTime(currentTime);
InnerMissionInfo info;
if (DelayedSingleton<MissionInfoMgr>::GetInstance()->GetInnerMissionInfoById(
mission->GetMissionId(), info) == 0) {
info.missionInfo.time = GetCurrentTime();
info.missionInfo.time = currentTime;
info.missionInfo.runningState = 0;
DelayedSingleton<MissionInfoMgr>::GetInstance()->UpdateMissionInfo(info);
}
@@ -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<int32_t>(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;
}
@@ -105,7 +105,7 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size)
missionListManager->StartAbilityLocked(abilityRecord, abilityRecord, abilityRequest);
std::shared_ptr<Mission> mission = std::make_shared<Mission>(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;
}
@@ -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<int32_t>(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<int32_t>(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<int32_t>(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<int32_t>(AppExecFwk::LaunchMode::STANDARD);
missionInfoMgr->missionInfoList_.push_back(missionInfo);
EXPECT_TRUE(missionInfoMgr->FindReusedMissionInfo("test", "", true, missionInfo));
}
/*