diff --git a/frameworks/core/interfaces/native/implementation/embedded_component_modifier.cpp b/frameworks/core/interfaces/native/implementation/embedded_component_modifier.cpp index 9ab83a79fdd25ea93fe6f22f3a4fda2b52ede98e..2937ec21fcf7e1ea16a219d41d26f8904348c711 100644 --- a/frameworks/core/interfaces/native/implementation/embedded_component_modifier.cpp +++ b/frameworks/core/interfaces/native/implementation/embedded_component_modifier.cpp @@ -148,9 +148,32 @@ void SetOnTerminatedImpl(Ark_NativePointer node, UIExtensionModelNG::SetOnTerminated(frameNode, std::move(onTerminated)); #endif } -void SetOnErrorImpl(Ark_NativePointer node, - const Opt_ErrorCallback_Ohos_Base_BusinessError* value) +void SetOnErrorImpl(Ark_NativePointer node, const Opt_ErrorCallback_Ohos_Base_BusinessError* value) { + auto frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); +#ifdef WINDOW_SCENE_SUPPORTED + auto optValue = Converter::GetOptPtr(value); + if (!optValue) { + return; + } + auto instanceId = ContainerScope::CurrentId(); + auto weakNode = AceType::WeakClaim(frameNode); + auto onError = [arkCallback = CallbackHelper(*optValue), instanceId, weakNode]( + int32_t code, const std::string& name, const std::string& message) { + ContainerScope scope(instanceId); + auto pipelineContext = PipelineContext::GetCurrentContextSafelyWithCheck(); + CHECK_NULL_VOID(pipelineContext); + pipelineContext->UpdateCurrentActiveNode(weakNode); +#ifdef WRONG_GEN1 + arkCallback.Invoke(Ark_BusinessError{ + .name = Converter::ArkValue(name, Converter::FC), + .message = Converter::ArkValue(message, Converter::FC), + .code = Converter::ArkValue(code)}); +#endif + }; + UIExtensionModelNG::SetOnError(frameNode, std::move(onError)); +#endif } } // EmbeddedComponentAttributeModifier const GENERATED_ArkUIEmbeddedComponentModifier* GetEmbeddedComponentModifier()