1 /*
2 * Copyright (c) 2021-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "ability_record.h"
17
18 #include <singleton.h>
19
20 #include "ability_manager_service.h"
21 #include "ability_resident_process_rdb.h"
22 #include "ability_scheduler_stub.h"
23 #include "app_exit_reason_data_manager.h"
24 #include "app_utils.h"
25 #include "array_wrapper.h"
26 #include "accesstoken_kit.h"
27 #include "configuration_convertor.h"
28 #include "connection_state_manager.h"
29 #include "common_event_manager.h"
30 #include "error_msg_util.h"
31 #include "freeze_util.h"
32 #include "global_constant.h"
33 #include "hitrace_meter.h"
34 #include "image_source.h"
35 #include "keep_alive_process_manager.h"
36 #include "last_exit_detail_info.h"
37 #include "multi_instance_utils.h"
38 #include "os_account_manager_wrapper.h"
39 #include "ui_service_extension_connection_constants.h"
40 #include "res_sched_util.h"
41 #include "scene_board_judgement.h"
42 #include "startup_util.h"
43 #include "system_ability_token_callback.h"
44 #include "ui_extension_utils.h"
45 #ifdef SUPPORT_UPMS
46 #include "uri_permission_manager_client.h"
47 #endif // SUPPORT_UPMS
48 #include "param.h"
49 #include "permission_constants.h"
50 #include "process_options.h"
51 #include "uri_utils.h"
52 #include "utils/state_utils.h"
53 #ifdef SUPPORT_GRAPHICS
54 #include "image_source.h"
55 #endif
56 #ifdef SUPPORT_SCREEN
57 #include "locale_config.h"
58 #endif
59
60 #include "mock_my_status.h"
61
62
63 namespace OHOS {
64 using AbilityRuntime::FreezeUtil;
65 namespace AAFwk {
66 using namespace OHOS::Security;
67 using namespace OHOS::AAFwk::PermissionConstants;
68 using namespace OHOS::AbilityRuntime::GlobalConstant;
69 const std::string DEBUG_APP = "debugApp";
70 const std::string NATIVE_DEBUG = "nativeDebug";
71 const std::string PERF_CMD = "perfCmd";
72 const std::string ERROR_INFO_ENHANCE = "errorInfoEnhance";
73 const std::string MULTI_THREAD = "multiThread";
74 const std::string DMS_PROCESS_NAME = "distributedsched";
75 const std::string DMS_MISSION_ID = "dmsMissionId";
76 const std::string DMS_SRC_NETWORK_ID = "dmsSrcNetworkId";
77 const std::string ABILITY_OWNER_USERID = "AbilityMS_Owner_UserId";
78 const std::u16string SYSTEM_ABILITY_TOKEN_CALLBACK = u"ohos.aafwk.ISystemAbilityTokenCallback";
79 const std::string SHOW_ON_LOCK_SCREEN = "ShowOnLockScreen";
80 #ifdef WITH_DLP
81 const std::string DLP_BUNDLE_NAME = "com.ohos.dlpmanager";
82 #endif // WITH_DLP
83 const std::string COMPONENT_STARTUP_NEW_RULES = "component.startup.newRules";
84 const std::string KEY_MISSION_ID = "ohos.anco.param.missionId";
85 const std::string NEED_STARTINGWINDOW = "ohos.ability.NeedStartingWindow";
86 const std::string PARAMS_FILE_SAVING_URL_KEY = "pick_path_return";
87 const uint32_t RELEASE_STARTING_BG_TIMEOUT = 15000; // release starting window resource timeout.
88 const std::string SHELL_ASSISTANT_DIEREASON = "crash_die";
89 const std::string PARAM_MISSION_AFFINITY_KEY = "ohos.anco.param.missionAffinity";
90 const std::string DISTRIBUTED_FILES_PATH = "/data/storage/el2/distributedfiles/";
91 const std::string UIEXTENSION_ABILITY_ID = "ability.want.params.uiExtensionAbilityId";
92 const std::string UIEXTENSION_ROOT_HOST_PID = "ability.want.params.uiExtensionRootHostPid";
93 constexpr const char* PARAM_SEND_RESULT_CALLER_BUNDLENAME = "ohos.anco.param.sendResultCallderBundleName";
94 constexpr const char* PARAM_SEND_RESULT_CALLER_TOKENID = "ohos.anco.param.sendResultCallerTokenId";
95 constexpr const char* PARAM_RESV_ANCO_IS_NEED_UPDATE_NAME = "ohos.anco.param.isNeedUpdateName";
96 constexpr const char* DLP_PARAMS_SECURITY_FLAG = "ohos.dlp.params.securityFlag";
97 // Developer mode param
98 constexpr const char* DEVELOPER_MODE_STATE = "const.security.developermode.state";
99 constexpr const char* APP_PROVISION_TYPE_DEBUG = "debug";
100 constexpr const char* DMS_CALLER_BUNDLE_NAME = "ohos.dms.param.sourceCallerBundleName";
101 constexpr const char* DMS_CALLER_ABILITY_NAME = "ohos.dms.param.sourceCallerAbilityName";
102 constexpr const char* DMS_CALLER_NATIVE_NAME = "ohos.dms.param.sourceCallerNativeName";
103 constexpr const char* DMS_CALLER_APP_ID = "ohos.dms.param.sourceCallerAppId";
104 constexpr const char* DMS_CALLER_APP_IDENTIFIER = "ohos.dms.param.sourceCallerAppIdentifier";
105 constexpr const char* IS_HOOK = "ohos.ability_runtime.is_hook";
106 const int32_t SHELL_ASSISTANT_DIETYPE = 0;
107 std::atomic<int64_t> AbilityRecord::abilityRecordId = 0;
108 const int32_t DEFAULT_USER_ID = 0;
109 const int32_t SEND_RESULT_CANCELED = -1;
110 const int VECTOR_SIZE = 2;
111 const int LOAD_TIMEOUT_ASANENABLED = 150;
112 const int TERMINATE_TIMEOUT_ASANENABLED = 150;
113 const int HALF_TIMEOUT = 2;
114 const int MAX_URI_COUNT = 500;
115 const int RESTART_SCENEBOARD_DELAY = 500;
116 constexpr int32_t DMS_UID = 5522;
117 constexpr int32_t SCHEDULER_DIED_TIMEOUT = 60000;
118
__anone6660c060102(sptr<Token> token, std::string &methodName) 119 auto g_addLifecycleEventTask = [](sptr<Token> token, std::string &methodName) {
120 CHECK_POINTER_LOG(token, "token is nullptr");
121 std::string entry = std::string("AbilityRecord::") + methodName + "; the " + methodName + " lifecycle starts.";
122 FreezeUtil::GetInstance().AddLifecycleEvent(token->AsObject(), entry);
123 };
124
Token(std::weak_ptr<AbilityRecord> abilityRecord)125 Token::Token(std::weak_ptr<AbilityRecord> abilityRecord) : abilityRecord_(abilityRecord)
126 {}
127
~Token()128 Token::~Token()
129 {}
130
GetAbilityRecordByToken(const sptr<IRemoteObject> & token)131 std::shared_ptr<AbilityRecord> Token::GetAbilityRecordByToken(const sptr<IRemoteObject> &token)
132 {
133 return MyStatus::GetInstance().arGetAbilityRecord_;
134 }
135
GetAbilityRecord() const136 std::shared_ptr<AbilityRecord> Token::GetAbilityRecord() const
137 {
138 return MyStatus::GetInstance().arGetAbilityRecord_;
139 }
140
CallerRecord(int requestCode,std::weak_ptr<AbilityRecord> caller)141 CallerRecord::CallerRecord(int requestCode, std::weak_ptr<AbilityRecord> caller)
142 : requestCode_(requestCode), caller_(caller)
143 {
144 auto callerAbilityRecord = caller.lock();
145 if (callerAbilityRecord != nullptr) {
146 callerInfo_ = std::make_shared<CallerAbilityInfo>();
147 callerInfo_->callerBundleName = callerAbilityRecord->GetAbilityInfo().bundleName;
148 callerInfo_->callerAbilityName = callerAbilityRecord->GetAbilityInfo().name;
149 callerInfo_->callerTokenId = callerAbilityRecord->GetApplicationInfo().accessTokenId;
150 callerInfo_->callerUid = callerAbilityRecord->GetUid();
151 callerInfo_->callerPid = callerAbilityRecord->GetPid();
152 callerInfo_->callerAppCloneIndex = callerAbilityRecord->GetAppIndex();
153 }
154 }
155
Update(const OHOS::AAFwk::Want & want)156 void LaunchDebugInfo::Update(const OHOS::AAFwk::Want &want)
157 {
158 isDebugAppSet = want.HasParameter(DEBUG_APP);
159 if (isDebugAppSet) {
160 debugApp = want.GetBoolParam(DEBUG_APP, false);
161 }
162 isNativeDebugSet = want.HasParameter(NATIVE_DEBUG);
163 if (isNativeDebugSet) {
164 nativeDebug = want.GetBoolParam(NATIVE_DEBUG, false);
165 }
166 isPerfCmdSet = want.HasParameter(PERF_CMD);
167 if (isPerfCmdSet) {
168 perfCmd = want.GetStringParam(PERF_CMD);
169 }
170 }
171
AbilityRecord(const Want & want,const AppExecFwk::AbilityInfo & abilityInfo,const AppExecFwk::ApplicationInfo & applicationInfo,int requestCode)172 AbilityRecord::AbilityRecord(const Want &want, const AppExecFwk::AbilityInfo &abilityInfo,
173 const AppExecFwk::ApplicationInfo &applicationInfo, int requestCode)
174 : want_(want), requestCode_(requestCode), abilityInfo_(abilityInfo)
175 {
176 abilityInfo_.applicationInfo = applicationInfo;
177 recordId_ = abilityRecordId++;
178 auto abilityMgr = DelayedSingleton<AbilityManagerService>::GetInstance();
179 if (abilityMgr) {
180 bool isRootLauncher = (abilityInfo_.applicationInfo.bundleName == LAUNCHER_BUNDLE_NAME);
181 restartMax_ = AmsConfigurationParameter::GetInstance().GetMaxRestartNum(isRootLauncher);
182 bool flag = abilityMgr->GetStartUpNewRuleFlag();
183 want_.SetParam(COMPONENT_STARTUP_NEW_RULES, flag);
184 }
185 restartCount_ = restartMax_;
186 isAppAutoStartup_ = want_.GetBoolParam(Want::PARAM_APP_AUTO_STARTUP_LAUNCH_REASON, false);
187 if (want_.HasParameter(Want::PARAM_APP_AUTO_STARTUP_LAUNCH_REASON)) {
188 want_.RemoveParam(Want::PARAM_APP_AUTO_STARTUP_LAUNCH_REASON);
189 }
190 SetDebugAppByWaitingDebugFlag();
191 launchDebugInfo_.Update(want_);
192 }
193
~AbilityRecord()194 AbilityRecord::~AbilityRecord()
195 {
196 if (token_) {
197 FreezeUtil::GetInstance().DeleteLifecycleEvent(token_->AsObject());
198 }
199 FreezeUtil::GetInstance().DeleteAppLifecycleEvent(GetPid());
200 if (scheduler_ != nullptr && schedulerDeathRecipient_ != nullptr) {
201 auto object = scheduler_->AsObject();
202 if (object != nullptr) {
203 object->RemoveDeathRecipient(schedulerDeathRecipient_);
204 }
205 }
206 want_.CloseAllFd();
207 }
208
CreateAbilityRecord(const AbilityRequest & abilityRequest)209 std::shared_ptr<AbilityRecord> AbilityRecord::CreateAbilityRecord(const AbilityRequest &abilityRequest)
210 {
211 std::shared_ptr<AbilityRecord> abilityRecord = std::make_shared<AbilityRecord>(
212 abilityRequest.want, abilityRequest.abilityInfo, abilityRequest.appInfo, abilityRequest.requestCode);
213 CHECK_POINTER_AND_RETURN(abilityRecord, nullptr);
214 abilityRecord->SetUid(abilityRequest.uid);
215 int32_t appIndex = 0;
216 (void)AbilityRuntime::StartupUtil::GetAppIndex(abilityRequest.want, appIndex);
217 abilityRecord->SetAppIndex(appIndex);
218 abilityRecord->SetSecurityFlag(abilityRequest.want.GetBoolParam(DLP_PARAMS_SECURITY_FLAG, false));
219 abilityRecord->SetCallerAccessTokenId(abilityRequest.callerAccessTokenId);
220 abilityRecord->sessionInfo_ = abilityRequest.sessionInfo;
221 if (AppUtils::GetInstance().IsMultiProcessModel() && abilityRequest.abilityInfo.isStageBasedModel &&
222 abilityRequest.abilityInfo.type == AppExecFwk::AbilityType::PAGE &&
223 !abilityRequest.customProcess.empty()) {
224 abilityRecord->SetCustomProcessFlag(abilityRequest.customProcess);
225 }
226 if (abilityRequest.sessionInfo != nullptr) {
227 abilityRecord->instanceKey_ = abilityRequest.sessionInfo->instanceKey;
228 }
229 if (!abilityRecord->Init()) {
230 TAG_LOGE(AAFwkTag::ABILITYMGR, "failed init");
231 return nullptr;
232 }
233 if (abilityRequest.startSetting != nullptr) {
234 TAG_LOGD(AAFwkTag::ABILITYMGR, "abilityRequest.startSetting...");
235 abilityRecord->SetStartSetting(abilityRequest.startSetting);
236 }
237 if (abilityRequest.IsCallType(AbilityCallType::CALL_REQUEST_TYPE)) {
238 TAG_LOGD(AAFwkTag::ABILITYMGR, "abilityRequest.callType is CALL_REQUEST_TYPE.");
239 abilityRecord->SetStartedByCall(true);
240 }
241 if (AbilityRuntime::StartupUtil::IsStartPlugin(abilityRequest.want)) {
242 abilityRecord->isPluginAbility_ = true;
243 }
244 abilityRecord->collaboratorType_ = abilityRequest.collaboratorType;
245 abilityRecord->missionAffinity_ = abilityRequest.want.GetStringParam(PARAM_MISSION_AFFINITY_KEY);
246
247 auto userId = abilityRequest.appInfo.uid / BASE_USER_RANGE;
248 if ((userId == 0 ||
249 AppUtils::GetInstance().InResidentWhiteList(abilityRequest.abilityInfo.bundleName)) &&
250 DelayedSingleton<ResidentProcessManager>::GetInstance()->IsResidentAbility(
251 abilityRequest.abilityInfo.bundleName, abilityRequest.abilityInfo.name, userId)) {
252 abilityRecord->keepAliveBundle_ = true;
253 }
254
255 return abilityRecord;
256 }
257
Init()258 bool AbilityRecord::Init()
259 {
260 lifecycleDeal_ = std::make_unique<LifecycleDeal>();
261 CHECK_POINTER_RETURN_BOOL(lifecycleDeal_);
262
263 token_ = new (std::nothrow) Token(weak_from_this());
264 CHECK_POINTER_RETURN_BOOL(token_);
265
266 if (abilityInfo_.applicationInfo.isLauncherApp) {
267 isLauncherAbility_ = true;
268 }
269 return true;
270 }
271
SetUid(int32_t uid)272 void AbilityRecord::SetUid(int32_t uid)
273 {
274 uid_ = uid;
275 }
276
GetUid()277 int32_t AbilityRecord::GetUid()
278 {
279 return uid_;
280 }
281
GetPid()282 pid_t AbilityRecord::GetPid()
283 {
284 return pid_;
285 }
286
SetPid(pid_t pid)287 void AbilityRecord::SetPid(pid_t pid)
288 {
289 pid_ = pid;
290 }
291
LoadUIAbility()292 void AbilityRecord::LoadUIAbility()
293 {
294 SetLoading(true);
295 int loadTimeout = AmsConfigurationParameter::GetInstance().GetAppStartTimeoutTime() * LOAD_TIMEOUT_MULTIPLE;
296 if (abilityInfo_.applicationInfo.asanEnabled || abilityInfo_.applicationInfo.tsanEnabled) {
297 loadTimeout = AmsConfigurationParameter::GetInstance().GetAppStartTimeoutTime() * LOAD_TIMEOUT_ASANENABLED;
298 } else {
299 int coldStartTimeout =
300 AmsConfigurationParameter::GetInstance().GetAppStartTimeoutTime() * COLDSTART_TIMEOUT_MULTIPLE;
301 std::lock_guard guard(wantLock_);
302 loadTimeout = want_.GetBoolParam("coldStart", false) ? coldStartTimeout : loadTimeout;
303 }
304 SendEvent(AbilityManagerService::LOAD_HALF_TIMEOUT_MSG, loadTimeout / HALF_TIMEOUT);
305 SendEvent(AbilityManagerService::LOAD_TIMEOUT_MSG, loadTimeout);
306 std::string methodName = "LoadAbility";
307 g_addLifecycleEventTask(token_, methodName);
308 }
309
LoadAbility(bool isShellCall,bool isStartupHide)310 int AbilityRecord::LoadAbility(bool isShellCall, bool isStartupHide)
311 {
312 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
313 TAG_LOGI(AAFwkTag::ABILITYMGR, "LoadLifecycle: abilityName:%{public}s", abilityInfo_.name.c_str());
314 startTime_ = AbilityUtil::SystemTimeMillis();
315 CHECK_POINTER_AND_RETURN(token_, ERR_INVALID_VALUE);
316 // only for UIAbility
317 if (!IsDebug() && abilityInfo_.type != AppExecFwk::AbilityType::DATA) {
318 LoadUIAbility();
319 }
320
321 std::string appName = abilityInfo_.applicationInfo.name;
322 CHECK_TRUE_RETURN_RET(appName.empty(), ERR_INVALID_VALUE, "app name empty");
323 CHECK_TRUE_RETURN_RET(!CanRestartRootLauncher(), ERR_INVALID_VALUE, "root launcher restart out of max");
324
325 if (isRestarting_) {
326 restartTime_ = AbilityUtil::SystemTimeMillis();
327 }
328 sptr<Token> callerToken = nullptr;
329 auto caller = GetCallerRecord();
330 if (caller) {
331 callerToken = caller->GetToken();
332 }
333 std::lock_guard guard(wantLock_);
334 want_.SetParam(ABILITY_OWNER_USERID, ownerMissionUserId_);
335 want_.SetParam(IS_HOOK, isHook_);
336 AbilityRuntime::LoadParam loadParam;
337 loadParam.abilityRecordId = recordId_;
338 loadParam.isShellCall = Rosen::SceneBoardJudgement::IsSceneBoardEnabled() ? isShellCall
339 : AAFwk::PermissionVerification::GetInstance()->IsShellCall();
340 loadParam.token = token_;
341 loadParam.preToken = callerToken;
342 loadParam.instanceKey = instanceKey_;
343 loadParam.isCallerSetProcess = IsCallerSetProcess();
344 loadParam.customProcessFlag = customProcessFlag_;
345 loadParam.isStartupHide = isStartupHide;
346 want_.RemoveParam(Want::PARAM_APP_KEEP_ALIVE_ENABLED);
347 if (KeepAliveProcessManager::GetInstance().IsKeepAliveBundle(abilityInfo_.applicationInfo.bundleName, -1)) {
348 want_.SetParam(Want::PARAM_APP_KEEP_ALIVE_ENABLED, true);
349 loadParam.isKeepAlive = true;
350 }
351 auto result = DelayedSingleton<AppScheduler>::GetInstance()->LoadAbility(
352 loadParam, abilityInfo_, abilityInfo_.applicationInfo, want_);
353 want_.RemoveParam(IS_HOOK);
354 want_.RemoveParam(ABILITY_OWNER_USERID);
355 want_.RemoveParam(Want::PARAMS_REAL_CALLER_KEY);
356 if (DelayedSingleton<AppScheduler>::GetInstance()->IsAttachDebug(abilityInfo_.bundleName)) {
357 SetAttachDebug(true);
358 }
359 return result;
360 }
361
CanRestartRootLauncher()362 bool AbilityRecord::CanRestartRootLauncher()
363 {
364 return true;
365 }
366
CanRestartResident()367 bool AbilityRecord::CanRestartResident()
368 {
369 return true;
370 }
371
372 // only for UIAbility
ForegroundAbility(uint32_t sceneFlag,bool hasLastWant)373 void AbilityRecord::ForegroundAbility(uint32_t sceneFlag, bool hasLastWant)
374 {
375 }
376
ForegroundUIExtensionAbility(uint32_t sceneFlag)377 void AbilityRecord::ForegroundUIExtensionAbility(uint32_t sceneFlag)
378 {
379 }
380
ProcessForegroundAbility(uint32_t tokenId,uint32_t sceneFlag,bool isShellCall,bool isStartupHide)381 void AbilityRecord::ProcessForegroundAbility(
382 uint32_t tokenId, uint32_t sceneFlag, bool isShellCall, bool isStartupHide)
383 {
384 }
385
PostForegroundTimeoutTask()386 void AbilityRecord::PostForegroundTimeoutTask()
387 {
388 }
389
RemoveForegroundTimeoutTask()390 void AbilityRecord::RemoveForegroundTimeoutTask()
391 {
392 }
393
RemoveLoadTimeoutTask()394 void AbilityRecord::RemoveLoadTimeoutTask()
395 {
396 }
397
PostUIExtensionAbilityTimeoutTask(uint32_t messageId)398 void AbilityRecord::PostUIExtensionAbilityTimeoutTask(uint32_t messageId)
399 {
400 }
401
GetLabel()402 std::string AbilityRecord::GetLabel()
403 {
404 return abilityInfo_.applicationInfo.label;
405 }
406
407 #ifdef SUPPORT_SCREEN
ProcessForegroundAbility(const std::shared_ptr<AbilityRecord> & callerAbility,bool needExit,uint32_t sceneFlag)408 void AbilityRecord::ProcessForegroundAbility(const std::shared_ptr<AbilityRecord> &callerAbility, bool needExit,
409 uint32_t sceneFlag)
410 {
411 }
412
NotifyAnimationFromTerminatingAbility(const std::shared_ptr<AbilityRecord> & callerAbility,bool needExit,bool flag)413 void AbilityRecord::NotifyAnimationFromTerminatingAbility(const std::shared_ptr<AbilityRecord>& callerAbility,
414 bool needExit, bool flag)
415 {
416 }
417
NotifyAnimationFromTerminatingAbility() const418 void AbilityRecord::NotifyAnimationFromTerminatingAbility() const
419 {
420 }
421
NotifyAnimationFromMinimizeAbility(bool & animaEnabled)422 void AbilityRecord::NotifyAnimationFromMinimizeAbility(bool& animaEnabled)
423 {
424 }
425
SetAbilityTransitionInfo(sptr<AbilityTransitionInfo> & info) const426 void AbilityRecord::SetAbilityTransitionInfo(sptr<AbilityTransitionInfo>& info) const
427 {
428 }
429
CreateAbilityTransitionInfo()430 sptr<AbilityTransitionInfo> AbilityRecord::CreateAbilityTransitionInfo()
431 {
432 return nullptr;
433 }
434
StartingWindowHot()435 void AbilityRecord::StartingWindowHot()
436 {
437 }
438
ProcessForegroundAbility(bool isRecent,const AbilityRequest & abilityRequest,std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<AbilityRecord> & callerAbility,uint32_t sceneFlag)439 void AbilityRecord::ProcessForegroundAbility(bool isRecent, const AbilityRequest &abilityRequest,
440 std::shared_ptr<StartOptions> &startOptions, const std::shared_ptr<AbilityRecord> &callerAbility,
441 uint32_t sceneFlag)
442 {
443 }
444
GetWantFromMission() const445 std::shared_ptr<Want> AbilityRecord::GetWantFromMission() const
446 {
447 return nullptr;
448 }
449
AnimationTask(bool isRecent,const AbilityRequest & abilityRequest,const std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<AbilityRecord> & callerAbility)450 void AbilityRecord::AnimationTask(bool isRecent, const AbilityRequest &abilityRequest,
451 const std::shared_ptr<StartOptions> &startOptions, const std::shared_ptr<AbilityRecord> &callerAbility)
452 {
453 }
454
SetShowWhenLocked(const AppExecFwk::AbilityInfo & abilityInfo,sptr<AbilityTransitionInfo> & info) const455 void AbilityRecord::SetShowWhenLocked(const AppExecFwk::AbilityInfo &abilityInfo,
456 sptr<AbilityTransitionInfo> &info) const
457 {
458 }
459
SetAbilityTransitionInfo(const AppExecFwk::AbilityInfo & abilityInfo,sptr<AbilityTransitionInfo> & info) const460 void AbilityRecord::SetAbilityTransitionInfo(const AppExecFwk::AbilityInfo &abilityInfo,
461 sptr<AbilityTransitionInfo> &info) const
462 {
463 }
464
NotifyAnimationFromRecentTask(const std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<Want> & want) const465 void AbilityRecord::NotifyAnimationFromRecentTask(const std::shared_ptr<StartOptions> &startOptions,
466 const std::shared_ptr<Want> &want) const
467 {
468 }
469
NotifyAnimationFromStartingAbility(const std::shared_ptr<AbilityRecord> & callerAbility,const AbilityRequest & abilityRequest) const470 void AbilityRecord::NotifyAnimationFromStartingAbility(const std::shared_ptr<AbilityRecord> &callerAbility,
471 const AbilityRequest &abilityRequest) const
472 {
473 }
474
StartingWindowTask(bool isRecent,bool isCold,const AbilityRequest & abilityRequest,std::shared_ptr<StartOptions> & startOptions)475 void AbilityRecord::StartingWindowTask(bool isRecent, bool isCold, const AbilityRequest &abilityRequest,
476 std::shared_ptr<StartOptions> &startOptions)
477 {
478 }
479
PostCancelStartingWindowHotTask()480 void AbilityRecord::PostCancelStartingWindowHotTask()
481 {
482 }
483
PostCancelStartingWindowColdTask()484 void AbilityRecord::PostCancelStartingWindowColdTask()
485 {
486 }
487
GetWMSHandler() const488 sptr<IWindowManagerServiceHandler> AbilityRecord::GetWMSHandler() const
489 {
490 return nullptr;
491 }
492
SetWindowModeAndDisplayId(sptr<AbilityTransitionInfo> & info,const std::shared_ptr<Want> & want) const493 void AbilityRecord::SetWindowModeAndDisplayId(sptr<AbilityTransitionInfo> &info,
494 const std::shared_ptr<Want> &want) const
495 {
496 }
497
CreateAbilityTransitionInfo(const std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<Want> & want) const498 sptr<AbilityTransitionInfo> AbilityRecord::CreateAbilityTransitionInfo(
499 const std::shared_ptr<StartOptions> &startOptions, const std::shared_ptr<Want> &want) const
500 {
501 sptr<AbilityTransitionInfo> info = new AbilityTransitionInfo();
502 return info;
503 }
504
CreateAbilityTransitionInfo(const AbilityRequest & abilityRequest) const505 sptr<AbilityTransitionInfo> AbilityRecord::CreateAbilityTransitionInfo(const AbilityRequest &abilityRequest) const
506 {
507 sptr<AbilityTransitionInfo> info = new AbilityTransitionInfo();
508 return info;
509 }
510
CreateResourceManager() const511 std::shared_ptr<Global::Resource::ResourceManager> AbilityRecord::CreateResourceManager() const
512 {
513 return nullptr;
514 }
515
GetPixelMap(const uint32_t windowIconId,std::shared_ptr<Global::Resource::ResourceManager> resourceMgr) const516 std::shared_ptr<Media::PixelMap> AbilityRecord::GetPixelMap(const uint32_t windowIconId,
517 std::shared_ptr<Global::Resource::ResourceManager> resourceMgr) const
518 {
519 return nullptr;
520 }
521
CreateAbilityTransitionInfo(const std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<Want> & want,const AbilityRequest & abilityRequest)522 sptr<AbilityTransitionInfo> AbilityRecord::CreateAbilityTransitionInfo(
523 const std::shared_ptr<StartOptions> &startOptions, const std::shared_ptr<Want> &want,
524 const AbilityRequest &abilityRequest)
525 {
526 return nullptr;
527 }
528
StartingWindowHot(const std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<Want> & want,const AbilityRequest & abilityRequest)529 void AbilityRecord::StartingWindowHot(const std::shared_ptr<StartOptions> &startOptions,
530 const std::shared_ptr<Want> &want, const AbilityRequest &abilityRequest)
531 {
532 }
533
StartingWindowCold(const std::shared_ptr<StartOptions> & startOptions,const std::shared_ptr<Want> & want,const AbilityRequest & abilityRequest)534 void AbilityRecord::StartingWindowCold(const std::shared_ptr<StartOptions> &startOptions,
535 const std::shared_ptr<Want> &want, const AbilityRequest &abilityRequest)
536 {
537 }
538
GetColdStartingWindowResource(std::shared_ptr<Media::PixelMap> & bg,uint32_t & bgColor)539 void AbilityRecord::GetColdStartingWindowResource(std::shared_ptr<Media::PixelMap> &bg, uint32_t &bgColor)
540 {
541 }
542
InitColdStartingWindowResource(const std::shared_ptr<Global::Resource::ResourceManager> & resourceMgr)543 void AbilityRecord::InitColdStartingWindowResource(
544 const std::shared_ptr<Global::Resource::ResourceManager> &resourceMgr)
545 {
546 }
547
ReportAtomicServiceDrawnCompleteEvent()548 bool AbilityRecord::ReportAtomicServiceDrawnCompleteEvent()
549 {
550 return true;
551 }
552
SetCompleteFirstFrameDrawing(const bool flag)553 void AbilityRecord::SetCompleteFirstFrameDrawing(const bool flag)
554 {
555 isCompleteFirstFrameDrawing_ = flag;
556 }
557
IsCompleteFirstFrameDrawing() const558 bool AbilityRecord::IsCompleteFirstFrameDrawing() const
559 {
560 return isCompleteFirstFrameDrawing_;
561 }
562
GetColdStartFlag()563 bool AbilityRecord::GetColdStartFlag()
564 {
565 return coldStart_;
566 }
567
SetColdStartFlag(bool isColdStart)568 void AbilityRecord::SetColdStartFlag(bool isColdStart)
569 {
570 coldStart_ = isColdStart;
571 }
572 #endif
573
BackgroundAbility(const Closure & task)574 void AbilityRecord::BackgroundAbility(const Closure &task)
575 {
576 }
577
PrepareTerminateAbility(bool isSCBCall)578 bool AbilityRecord::PrepareTerminateAbility(bool isSCBCall)
579 {
580 return false;
581 }
582
PrepareTerminateAbilityDone(bool isTerminate)583 void AbilityRecord::PrepareTerminateAbilityDone(bool isTerminate)
584 {
585 }
586
CancelPrepareTerminate()587 void AbilityRecord::CancelPrepareTerminate()
588 {
589 }
590
TerminateAbility()591 int AbilityRecord::TerminateAbility()
592 {
593 return 0;
594 }
595
GetAbilityInfo() const596 const AppExecFwk::AbilityInfo &AbilityRecord::GetAbilityInfo() const
597 {
598 return MyStatus::GetInstance().arGetAbilityInfo_;
599 }
600
GetApplicationInfo() const601 const AppExecFwk::ApplicationInfo &AbilityRecord::GetApplicationInfo() const
602 {
603 return MyStatus::GetInstance().arGetAbilityInfo_.applicationInfo;
604 }
605
GetAbilityState() const606 AbilityState AbilityRecord::GetAbilityState() const
607 {
608 return currentState_;
609 }
610
GetAbilityWindowConfig() const611 WindowConfig AbilityRecord::GetAbilityWindowConfig() const
612 {
613 return windowConfig_;
614 }
615
IsForeground() const616 bool AbilityRecord::IsForeground() const
617 {
618 return currentState_ == AbilityState::FOREGROUND || currentState_ == AbilityState::FOREGROUNDING;
619 }
620
GetAbilityVisibilityState() const621 AbilityVisibilityState AbilityRecord::GetAbilityVisibilityState() const
622 {
623 return abilityVisibilityState_.load();
624 }
625
SetAbilityVisibilityState(AbilityVisibilityState state)626 void AbilityRecord::SetAbilityVisibilityState(AbilityVisibilityState state)
627 {
628 abilityVisibilityState_.store(state);
629 }
630
UpdateAbilityVisibilityState()631 void AbilityRecord::UpdateAbilityVisibilityState()
632 {
633 }
634 #ifdef SUPPORT_SCREEN
SetAbilityStateInner(AbilityState state)635 void AbilityRecord::SetAbilityStateInner(AbilityState state)
636 {
637 }
638 #endif // SUPPORT_SCREEN
GetAbilityForegroundingFlag() const639 bool AbilityRecord::GetAbilityForegroundingFlag() const
640 {
641 return isAbilityForegrounding_;
642 }
643
SetAbilityForegroundingFlag()644 void AbilityRecord::SetAbilityForegroundingFlag()
645 {
646 }
647 #ifdef SUPPORT_SCREEN
SetAbilityState(AbilityState state)648 void AbilityRecord::SetAbilityState(AbilityState state)
649 {
650 }
651 #endif // SUPPORT_SCREEN
SetScheduler(const sptr<IAbilityScheduler> & scheduler)652 void AbilityRecord::SetScheduler(const sptr<IAbilityScheduler> &scheduler)
653 {
654 }
655
AfterLoaded()656 void AbilityRecord::AfterLoaded()
657 {
658 }
659
GetToken() const660 sptr<Token> AbilityRecord::GetToken() const
661 {
662 return token_;
663 }
664
SetPreAbilityRecord(const std::shared_ptr<AbilityRecord> & abilityRecord)665 void AbilityRecord::SetPreAbilityRecord(const std::shared_ptr<AbilityRecord> &abilityRecord)
666 {
667 preAbilityRecord_ = abilityRecord;
668 }
669
GetPreAbilityRecord() const670 std::shared_ptr<AbilityRecord> AbilityRecord::GetPreAbilityRecord() const
671 {
672 return preAbilityRecord_.lock();
673 }
674
SetNextAbilityRecord(const std::shared_ptr<AbilityRecord> & abilityRecord)675 void AbilityRecord::SetNextAbilityRecord(const std::shared_ptr<AbilityRecord> &abilityRecord)
676 {
677 nextAbilityRecord_ = abilityRecord;
678 }
679
GetNextAbilityRecord() const680 std::shared_ptr<AbilityRecord> AbilityRecord::GetNextAbilityRecord() const
681 {
682 return nextAbilityRecord_.lock();
683 }
684
IsReady() const685 bool AbilityRecord::IsReady() const
686 {
687 return isReady_;
688 }
689
690 #ifdef SUPPORT_SCREEN
IsWindowAttached() const691 bool AbilityRecord::IsWindowAttached() const
692 {
693 return isWindowAttached_;
694 }
695 #endif
696
IsLauncherAbility() const697 bool AbilityRecord::IsLauncherAbility() const
698 {
699 return isLauncherAbility_;
700 }
701
IsTerminating() const702 bool AbilityRecord::IsTerminating() const
703 {
704 return isTerminating_;
705 }
706
SetTerminatingState()707 void AbilityRecord::SetTerminatingState()
708 {
709 isTerminating_ = true;
710 }
711
IsNewWant() const712 bool AbilityRecord::IsNewWant() const
713 {
714 return lifeCycleStateInfo_.isNewWant;
715 }
716
SetIsNewWant(bool isNewWant)717 void AbilityRecord::SetIsNewWant(bool isNewWant)
718 {
719 lifeCycleStateInfo_.isNewWant = isNewWant;
720 }
721
IsCreateByConnect() const722 bool AbilityRecord::IsCreateByConnect() const
723 {
724 return isCreateByConnect_;
725 }
726
SetCreateByConnectMode(bool isCreatedByConnect)727 void AbilityRecord::SetCreateByConnectMode(bool isCreatedByConnect)
728 {
729 isCreateByConnect_ = isCreatedByConnect;
730 }
731
Activate()732 void AbilityRecord::Activate()
733 {
734 }
735
Inactivate()736 void AbilityRecord::Inactivate()
737 {
738 }
739
Terminate(const Closure & task)740 void AbilityRecord::Terminate(const Closure &task)
741 {
742 }
743
ShareData(const int32_t & uniqueId)744 void AbilityRecord::ShareData(const int32_t &uniqueId)
745 {
746 }
747
ConnectAbility()748 void AbilityRecord::ConnectAbility()
749 {
750 }
751
ConnectAbilityWithWant(const Want & want)752 void AbilityRecord::ConnectAbilityWithWant(const Want &want)
753 {
754 }
755
DisconnectAbility()756 void AbilityRecord::DisconnectAbility()
757 {
758 }
759
DisconnectAbilityWithWant(const Want & want)760 void AbilityRecord::DisconnectAbilityWithWant(const Want &want)
761 {
762 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
763 TAG_LOGD(AAFwkTag::SERVICE_EXT, "ability:%{public}s.", abilityInfo_.name.c_str());
764 CHECK_POINTER(lifecycleDeal_);
765 lifecycleDeal_->DisconnectAbility(want);
766 if (GetInProgressRecordCount() == 0) {
767 isConnected = false;
768 }
769 }
770
CommandAbility()771 void AbilityRecord::CommandAbility()
772 {
773 TAG_LOGI(AAFwkTag::SERVICE_EXT, "startId_:%{public}d.", startId_);
774 Want want = GetWant();
775 UpdateDmsCallerInfo(want);
776 CHECK_POINTER(lifecycleDeal_);
777 lifecycleDeal_->CommandAbility(want, false, startId_);
778 }
779
CommandAbilityWindow(const sptr<SessionInfo> & sessionInfo,WindowCommand winCmd)780 void AbilityRecord::CommandAbilityWindow(const sptr<SessionInfo> &sessionInfo, WindowCommand winCmd)
781 {
782 CHECK_POINTER(lifecycleDeal_);
783 lifecycleDeal_->CommandAbilityWindow(GetWant(), sessionInfo, winCmd);
784 }
785
SaveAbilityState()786 void AbilityRecord::SaveAbilityState()
787 {
788 TAG_LOGD(AAFwkTag::ABILITYMGR, "call");
789 CHECK_POINTER(lifecycleDeal_);
790 lifecycleDeal_->SaveAbilityState();
791 }
792
SaveAbilityState(const PacMap & inState)793 void AbilityRecord::SaveAbilityState(const PacMap &inState)
794 {
795 TAG_LOGD(AAFwkTag::ABILITYMGR, "call");
796 stateDatas_ = inState;
797 }
798
SaveAbilityWindowConfig(const WindowConfig & windowConfig)799 void AbilityRecord::SaveAbilityWindowConfig(const WindowConfig &windowConfig)
800 {
801 TAG_LOGI(AAFwkTag::ABILITYMGR, "call");
802 windowConfig_ = windowConfig;
803 }
804
RestoreAbilityState()805 void AbilityRecord::RestoreAbilityState()
806 {
807 TAG_LOGI(AAFwkTag::ABILITYMGR, "call");
808 CHECK_POINTER(lifecycleDeal_);
809 lifecycleDeal_->RestoreAbilityState(stateDatas_);
810 stateDatas_.Clear();
811 isRestarting_ = false;
812 }
813
GetRequestCode() const814 int AbilityRecord::GetRequestCode() const
815 {
816 return requestCode_;
817 }
818
SetResult(const std::shared_ptr<AbilityResult> & result)819 void AbilityRecord::SetResult(const std::shared_ptr<AbilityResult> &result)
820 {
821 std::lock_guard guard(resultLock_);
822 result_ = result;
823 }
824
GetResult() const825 std::shared_ptr<AbilityResult> AbilityRecord::GetResult() const
826 {
827 std::lock_guard guard(resultLock_);
828 return result_;
829 }
830
SendResult(bool isSandboxApp,uint32_t tokeId)831 void AbilityRecord::SendResult(bool isSandboxApp, uint32_t tokeId)
832 {
833 }
834
SendResultByBackToCaller(const std::shared_ptr<AbilityResult> & result)835 void AbilityRecord::SendResultByBackToCaller(const std::shared_ptr<AbilityResult> &result)
836 {
837 }
838
SendSandboxSavefileResult(const Want & want,int resultCode,int requestCode)839 void AbilityRecord::SendSandboxSavefileResult(const Want &want, int resultCode, int requestCode)
840 {
841 }
842
SendResultToCallers(bool schedulerdied)843 void AbilityRecord::SendResultToCallers(bool schedulerdied)
844 {
845 }
846
GetCallerByRequestCode(int32_t requestCode,int32_t pid)847 std::shared_ptr<AbilityRecord> AbilityRecord::GetCallerByRequestCode(int32_t requestCode, int32_t pid)
848 {
849 for (auto caller : GetCallerRecordList()) {
850 if (caller == nullptr) {
851 TAG_LOGI(AAFwkTag::ABILITYMGR, "null caller");
852 continue;
853 }
854 std::shared_ptr<AbilityRecord> callerAbilityRecord = caller->GetCaller();
855 if (callerAbilityRecord == nullptr || callerAbilityRecord->GetPid() != pid) {
856 TAG_LOGI(AAFwkTag::ABILITYMGR, "callerAbility not match");
857 continue;
858 }
859 if (caller->IsHistoryRequestCode(requestCode)) {
860 TAG_LOGI(AAFwkTag::ABILITYMGR, "found callerAbility");
861 return callerAbilityRecord;
862 }
863 }
864 TAG_LOGI(AAFwkTag::ABILITYMGR, "Can't found caller");
865 return nullptr;
866 }
867
SaveResultToCallers(const int resultCode,const Want * resultWant)868 void AbilityRecord::SaveResultToCallers(const int resultCode, const Want *resultWant)
869 {
870 auto callerRecordList = GetCallerRecordList();
871 if (callerRecordList.empty()) {
872 TAG_LOGW(AAFwkTag::ABILITYMGR, "callerRecordList empty");
873 return;
874 }
875 auto latestCaller = callerRecordList.back();
876 for (auto caller : callerRecordList) {
877 if (caller == nullptr) {
878 TAG_LOGW(AAFwkTag::ABILITYMGR, "null caller");
879 continue;
880 }
881 if (caller == latestCaller) {
882 TAG_LOGD(AAFwkTag::ABILITYMGR, "latestCaller");
883 SaveResult(resultCode, resultWant, caller);
884 continue;
885 }
886 SaveResult(SEND_RESULT_CANCELED, resultWant, caller);
887 }
888 }
889
SaveResult(int resultCode,const Want * resultWant,std::shared_ptr<CallerRecord> caller)890 void AbilityRecord::SaveResult(int resultCode, const Want *resultWant, std::shared_ptr<CallerRecord> caller)
891 {
892 std::lock_guard<ffrt::mutex> guard(lock_);
893 std::shared_ptr<AbilityRecord> callerAbilityRecord = caller->GetCaller();
894 if (callerAbilityRecord != nullptr) {
895 Want* newWant = const_cast<Want*>(resultWant);
896 if (callerAbilityRecord->GetApplicationInfo().name == AppUtils::GetInstance().GetBrokerDelegateBundleName()) {
897 newWant->SetParam(std::string(PARAM_SEND_RESULT_CALLER_BUNDLENAME), abilityInfo_.applicationInfo.name);
898 newWant->SetParam(std::string(PARAM_SEND_RESULT_CALLER_TOKENID), static_cast<int32_t>(
899 abilityInfo_.applicationInfo.accessTokenId));
900 }
901 callerAbilityRecord->SetResult(
902 std::make_shared<AbilityResult>(caller->GetRequestCode(), resultCode, *newWant));
903 } else {
904 std::shared_ptr<SystemAbilityCallerRecord> callerSystemAbilityRecord = caller->GetSaCaller();
905 if (callerSystemAbilityRecord != nullptr) {
906 TAG_LOGI(AAFwkTag::ABILITYMGR, "caller is system ability");
907 Want* newWant = const_cast<Want*>(resultWant);
908 if (want_.GetBoolParam(PARAM_RESV_ANCO_IS_NEED_UPDATE_NAME, false)) {
909 want_.RemoveParam(PARAM_RESV_ANCO_IS_NEED_UPDATE_NAME);
910 callerSystemAbilityRecord->SetResult(*newWant, resultCode);
911 } else {
912 callerSystemAbilityRecord->SetResultToSystemAbility(callerSystemAbilityRecord, *newWant,
913 resultCode);
914 }
915 }
916 }
917 }
918
SetResultToSystemAbility(std::shared_ptr<SystemAbilityCallerRecord> callerSystemAbilityRecord,Want & resultWant,int resultCode)919 void SystemAbilityCallerRecord::SetResultToSystemAbility(
920 std::shared_ptr<SystemAbilityCallerRecord> callerSystemAbilityRecord,
921 Want &resultWant, int resultCode)
922 {
923 std::vector<std::string> data;
924 std::string srcAbilityId = callerSystemAbilityRecord->GetSrcAbilityId();
925 SplitStr(srcAbilityId, "_", data);
926 if (data.size() != VECTOR_SIZE) {
927 TAG_LOGE(AAFwkTag::ABILITYMGR, "check size failed");
928 return;
929 }
930 std::string srcDeviceId = data[0];
931 TAG_LOGD(AAFwkTag::ABILITYMGR, "Get srcDeviceId = %{public}s", srcDeviceId.c_str());
932 int missionId = atoi(data[1].c_str());
933 TAG_LOGI(AAFwkTag::ABILITYMGR, "get missionId: %{public}d", missionId);
934 resultWant.SetParam(DMS_SRC_NETWORK_ID, srcDeviceId);
935 resultWant.SetParam(DMS_MISSION_ID, missionId);
936 callerSystemAbilityRecord->SetResult(resultWant, resultCode);
937 }
938
SendResultToSystemAbility(int requestCode,const std::shared_ptr<SystemAbilityCallerRecord> callerSystemAbilityRecord,int32_t callerUid,uint32_t accessToken,bool schedulerdied)939 void SystemAbilityCallerRecord::SendResultToSystemAbility(int requestCode,
940 const std::shared_ptr<SystemAbilityCallerRecord> callerSystemAbilityRecord,
941 int32_t callerUid, uint32_t accessToken, bool schedulerdied)
942 {
943 TAG_LOGI(AAFwkTag::ABILITYMGR, "call");
944 if (callerSystemAbilityRecord == nullptr) {
945 TAG_LOGE(AAFwkTag::ABILITYMGR, "null record");
946 return;
947 }
948 int resultCode = callerSystemAbilityRecord->GetResultCode();
949 Want resultWant = callerSystemAbilityRecord->GetResultWant();
950 sptr<IRemoteObject> callerToken = callerSystemAbilityRecord->GetCallerToken();
951 if (!schedulerdied) {
952 callerUid = IPCSkeleton::GetCallingUid();
953 accessToken = IPCSkeleton::GetCallingTokenID();
954 }
955 TAG_LOGI(AAFwkTag::ABILITYMGR, "Try to SendResult");
956 if (callerToken == nullptr) {
957 TAG_LOGE(AAFwkTag::ABILITYMGR, "null callerToken");
958 return;
959 }
960 MessageParcel data;
961 if (!data.WriteInterfaceToken(SYSTEM_ABILITY_TOKEN_CALLBACK)) {
962 TAG_LOGE(AAFwkTag::ABILITYMGR, "write interface token failed");
963 return;
964 }
965 if (!data.WriteParcelable(&resultWant)) {
966 TAG_LOGE(AAFwkTag::ABILITYMGR, "writeParcelable failed");
967 return;
968 }
969 if (!data.WriteInt32(callerUid)) {
970 TAG_LOGE(AAFwkTag::ABILITYMGR, "write callerUid failed");
971 return;
972 }
973 if (!data.WriteInt32(requestCode)) {
974 TAG_LOGE(AAFwkTag::ABILITYMGR, "write requestCode failed");
975 return;
976 }
977 if (!data.WriteUint32(accessToken)) {
978 TAG_LOGE(AAFwkTag::ABILITYMGR, "write accessToken failed");
979 return;
980 }
981 if (!data.WriteInt32(resultCode)) {
982 TAG_LOGE(AAFwkTag::ABILITYMGR, "write resultCode failed");
983 return;
984 }
985 MessageParcel reply;
986 MessageOption option(MessageOption::TF_SYNC);
987 int result = callerToken->SendRequest(ISystemAbilityTokenCallback::SEND_RESULT, data, reply, option);
988 if (result != ERR_OK) {
989 TAG_LOGE(AAFwkTag::ABILITYMGR, "error: %{public}d", result);
990 }
991 }
992
NeedConnectAfterCommand()993 bool AbilityRecord::NeedConnectAfterCommand()
994 {
995 return !IsConnectListEmpty() && !isConnected;
996 }
997
AddConnectRecordToList(const std::shared_ptr<ConnectionRecord> & connRecord)998 void AbilityRecord::AddConnectRecordToList(const std::shared_ptr<ConnectionRecord> &connRecord)
999 {
1000 CHECK_POINTER(connRecord);
1001 std::lock_guard guard(connRecordListMutex_);
1002 auto it = std::find(connRecordList_.begin(), connRecordList_.end(), connRecord);
1003 // found it
1004 if (it != connRecordList_.end()) {
1005 TAG_LOGD(AAFwkTag::ABILITYMGR, "Found it in list, so no need to add same connection");
1006 return;
1007 }
1008 // no found then add new connection to list
1009 TAG_LOGD(AAFwkTag::ABILITYMGR, "No found in list, so add new connection to list");
1010 connRecordList_.push_back(connRecord);
1011 }
1012
GetConnectRecordList() const1013 std::list<std::shared_ptr<ConnectionRecord>> AbilityRecord::GetConnectRecordList() const
1014 {
1015 std::lock_guard guard(connRecordListMutex_);
1016 return connRecordList_;
1017 }
1018
RemoveConnectRecordFromList(const std::shared_ptr<ConnectionRecord> & connRecord)1019 void AbilityRecord::RemoveConnectRecordFromList(const std::shared_ptr<ConnectionRecord> &connRecord)
1020 {
1021 CHECK_POINTER(connRecord);
1022 std::lock_guard guard(connRecordListMutex_);
1023 connRecordList_.remove(connRecord);
1024 if (connRecordList_.empty()) {
1025 isConnected = false;
1026 }
1027 }
1028
RemoveSpecifiedWantParam(const std::string & key)1029 void AbilityRecord::RemoveSpecifiedWantParam(const std::string &key)
1030 {
1031 std::lock_guard guard(wantLock_);
1032 if (want_.HasParameter(key)) {
1033 want_.RemoveParam(key);
1034 }
1035 }
1036
RemoveCallerRequestCode(std::shared_ptr<AbilityRecord> callerAbilityRecord,int32_t requestCode)1037 void AbilityRecord::RemoveCallerRequestCode(std::shared_ptr<AbilityRecord> callerAbilityRecord, int32_t requestCode)
1038 {
1039 if (callerAbilityRecord == nullptr) {
1040 TAG_LOGI(AAFwkTag::ABILITYMGR, "null record");
1041 return;
1042 }
1043 std::lock_guard guard(callerListLock_);
1044 for (auto it = callerList_.begin(); it != callerList_.end(); it++) {
1045 if ((*it)->GetCaller() == callerAbilityRecord) {
1046 (*it)->RemoveHistoryRequestCode(requestCode);
1047 if ((*it)->GetRequestCodeSet().empty()) {
1048 callerList_.erase(it);
1049 TAG_LOGI(AAFwkTag::ABILITYMGR, "remove callerRecord");
1050 }
1051 return;
1052 }
1053 }
1054 }
1055
AddCallerRecord(const sptr<IRemoteObject> & callerToken,int requestCode,const Want & want,std::string srcAbilityId,uint32_t callingTokenId)1056 void AbilityRecord::AddCallerRecord(const sptr<IRemoteObject> &callerToken, int requestCode, const Want &want,
1057 std::string srcAbilityId, uint32_t callingTokenId)
1058 {
1059 HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__);
1060 TAG_LOGD(AAFwkTag::ABILITYMGR, "call, callingTokenId:%{public}u", callingTokenId);
1061 auto abilityRecord = Token::GetAbilityRecordByToken(callerToken);
1062 if (abilityRecord == nullptr) {
1063 RecordSaCallerInfo(want);
1064 }
1065 if (!srcAbilityId.empty() && IsSystemAbilityCall(callerToken, callingTokenId)) {
1066 AddSystemAbilityCallerRecord(callerToken, requestCode, srcAbilityId);
1067 return;
1068 }
1069 CHECK_POINTER(abilityRecord);
1070
1071 auto isExist = [&abilityRecord](const std::shared_ptr<CallerRecord> &callerRecord) {
1072 return (callerRecord->GetCaller() == abilityRecord);
1073 };
1074 std::lock_guard guard(callerListLock_);
1075 auto record = std::find_if(callerList_.begin(), callerList_.end(), isExist);
1076 auto newCallerRecord = std::make_shared<CallerRecord>(requestCode, abilityRecord);
1077 if (record != callerList_.end()) {
1078 newCallerRecord->SetRequestCodeSet((*record)->GetRequestCodeSet());
1079 callerList_.erase(record);
1080 }
1081 newCallerRecord->AddHistoryRequestCode(requestCode);
1082 callerList_.emplace_back(newCallerRecord);
1083
1084 lifeCycleStateInfo_.caller.requestCode = requestCode;
1085 lifeCycleStateInfo_.caller.deviceId = abilityRecord->GetAbilityInfo().deviceId;
1086 lifeCycleStateInfo_.caller.bundleName = abilityRecord->GetAbilityInfo().bundleName;
1087 lifeCycleStateInfo_.caller.abilityName = abilityRecord->GetAbilityInfo().name;
1088 TAG_LOGD(AAFwkTag::ABILITYMGR, "caller %{public}s, %{public}s, callerSize: %{public}zu",
1089 abilityRecord->GetAbilityInfo().bundleName.c_str(),
1090 abilityRecord->GetAbilityInfo().name.c_str(), callerList_.size());
1091 }
1092
IsSystemAbilityCall(const sptr<IRemoteObject> & callerToken,uint32_t callingTokenId)1093 bool AbilityRecord::IsSystemAbilityCall(const sptr<IRemoteObject> &callerToken, uint32_t callingTokenId)
1094 {
1095 if (callerToken == nullptr) {
1096 return false;
1097 }
1098 auto abilityRecord = Token::GetAbilityRecordByToken(callerToken);
1099 if (abilityRecord != nullptr) {
1100 return false;
1101 }
1102 uint32_t tokenId = 0;
1103 if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) {
1104 tokenId = callingTokenId;
1105 } else {
1106 tokenId = IPCSkeleton::GetCallingTokenID();
1107 }
1108 auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(tokenId);
1109 bool isNativeCall = tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE;
1110 if (!isNativeCall) {
1111 TAG_LOGI(AAFwkTag::ABILITYMGR, "not native call");
1112 return false;
1113 }
1114 AccessToken::NativeTokenInfo nativeTokenInfo;
1115 int32_t result = AccessToken::AccessTokenKit::GetNativeTokenInfo(tokenId, nativeTokenInfo);
1116 if (result == ERR_OK && (nativeTokenInfo.processName == DMS_PROCESS_NAME ||
1117 want_.GetBoolParam(PARAM_RESV_ANCO_IS_NEED_UPDATE_NAME, false))) {
1118 TAG_LOGI(AAFwkTag::ABILITYMGR, "system ability call");
1119 return true;
1120 }
1121 return false;
1122 }
1123
AddSystemAbilityCallerRecord(const sptr<IRemoteObject> & callerToken,int requestCode,std::string srcAbilityId)1124 void AbilityRecord::AddSystemAbilityCallerRecord(const sptr<IRemoteObject> &callerToken, int requestCode,
1125 std::string srcAbilityId)
1126 {
1127 TAG_LOGI(AAFwkTag::ABILITYMGR, "add system ability caller record");
1128 std::shared_ptr<SystemAbilityCallerRecord> systemAbilityRecord =
1129 std::make_shared<SystemAbilityCallerRecord>(srcAbilityId, callerToken);
1130 auto isExist = [&srcAbilityId](const std::shared_ptr<CallerRecord> &callerRecord) {
1131 std::shared_ptr<SystemAbilityCallerRecord> saCaller = callerRecord->GetSaCaller();
1132 return (saCaller != nullptr && saCaller->GetSrcAbilityId() == srcAbilityId);
1133 };
1134 std::lock_guard guard(callerListLock_);
1135 auto record = std::find_if(callerList_.begin(), callerList_.end(), isExist);
1136 if (record != callerList_.end()) {
1137 TAG_LOGI(AAFwkTag::ABILITYMGR, "find same system ability caller record");
1138 callerList_.erase(record);
1139 }
1140 callerList_.emplace_back(std::make_shared<CallerRecord>(requestCode, systemAbilityRecord));
1141 TAG_LOGI(AAFwkTag::ABILITYMGR, "add system ability record end");
1142 }
1143
RecordSaCallerInfo(const Want & want)1144 void AbilityRecord::RecordSaCallerInfo(const Want &want)
1145 {
1146 saCallerInfo_ = std::make_shared<CallerAbilityInfo>();
1147 saCallerInfo_->callerTokenId = want.GetIntParam(Want::PARAM_RESV_CALLER_TOKEN, 0);
1148 saCallerInfo_->callerUid = want.GetIntParam(Want::PARAM_RESV_CALLER_UID, 0);
1149 saCallerInfo_->callerPid = want.GetIntParam(Want::PARAM_RESV_CALLER_PID, 0);
1150 saCallerInfo_->callerNativeName = want.GetStringParam(Want::PARAM_RESV_CALLER_NATIVE_NAME);
1151 }
1152
GetCallerRecordList() const1153 std::list<std::shared_ptr<CallerRecord>> AbilityRecord::GetCallerRecordList() const
1154 {
1155 std::lock_guard guard(callerListLock_);
1156 return callerList_;
1157 }
1158
GetCallerRecord() const1159 std::shared_ptr<AbilityRecord> AbilityRecord::GetCallerRecord() const
1160 {
1161 std::lock_guard guard(callerListLock_);
1162 if (callerList_.empty()) {
1163 return nullptr;
1164 }
1165 if (callerList_.back() == nullptr) {
1166 return nullptr;
1167 }
1168 return callerList_.back()->GetCaller();
1169 }
1170
GetCallerInfo() const1171 std::shared_ptr<CallerAbilityInfo> AbilityRecord::GetCallerInfo() const
1172 {
1173 std::lock_guard guard(callerListLock_);
1174 if (callerList_.empty() || callerList_.back() == nullptr) {
1175 return saCallerInfo_;
1176 }
1177 return callerList_.back()->GetCallerInfo();
1178 }
1179
IsConnectListEmpty()1180 bool AbilityRecord::IsConnectListEmpty()
1181 {
1182 std::lock_guard guard(connRecordListMutex_);
1183 return connRecordList_.empty();
1184 }
1185
GetConnectedListSize()1186 size_t AbilityRecord::GetConnectedListSize()
1187 {
1188 std::lock_guard guard(connRecordListMutex_);
1189 return std::count_if(connRecordList_.begin(), connRecordList_.end(), [](std::shared_ptr<ConnectionRecord> record) {
1190 return record && record->GetConnectState() == ConnectionState::CONNECTED;
1191 });
1192 }
1193
GetConnectingListSize()1194 size_t AbilityRecord::GetConnectingListSize()
1195 {
1196 std::lock_guard guard(connRecordListMutex_);
1197 return std::count_if(connRecordList_.begin(), connRecordList_.end(), [](std::shared_ptr<ConnectionRecord> record) {
1198 return record && record->GetConnectState() == ConnectionState::CONNECTING;
1199 });
1200 }
1201
GetConnectingRecord() const1202 std::shared_ptr<ConnectionRecord> AbilityRecord::GetConnectingRecord() const
1203 {
1204 std::lock_guard guard(connRecordListMutex_);
1205 auto connect =
1206 std::find_if(connRecordList_.begin(), connRecordList_.end(), [](std::shared_ptr<ConnectionRecord> record) {
1207 return record->GetConnectState() == ConnectionState::CONNECTING;
1208 });
1209 return (connect != connRecordList_.end()) ? *connect : nullptr;
1210 }
1211
GetConnectingRecordList()1212 std::list<std::shared_ptr<ConnectionRecord>> AbilityRecord::GetConnectingRecordList()
1213 {
1214 std::lock_guard guard(connRecordListMutex_);
1215 std::list<std::shared_ptr<ConnectionRecord>> connectingList;
1216 for (auto record : connRecordList_) {
1217 if (record && record->GetConnectState() == ConnectionState::CONNECTING) {
1218 connectingList.push_back(record);
1219 }
1220 }
1221 return connectingList;
1222 }
1223
GetInProgressRecordCount()1224 uint32_t AbilityRecord::GetInProgressRecordCount()
1225 {
1226 std::lock_guard guard(connRecordListMutex_);
1227 uint32_t count = 0;
1228 for (auto record : connRecordList_) {
1229 if (record && (record->GetConnectState() == ConnectionState::CONNECTING ||
1230 record->GetConnectState() == ConnectionState::CONNECTED)) {
1231 count++;
1232 }
1233 }
1234 return count;
1235 }
1236
GetDisconnectingRecord() const1237 std::shared_ptr<ConnectionRecord> AbilityRecord::GetDisconnectingRecord() const
1238 {
1239 return nullptr;
1240 }
1241
GetAbilityTypeString(std::string & typeStr)1242 void AbilityRecord::GetAbilityTypeString(std::string &typeStr)
1243 {
1244 }
1245
ConvertAbilityState(const AbilityState & state)1246 std::string AbilityRecord::ConvertAbilityState(const AbilityState &state)
1247 {
1248 return StateUtils::StateToStrMap(state);
1249 }
1250
ConvertAppState(const AppState & state)1251 std::string AbilityRecord::ConvertAppState(const AppState &state)
1252 {
1253 return StateUtils::AppStateToStrMap(state);
1254 }
1255
ConvertLifeCycleToAbilityState(const AbilityLifeCycleState & state)1256 int AbilityRecord::ConvertLifeCycleToAbilityState(const AbilityLifeCycleState &state)
1257 {
1258 return StateUtils::ConvertStateMap(state);
1259 }
1260
Dump(std::vector<std::string> & info)1261 void AbilityRecord::Dump(std::vector<std::string> &info)
1262 {
1263 }
1264
DumpUIExtensionRootHostInfo(std::vector<std::string> & info) const1265 void AbilityRecord::DumpUIExtensionRootHostInfo(std::vector<std::string> &info) const
1266 {
1267 }
1268
DumpAbilityState(std::vector<std::string> & info,bool isClient,const std::vector<std::string> & params)1269 void AbilityRecord::DumpAbilityState(
1270 std::vector<std::string> &info, bool isClient, const std::vector<std::string> ¶ms)
1271 {
1272 }
1273
SetStartTime()1274 void AbilityRecord::SetStartTime()
1275 {
1276 if (startTime_ == 0) {
1277 startTime_ = AbilityUtil::SystemTimeMillis();
1278 }
1279 }
1280
GetStartTime() const1281 int64_t AbilityRecord::GetStartTime() const
1282 {
1283 return startTime_;
1284 }
1285
DumpService(std::vector<std::string> & info,bool isClient) const1286 void AbilityRecord::DumpService(std::vector<std::string> &info, bool isClient) const
1287 {
1288 }
1289
DumpService(std::vector<std::string> & info,std::vector<std::string> & params,bool isClient) const1290 void AbilityRecord::DumpService(std::vector<std::string> &info, std::vector<std::string> ¶ms, bool isClient) const
1291 {
1292 }
1293
DumpUIExtensionPid(std::vector<std::string> & info,bool isUIExtension) const1294 void AbilityRecord::DumpUIExtensionPid(std::vector<std::string> &info, bool isUIExtension) const
1295 {
1296 }
1297
RemoveAbilityDeathRecipient() const1298 void AbilityRecord::RemoveAbilityDeathRecipient() const
1299 {
1300 }
1301
OnSchedulerDied(const wptr<IRemoteObject> & remote)1302 void AbilityRecord::OnSchedulerDied(const wptr<IRemoteObject> &remote)
1303 {
1304 }
1305
OnProcessDied()1306 void AbilityRecord::OnProcessDied()
1307 {
1308 }
1309
NotifyAnimationAbilityDied()1310 void AbilityRecord::NotifyAnimationAbilityDied()
1311 {
1312 }
1313
SetConnRemoteObject(const sptr<IRemoteObject> & remoteObject)1314 void AbilityRecord::SetConnRemoteObject(const sptr<IRemoteObject> &remoteObject)
1315 {
1316 connRemoteObject_ = remoteObject;
1317 }
1318
GetConnRemoteObject() const1319 sptr<IRemoteObject> AbilityRecord::GetConnRemoteObject() const
1320 {
1321 return connRemoteObject_;
1322 }
1323
IsNeverStarted() const1324 bool AbilityRecord::IsNeverStarted() const
1325 {
1326 if (UIExtensionUtils::IsUIExtension(GetAbilityInfo().extensionAbilityType)) {
1327 return startId_ == 0;
1328 }
1329 return startId_ == 0 && IsCreateByConnect();
1330 }
1331
AddStartId()1332 void AbilityRecord::AddStartId()
1333 {
1334 startId_++;
1335 }
GetStartId() const1336 int AbilityRecord::GetStartId() const
1337 {
1338 return startId_;
1339 }
1340
SetIsUninstallAbility()1341 void AbilityRecord::SetIsUninstallAbility()
1342 {
1343 isUninstall_ = true;
1344 }
1345
IsUninstallAbility() const1346 bool AbilityRecord::IsUninstallAbility() const
1347 {
1348 return isUninstall_;
1349 }
1350
SetLauncherRoot()1351 void AbilityRecord::SetLauncherRoot()
1352 {
1353 isLauncherRoot_ = true;
1354 }
1355
IsLauncherRoot() const1356 bool AbilityRecord::IsLauncherRoot() const
1357 {
1358 return isLauncherRoot_;
1359 }
1360
IsAbilityState(const AbilityState & state) const1361 bool AbilityRecord::IsAbilityState(const AbilityState &state) const
1362 {
1363 return (currentState_ == state);
1364 }
1365
IsActiveState() const1366 bool AbilityRecord::IsActiveState() const
1367 {
1368 return true;
1369 }
1370
SendEvent(uint32_t msg,uint32_t timeOut,int32_t param,bool isExtension,const std::string & taskName)1371 void AbilityRecord::SendEvent(uint32_t msg, uint32_t timeOut, int32_t param, bool isExtension,
1372 const std::string &taskName)
1373 {
1374 }
1375
SetWant(const Want & want)1376 void AbilityRecord::SetWant(const Want &want)
1377 {
1378 std::lock_guard guard(wantLock_);
1379 if (abilityInfo_.type == AppExecFwk::AbilityType::PAGE && isLaunching_) {
1380 TAG_LOGW(AAFwkTag::ABILITYMGR, "uIAbility launching");
1381 return;
1382 }
1383 auto multiThread = want_.GetBoolParam(MULTI_THREAD, false);
1384 auto errorInfoEnhance = want_.GetBoolParam(ERROR_INFO_ENHANCE, false);
1385 want_.CloseAllFd();
1386
1387 want_ = want;
1388 if (launchDebugInfo_.isDebugAppSet) {
1389 want_.SetParam(DEBUG_APP, launchDebugInfo_.debugApp);
1390 } else {
1391 want_.RemoveParam(DEBUG_APP);
1392 }
1393 if (launchDebugInfo_.isNativeDebugSet) {
1394 want_.SetParam(NATIVE_DEBUG, launchDebugInfo_.nativeDebug);
1395 } else {
1396 want_.RemoveParam(NATIVE_DEBUG);
1397 }
1398 if (launchDebugInfo_.isPerfCmdSet) {
1399 want_.SetParam(PERF_CMD, launchDebugInfo_.perfCmd);
1400 } else {
1401 want_.RemoveParam(PERF_CMD);
1402 }
1403 if (multiThread) {
1404 want_.SetParam(MULTI_THREAD, true);
1405 }
1406 if (errorInfoEnhance) {
1407 want_.SetParam(ERROR_INFO_ENHANCE, true);
1408 }
1409 if (want_.HasParameter(UISERVICEHOSTPROXY_KEY)) {
1410 want_.RemoveParam(UISERVICEHOSTPROXY_KEY);
1411 }
1412 }
1413
GetWant() const1414 Want AbilityRecord::GetWant() const
1415 {
1416 std::lock_guard guard(wantLock_);
1417 return want_;
1418 }
1419
RemoveSignatureInfo()1420 void AbilityRecord::RemoveSignatureInfo()
1421 {
1422 }
1423
GetElementName() const1424 AppExecFwk::ElementName AbilityRecord::GetElementName() const
1425 {
1426 std::lock_guard guard(wantLock_);
1427 return want_.GetElement();
1428 }
1429
IsDebugApp() const1430 bool AbilityRecord::IsDebugApp() const
1431 {
1432 std::lock_guard guard(wantLock_);
1433 return launchDebugInfo_.debugApp;
1434 }
1435
IsDebug() const1436 bool AbilityRecord::IsDebug() const
1437 {
1438 return false;
1439 }
1440
SetWindowMode(int32_t windowMode)1441 void AbilityRecord::SetWindowMode(int32_t windowMode)
1442 {
1443 std::lock_guard guard(wantLock_);
1444 want_.SetParam(Want::PARAM_RESV_WINDOW_MODE, windowMode);
1445 }
1446
RemoveWindowMode()1447 void AbilityRecord::RemoveWindowMode()
1448 {
1449 }
1450
UpdateRecoveryInfo(bool hasRecoverInfo)1451 void AbilityRecord::UpdateRecoveryInfo(bool hasRecoverInfo)
1452 {
1453 }
1454
GetRecoveryInfo()1455 bool AbilityRecord::GetRecoveryInfo()
1456 {
1457 std::lock_guard guard(wantLock_);
1458 return want_.GetBoolParam(Want::PARAM_ABILITY_RECOVERY_RESTART, false);
1459 }
1460
SetStartSetting(const std::shared_ptr<AbilityStartSetting> & setting)1461 void AbilityRecord::SetStartSetting(const std::shared_ptr<AbilityStartSetting> &setting)
1462 {
1463 lifeCycleStateInfo_.setting = setting;
1464 }
1465
GetStartSetting() const1466 std::shared_ptr<AbilityStartSetting> AbilityRecord::GetStartSetting() const
1467 {
1468 return lifeCycleStateInfo_.setting;
1469 }
1470
SetRestarting(const bool isRestart)1471 void AbilityRecord::SetRestarting(const bool isRestart)
1472 {
1473 }
1474
SetRestarting(const bool isRestart,int32_t canRestartCount)1475 void AbilityRecord::SetRestarting(const bool isRestart, int32_t canRestartCount)
1476 {
1477 }
1478
GetRestartCount() const1479 int32_t AbilityRecord::GetRestartCount() const
1480 {
1481 return restartCount_;
1482 }
1483
SetRestartCount(int32_t restartCount)1484 void AbilityRecord::SetRestartCount(int32_t restartCount)
1485 {
1486 restartCount_ = restartCount;
1487 }
1488
IsRestarting() const1489 bool AbilityRecord::IsRestarting() const
1490 {
1491 return isRestarting_;
1492 }
1493
GetKeepAlive() const1494 bool AbilityRecord::GetKeepAlive() const
1495 {
1496 return true;
1497 }
1498
SetLoading(bool status)1499 void AbilityRecord::SetLoading(bool status)
1500 {
1501 isLoading_ = status;
1502 }
1503
IsLoading() const1504 bool AbilityRecord::IsLoading() const
1505 {
1506 return isLoading_;
1507 }
1508
GetRestartTime()1509 int64_t AbilityRecord::GetRestartTime()
1510 {
1511 return restartTime_;
1512 }
1513
SetRestartTime(const int64_t restartTime)1514 void AbilityRecord::SetRestartTime(const int64_t restartTime)
1515 {
1516 restartTime_ = restartTime;
1517 }
1518
SetAppState(const AppState & state)1519 void AbilityRecord::SetAppState(const AppState &state)
1520 {
1521 appState_ = state;
1522 }
1523
GetAppState() const1524 AppState AbilityRecord::GetAppState() const
1525 {
1526 return appState_;
1527 }
1528
SetLaunchReason(const LaunchReason & reason)1529 void AbilityRecord::SetLaunchReason(const LaunchReason &reason)
1530 {
1531 lifeCycleStateInfo_.launchParam.launchReason = reason;
1532 }
1533
SetLaunchReasonMessage(const std::string & launchReasonMessage)1534 void AbilityRecord::SetLaunchReasonMessage(const std::string &launchReasonMessage)
1535 {
1536 lifeCycleStateInfo_.launchParam.launchReasonMessage = launchReasonMessage;
1537 }
1538
SetLastExitReason(const ExitReason & exitReason,const AppExecFwk::RunningProcessInfo & processInfo,const int64_t timestamp,bool withKillMsg)1539 void AbilityRecord::SetLastExitReason(const ExitReason &exitReason, const AppExecFwk::RunningProcessInfo &processInfo,
1540 const int64_t timestamp, bool withKillMsg)
1541 {
1542 std::string exitMsg = exitReason.exitMsg;
1543 std::string killMsg = "";
1544 if (withKillMsg) {
1545 killMsg = exitReason.exitMsg;
1546 }
1547 LastExitDetailInfo lastExitDetailInfo = {};
1548 lastExitDetailInfo.pid = processInfo.pid_;
1549 lastExitDetailInfo.uid = processInfo.uid_;
1550 lastExitDetailInfo.exitSubReason = exitReason.subReason;
1551 lastExitDetailInfo.rss = processInfo.rssValue;
1552 lastExitDetailInfo.pss = processInfo.pssValue;
1553 lastExitDetailInfo.timestamp = timestamp;
1554 lastExitDetailInfo.processName = processInfo.processName_;
1555 lastExitDetailInfo.exitMsg = killMsg;
1556 lifeCycleStateInfo_.launchParam.lastExitReason = CovertAppExitReasonToLastReason(exitReason.reason);
1557 lifeCycleStateInfo_.launchParam.lastExitMessage = exitMsg;
1558 lifeCycleStateInfo_.launchParam.lastExitDetailInfo = lastExitDetailInfo;
1559 }
1560
CovertAppExitReasonToLastReason(const Reason exitReason)1561 LastExitReason AbilityRecord::CovertAppExitReasonToLastReason(const Reason exitReason)
1562 {
1563 return LASTEXITREASON_UNKNOWN;
1564 }
1565
NotifyContinuationResult(int32_t result)1566 void AbilityRecord::NotifyContinuationResult(int32_t result)
1567 {
1568 lifecycleDeal_->NotifyContinuationResult(result);
1569 }
1570
SetMissionId(int32_t missionId)1571 void AbilityRecord::SetMissionId(int32_t missionId)
1572 {
1573 std::lock_guard guard(wantLock_);
1574 missionId_ = missionId;
1575 want_.RemoveParam(KEY_MISSION_ID);
1576 want_.SetParam(KEY_MISSION_ID, missionId_);
1577 }
1578
SetSessionInfo(sptr<SessionInfo> sessionInfo)1579 void AbilityRecord::SetSessionInfo(sptr<SessionInfo> sessionInfo)
1580 {
1581 std::lock_guard guard(sessionLock_);
1582 sessionInfo_ = sessionInfo;
1583 }
1584
GetSessionInfo() const1585 sptr<SessionInfo> AbilityRecord::GetSessionInfo() const
1586 {
1587 std::lock_guard guard(sessionLock_);
1588 return sessionInfo_;
1589 }
1590
UpdateSessionInfo(sptr<IRemoteObject> sessionToken)1591 void AbilityRecord::UpdateSessionInfo(sptr<IRemoteObject> sessionToken)
1592 {
1593 lifecycleDeal_->UpdateSessionToken(sessionToken);
1594 }
1595
SetMinimizeReason(bool fromUser)1596 void AbilityRecord::SetMinimizeReason(bool fromUser)
1597 {
1598 minimizeReason_ = fromUser;
1599 }
1600
SetSceneFlag(uint32_t sceneFlag)1601 void AbilityRecord::SetSceneFlag(uint32_t sceneFlag)
1602 {
1603 lifeCycleStateInfo_.sceneFlag = sceneFlag;
1604 }
1605
SetAppIndex(const int32_t appIndex)1606 void AbilityRecord::SetAppIndex(const int32_t appIndex)
1607 {
1608 appIndex_ = appIndex;
1609 }
1610
GetAppIndex() const1611 int32_t AbilityRecord::GetAppIndex() const
1612 {
1613 return appIndex_;
1614 }
1615
SetWantAppIndex(const int32_t appIndex)1616 void AbilityRecord::SetWantAppIndex(const int32_t appIndex)
1617 {
1618 std::lock_guard guard(wantLock_);
1619 want_.SetParam(Want::PARAM_APP_CLONE_INDEX_KEY, appIndex);
1620 }
1621
GetWantAppIndex() const1622 int32_t AbilityRecord::GetWantAppIndex() const
1623 {
1624 std::lock_guard guard(wantLock_);
1625 return want_.GetIntParam(Want::PARAM_APP_CLONE_INDEX_KEY, 0);
1626 }
1627
IsMinimizeFromUser() const1628 bool AbilityRecord::IsMinimizeFromUser() const
1629 {
1630 return minimizeReason_;
1631 }
1632
SetClearMissionFlag(bool clearMissionFlag)1633 void AbilityRecord::SetClearMissionFlag(bool clearMissionFlag)
1634 {
1635 clearMissionFlag_= clearMissionFlag;
1636 }
1637
IsClearMissionFlag()1638 bool AbilityRecord::IsClearMissionFlag()
1639 {
1640 return clearMissionFlag_;
1641 }
1642
GetMissionId() const1643 int32_t AbilityRecord::GetMissionId() const
1644 {
1645 return missionId_;
1646 }
1647
SetSpecifiedFlag(const std::string & flag)1648 void AbilityRecord::SetSpecifiedFlag(const std::string &flag)
1649 {
1650 specifiedFlag_ = flag;
1651 }
1652
GetSpecifiedFlag() const1653 std::string AbilityRecord::GetSpecifiedFlag() const
1654 {
1655 return specifiedFlag_;
1656 }
1657
1658 // new version --start
IsStartedByCall() const1659 bool AbilityRecord::IsStartedByCall() const
1660 {
1661 return isStartedByCall_;
1662 }
1663
SetStartedByCall(const bool isFlag)1664 void AbilityRecord::SetStartedByCall(const bool isFlag)
1665 {
1666 isStartedByCall_ = isFlag;
1667 }
1668
IsStartToBackground() const1669 bool AbilityRecord::IsStartToBackground() const
1670 {
1671 return isStartToBackground_;
1672 }
1673
SetStartToBackground(const bool flag)1674 void AbilityRecord::SetStartToBackground(const bool flag)
1675 {
1676 isStartToBackground_ = flag;
1677 }
1678
IsStartToForeground() const1679 bool AbilityRecord::IsStartToForeground() const
1680 {
1681 return isStartToForeground_;
1682 }
1683
SetStartToForeground(const bool flag)1684 void AbilityRecord::SetStartToForeground(const bool flag)
1685 {
1686 isStartToForeground_ = flag;
1687 }
1688
IsCallerSetProcess() const1689 bool AbilityRecord::IsCallerSetProcess() const
1690 {
1691 return isCallerSetProcess_.load();
1692 }
1693
SetCallerSetProcess(const bool flag)1694 void AbilityRecord::SetCallerSetProcess(const bool flag)
1695 {
1696 isCallerSetProcess_.store(flag);
1697 }
1698
CallRequest()1699 void AbilityRecord::CallRequest()
1700 {
1701 scheduler_->CallRequest();
1702 }
1703
CallRequestDone(const sptr<IRemoteObject> & callStub) const1704 bool AbilityRecord::CallRequestDone(const sptr<IRemoteObject> &callStub) const
1705 {
1706 return true;
1707 }
1708
Resolve(const AbilityRequest & abilityRequest)1709 ResolveResultType AbilityRecord::Resolve(const AbilityRequest &abilityRequest)
1710 {
1711 return ResolveResultType::OK_NO_REMOTE_OBJ;
1712 }
1713
ReleaseCall(const sptr<IAbilityConnection> & connect)1714 bool AbilityRecord::ReleaseCall(const sptr<IAbilityConnection>& connect)
1715 {
1716 return callContainer_->RemoveCallRecord(connect);
1717 }
1718
IsExistConnection(const sptr<IAbilityConnection> & connect)1719 bool AbilityRecord::IsExistConnection(const sptr<IAbilityConnection> &connect)
1720 {
1721 return callContainer_->IsExistConnection(connect);
1722 }
1723
IsNeedToCallRequest() const1724 bool AbilityRecord::IsNeedToCallRequest() const
1725 {
1726 return callContainer_->IsNeedToCallRequest();
1727 }
1728
ContinueAbility(const std::string & deviceId,uint32_t versionCode)1729 void AbilityRecord::ContinueAbility(const std::string& deviceId, uint32_t versionCode)
1730 {
1731 lifecycleDeal_->ContinueAbility(deviceId, versionCode);
1732 }
1733
SetSwitchingPause(bool state)1734 void AbilityRecord::SetSwitchingPause(bool state)
1735 {
1736 isSwitchingPause_ = state;
1737 }
1738
IsSwitchingPause()1739 bool AbilityRecord::IsSwitchingPause()
1740 {
1741 return isSwitchingPause_;
1742 }
1743
SetOwnerMissionUserId(int32_t userId)1744 void AbilityRecord::SetOwnerMissionUserId(int32_t userId)
1745 {
1746 ownerMissionUserId_ = userId;
1747 }
1748
GetOwnerMissionUserId()1749 int32_t AbilityRecord::GetOwnerMissionUserId()
1750 {
1751 return ownerMissionUserId_;
1752 }
1753
DumpClientInfo(std::vector<std::string> & info,const std::vector<std::string> & params,bool isClient,bool dumpConfig) const1754 void AbilityRecord::DumpClientInfo(std::vector<std::string> &info, const std::vector<std::string> ¶ms,
1755 bool isClient, bool dumpConfig) const
1756 {
1757 }
1758
DumpAbilityInfoDone(std::vector<std::string> & infos)1759 void AbilityRecord::DumpAbilityInfoDone(std::vector<std::string> &infos)
1760 {
1761 }
1762
1763 #ifdef SUPPORT_UPMS
GrantUriPermission(Want & want,std::string targetBundleName,bool isSandboxApp,uint32_t tokenId)1764 void AbilityRecord::GrantUriPermission(Want &want, std::string targetBundleName, bool isSandboxApp, uint32_t tokenId)
1765 {
1766 }
1767
GrantUriPermission(const std::vector<std::string> & uriVec,int32_t flag,const std::string & targetBundleName,uint32_t callerTokenId)1768 void AbilityRecord::GrantUriPermission(const std::vector<std::string> &uriVec, int32_t flag,
1769 const std::string &targetBundleName, uint32_t callerTokenId)
1770 {
1771 }
1772
GrantUriPermission()1773 void AbilityRecord::GrantUriPermission()
1774 {
1775 }
1776 #endif // SUPPORT_UPMS
1777
1778 #ifdef WITH_DLP
HandleDlpAttached()1779 void AbilityRecord::HandleDlpAttached()
1780 {
1781 }
1782
HandleDlpClosed()1783 void AbilityRecord::HandleDlpClosed()
1784 {
1785 }
1786 #endif // WITH_DLP
1787
NotifyRemoveShellProcess(int32_t type)1788 void AbilityRecord::NotifyRemoveShellProcess(int32_t type)
1789 {
1790 }
1791
NotifyMissionBindPid()1792 void AbilityRecord::NotifyMissionBindPid()
1793 {
1794 }
1795
GetCurrentAccountId() const1796 int32_t AbilityRecord::GetCurrentAccountId() const
1797 {
1798 return 0;
1799 }
1800
SetPendingState(AbilityState state)1801 void AbilityRecord::SetPendingState(AbilityState state)
1802 {
1803 pendingState_.store(state);
1804 }
1805
GetPendingState() const1806 AbilityState AbilityRecord::GetPendingState() const
1807 {
1808 return pendingState_.load();
1809 }
1810
IsNeedBackToOtherMissionStack()1811 bool AbilityRecord::IsNeedBackToOtherMissionStack()
1812 {
1813 return isNeedBackToOtherMissionStack_;
1814 }
1815
SetNeedBackToOtherMissionStack(bool isNeedBackToOtherMissionStack)1816 void AbilityRecord::SetNeedBackToOtherMissionStack(bool isNeedBackToOtherMissionStack)
1817 {
1818 isNeedBackToOtherMissionStack_ = isNeedBackToOtherMissionStack;
1819 }
1820
GetOtherMissionStackAbilityRecord() const1821 std::shared_ptr<AbilityRecord> AbilityRecord::GetOtherMissionStackAbilityRecord() const
1822 {
1823 return otherMissionStackAbilityRecord_.lock();
1824 }
1825
SetOtherMissionStackAbilityRecord(const std::shared_ptr<AbilityRecord> & abilityRecord)1826 void AbilityRecord::SetOtherMissionStackAbilityRecord(const std::shared_ptr<AbilityRecord> &abilityRecord)
1827 {
1828 otherMissionStackAbilityRecord_ = abilityRecord;
1829 }
1830
GetCollaboratorType() const1831 int32_t AbilityRecord::GetCollaboratorType() const
1832 {
1833 return collaboratorType_;
1834 }
1835
GetMissionAffinity() const1836 std::string AbilityRecord::GetMissionAffinity() const
1837 {
1838 return missionAffinity_;
1839 }
1840
SetLockedState(bool lockedState)1841 void AbilityRecord::SetLockedState(bool lockedState)
1842 {
1843 lockedState_ = lockedState;
1844 }
1845
GetLockedState()1846 bool AbilityRecord::GetLockedState()
1847 {
1848 return lockedState_;
1849 }
1850
SetAttachDebug(const bool isAttachDebug)1851 void AbilityRecord::SetAttachDebug(const bool isAttachDebug)
1852 {
1853 isAttachDebug_ = isAttachDebug;
1854 }
1855
SetAssertDebug(bool isAssertDebug)1856 void AbilityRecord::SetAssertDebug(bool isAssertDebug)
1857 {
1858 isAssertDebug_ = isAssertDebug;
1859 }
1860
AddAbilityWindowStateMap(uint64_t uiExtensionComponentId,AbilityWindowState abilityWindowState)1861 void AbilityRecord::AddAbilityWindowStateMap(uint64_t uiExtensionComponentId,
1862 AbilityWindowState abilityWindowState)
1863 {
1864 abilityWindowStateMap_[uiExtensionComponentId] = abilityWindowState;
1865 }
1866
RemoveAbilityWindowStateMap(uint64_t uiExtensionComponentId)1867 void AbilityRecord::RemoveAbilityWindowStateMap(uint64_t uiExtensionComponentId)
1868 {
1869 }
1870
IsAbilityWindowReady()1871 bool AbilityRecord::IsAbilityWindowReady()
1872 {
1873 return true;
1874 }
1875
SetAbilityWindowState(const sptr<SessionInfo> & sessionInfo,WindowCommand winCmd,bool isFinished)1876 void AbilityRecord::SetAbilityWindowState(const sptr<SessionInfo> &sessionInfo, WindowCommand winCmd, bool isFinished)
1877 {
1878 }
1879
CreateModalUIExtension(const Want & want)1880 int32_t AbilityRecord::CreateModalUIExtension(const Want &want)
1881 {
1882 TAG_LOGD(AAFwkTag::ABILITYMGR, "call");
1883 CHECK_POINTER_AND_RETURN(scheduler_, INNER_ERR);
1884 return scheduler_->CreateModalUIExtension(want);
1885 }
1886
SetURI(const std::string & uri)1887 void AbilityRecord::SetURI(const std::string &uri)
1888 {
1889 uri_ = uri;
1890 }
1891
GetURI() const1892 std::string AbilityRecord::GetURI() const
1893 {
1894 return uri_;
1895 }
1896
SetProcessName(const std::string & process)1897 void AbilityRecord::SetProcessName(const std::string &process)
1898 {
1899 abilityInfo_.process = process;
1900 }
1901
GetProcessName() const1902 std::string AbilityRecord::GetProcessName() const
1903 {
1904 return abilityInfo_.process;
1905 }
1906
SetCustomProcessFlag(const std::string & process)1907 void AbilityRecord::SetCustomProcessFlag(const std::string &process)
1908 {
1909 customProcessFlag_ = process;
1910 }
1911
GetCustomProcessFlag() const1912 std::string AbilityRecord::GetCustomProcessFlag() const
1913 {
1914 return customProcessFlag_;
1915 }
1916
SetExtensionProcessMode(const uint32_t & extensionProcessMode)1917 void AbilityRecord::SetExtensionProcessMode(const uint32_t &extensionProcessMode)
1918 {
1919 extensionProcessMode_ = extensionProcessMode;
1920 }
1921
GetExtensionProcessMode() const1922 uint32_t AbilityRecord::GetExtensionProcessMode() const
1923 {
1924 return extensionProcessMode_;
1925 }
1926
SetUIExtensionAbilityId(const int32_t uiExtensionAbilityId)1927 void AbilityRecord::SetUIExtensionAbilityId(const int32_t uiExtensionAbilityId)
1928 {
1929 uiExtensionAbilityId_ = uiExtensionAbilityId;
1930 }
1931
GetUIExtensionAbilityId() const1932 int32_t AbilityRecord::GetUIExtensionAbilityId() const
1933 {
1934 return uiExtensionAbilityId_;
1935 }
1936
BackgroundAbilityWindowDelayed()1937 bool AbilityRecord::BackgroundAbilityWindowDelayed()
1938 {
1939 return backgroundAbilityWindowDelayed_.load();
1940 }
1941
DoBackgroundAbilityWindowDelayed(bool needBackground)1942 void AbilityRecord::DoBackgroundAbilityWindowDelayed(bool needBackground)
1943 {
1944 backgroundAbilityWindowDelayed_.store(needBackground);
1945 }
1946
IsSceneBoard() const1947 bool AbilityRecord::IsSceneBoard() const
1948 {
1949 return AbilityUtil::IsSceneBoard(abilityInfo_.bundleName, abilityInfo_.name);
1950 }
1951
SetRestartAppFlag(bool isRestartApp)1952 void AbilityRecord::SetRestartAppFlag(bool isRestartApp)
1953 {
1954 isRestartApp_ = isRestartApp;
1955 }
1956
GetRestartAppFlag() const1957 bool AbilityRecord::GetRestartAppFlag() const
1958 {
1959 return isRestartApp_;
1960 }
1961
SetKillForPermissionUpdateFlag(bool isKillForPermissionUpdate)1962 void AbilityRecord::SetKillForPermissionUpdateFlag(bool isKillForPermissionUpdate)
1963 {
1964 isKillForPermissionUpdate_ = isKillForPermissionUpdate;
1965 }
1966
GetKillForPermissionUpdateFlag() const1967 bool AbilityRecord::GetKillForPermissionUpdateFlag() const
1968 {
1969 return isKillForPermissionUpdate_;
1970 }
1971
UpdateUIExtensionInfo(const WantParams & wantParams)1972 void AbilityRecord::UpdateUIExtensionInfo(const WantParams &wantParams)
1973 {
1974 }
1975
SetSpecifyTokenId(uint32_t specifyTokenId)1976 void AbilityRecord::SetSpecifyTokenId(uint32_t specifyTokenId)
1977 {
1978 specifyTokenId_ = specifyTokenId;
1979 }
1980
SetDebugAppByWaitingDebugFlag()1981 void AbilityRecord::SetDebugAppByWaitingDebugFlag()
1982 {
1983 }
1984
SaveConnectWant(const Want & want)1985 void AbilityRecord::SaveConnectWant(const Want &want)
1986 {
1987 connectWant_ = std::make_shared<Want>(want);
1988 }
1989
UpdateConnectWant()1990 void AbilityRecord::UpdateConnectWant()
1991 {
1992 }
1993
RemoveConnectWant()1994 void AbilityRecord::RemoveConnectWant()
1995 {
1996 }
1997
UpdateDmsCallerInfo(Want & want)1998 void AbilityRecord::UpdateDmsCallerInfo(Want &want)
1999 {
2000 }
2001
SetDebugUIExtension()2002 void AbilityRecord::SetDebugUIExtension()
2003 {
2004 }
2005
ScheduleCollaborate(const Want & want)2006 void AbilityRecord::ScheduleCollaborate(const Want &want)
2007 {
2008 }
2009
NotifyAbilityRequestFailure(const std::string & requestId,const AppExecFwk::ElementName & element,const std::string & message,int32_t resultCode)2010 void AbilityRecord::NotifyAbilityRequestFailure(const std::string &requestId, const AppExecFwk::ElementName &element,
2011 const std::string &message, int32_t resultCode)
2012 {
2013 }
2014
UpdateUIExtensionBindInfo(const WantParams & wantParams)2015 void AbilityRecord::UpdateUIExtensionBindInfo(const WantParams &wantParams)
2016 {
2017 }
SendTerminateAbilityErrorEvent(int32_t errCode)2018 void AbilityRecord::SendTerminateAbilityErrorEvent(int32_t errCode)
2019 {
2020 }
2021 } // namespace AAFwk
2022 } // namespace OHOS
2023