mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 22:21:36 -04:00
修复context转换
Signed-off-by: zhang_hao_zheng <zhanghaozheng2@h-partners.com> Change-Id: I1ce9bb7bf367196b8a6eb4c693cd54f493f0f47b
This commit is contained in:
@@ -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<EtsStartupTaskResult> etsResult = std::static_pointer_cast<EtsStartupTaskResult>(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<ani_object>(etsResultRef);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<StartupTaskResult> result)
|
||||
{
|
||||
if (result == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (result->GetResultType() == StartupTaskResult::ResultType::ETS) {
|
||||
std::shared_ptr<EtsStartupTaskResult> etsResultPtr = std::static_pointer_cast<EtsStartupTaskResult>(result);
|
||||
return etsResultPtr->GetEtsStartupResultRef();
|
||||
}
|
||||
if (result->GetResultType() == StartupTaskResult::ResultType::JS) {
|
||||
std::shared_ptr<JsStartupTaskResult> jsResultPtr = std::static_pointer_cast<JsStartupTaskResult>(result);
|
||||
auto resultObj = EtsStartupTaskResult::JsToEtsResult(env, jsResultPtr->GetJsStartupResultRef());
|
||||
return reinterpret_cast<ani_ref>(resultObj);
|
||||
}
|
||||
TAG_LOGE(AAFwkTag::STARTUP, "invalid result type:%{public}d", static_cast<int32_t>(result->GetResultType()));
|
||||
return nullptr;
|
||||
}
|
||||
} // namespace AbilityRuntime
|
||||
} // namespace OHOS
|
||||
@@ -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<StartupTaskResult> result)
|
||||
{
|
||||
if (result == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
if (result->GetResultType() == StartupTaskResult::ResultType::ETS) {
|
||||
std::shared_ptr<EtsStartupTaskResult> etsResultPtr = std::static_pointer_cast<EtsStartupTaskResult>(result);
|
||||
return etsResultPtr->GetEtsStartupResultRef();
|
||||
}
|
||||
if (result->GetResultType() == StartupTaskResult::ResultType::JS) {
|
||||
std::shared_ptr<JsStartupTaskResult> jsResultPtr = std::static_pointer_cast<JsStartupTaskResult>(result);
|
||||
auto resultObj = EtsStartupTaskResult::JsToEtsResult(env, jsResultPtr->GetJsStartupResultRef());
|
||||
return reinterpret_cast<ani_ref>(resultObj);
|
||||
}
|
||||
TAG_LOGE(AAFwkTag::STARTUP, "invalid result type:%{public}d", static_cast<int32_t>(result->GetResultType()));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
extern "C" ETS_EXPORT AppStartupTask* OHOS_CreateEtsStartupTask(
|
||||
const std::unique_ptr<Runtime> &runtime, const StartupTaskInfo &info,
|
||||
bool lazyLoad)
|
||||
|
||||
@@ -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<ani_object>(unwrapResult);
|
||||
}
|
||||
|
||||
const std::shared_ptr<NativeReference> EtsStartupTaskResult::GetJsStartupResultRef()
|
||||
|
||||
@@ -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<AppStartupTask> startupTask,
|
||||
std::shared_ptr<Context> context, ani_ref contextAniRef);
|
||||
|
||||
static ani_ref GetDependencyResult(ani_env *env, std::shared_ptr<StartupTaskResult> result);
|
||||
};
|
||||
} // namespace AbilityRuntime
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -53,9 +53,6 @@ private:
|
||||
bool esModule_ = true;
|
||||
std::shared_ptr<StartupTaskResultCallback> resultCallback_;
|
||||
|
||||
static ani_ref GetDependencyResult(ani_env *env, const std::string &dependencyName,
|
||||
std::shared_ptr<StartupTaskResult> result);
|
||||
|
||||
int32_t LoadEtsOhmUrl();
|
||||
};
|
||||
} // namespace AbilityRuntime
|
||||
|
||||
Reference in New Issue
Block a user