mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 22:21:36 -04:00
适配uiextensionAbility
Signed-off-by: zhengzhuolan <zhengzhuolan@huawei-partners.com>
This commit is contained in:
@@ -88,7 +88,7 @@ private:
|
||||
std::vector<AppExecFwk::RunningProcessInfo> GetRunningProcessInfos(int32_t userId, const std::string &bundleName);
|
||||
|
||||
int32_t RecordAppWithReasonInner(const AppReasonInfo &appInfo, const ExitReasonCompability &exitReasonCompability,
|
||||
const AppExecFwk::RunningProcessInfo &processInfo, const std::vector<std::string> &abilityList);
|
||||
const AppExecFwk::RunningProcessInfo &processInfo);
|
||||
|
||||
std::shared_ptr<SubManagersHelper> subManagersHelper_;
|
||||
};
|
||||
|
||||
@@ -3522,6 +3522,12 @@ int32_t AbilityManagerService::RecordAppWithReason(
|
||||
const int32_t pid, const int32_t uid, const ExitReasonCompability &exitReason)
|
||||
{
|
||||
HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
|
||||
if (!AAFwk::PermissionVerification::GetInstance()->IsSACall() &&
|
||||
!AAFwk::PermissionVerification::GetInstance()->IsShellCall() &&
|
||||
IPCSkeleton::GetCallingUid() != uid) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "permission verify failed");
|
||||
return ERR_PERMISSION_DENIED;
|
||||
}
|
||||
CHECK_POINTER_AND_RETURN(appExitReasonHelper_, ERR_NULL_APP_EXIT_REASON_HELPER);
|
||||
if (!IsExitReasonValid(exitReason)) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "exit reason is invalid");
|
||||
@@ -14511,7 +14517,7 @@ void AbilityManagerService::RecordRecoveryExitReason(bool isAppRecovery, int32_t
|
||||
std::string killReason = HiviewDFX::ProcessKillReason::GetKillReason(killId);
|
||||
AAFwk::ExitReasonCompability exitReason = {REASON_JS_ERROR, "Kill Reason:" + killReason};
|
||||
exitReason.killId = killId;
|
||||
auto result = RecordAppWithReason(callerPid, callerUid, exitReason);
|
||||
auto result = IN_PROCESS_CALL(RecordAppWithReason(callerPid, callerUid, exitReason));
|
||||
TAG_LOGI(AAFwkTag::ABILITYMGR, "Record result=%{public}d, send event [FRAMEWORK,PROCESS_KILL,APP_RECOVERY], "
|
||||
"callerPid=%{public}d, callerUid=%{public}d, killReason=%{public}s",
|
||||
result, callerPid, callerUid, killReason.c_str());
|
||||
|
||||
@@ -57,23 +57,12 @@ int32_t AppExitReasonHelper::RecordAppWithReason(int32_t pid, int32_t uid, const
|
||||
TAG_LOGD(AAFwkTag::ABILITYMGR, "RecordAppWithReason inPid: %{public}d, processPid: %{public}d",
|
||||
pid, processInfo.pid_);
|
||||
|
||||
std::vector<std::string> abilityList;
|
||||
int32_t getActiveAbilityListRet = GetActiveAbilityListWithPid(uid, abilityList, pid);
|
||||
if (getActiveAbilityListRet != ERR_OK) {
|
||||
return getActiveAbilityListRet;
|
||||
}
|
||||
if (abilityList.empty()) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "abilityLists empty");
|
||||
return ERR_GET_ACTIVE_ABILITY_LIST_EMPTY;
|
||||
}
|
||||
|
||||
AppReasonInfo appInfo(userId, bundleName, appIndex);
|
||||
return RecordAppWithReasonInner(appInfo, exitReason, processInfo, abilityList);
|
||||
return RecordAppWithReasonInner(appInfo, exitReason, processInfo);
|
||||
}
|
||||
|
||||
int32_t AppExitReasonHelper::RecordAppWithReasonInner(const AppReasonInfo &appInfo,
|
||||
const ExitReasonCompability &exitReasonCompability, const AppExecFwk::RunningProcessInfo &processInfo,
|
||||
const std::vector<std::string> &abilityList)
|
||||
const ExitReasonCompability &exitReasonCompability, const AppExecFwk::RunningProcessInfo &processInfo)
|
||||
{
|
||||
if (processInfo.pid_ <= 0 && processInfo.uid_ <= 0) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "processInfo is invalid");
|
||||
@@ -95,7 +84,15 @@ int32_t AppExitReasonHelper::RecordAppWithReasonInner(const AppReasonInfo &appIn
|
||||
if (ret != ERR_OK) {
|
||||
TAG_LOGW(AAFwkTag::ABILITYMGR, "notify failed: %{public}d", ret);
|
||||
}
|
||||
|
||||
std::vector<std::string> abilityList;
|
||||
int32_t getActiveAbilityListRet = GetActiveAbilityListWithPid(processInfo.uid_, abilityList, processInfo.pid_);
|
||||
if (getActiveAbilityListRet != ERR_OK) {
|
||||
return getActiveAbilityListRet;
|
||||
}
|
||||
if (abilityList.empty()) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "abilityLists empty");
|
||||
return ERR_GET_ACTIVE_ABILITY_LIST_EMPTY;
|
||||
}
|
||||
uint32_t accessTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenID(appInfo.userId, appInfo.bundleName,
|
||||
appInfo.appIndex);
|
||||
TAG_LOGD(AAFwkTag::ABILITYMGR,
|
||||
@@ -118,7 +115,6 @@ void AppExitReasonHelper::RecordAppsWithReasonByUserId(int32_t userId, const Exi
|
||||
int32_t pid;
|
||||
int32_t innerResult = ERR_OK;
|
||||
std::string bundleName;
|
||||
std::vector<std::string> abilityList;
|
||||
for (const auto &processInfo : processInfoList) {
|
||||
if (processInfo.pid_ <= 0 && processInfo.uid_ <= 0) {
|
||||
continue;
|
||||
@@ -133,19 +129,8 @@ void AppExitReasonHelper::RecordAppsWithReasonByUserId(int32_t userId, const Exi
|
||||
continue;
|
||||
}
|
||||
|
||||
int32_t getActiveAbilityListRet = GetActiveAbilityListWithPid(uid, abilityList, pid);
|
||||
if (getActiveAbilityListRet != ERR_OK) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "GetActiveAbilityListWithPid failed for uid %{public}d: %{public}d",
|
||||
uid, getActiveAbilityListRet);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (abilityList.empty()) {
|
||||
TAG_LOGW(AAFwkTag::ABILITYMGR, "abilityLists empty for uid: %{public}d", uid);
|
||||
continue;
|
||||
}
|
||||
AppReasonInfo appInfo(userId, bundleName, appIndex);
|
||||
innerResult = RecordAppWithReasonInner(appInfo, exitReason, processInfo, abilityList);
|
||||
innerResult = RecordAppWithReasonInner(appInfo, exitReason, processInfo);
|
||||
if (innerResult != ERR_OK) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "RecordAppWithReasonInner failed for uid:%{public}d, userId:%{public}d,"
|
||||
" ret: %{public}d",
|
||||
@@ -164,8 +149,6 @@ int32_t AppExitReasonHelper::RecordAppWithReasonByAccessTokenId(int32_t userId,
|
||||
int32_t uid;
|
||||
int32_t pid;
|
||||
int32_t innerResult = ERR_OK;
|
||||
std::vector<std::string> abilityList;
|
||||
|
||||
for (const auto &processInfo : processInfoList) {
|
||||
if (processInfo.pid_ <= 0 && processInfo.uid_ <= 0) {
|
||||
continue;
|
||||
@@ -189,20 +172,8 @@ int32_t AppExitReasonHelper::RecordAppWithReasonByAccessTokenId(int32_t userId,
|
||||
continue;
|
||||
}
|
||||
|
||||
int32_t getActiveAbilityListRet = GetActiveAbilityListWithPid(uid, abilityList, pid);
|
||||
if (getActiveAbilityListRet != ERR_OK) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "GetActiveAbilityListWithPid failed for uid %{public}d: %{public}d",
|
||||
uid, getActiveAbilityListRet);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (abilityList.empty()) {
|
||||
TAG_LOGW(AAFwkTag::ABILITYMGR, "abilityLists empty for uid: %{public}d", uid);
|
||||
continue;
|
||||
}
|
||||
|
||||
AppReasonInfo appInfo(userId, bundleName, appIndex);
|
||||
innerResult = RecordAppWithReasonInner(appInfo, exitReasonCompability, processInfo, abilityList);
|
||||
innerResult = RecordAppWithReasonInner(appInfo, exitReasonCompability, processInfo);
|
||||
if (innerResult != ERR_OK) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "RecordAppWithReasonInner failed for uid:%{public}d, userId:%{public}d, "
|
||||
"ret: %{public}d", uid, userId, innerResult);
|
||||
@@ -669,11 +640,6 @@ int32_t AppExitReasonHelper::AddProcessExitReason(const RecordExitReasonParams &
|
||||
} else {
|
||||
GetActiveAbilityList(params.uid, abilityLists, params.pid);
|
||||
}
|
||||
|
||||
if (abilityLists.empty()) {
|
||||
TAG_LOGE(AAFwkTag::ABILITYMGR, "active abilityLists empty");
|
||||
return ERR_GET_ACTIVE_ABILITY_LIST_EMPTY;
|
||||
}
|
||||
ExitReasonCompability exitReason = params.exitReason;
|
||||
auto ret = DelayedSingleton<AppScheduler>::GetInstance()->NotifyAppMgrRecordExitReasonCompability(
|
||||
params.pid, exitReason.killId, exitReason.killMsg, exitReason.innerMsg);
|
||||
@@ -682,6 +648,10 @@ int32_t AppExitReasonHelper::AddProcessExitReason(const RecordExitReasonParams &
|
||||
}
|
||||
ExitReason tmpReason(exitReason.reason, exitReason.subReason, exitReason.exitMsg);
|
||||
tmpReason.killId = exitReason.killId;
|
||||
if (abilityLists.empty()) {
|
||||
TAG_LOGD(AAFwkTag::ABILITYMGR, "ui abilityLists empty");
|
||||
return RecordProcessExtensionExitReason(params.pid, params.bundleName, tmpReason, params.processInfo, false);
|
||||
}
|
||||
return DelayedSingleton<AbilityRuntime::AppExitReasonDataManager>::GetInstance()->SetAppExitReason(
|
||||
params.bundleName, params.accessTokenId, abilityLists, tmpReason, params.processInfo,
|
||||
params.fromKillWithReason);
|
||||
|
||||
+2
@@ -2716,6 +2716,7 @@ HWTEST_F(AbilityManagerServiceFirstTest, RecordAppWithReason_0100, TestSize.Leve
|
||||
EXPECT_NE(abilityMs, nullptr);
|
||||
int32_t pid = 1234;
|
||||
int32_t uid = 1000;
|
||||
MyFlag::flag_ = 1;
|
||||
ExitReasonCompability exitReason;
|
||||
abilityMs->appExitReasonHelper_ = std::make_shared<AppExitReasonHelper>(nullptr);
|
||||
auto res = abilityMs->RecordAppWithReason(pid, uid, exitReason);
|
||||
@@ -2723,6 +2724,7 @@ HWTEST_F(AbilityManagerServiceFirstTest, RecordAppWithReason_0100, TestSize.Leve
|
||||
exitReason.killId = 1;
|
||||
res = abilityMs->RecordAppWithReason(pid, uid, exitReason);
|
||||
EXPECT_EQ(res, ERR_BUNDLE_MANAGER_PERMISSION_DENIED);
|
||||
MyFlag::flag_ = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+3
-3
@@ -371,12 +371,12 @@ HWTEST_F(AppExitReasonHelperTest, RecordAppWithReason_0100, TestSize.Level1)
|
||||
auto currentUIAbilityManager = std::make_shared<UIAbilityLifecycleManager>(0);
|
||||
EXPECT_NE(currentUIAbilityManager, nullptr);
|
||||
result = appExitReasonHelper->RecordAppWithReason(pid, uid, exitReason);
|
||||
EXPECT_EQ(result, ERR_NULL_OBJECT);
|
||||
EXPECT_EQ(result, ERR_INVALID_VALUE);
|
||||
|
||||
int32_t userId = AbilityRuntime::UserController::GetInstance().GetForegroundUserId(0);
|
||||
appExitReasonHelper->subManagersHelper_->uiAbilityManagers_[userId] = currentUIAbilityManager;
|
||||
result = appExitReasonHelper->RecordAppWithReason(pid, uid, exitReason);
|
||||
EXPECT_EQ(result, ERR_GET_ACTIVE_ABILITY_LIST_EMPTY);
|
||||
EXPECT_EQ(result, ERR_INVALID_VALUE);
|
||||
|
||||
Want want;
|
||||
AppExecFwk::AbilityInfo abilityInfo;
|
||||
@@ -415,7 +415,7 @@ HWTEST_F(AppExitReasonHelperTest, AddAppExitReason_0100, TestSize.Level1)
|
||||
EXPECT_EQ(result, MOCK_ERROR);
|
||||
MyStatus::GetInstance().getOsAccountRet_ = 0;
|
||||
result = appExitReasonHelper->AddAppExitReason(bundleName, pid, uid, appIndex, exitReason);
|
||||
EXPECT_EQ(result, ERR_GET_ACTIVE_ABILITY_LIST_EMPTY);
|
||||
EXPECT_EQ(result, ERR_NULL_OBJECT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user