From 068333f4d9a606afab1eb4cf23a45c6d00691d1b Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 12 Sep 2025 11:20:20 +0800 Subject: [PATCH 1/6] fix code Signed-off-by: unknown --- .../ability/native/ability_runtime/js_ui_ability.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp index edbde5e33a5..42ea0870b17 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp @@ -180,7 +180,12 @@ napi_value AttachJsAbilityContext(napi_env env, void *value, void *) } CHECK_POINTER_AND_RETURN(systemModule, nullptr); auto contextObj = systemModule->GetNapiValue(); - napi_coerce_to_native_binding_object(env, contextObj, DetachCallbackFunc, AttachJsAbilityContext, value, nullptr); + auto coerceStatus = napi_coerce_to_native_binding_object(env, + contextObj, DetachCallbackFunc, AttachJsAbilityContext, value, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + return nullptr; + } auto workContext = new (std::nothrow) std::weak_ptr(ptr); if (workContext != nullptr) { napi_status status = napi_wrap(env, contextObj, workContext, -- Gitee From 59c786903c8e93284c5e8eb810eb1cb7451f1eb7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 12 Sep 2025 11:36:12 +0800 Subject: [PATCH 2/6] fix code Signed-off-by: unknown --- .../ability/native/ability_runtime/js_ability.cpp | 14 ++++++++++++-- .../native/ability_runtime/js_ui_ability.cpp | 13 +++++++++++-- .../js_auto_fill_extension.cpp | 13 +++++++++++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/frameworks/native/ability/native/ability_runtime/js_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ability.cpp index 97f22d0bd45..d2c888c5cc4 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability.cpp @@ -99,8 +99,13 @@ napi_value AttachJsAbilityContext(napi_env env, void *value, void *) } auto contextObj = systemModule->GetNapiValue(); auto workContext = new (std::nothrow) std::weak_ptr(ptr); - napi_coerce_to_native_binding_object( + auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachNewJsAbilityContext, AttachJsAbilityContext, workContext, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + delete workContext; + return nullptr; + } napi_add_detached_finalizer(env, contextObj, DetachFinalizeJsAbilityContext, nullptr); napi_status status = napi_wrap(env, contextObj, workContext, [](napi_env, void* data, void*) { @@ -222,8 +227,13 @@ void JsAbility::BindContext() return; } auto workContext = new (std::nothrow) std::weak_ptr(context); - napi_coerce_to_native_binding_object( + auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachJsAbilityContext, workContext, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + delete workContext; + return nullptr; + } context->Bind(jsRuntime_, shellContextRef_.get()); napi_set_named_property(env, obj, "context", contextObj); TAG_LOGD(AAFwkTag::ABILITY, "set ability context"); diff --git a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp index 42ea0870b17..328b02390b6 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp @@ -214,8 +214,12 @@ void BindContext(napi_env env, std::unique_ptr contextRef, JsRu } auto workContext = new (std::nothrow) std::weak_ptr(abilityContext); CHECK_POINTER(workContext); - napi_coerce_to_native_binding_object( + auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachJsAbilityContext, workContext, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + return nullptr; + } abilityContext->Bind(jsRuntime, contextRef.release()); napi_wrap( env, contextObj, workContext, @@ -378,8 +382,13 @@ void JsUIAbility::SetAbilityContext(std::shared_ptr abilityInfo, auto workContext = new (std::nothrow) std::weak_ptr(abilityContext_); CHECK_POINTER(workContext); - napi_coerce_to_native_binding_object( + auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachJsAbilityContext, workContext, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + delete workContext; + return nullptr; + } abilityContext_->Bind(jsRuntime_, shellContextRef_.get()); napi_set_named_property(env, obj, "context", contextObj); TAG_LOGD(AAFwkTag::UIABILITY, "set ability context"); diff --git a/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp b/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp index 9a23275aa4d..7476da275eb 100644 --- a/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp +++ b/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp @@ -78,8 +78,12 @@ napi_value AttachAutoFillExtensionContext(napi_env env, void *value, void *) TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "null contextObj"); return nullptr; } - napi_coerce_to_native_binding_object( + auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachAutoFillExtensionContext, value, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + return nullptr; + } auto workContext = new (std::nothrow) std::weak_ptr(ptr); if (workContext != nullptr) { @@ -202,8 +206,13 @@ void JsAutoFillExtension::BindContext(napi_env env, napi_value obj) TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "null workContext"); return; } - napi_coerce_to_native_binding_object( + auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachAutoFillExtensionContext, workContext, nullptr); + if (coerceStatus != napi_ok) { + TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + delete workContext; + return nullptr; + } context->Bind(jsRuntime_, shellContextRef_.get()); napi_set_named_property(env, obj, "context", contextObj); auto status = napi_wrap(env, contextObj, workContext, -- Gitee From 48eb1a2c9f1fc05b6384aa21a012a11b6e47665f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 12 Sep 2025 12:15:25 +0800 Subject: [PATCH 3/6] fix code Signed-off-by: unknown --- .../native/ability/native/ability_runtime/js_ability.cpp | 4 ++-- .../native/ability/native/ability_runtime/js_ui_ability.cpp | 3 ++- .../auto_fill_extension_ability/js_auto_fill_extension.cpp | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/frameworks/native/ability/native/ability_runtime/js_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ability.cpp index d2c888c5cc4..0d5bf042f39 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability.cpp @@ -102,7 +102,7 @@ napi_value AttachJsAbilityContext(napi_env env, void *value, void *) auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachNewJsAbilityContext, AttachJsAbilityContext, workContext, nullptr); if (coerceStatus != napi_ok) { - TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + TAG_LOGE(AAFwkTag::ABILITY, "coerceStatus Failed: %{public}d", coerceStatus); delete workContext; return nullptr; } @@ -230,7 +230,7 @@ void JsAbility::BindContext() auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachJsAbilityContext, workContext, nullptr); if (coerceStatus != napi_ok) { - TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + TAG_LOGE(AAFwkTag::ABILITY, "coerceStatus Failed: %{public}d", coerceStatus); delete workContext; return nullptr; } diff --git a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp index 328b02390b6..48f1ed6fcc1 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp @@ -218,7 +218,8 @@ void BindContext(napi_env env, std::unique_ptr contextRef, JsRu env, contextObj, DetachCallbackFunc, AttachJsAbilityContext, workContext, nullptr); if (coerceStatus != napi_ok) { TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); - return nullptr; + delete workContext; + return; } abilityContext->Bind(jsRuntime, contextRef.release()); napi_wrap( diff --git a/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp b/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp index 7476da275eb..3b43e05a3d2 100644 --- a/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp +++ b/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp @@ -81,7 +81,7 @@ napi_value AttachAutoFillExtensionContext(napi_env env, void *value, void *) auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachAutoFillExtensionContext, value, nullptr); if (coerceStatus != napi_ok) { - TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "coerceStatus Failed: %{public}d", coerceStatus); return nullptr; } @@ -209,7 +209,7 @@ void JsAutoFillExtension::BindContext(napi_env env, napi_value obj) auto coerceStatus = napi_coerce_to_native_binding_object( env, contextObj, DetachCallbackFunc, AttachAutoFillExtensionContext, workContext, nullptr); if (coerceStatus != napi_ok) { - TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); + TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "coerceStatus Failed: %{public}d", coerceStatus); delete workContext; return nullptr; } -- Gitee From 7215bc997d0856251171dab46d209c9a8168ac75 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 12 Sep 2025 14:19:34 +0800 Subject: [PATCH 4/6] fix code Signed-off-by: unknown --- frameworks/native/ability/native/ability_runtime/js_ability.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/native/ability/native/ability_runtime/js_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ability.cpp index 0d5bf042f39..cc92be6f1a9 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability.cpp @@ -232,7 +232,7 @@ void JsAbility::BindContext() if (coerceStatus != napi_ok) { TAG_LOGE(AAFwkTag::ABILITY, "coerceStatus Failed: %{public}d", coerceStatus); delete workContext; - return nullptr; + return; } context->Bind(jsRuntime_, shellContextRef_.get()); napi_set_named_property(env, obj, "context", contextObj); -- Gitee From 350222edb865563d6bcb03345f6f2e9febd84ee7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 12 Sep 2025 14:36:02 +0800 Subject: [PATCH 5/6] fix code Signed-off-by: unknown --- .../native/ability/native/ability_runtime/js_ui_ability.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp index 48f1ed6fcc1..4ab559a1d90 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ui_ability.cpp @@ -388,7 +388,7 @@ void JsUIAbility::SetAbilityContext(std::shared_ptr abilityInfo, if (coerceStatus != napi_ok) { TAG_LOGE(AAFwkTag::UIABILITY, "coerceStatus Failed: %{public}d", coerceStatus); delete workContext; - return nullptr; + return; } abilityContext_->Bind(jsRuntime_, shellContextRef_.get()); napi_set_named_property(env, obj, "context", contextObj); -- Gitee From 5bb6b79d597ddf0a1af65f67939cf1c5dd4621d9 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 12 Sep 2025 20:44:24 +0800 Subject: [PATCH 6/6] fix code Signed-off-by: unknown --- .../js_auto_fill_extension.cpp | 2 +- .../include/ability_manager_service.h | 3 +- .../src/ability_manager_service.cpp | 29 ++++++++++--------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp b/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp index 3b43e05a3d2..0aec4bf4dfe 100644 --- a/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp +++ b/frameworks/native/ability/native/auto_fill_extension_ability/js_auto_fill_extension.cpp @@ -211,7 +211,7 @@ void JsAutoFillExtension::BindContext(napi_env env, napi_value obj) if (coerceStatus != napi_ok) { TAG_LOGE(AAFwkTag::AUTOFILL_EXT, "coerceStatus Failed: %{public}d", coerceStatus); delete workContext; - return nullptr; + return; } context->Bind(jsRuntime_, shellContextRef_.get()); napi_set_named_property(env, obj, "context", contextObj); diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 65917fbc6ac..cc031a52267 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -1267,7 +1267,7 @@ public: virtual void CompleteFirstFrameDrawing(int32_t sessionId) override; - sptr GetWMSHandler() const; + sptr GetWMSHandler(); virtual int PrepareTerminateAbility(const sptr &token, sptr &callback) override; @@ -2856,6 +2856,7 @@ private: void InitFocusListener(); void RegisterFocusListener(); std::shared_ptr implicitStartProcessor_; + ffrt::mutex wmsHandlerLock_; sptr wmsHandler_; #endif std::shared_ptr interceptorExecuter_; diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 131a2e7556d..419b55090c6 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -787,11 +787,11 @@ int AbilityManagerService::StartAbilityByUIContentSession(const Want &want, cons Rosen::WindowManager::GetInstance().GetFocusWindowInfo(focusChangeInfo); token = focusChangeInfo.abilityToken_; } else { - if (!wmsHandler_) { + if (!GetWMSHandler()) { TAG_LOGE(AAFwkTag::ABILITYMGR, "wmsHandler_ null"); return ERR_INVALID_VALUE; } - wmsHandler_->GetFocusWindow(token); + GetWMSHandler()->GetFocusWindow(token); } #endif // SUPPORT_SCREEN if (!token) { @@ -826,11 +826,11 @@ int AbilityManagerService::StartAbilityByUIContentSession(const Want &want, cons Rosen::WindowManager::GetInstance().GetFocusWindowInfo(focusChangeInfo); token = focusChangeInfo.abilityToken_; } else { - if (!wmsHandler_) { + if (!GetWMSHandler()) { TAG_LOGE(AAFwkTag::ABILITYMGR, "wmsHandler_ null"); return ERR_INVALID_VALUE; } - wmsHandler_->GetFocusWindow(token); + GetWMSHandler()->GetFocusWindow(token); } #endif // SUPPORT_SCREEN @@ -6348,8 +6348,8 @@ int AbilityManagerService::MoveMissionsToForeground(const std::vector& return CHECK_PERMISSION_FAILED; } #ifdef SUPPORT_SCREEN - if (wmsHandler_) { - auto ret = wmsHandler_->MoveMissionsToForeground(missionIds, topMissionId); + if (GetWMSHandler()) { + auto ret = GetWMSHandler()->MoveMissionsToForeground(missionIds, topMissionId); if (ret) { TAG_LOGE(AAFwkTag::ABILITYMGR, "moveMissionsToForeground failed, missiondIds may invalid"); return ERR_INVALID_VALUE; @@ -6370,8 +6370,8 @@ int AbilityManagerService::MoveMissionsToBackground(const std::vector& return CHECK_PERMISSION_FAILED; } #ifdef SUPPORT_SCREEN - if (wmsHandler_) { - auto ret = wmsHandler_->MoveMissionsToBackground(missionIds, result); + if (GetWMSHandler()) { + auto ret = GetWMSHandler()->MoveMissionsToBackground(missionIds, result); if (ret) { TAG_LOGE(AAFwkTag::ABILITYMGR, "moveMissionsToBackground failed, missiondIds may invalid"); return ERR_INVALID_VALUE; @@ -9934,11 +9934,11 @@ int AbilityManagerService::GetTopAbility(sptr &token) Rosen::WindowManager::GetInstance().GetFocusWindowInfo(focusChangeInfo); token = focusChangeInfo.abilityToken_; } else { - if (!wmsHandler_) { + if (!GetWMSHandler()) { TAG_LOGE(AAFwkTag::ABILITYMGR, "wmsHandler_ null"); return ERR_INVALID_VALUE; } - wmsHandler_->GetFocusWindow(token); + GetWMSHandler()->GetFocusWindow(token); } if (!token) { @@ -10699,14 +10699,16 @@ int AbilityManagerService::RegisterWindowManagerServiceHandler(const sptr guard(wmsHandlerLock_); wmsHandler_ = handler; isAnimationEnabled_ = animationEnabled; TAG_LOGI(AAFwkTag::ABILITYMGR, "WMS handler registered successfully."); return ERR_OK; } -sptr AbilityManagerService::GetWMSHandler() const +sptr AbilityManagerService::GetWMSHandler() { + std::lock_guard guard(wmsHandlerLock_); return wmsHandler_; } @@ -10931,6 +10933,7 @@ int AbilityManagerService::UnregisterAbilityFirstFrameStateObserver( bool AbilityManagerService::GetAnimationFlag() { + std::lock_guard guard(wmsHandlerLock_); return isAnimationEnabled_; } @@ -11737,12 +11740,12 @@ std::shared_ptr AbilityManagerService::GetFocusAbility() { #ifdef SUPPORT_SCREEN sptr token; - if (!wmsHandler_) { + if (!GetWMSHandler()) { TAG_LOGE(AAFwkTag::ABILITYMGR, "wmsHandler_ null"); return nullptr; } - wmsHandler_->GetFocusWindow(token); + GetWMSHandler()->GetFocusWindow(token); if (!token) { TAG_LOGE(AAFwkTag::ABILITYMGR, "token null"); return nullptr; -- Gitee