From bedff02fa808a7f43d9cd93dbd36a030aa3fd63a Mon Sep 17 00:00:00 2001 From: zhang_hao_zheng Date: Mon, 3 Nov 2025 17:23:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcontext=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhang_hao_zheng Change-Id: I1ce9bb7bf367196b8a6eb4c693cd54f493f0f47b --- .../src/ets_startup_manager.cpp | 10 ++------- .../app/startup_task_utils.cpp | 19 ++++++++++++++++ .../appkit/app_startup/ets_startup_task.cpp | 22 ++----------------- .../app_startup/ets_startup_task_result.cpp | 10 ++++++++- .../ability_runtime/app/startup_task_utils.h | 3 +++ .../appkit/app_startup/ets_startup_task.h | 3 --- 6 files changed, 35 insertions(+), 32 deletions(-) diff --git a/frameworks/ets/ani/app_startup/startup_manager/src/ets_startup_manager.cpp b/frameworks/ets/ani/app_startup/startup_manager/src/ets_startup_manager.cpp index 4ffbafd639..8b5182e1f8 100644 --- a/frameworks/ets/ani/app_startup/startup_manager/src/ets_startup_manager.cpp +++ b/frameworks/ets/ani/app_startup/startup_manager/src/ets_startup_manager.cpp @@ -135,18 +135,12 @@ ani_object ETSStartupManager::NativeGetStartupTaskResult(ani_env *env, ani_strin EtsErrorUtil::ThrowInvalidParamError(env, "Parameter error: Failed to get result"); return nullptr; } - if (result->GetResultType() != StartupTaskResult::ResultType::ETS) { - TAG_LOGE(AAFwkTag::STARTUP, "result type not ets"); - EtsErrorUtil::ThrowInvalidParamError(env, "Parameter error: result type not ets"); - return nullptr; - } - std::shared_ptr etsResult = std::static_pointer_cast(result); - if (etsResult == nullptr) { + ani_ref etsResultRef = StartupTaskUtils::GetDependencyResult(env, result); + if (etsResultRef == nullptr) { TAG_LOGE(AAFwkTag::STARTUP, "ets result is null"); EtsErrorUtil::ThrowInvalidParamError(env, "Parameter error: ets result is null"); return nullptr; } - ani_ref etsResultRef = etsResult->GetEtsStartupResultRef(); return reinterpret_cast(etsResultRef); } diff --git a/frameworks/native/appkit/ability_runtime/app/startup_task_utils.cpp b/frameworks/native/appkit/ability_runtime/app/startup_task_utils.cpp index e5d393e2b3..84b3b51a5e 100644 --- a/frameworks/native/appkit/ability_runtime/app/startup_task_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/app/startup_task_utils.cpp @@ -18,6 +18,7 @@ #include "ets_startup_task.h" #include "hilog_tag_wrapper.h" #include "stage_context_transfer.h" +#include "startup_task_utils.h" namespace OHOS { namespace AbilityRuntime { @@ -63,5 +64,23 @@ void StartupTaskUtils::UpdateStartupTaskContextRef(napi_env env, std::shared_ptr TAG_LOGW(AAFwkTag::STARTUP, "Unknown startup task type: %{public}s", startupTask->GetType().c_str()); } } + +ani_ref StartupTaskUtils::GetDependencyResult(ani_env *env, std::shared_ptr result) +{ + if (result == nullptr) { + return nullptr; + } + if (result->GetResultType() == StartupTaskResult::ResultType::ETS) { + std::shared_ptr etsResultPtr = std::static_pointer_cast(result); + return etsResultPtr->GetEtsStartupResultRef(); + } + if (result->GetResultType() == StartupTaskResult::ResultType::JS) { + std::shared_ptr jsResultPtr = std::static_pointer_cast(result); + auto resultObj = EtsStartupTaskResult::JsToEtsResult(env, jsResultPtr->GetJsStartupResultRef()); + return reinterpret_cast(resultObj); + } + TAG_LOGE(AAFwkTag::STARTUP, "invalid result type:%{public}d", static_cast(result->GetResultType())); + return nullptr; +} } // namespace AbilityRuntime } // namespace OHOS \ No newline at end of file diff --git a/frameworks/native/appkit/app_startup/ets_startup_task.cpp b/frameworks/native/appkit/app_startup/ets_startup_task.cpp index b29652b4d9..847840384a 100644 --- a/frameworks/native/appkit/app_startup/ets_startup_task.cpp +++ b/frameworks/native/appkit/app_startup/ets_startup_task.cpp @@ -20,6 +20,7 @@ #include "ets_startup_task_executor.h" #include "hilog_tag_wrapper.h" #include "stage_context_transfer.h" +#include "startup_task_utils.h" #ifdef WINDOWS_PLATFORM #define ETS_EXPORT __declspec(dllexport) @@ -125,7 +126,7 @@ int32_t EtsStartupTask::RunTaskOnDependencyCompleted(const std::string &dependen } ani_string dependency = AppExecFwk::GetAniString(env, dependencyName); - ani_ref etsResult = GetDependencyResult(env, dependencyName, result); + ani_ref etsResult = StartupTaskUtils::GetDependencyResult(env, result); ani_status status = env->Object_CallMethodByName_Void(startupObj, "onDependencyCompleted", nullptr, dependency, etsResult); if (status != ANI_OK) { @@ -135,25 +136,6 @@ int32_t EtsStartupTask::RunTaskOnDependencyCompleted(const std::string &dependen return ERR_OK; } -ani_ref EtsStartupTask::GetDependencyResult(ani_env *env, const std::string &dependencyName, - std::shared_ptr result) -{ - if (result == nullptr) { - return nullptr; - } - if (result->GetResultType() == StartupTaskResult::ResultType::ETS) { - std::shared_ptr etsResultPtr = std::static_pointer_cast(result); - return etsResultPtr->GetEtsStartupResultRef(); - } - if (result->GetResultType() == StartupTaskResult::ResultType::JS) { - std::shared_ptr jsResultPtr = std::static_pointer_cast(result); - auto resultObj = EtsStartupTaskResult::JsToEtsResult(env, jsResultPtr->GetJsStartupResultRef()); - return reinterpret_cast(resultObj); - } - TAG_LOGE(AAFwkTag::STARTUP, "invalid result type:%{public}d", static_cast(result->GetResultType())); - return nullptr; -} - extern "C" ETS_EXPORT AppStartupTask* OHOS_CreateEtsStartupTask( const std::unique_ptr &runtime, const StartupTaskInfo &info, bool lazyLoad) diff --git a/frameworks/native/appkit/app_startup/ets_startup_task_result.cpp b/frameworks/native/appkit/app_startup/ets_startup_task_result.cpp index bbf172d940..abb27f23b7 100644 --- a/frameworks/native/appkit/app_startup/ets_startup_task_result.cpp +++ b/frameworks/native/appkit/app_startup/ets_startup_task_result.cpp @@ -112,9 +112,17 @@ ani_object EtsStartupTaskResult::JsToEtsResult(ani_env *aniEnv, std::shared_ptr< arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr); return nullptr; } + ani_ref unwrapResult = nullptr; + ani_status status = aniEnv->Object_CallMethodByName_Ref(result, "unwrap", ":Lstd/core/Object;", &unwrapResult); + if (status != ANI_OK) { + TAG_LOGE(AAFwkTag::STARTUP, "Object_CallMethodByName_Ref failed: %{public}d", status); + hybridgref_delete_from_napi(napiEnv, ref); + arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr); + return nullptr; + } hybridgref_delete_from_napi(napiEnv, ref); arkts_napi_scope_close_n(napiEnv, 0, nullptr, nullptr); - return result; + return reinterpret_cast(unwrapResult); } const std::shared_ptr EtsStartupTaskResult::GetJsStartupResultRef() diff --git a/interfaces/kits/native/appkit/ability_runtime/app/startup_task_utils.h b/interfaces/kits/native/appkit/ability_runtime/app/startup_task_utils.h index 90100d176c..22d379b9e9 100644 --- a/interfaces/kits/native/appkit/ability_runtime/app/startup_task_utils.h +++ b/interfaces/kits/native/appkit/ability_runtime/app/startup_task_utils.h @@ -22,6 +22,7 @@ #include "app_startup_task.h" #include "context.h" #include "ets_native_reference.h" +#include "startup_task_result.h" namespace OHOS { namespace AbilityRuntime { @@ -29,6 +30,8 @@ class StartupTaskUtils { public: static void UpdateStartupTaskContextRef(napi_env env, std::shared_ptr startupTask, std::shared_ptr context, ani_ref contextAniRef); + + static ani_ref GetDependencyResult(ani_env *env, std::shared_ptr result); }; } // namespace AbilityRuntime } // namespace OHOS diff --git a/interfaces/kits/native/appkit/app_startup/ets_startup_task.h b/interfaces/kits/native/appkit/app_startup/ets_startup_task.h index 18e797b5d2..a614fece18 100644 --- a/interfaces/kits/native/appkit/app_startup/ets_startup_task.h +++ b/interfaces/kits/native/appkit/app_startup/ets_startup_task.h @@ -53,9 +53,6 @@ private: bool esModule_ = true; std::shared_ptr resultCallback_; - static ani_ref GetDependencyResult(ani_env *env, const std::string &dependencyName, - std::shared_ptr result); - int32_t LoadEtsOhmUrl(); }; } // namespace AbilityRuntime