From b82f5cafb29252566be5d004e23f3a282482ce6c Mon Sep 17 00:00:00 2001 From: zhang_hao_zheng Date: Wed, 13 Aug 2025 09:08:02 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=A2=9Euri=5Fpermission=E5=AF=B9?= =?UTF-8?q?appCloneIndex=E7=9A=84=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hao_zheng Change-Id: I57469e80805ec6804659c809898d4a803beb261e --- .../src/ets_uri_perm_mgr.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp b/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp index 0ba54b28cb1..264648fff68 100644 --- a/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp +++ b/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp @@ -90,6 +90,13 @@ static void grantUriPermissionCallbackSync([[maybe_unused]]ani_env *env, TAG_LOGE(AAFwkTag::URIPERMMGR, "env null"); return; } + if (appCloneIndex < 0) { + TAG_LOGE(AAFwkTag::URIPERMMGR, "appCloneIndex invalid"); + AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INVALID_PARAM, + "Param appCloneIndex is invalid, the value less than 0."), + CreateDouble(env, ERR_FAILURE)); + return; + } auto selfToken = IPCSkeleton::GetSelfTokenID(); ani_object etsErrCode = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_OK); if (!Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(selfToken)) { @@ -124,6 +131,13 @@ static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, TAG_LOGE(AAFwkTag::URIPERMMGR, "env null"); return; } + if (appCloneIndex < 0) { + TAG_LOGE(AAFwkTag::URIPERMMGR, "appCloneIndex invalid"); + AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INVALID_PARAM, + "Param appCloneIndex is invalid, the value less than 0."), + CreateDouble(env, ERR_FAILURE)); + return; + } auto selfToken = IPCSkeleton::GetSelfTokenID(); ani_object etsErrCode = EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_OK); if (!Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(selfToken)) { -- Gitee From a4538ba2aebb535267b08c4fedba286764f365d3 Mon Sep 17 00:00:00 2001 From: zhang_hao_zheng Date: Wed, 13 Aug 2025 09:40:57 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=A0=81&=E6=96=B0=E5=A2=9E=E9=94=81=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hao_zheng Change-Id: I7c518f2c0a1c64b7bf1c4bc2b734aceb08149376 --- .../src/ets_application_context_utils.cpp | 43 +++++++++++-------- .../ets/application/ApplicationContext.ets | 4 +- .../context/application_context.h | 2 +- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp index 27d58460f03..a1987ebc50b 100644 --- a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp +++ b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp @@ -40,6 +40,7 @@ const std::string TYPE_ABILITY_LIFECYCLE = "abilityLifecycle"; const std::string TYPE_INTEROP_ABILITY_LIFECYCLE = "interopAbilityLifecycle"; } +std::mutex g_abilityLifecycleCallbackLock;; std::shared_ptr abilityLifecycleCallback_ = nullptr; std::mutex g_interopAbilityLifecycleCallbackLock; std::shared_ptr interopAbilityLifecycleCallback_ = nullptr; @@ -584,25 +585,26 @@ ani_int EtsApplicationContextUtils::NativeOnLifecycleCallbackSync(ani_env *env, TAG_LOGD(AAFwkTag::APPKIT, "NativeOnLifecycleCallbackSync Call"); if (env == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "env is nullptr"); - return ani_int(ERROR_CODE_NULL_ENV); + EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } auto etsContext = GeApplicationContext(env, aniObj); if (etsContext == nullptr) { - EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); - return ani_int(ERROR_CODE_NULL_CONTEXT); + EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } std::string stdType; if (!AppExecFwk::GetStdString(env, type, stdType)) { TAG_LOGE(AAFwkTag::APPKIT, "parse type failed"); EtsErrorUtil::ThrowInvalidParamError(env, "Failed to parse param type. Type must be a string."); - return ani_int(ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } TAG_LOGD(AAFwkTag::APPKIT, "type=%{public}s", stdType.c_str()); if (stdType == TYPE_ABILITY_LIFECYCLE) { return etsContext->RegisterAbilityLifecycleCallback(env, callback); } EtsErrorUtil::ThrowInvalidParamError(env, "Unknown type."); - return ani_int(ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } void EtsApplicationContextUtils::NativeOnInteropLifecycleCallbackSync(ani_env *env, @@ -638,11 +640,18 @@ ani_int EtsApplicationContextUtils::RegisterAbilityLifecycleCallback(ani_env *en auto applicationContext = applicationContext_.lock(); if (applicationContext == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "applicationContext is null"); - EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); - return ani_int(ERROR_CODE_NULL_CONTEXT); + EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } + std::lock_guard lock(g_abilityLifecycleCallbackLock); if (abilityLifecycleCallback_ != nullptr) { - return ani_int(abilityLifecycleCallback_->Register(callback)); + auto result = abilityLifecycleCallback_->Register(callback); + if (result < 0) { + TAG_LOGE(AAFwkTag::APPKIT, "register failed: %{public}d", result); + EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; + } + return ani_int(result); } abilityLifecycleCallback_ = std::make_shared(env); @@ -654,11 +663,11 @@ ani_int EtsApplicationContextUtils::RegisterAbilityLifecycleCallback(ani_env *en if (callbackId == static_cast(ERROR_CODE_NULL_ENV) || callbackId == static_cast(ERROR_CODE_NULL_CALLBACK)) { EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ani_int(ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } - EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INNER); - return ani_int(callbackId); + EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); + return ANI_ERROR; } void EtsApplicationContextUtils::RegisterInteropAbilityLifecycleCallback(ani_env *env, ani_object callback) @@ -697,14 +706,14 @@ void EtsApplicationContextUtils::NativeOffLifecycleCallbackSync(ani_env *env, if (env == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "env is nullptr"); AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, - (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT, "env is nullptr"), nullptr); + (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_PARAM, "env is nullptr"), nullptr); return; } auto etsContext = GeApplicationContext(env, aniObj); if (etsContext == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "etsContext is null"); AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, - (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT, "etsContext is null"), nullptr); + (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_PARAM, "etsContext is null"), nullptr); return; } std::string stdType; @@ -759,10 +768,10 @@ void EtsApplicationContextUtils::UnregisterAbilityLifecycleCallback(ani_env *env if (applicationContext == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "applicationContext is null"); AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, - (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT, "applicationContext is null"), nullptr); + (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_PARAM, "applicationContext is null"), nullptr); return; } - + std::lock_guard lock(g_abilityLifecycleCallbackLock); if (abilityLifecycleCallback_ == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "abilityLifecycleCallback_ is null"); AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, @@ -777,7 +786,7 @@ void EtsApplicationContextUtils::UnregisterAbilityLifecycleCallback(ani_env *env } TAG_LOGE(AAFwkTag::APPKIT, "failed to unregister"); AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, - (ani_int)AbilityErrorCode::ERROR_CODE_INNER, "failed to unregister"), nullptr); + (ani_int)AbilityErrorCode::ERROR_CODE_INVALID_PARAM, "failed to unregister"), nullptr); } void EtsApplicationContextUtils::UnregisterInteropAbilityLifecycleCallback(ani_env *env, ani_object callback) @@ -1015,7 +1024,7 @@ void EtsApplicationContextUtils::BindApplicationContextFunc(ani_env* aniEnv) "L@ohos/app/ability/Want/Want;Lutils/AbilityUtils/AsyncCallbackWrapper;:V", reinterpret_cast(EtsApplicationContextUtils::PreloadUIExtensionAbility)}, ani_native_function {"nativeOnLifecycleCallbackSync", - "Lstd/core/String;Lstd/core/Object;:I", + "Lstd/core/String;L@ohos/app/ability/AbilityLifecycleCallback/AbilityLifecycleCallback;:I", reinterpret_cast(EtsApplicationContextUtils::NativeOnLifecycleCallbackSync)}, ani_native_function {"nativeOffLifecycleCallbackSync", "Lstd/core/String;ILutils/AbilityUtils/AsyncCallbackWrapper;:V", diff --git a/frameworks/ets/ets/application/ApplicationContext.ets b/frameworks/ets/ets/application/ApplicationContext.ets index b80fe9d85b3..3d30e769f38 100644 --- a/frameworks/ets/ets/application/ApplicationContext.ets +++ b/frameworks/ets/ets/application/ApplicationContext.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import AbilityLifecycleCallback from '../@ohos.app.ability.AbilityLifecycleCallback'; +import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; import InteropAbilityLifecycleCallback from '../@ohos.app.ability.InteropAbilityLifecycleCallback'; import Context from 'application.Context' import { BusinessError, AsyncCallback } from '@ohos.base' @@ -65,7 +65,7 @@ export default class ApplicationContext extends Context { destroyRegister.unregister(unregisterToken); } - public native nativeOnLifecycleCallbackSync(type: string, callback: Object): int; + public native nativeOnLifecycleCallbackSync(type: string, callback: AbilityLifecycleCallback): int; public native nativeOffLifecycleCallbackSync(type: string, callbackId: int, callback: AsyncCallbackWrapper): void; public native nativekillAllProcessesSync(clearPageStack: boolean, callback: AsyncCallbackWrapper): void; diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h index cbf6c445f5a..2a76d92b192 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h @@ -195,7 +195,7 @@ private: static std::vector> interopCallbacks_; static std::vector> envCallbacks_; static std::vector> applicationStateCallback_; - std::recursive_mutex callbackLock_; + std::mutex callbackLock_; std::mutex interopCallbackLock_; std::recursive_mutex envCallbacksLock_; std::recursive_mutex applicationStateCallbackLock_; -- Gitee From 69bb155641e5806376cd3d95c8d24481cd84d81a Mon Sep 17 00:00:00 2001 From: zhang_hao_zheng Date: Wed, 13 Aug 2025 10:19:06 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=AF=E9=87=8D?= =?UTF-8?q?=E5=85=A5=E9=94=81=E6=94=B9=E4=B8=BA=E6=99=AE=E9=80=9A=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hao_zheng Change-Id: I58c0be807f0f7f28a057690dd6a3627b6cc83717 --- .../src/ets_application_context_utils.cpp | 16 ++--- .../src/ets_uri_perm_mgr.cpp | 6 +- .../context/application_context.cpp | 62 +++++++++---------- 3 files changed, 43 insertions(+), 41 deletions(-) diff --git a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp index a1987ebc50b..01564b986e7 100644 --- a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp +++ b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp @@ -586,25 +586,25 @@ ani_int EtsApplicationContextUtils::NativeOnLifecycleCallbackSync(ani_env *env, if (env == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "env is nullptr"); EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ANI_ERROR; + return ani_int(ERROR_CODE_NULL_ENV); } auto etsContext = GeApplicationContext(env, aniObj); if (etsContext == nullptr) { EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ANI_ERROR; + return ani_int(ERROR_CODE_INVALID_PARAM); } std::string stdType; if (!AppExecFwk::GetStdString(env, type, stdType)) { TAG_LOGE(AAFwkTag::APPKIT, "parse type failed"); EtsErrorUtil::ThrowInvalidParamError(env, "Failed to parse param type. Type must be a string."); - return ANI_ERROR; + return ani_int(ERROR_CODE_INVALID_PARAM); } TAG_LOGD(AAFwkTag::APPKIT, "type=%{public}s", stdType.c_str()); if (stdType == TYPE_ABILITY_LIFECYCLE) { return etsContext->RegisterAbilityLifecycleCallback(env, callback); } EtsErrorUtil::ThrowInvalidParamError(env, "Unknown type."); - return ANI_ERROR; + return ani_int(ERROR_CODE_INVALID_PARAM); } void EtsApplicationContextUtils::NativeOnInteropLifecycleCallbackSync(ani_env *env, @@ -641,7 +641,7 @@ ani_int EtsApplicationContextUtils::RegisterAbilityLifecycleCallback(ani_env *en if (applicationContext == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "applicationContext is null"); EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ANI_ERROR; + return ani_int(ERROR_CODE_NULL_CONTEXT); } std::lock_guard lock(g_abilityLifecycleCallbackLock); if (abilityLifecycleCallback_ != nullptr) { @@ -649,7 +649,7 @@ ani_int EtsApplicationContextUtils::RegisterAbilityLifecycleCallback(ani_env *en if (result < 0) { TAG_LOGE(AAFwkTag::APPKIT, "register failed: %{public}d", result); EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ANI_ERROR; + return ani_int(ERROR_CODE_INVALID_PARAM); } return ani_int(result); } @@ -663,11 +663,11 @@ ani_int EtsApplicationContextUtils::RegisterAbilityLifecycleCallback(ani_env *en if (callbackId == static_cast(ERROR_CODE_NULL_ENV) || callbackId == static_cast(ERROR_CODE_NULL_CALLBACK)) { EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ANI_ERROR; + return ani_int(ERROR_CODE_INVALID_PARAM); } EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ANI_ERROR; + return ani_int(ERROR_CODE_INVALID_PARAM); } void EtsApplicationContextUtils::RegisterInteropAbilityLifecycleCallback(ani_env *env, ani_object callback) diff --git a/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp b/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp index 264648fff68..47e06852b93 100644 --- a/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp +++ b/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp @@ -92,7 +92,8 @@ static void grantUriPermissionCallbackSync([[maybe_unused]]ani_env *env, } if (appCloneIndex < 0) { TAG_LOGE(AAFwkTag::URIPERMMGR, "appCloneIndex invalid"); - AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INVALID_PARAM, + AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, + static_cast(AbilityErrorCode::ERROR_CODE_INVALID_PARAM), "Param appCloneIndex is invalid, the value less than 0."), CreateDouble(env, ERR_FAILURE)); return; @@ -133,7 +134,8 @@ static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, } if (appCloneIndex < 0) { TAG_LOGE(AAFwkTag::URIPERMMGR, "appCloneIndex invalid"); - AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, AbilityErrorCode::ERROR_CODE_INVALID_PARAM, + AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, + static_cast(AbilityErrorCode::ERROR_CODE_INVALID_PARAM), "Param appCloneIndex is invalid, the value less than 0."), CreateDouble(env, ERR_FAILURE)); return; diff --git a/frameworks/native/appkit/ability_runtime/context/application_context.cpp b/frameworks/native/appkit/ability_runtime/context/application_context.cpp index 6cf57e68463..b65df9cb380 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context.cpp @@ -56,7 +56,7 @@ void ApplicationContext::RegisterAbilityLifecycleCallback( if (abilityLifecycleCallback == nullptr) { return; } - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); callbacks_.push_back(abilityLifecycleCallback); } @@ -64,7 +64,7 @@ void ApplicationContext::UnregisterAbilityLifecycleCallback( const std::shared_ptr &abilityLifecycleCallback) { TAG_LOGD(AAFwkTag::APPKIT, "called"); - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); auto it = std::find(callbacks_.begin(), callbacks_.end(), abilityLifecycleCallback); if (it != callbacks_.end()) { callbacks_.erase(it); @@ -95,7 +95,7 @@ void ApplicationContext::UnregisterInteropAbilityLifecycleCallback( bool ApplicationContext::IsAbilityLifecycleCallbackEmpty() { - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); return callbacks_.empty(); } @@ -134,7 +134,7 @@ void ApplicationContext::DispatchOnAbilityCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityCreate(ability); @@ -148,7 +148,7 @@ void ApplicationContext::DispatchOnAbilityCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityCreate(ability); @@ -179,7 +179,7 @@ void ApplicationContext::DispatchOnWindowStageCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageCreate(ability, windowStage); @@ -194,7 +194,7 @@ void ApplicationContext::DispatchOnWindowStageCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageCreate(ability, windowStage); @@ -226,7 +226,7 @@ void ApplicationContext::DispatchOnWindowStageDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageDestroy(ability, windowStage); @@ -241,7 +241,7 @@ void ApplicationContext::DispatchOnWindowStageDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageDestroy(ability, windowStage); @@ -274,7 +274,7 @@ void ApplicationContext::DispatchWindowStageFocus(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageActive(ability, windowStage); @@ -290,7 +290,7 @@ void ApplicationContext::DispatchWindowStageUnfocus(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageInactive(ability, windowStage); @@ -304,7 +304,7 @@ void ApplicationContext::DispatchOnAbilityDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityDestroy(ability); @@ -318,7 +318,7 @@ void ApplicationContext::DispatchOnAbilityDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityDestroy(ability); @@ -348,7 +348,7 @@ void ApplicationContext::DispatchOnAbilityForeground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityForeground(ability); @@ -362,7 +362,7 @@ void ApplicationContext::DispatchOnAbilityForeground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityForeground(ability); @@ -392,7 +392,7 @@ void ApplicationContext::DispatchOnAbilityBackground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityBackground(ability); @@ -406,7 +406,7 @@ void ApplicationContext::DispatchOnAbilityBackground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityBackground(ability); @@ -436,7 +436,7 @@ void ApplicationContext::DispatchOnAbilityContinue(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityContinue(ability); @@ -452,7 +452,7 @@ void ApplicationContext::DispatchOnAbilityWillContinue(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillContinue(ability); @@ -469,7 +469,7 @@ void ApplicationContext::DispatchOnWindowStageWillRestore(const std::shared_ptr< return; } - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageWillRestore(ability, windowStage); @@ -486,7 +486,7 @@ void ApplicationContext::DispatchOnWindowStageRestore(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageRestore(ability, windowStage); @@ -502,7 +502,7 @@ void ApplicationContext::DispatchOnAbilityWillSaveState(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillSaveState(ability); @@ -518,7 +518,7 @@ void ApplicationContext::DispatchOnAbilitySaveState(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilitySaveState(ability); @@ -574,7 +574,7 @@ void ApplicationContext::DispatchOnWillNewWant(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWillNewWant(ability); @@ -588,7 +588,7 @@ void ApplicationContext::DispatchOnNewWant(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnNewWant(ability); @@ -603,7 +603,7 @@ void ApplicationContext::DispatchOnAbilityWillCreate(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillCreate(ability); @@ -619,7 +619,7 @@ void ApplicationContext::DispatchOnWindowStageWillCreate(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageWillCreate(ability, windowStage); @@ -635,7 +635,7 @@ void ApplicationContext::DispatchOnWindowStageWillDestroy(const std::shared_ptr< TAG_LOGE(AAFwkTag::APPKIT, "null ability or windowStage"); return; } - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageWillDestroy(ability, windowStage); @@ -650,7 +650,7 @@ void ApplicationContext::DispatchOnAbilityWillDestroy(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillDestroy(ability); @@ -665,7 +665,7 @@ void ApplicationContext::DispatchOnAbilityWillForeground(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillForeground(ability); @@ -680,7 +680,7 @@ void ApplicationContext::DispatchOnAbilityWillBackground(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillBackground(ability); -- Gitee From 77da33af1912b90a6b356cc78401f7057f227a80 Mon Sep 17 00:00:00 2001 From: zhang_hao_zheng Date: Wed, 13 Aug 2025 17:50:37 +0800 Subject: [PATCH 4/5] fix suggestion Signed-off-by: zhang_hao_zheng Change-Id: I5d0d1632fa6576529dc4380fffab7437ced79b5c --- .../src/ets_application_context_utils.cpp | 3 +- .../include/ets_uri_perm_mgr.h | 5 - .../src/ets_uri_perm_mgr.cpp | 134 +----------------- .../ets/application/ApplicationContext.ets | 2 +- 4 files changed, 9 insertions(+), 135 deletions(-) diff --git a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp index 01564b986e7..1232d19609b 100644 --- a/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp +++ b/frameworks/ets/ani/ani_common/src/ets_application_context_utils.cpp @@ -585,13 +585,12 @@ ani_int EtsApplicationContextUtils::NativeOnLifecycleCallbackSync(ani_env *env, TAG_LOGD(AAFwkTag::APPKIT, "NativeOnLifecycleCallbackSync Call"); if (env == nullptr) { TAG_LOGE(AAFwkTag::APPKIT, "env is nullptr"); - EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); return ani_int(ERROR_CODE_NULL_ENV); } auto etsContext = GeApplicationContext(env, aniObj); if (etsContext == nullptr) { EtsErrorUtil::ThrowError(env, AbilityRuntime::AbilityErrorCode::ERROR_CODE_INVALID_PARAM); - return ani_int(ERROR_CODE_INVALID_PARAM); + return ani_int(ERROR_CODE_NULL_CONTEXT); } std::string stdType; if (!AppExecFwk::GetStdString(env, type, stdType)) { diff --git a/frameworks/ets/ani/uri_permission_manager/include/ets_uri_perm_mgr.h b/frameworks/ets/ani/uri_permission_manager/include/ets_uri_perm_mgr.h index 16823704aed..8aa7afa5008 100644 --- a/frameworks/ets/ani/uri_permission_manager/include/ets_uri_perm_mgr.h +++ b/frameworks/ets/ani/uri_permission_manager/include/ets_uri_perm_mgr.h @@ -26,11 +26,6 @@ static void grantUriPermissionCallbackSync([[maybe_unused]]ani_env *env, static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, ani_string uri, ani_string targetName, ani_int appCloneIndex, ani_object callback); void CreateJsUriPermMgr(ani_env *env); -bool AsyncCallback(ani_env *env, ani_object call, ani_object error, ani_object result); -ani_object WrapBusinessError(ani_env *env, ani_int code); -ani_object WrapError(ani_env *env, const std::string &msg); -ani_string GetAniString(ani_env *env, const std::string &str); -std::string GetErrMsg(int32_t err, const std::string &permission = ""); } // namespace AbilityRuntime } // namespace OHOS #endif // OHOS_ABILITY_RUNTIME_ETS_URI_PERM_MGR_H \ No newline at end of file diff --git a/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp b/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp index 47e06852b93..1931ee8a81f 100644 --- a/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp +++ b/frameworks/ets/ani/uri_permission_manager/src/ets_uri_perm_mgr.cpp @@ -18,6 +18,7 @@ #include "ability_business_error.h" #include "ability_manager_errors.h" #include "ability_runtime_error_util.h" +#include "ani_common_util.h" #include "ani_enum_convert.h" #include "hilog_tag_wrapper.h" #include "ipc_skeleton.h" @@ -33,10 +34,6 @@ namespace OHOS { namespace AbilityRuntime { namespace { -constexpr const char* WRAPPER_CLASS_NAME = "Lutils/AbilityUtils/AsyncCallbackWrapper;"; -constexpr const char* ERROR_CLASS_NAME = "Lescompat/Error;"; -constexpr const char* BUSINESS_ERROR_CLASS_NAME = "L@ohos/base/BusinessError;"; -constexpr const char *INVOKE_METHOD_NAME = "invoke"; constexpr const int32_t ERR_OK = 0; constexpr const int32_t ERR_FAILURE = -1; constexpr const char* NOT_SYSTEM_APP = "The application is not system-app, can not use system-api."; @@ -92,7 +89,7 @@ static void grantUriPermissionCallbackSync([[maybe_unused]]ani_env *env, } if (appCloneIndex < 0) { TAG_LOGE(AAFwkTag::URIPERMMGR, "appCloneIndex invalid"); - AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, + AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, static_cast(AbilityErrorCode::ERROR_CODE_INVALID_PARAM), "Param appCloneIndex is invalid, the value less than 0."), CreateDouble(env, ERR_FAILURE)); @@ -104,7 +101,7 @@ static void grantUriPermissionCallbackSync([[maybe_unused]]ani_env *env, TAG_LOGE(AAFwkTag::URIPERMMGR, "app not system-app"); etsErrCode = EtsErrorUtil::CreateError(env, static_cast(AbilityErrorCode::ERROR_CODE_NOT_SYSTEM_APP), NOT_SYSTEM_APP); - AsyncCallback(env, callback, etsErrCode, CreateDouble(env, ERR_FAILURE)); + AppExecFwk::AsyncCallback(env, callback, etsErrCode, CreateDouble(env, ERR_FAILURE)); return; } std::string uriStr = GetStdString(env, uri); @@ -121,7 +118,7 @@ static void grantUriPermissionCallbackSync([[maybe_unused]]ani_env *env, etsErrCode = EtsErrorUtil::CreateErrorByNativeErr(env, errCode); } - AsyncCallback(env, callback, etsErrCode, CreateDouble(env, result)); + AppExecFwk::AsyncCallback(env, callback, etsErrCode, CreateDouble(env, result)); } static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, @@ -134,7 +131,7 @@ static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, } if (appCloneIndex < 0) { TAG_LOGE(AAFwkTag::URIPERMMGR, "appCloneIndex invalid"); - AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, + AppExecFwk::AsyncCallback(env, callback, EtsErrorUtil::CreateError(env, static_cast(AbilityErrorCode::ERROR_CODE_INVALID_PARAM), "Param appCloneIndex is invalid, the value less than 0."), CreateDouble(env, ERR_FAILURE)); @@ -146,7 +143,7 @@ static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, TAG_LOGE(AAFwkTag::URIPERMMGR, "app not system-app"); etsErrCode = EtsErrorUtil::CreateError(env, static_cast(AbilityErrorCode::ERROR_CODE_NOT_SYSTEM_APP), NOT_SYSTEM_APP); - AsyncCallback(env, callback, etsErrCode, CreateDouble(env, ERR_FAILURE)); + AppExecFwk::AsyncCallback(env, callback, etsErrCode, CreateDouble(env, ERR_FAILURE)); return; } std::string uriStr = GetStdString(env, uri); @@ -159,7 +156,7 @@ static void revokeUriPermissionCallbackSync([[maybe_unused]]ani_env *env, result = ERR_FAILURE; etsErrCode = EtsErrorUtil::CreateErrorByNativeErr(env, errCode); } - AsyncCallback(env, callback, etsErrCode, CreateDouble(env, result)); + AppExecFwk::AsyncCallback(env, callback, etsErrCode, CreateDouble(env, result)); } void EtsUriPermissionManagerInit(ani_env *env) @@ -225,122 +222,5 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) return ANI_OK; } } - -bool AsyncCallback(ani_env *env, ani_object call, ani_object error, ani_object result) -{ - ani_status status = ANI_ERROR; - ani_class clsCall {}; - - if (env == nullptr) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "env null"); - return false; - } - - if ((status = env->FindClass(WRAPPER_CLASS_NAME, &clsCall)) != ANI_OK) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "status: %{public}d", status); - return false; - } - ani_method method = {}; - if ((status = env->Class_FindMethod( - clsCall, INVOKE_METHOD_NAME, "L@ohos/base/BusinessError;Lstd/core/Object;:V", &method)) != ANI_OK) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "status: %{public}d", status); - return false; - } - if (method == nullptr) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "method null"); - return false; - } - if (result == nullptr) { - ani_ref nullRef = nullptr; - env->GetNull(&nullRef); - result = reinterpret_cast(nullRef); - } - if ((status = env->Object_CallMethod_Void(call, method, error, result)) != ANI_OK) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "status: %{public}d", status); - return false; - } - return true; -} - -ani_object WrapError(ani_env *env, const std::string &msg) -{ - ani_class cls {}; - ani_method method {}; - ani_object obj = nullptr; - ani_status status = ANI_ERROR; - if (env == nullptr) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "null env"); - return nullptr; - } - ani_string aniMsg = GetAniString(env, msg); - ani_ref undefRef; - env->GetUndefined(&undefRef); - if ((status = env->FindClass(ERROR_CLASS_NAME, &cls)) != ANI_OK) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "statys: %{public}d", status); - return nullptr; - } - if ((status = env->Class_FindMethod(cls, "", "Lstd/core/String;Lescompat/ErrorOptions;:V", &method)) != - ANI_OK) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "status: %{public}d", status); - return nullptr; - } - if ((status = env->Object_New(cls, method, &obj, aniMsg, undefRef)) != ANI_OK) { - TAG_LOGE(AAFwkTag::URIPERMMGR, "status: %{public}d", status); - return nullptr; - } - return obj; -} - -ani_string GetAniString(ani_env *env, const std::string &str) -{ - ani_string aniStr = nullptr; - ani_status status = env->String_NewUTF8(str.c_str(), str.size(), &aniStr); - if (status != ANI_OK) { - TAG_LOGE(AAFwkTag::JSNAPI, "status : %{public}d", status); - return nullptr; - } - return aniStr; -} - -ani_object WrapBusinessError(ani_env *env, int32_t code) -{ - ani_class cls {}; - ani_method method {}; - ani_object obj = nullptr; - ani_status status = ANI_ERROR; - if (env == nullptr) { - TAG_LOGE(AAFwkTag::UIABILITY, "null env"); - return nullptr; - } - if ((status = env->FindClass(BUSINESS_ERROR_CLASS_NAME, &cls)) != ANI_OK) { - TAG_LOGE(AAFwkTag::UIABILITY, "status : %{public}d", status); - return nullptr; - } - if ((status = env->Class_FindMethod(cls, "", "DLescompat/Error;:V", &method)) != ANI_OK) { - TAG_LOGE(AAFwkTag::UIABILITY, "status : %{public}d", status); - return nullptr; - } - ani_object error = WrapError(env, GetErrMsg(code)); - if (error == nullptr) { - TAG_LOGE(AAFwkTag::UIABILITY, "error nulll"); - return nullptr; - } - ani_double dCode(code); - if ((status = env->Object_New(cls, method, &obj, dCode, error)) != ANI_OK) { - TAG_LOGE(AAFwkTag::UIABILITY, "status : %{public}d", status); - return nullptr; - } - return obj; -} - -std::string GetErrMsg(int32_t err, const std::string &permission) -{ - auto errCode = GetJsErrorCodeByNativeError(err); - auto errMsg = (errCode == AbilityErrorCode::ERROR_CODE_PERMISSION_DENIED && !permission.empty()) - ? GetNoPermissionErrorMsg(permission) - : GetErrorMsg(errCode); - return errMsg; -} - } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/frameworks/ets/ets/application/ApplicationContext.ets b/frameworks/ets/ets/application/ApplicationContext.ets index 3d30e769f38..2b671931462 100644 --- a/frameworks/ets/ets/application/ApplicationContext.ets +++ b/frameworks/ets/ets/application/ApplicationContext.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback'; +import AbilityLifecycleCallback from '../@ohos.app.ability.AbilityLifecycleCallback'; import InteropAbilityLifecycleCallback from '../@ohos.app.ability.InteropAbilityLifecycleCallback'; import Context from 'application.Context' import { BusinessError, AsyncCallback } from '@ohos.base' -- Gitee From 9ae8bfbff243ba35f39d5dd003895f1f64d9585e Mon Sep 17 00:00:00 2001 From: zhang_hao_zheng Date: Fri, 15 Aug 2025 15:28:40 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E5=8F=AF=E9=87=8D?= =?UTF-8?q?=E5=85=A5=E9=94=81=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hao_zheng Change-Id: I7f8ba971ec6b4bf2a7fb67f9c9120160baff30d6 --- .../context/application_context.cpp | 62 +++++++++---------- .../context/application_context.h | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/frameworks/native/appkit/ability_runtime/context/application_context.cpp b/frameworks/native/appkit/ability_runtime/context/application_context.cpp index b65df9cb380..6cf57e68463 100644 --- a/frameworks/native/appkit/ability_runtime/context/application_context.cpp +++ b/frameworks/native/appkit/ability_runtime/context/application_context.cpp @@ -56,7 +56,7 @@ void ApplicationContext::RegisterAbilityLifecycleCallback( if (abilityLifecycleCallback == nullptr) { return; } - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); callbacks_.push_back(abilityLifecycleCallback); } @@ -64,7 +64,7 @@ void ApplicationContext::UnregisterAbilityLifecycleCallback( const std::shared_ptr &abilityLifecycleCallback) { TAG_LOGD(AAFwkTag::APPKIT, "called"); - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); auto it = std::find(callbacks_.begin(), callbacks_.end(), abilityLifecycleCallback); if (it != callbacks_.end()) { callbacks_.erase(it); @@ -95,7 +95,7 @@ void ApplicationContext::UnregisterInteropAbilityLifecycleCallback( bool ApplicationContext::IsAbilityLifecycleCallbackEmpty() { - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); return callbacks_.empty(); } @@ -134,7 +134,7 @@ void ApplicationContext::DispatchOnAbilityCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityCreate(ability); @@ -148,7 +148,7 @@ void ApplicationContext::DispatchOnAbilityCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityCreate(ability); @@ -179,7 +179,7 @@ void ApplicationContext::DispatchOnWindowStageCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageCreate(ability, windowStage); @@ -194,7 +194,7 @@ void ApplicationContext::DispatchOnWindowStageCreate(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageCreate(ability, windowStage); @@ -226,7 +226,7 @@ void ApplicationContext::DispatchOnWindowStageDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageDestroy(ability, windowStage); @@ -241,7 +241,7 @@ void ApplicationContext::DispatchOnWindowStageDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageDestroy(ability, windowStage); @@ -274,7 +274,7 @@ void ApplicationContext::DispatchWindowStageFocus(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageActive(ability, windowStage); @@ -290,7 +290,7 @@ void ApplicationContext::DispatchWindowStageUnfocus(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageInactive(ability, windowStage); @@ -304,7 +304,7 @@ void ApplicationContext::DispatchOnAbilityDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityDestroy(ability); @@ -318,7 +318,7 @@ void ApplicationContext::DispatchOnAbilityDestroy(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityDestroy(ability); @@ -348,7 +348,7 @@ void ApplicationContext::DispatchOnAbilityForeground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityForeground(ability); @@ -362,7 +362,7 @@ void ApplicationContext::DispatchOnAbilityForeground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityForeground(ability); @@ -392,7 +392,7 @@ void ApplicationContext::DispatchOnAbilityBackground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityBackground(ability); @@ -406,7 +406,7 @@ void ApplicationContext::DispatchOnAbilityBackground(std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityBackground(ability); @@ -436,7 +436,7 @@ void ApplicationContext::DispatchOnAbilityContinue(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityContinue(ability); @@ -452,7 +452,7 @@ void ApplicationContext::DispatchOnAbilityWillContinue(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillContinue(ability); @@ -469,7 +469,7 @@ void ApplicationContext::DispatchOnWindowStageWillRestore(const std::shared_ptr< return; } - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageWillRestore(ability, windowStage); @@ -486,7 +486,7 @@ void ApplicationContext::DispatchOnWindowStageRestore(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageRestore(ability, windowStage); @@ -502,7 +502,7 @@ void ApplicationContext::DispatchOnAbilityWillSaveState(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillSaveState(ability); @@ -518,7 +518,7 @@ void ApplicationContext::DispatchOnAbilitySaveState(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilitySaveState(ability); @@ -574,7 +574,7 @@ void ApplicationContext::DispatchOnWillNewWant(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWillNewWant(ability); @@ -588,7 +588,7 @@ void ApplicationContext::DispatchOnNewWant(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnNewWant(ability); @@ -603,7 +603,7 @@ void ApplicationContext::DispatchOnAbilityWillCreate(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillCreate(ability); @@ -619,7 +619,7 @@ void ApplicationContext::DispatchOnWindowStageWillCreate(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageWillCreate(ability, windowStage); @@ -635,7 +635,7 @@ void ApplicationContext::DispatchOnWindowStageWillDestroy(const std::shared_ptr< TAG_LOGE(AAFwkTag::APPKIT, "null ability or windowStage"); return; } - std::lock_guard lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnWindowStageWillDestroy(ability, windowStage); @@ -650,7 +650,7 @@ void ApplicationContext::DispatchOnAbilityWillDestroy(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillDestroy(ability); @@ -665,7 +665,7 @@ void ApplicationContext::DispatchOnAbilityWillForeground(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillForeground(ability); @@ -680,7 +680,7 @@ void ApplicationContext::DispatchOnAbilityWillBackground(const std::shared_ptr lock(callbackLock_); + std::lock_guard lock(callbackLock_); for (auto callback : callbacks_) { if (callback != nullptr) { callback->OnAbilityWillBackground(ability); diff --git a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h index 2a76d92b192..cbf6c445f5a 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/application_context.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/application_context.h @@ -195,7 +195,7 @@ private: static std::vector> interopCallbacks_; static std::vector> envCallbacks_; static std::vector> applicationStateCallback_; - std::mutex callbackLock_; + std::recursive_mutex callbackLock_; std::mutex interopCallbackLock_; std::recursive_mutex envCallbacksLock_; std::recursive_mutex applicationStateCallbackLock_; -- Gitee