• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> &params)
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> &params, 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> &params,
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