适配uiextensionAbility

Signed-off-by: zhengzhuolan <zhengzhuolan@huawei-partners.com>
This commit is contained in:
zhengzhuolan
2026-03-23 15:46:38 +08:00
parent f634dff318
commit fd360ef7fa
5 changed files with 30 additions and 52 deletions
@@ -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);
@@ -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;
}
/*
@@ -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);
}
/**