123b3eb3cSopenharmony_ci/* 223b3eb3cSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 323b3eb3cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 423b3eb3cSopenharmony_ci * you may not use this file except in compliance with the License. 523b3eb3cSopenharmony_ci * You may obtain a copy of the License at 623b3eb3cSopenharmony_ci * 723b3eb3cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 823b3eb3cSopenharmony_ci * 923b3eb3cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1023b3eb3cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1123b3eb3cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1223b3eb3cSopenharmony_ci * See the License for the specific language governing permissions and 1323b3eb3cSopenharmony_ci * limitations under the License. 1423b3eb3cSopenharmony_ci */ 1523b3eb3cSopenharmony_ci 1623b3eb3cSopenharmony_ci#include "base/log/exception_handler.h" 1723b3eb3cSopenharmony_ci 1823b3eb3cSopenharmony_ci#include "app_mgr_client.h" 1923b3eb3cSopenharmony_ci#include "application_data_manager.h" 2023b3eb3cSopenharmony_ci 2123b3eb3cSopenharmony_ci#include "core/common/ace_application_info.h" 2223b3eb3cSopenharmony_ci 2323b3eb3cSopenharmony_cinamespace OHOS::Ace { 2423b3eb3cSopenharmony_ciconst std::string NAME = "name"; 2523b3eb3cSopenharmony_ciconst std::string MESSAGE = "message"; 2623b3eb3cSopenharmony_ciconst std::string STACK = "stack"; 2723b3eb3cSopenharmony_cistatic void KillApplicationByUid() 2823b3eb3cSopenharmony_ci{ 2923b3eb3cSopenharmony_ci auto appMgrClient = std::make_unique<AppExecFwk::AppMgrClient>(); 3023b3eb3cSopenharmony_ci CHECK_NULL_VOID(appMgrClient); 3123b3eb3cSopenharmony_ci auto result = appMgrClient->ConnectAppMgrService(); 3223b3eb3cSopenharmony_ci if (result != AppExecFwk::AppMgrResultCode::RESULT_OK) { 3323b3eb3cSopenharmony_ci LOGE("failed to ConnectAppMgrService %{public}d", result); 3423b3eb3cSopenharmony_ci return; 3523b3eb3cSopenharmony_ci } 3623b3eb3cSopenharmony_ci auto ret = appMgrClient->KillApplicationSelf(); 3723b3eb3cSopenharmony_ci if (ret != AppExecFwk::AppMgrResultCode::RESULT_OK) { 3823b3eb3cSopenharmony_ci LOGE("Fail to kill application by uid. %{public}d", ret); 3923b3eb3cSopenharmony_ci return; 4023b3eb3cSopenharmony_ci } 4123b3eb3cSopenharmony_ci} 4223b3eb3cSopenharmony_ci 4323b3eb3cSopenharmony_civoid ExceptionHandler::HandleJsException( 4423b3eb3cSopenharmony_ci const std::string& exceptionMsg, const JsErrorObject& errorInfo) 4523b3eb3cSopenharmony_ci{ 4623b3eb3cSopenharmony_ci AppExecFwk::ErrorObject errorObject = { 4723b3eb3cSopenharmony_ci .name = errorInfo.name, 4823b3eb3cSopenharmony_ci .message = errorInfo.message, 4923b3eb3cSopenharmony_ci .stack = errorInfo.stack 5023b3eb3cSopenharmony_ci }; 5123b3eb3cSopenharmony_ci auto hasErrorObserver = AppExecFwk::ApplicationDataManager::GetInstance().NotifyUnhandledException(exceptionMsg); 5223b3eb3cSopenharmony_ci auto isNotifySuccess = AppExecFwk::ApplicationDataManager::GetInstance().NotifyExceptionObject(errorObject); 5323b3eb3cSopenharmony_ci if (!hasErrorObserver && !isNotifySuccess) { 5423b3eb3cSopenharmony_ci KillApplicationByUid(); 5523b3eb3cSopenharmony_ci } 5623b3eb3cSopenharmony_ci} 5723b3eb3cSopenharmony_ci} // namespace OHOS::Ace 58