1eace7efcSopenharmony_ci/* 2eace7efcSopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3eace7efcSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4eace7efcSopenharmony_ci * you may not use this file except in compliance with the License. 5eace7efcSopenharmony_ci * You may obtain a copy of the License at 6eace7efcSopenharmony_ci * 7eace7efcSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8eace7efcSopenharmony_ci * 9eace7efcSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10eace7efcSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11eace7efcSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12eace7efcSopenharmony_ci * See the License for the specific language governing permissions and 13eace7efcSopenharmony_ci * limitations under the License. 14eace7efcSopenharmony_ci */ 15eace7efcSopenharmony_ci 16eace7efcSopenharmony_ci#include "app_death_recipient.h" 17eace7efcSopenharmony_ci#include "app_mgr_service_inner.h" 18eace7efcSopenharmony_ci#include "hilog_tag_wrapper.h" 19eace7efcSopenharmony_ci 20eace7efcSopenharmony_cinamespace OHOS { 21eace7efcSopenharmony_cinamespace AppExecFwk { 22eace7efcSopenharmony_cinamespace { 23eace7efcSopenharmony_ciconst std::string TASK_ON_REMOTE_DIED = "OnRemoteDiedTask"; 24eace7efcSopenharmony_ci} // namespace 25eace7efcSopenharmony_ci 26eace7efcSopenharmony_civoid AppDeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &remote) 27eace7efcSopenharmony_ci{ 28eace7efcSopenharmony_ci if (remote == nullptr) { 29eace7efcSopenharmony_ci TAG_LOGE(AAFwkTag::APPMGR, "null remote"); 30eace7efcSopenharmony_ci return; 31eace7efcSopenharmony_ci } 32eace7efcSopenharmony_ci 33eace7efcSopenharmony_ci auto handler = handler_.lock(); 34eace7efcSopenharmony_ci if (!handler) { 35eace7efcSopenharmony_ci TAG_LOGE(AAFwkTag::APPMGR, "null handler"); 36eace7efcSopenharmony_ci return; 37eace7efcSopenharmony_ci } 38eace7efcSopenharmony_ci auto serviceInner = appMgrServiceInner_.lock(); 39eace7efcSopenharmony_ci if (!serviceInner) { 40eace7efcSopenharmony_ci TAG_LOGE(AAFwkTag::APPMGR, "null serviceInner"); 41eace7efcSopenharmony_ci return; 42eace7efcSopenharmony_ci } 43eace7efcSopenharmony_ci 44eace7efcSopenharmony_ci auto onRemoteDiedFunc = [serviceInner, remote, 45eace7efcSopenharmony_ci isRenderProcess = isRenderProcess_, 46eace7efcSopenharmony_ci isChildProcess = isChildProcess_]() { 47eace7efcSopenharmony_ci serviceInner->OnRemoteDied(remote, isRenderProcess, isChildProcess); 48eace7efcSopenharmony_ci }; 49eace7efcSopenharmony_ci handler->SubmitTask(onRemoteDiedFunc, TASK_ON_REMOTE_DIED); 50eace7efcSopenharmony_ci} 51eace7efcSopenharmony_ci 52eace7efcSopenharmony_civoid AppDeathRecipient::SetTaskHandler(const std::shared_ptr<AAFwk::TaskHandlerWrap> &handler) 53eace7efcSopenharmony_ci{ 54eace7efcSopenharmony_ci handler_ = handler; 55eace7efcSopenharmony_ci} 56eace7efcSopenharmony_ci 57eace7efcSopenharmony_civoid AppDeathRecipient::SetAppMgrServiceInner(const std::shared_ptr<AppMgrServiceInner> &serviceInner) 58eace7efcSopenharmony_ci{ 59eace7efcSopenharmony_ci appMgrServiceInner_ = serviceInner; 60eace7efcSopenharmony_ci} 61eace7efcSopenharmony_ci 62eace7efcSopenharmony_civoid AppDeathRecipient::SetIsRenderProcess(bool isRenderProcess) 63eace7efcSopenharmony_ci{ 64eace7efcSopenharmony_ci isRenderProcess_ = isRenderProcess; 65eace7efcSopenharmony_ci} 66eace7efcSopenharmony_ci 67eace7efcSopenharmony_civoid AppDeathRecipient::SetIsChildProcess(bool isChildProcess) 68eace7efcSopenharmony_ci{ 69eace7efcSopenharmony_ci isChildProcess_ = isChildProcess; 70eace7efcSopenharmony_ci} 71eace7efcSopenharmony_ci 72eace7efcSopenharmony_ciAppStateCallbackDeathRecipient::AppStateCallbackDeathRecipient(std::weak_ptr<AppMgrServiceInner> appMgrServiceInner) 73eace7efcSopenharmony_ci : appMgrServiceInner_(appMgrServiceInner) {} 74eace7efcSopenharmony_ci 75eace7efcSopenharmony_civoid AppStateCallbackDeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &remote) 76eace7efcSopenharmony_ci{ 77eace7efcSopenharmony_ci auto appMgrInner = appMgrServiceInner_.lock(); 78eace7efcSopenharmony_ci if (appMgrInner) { 79eace7efcSopenharmony_ci appMgrInner->RemoveDeadAppStateCallback(remote); 80eace7efcSopenharmony_ci } 81eace7efcSopenharmony_ci} 82eace7efcSopenharmony_ci} // namespace AppExecFwk 83eace7efcSopenharmony_ci} // namespace OHOS 84