diff --git a/interfaces/inner_api/napi/native_node_api.h b/interfaces/inner_api/napi/native_node_api.h index ddea4adeebf41191013366cdf98e45e37769017e..18fd603f315e61130f9f7a6726c3eeafedf5e05c 100644 --- a/interfaces/inner_api/napi/native_node_api.h +++ b/interfaces/inner_api/napi/native_node_api.h @@ -242,7 +242,6 @@ NAPI_EXTERN napi_status napi_register_appstate_callback(napi_env env, NapiAppSta NAPI_EXTERN napi_status napi_load_module_with_info_hybrid(napi_env env, const char* path, const char* module_info, - napi_value* result, - bool isHybrid); + napi_value* result); #endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_NODE_API_H */ diff --git a/native_engine/impl/ark/ark_native_engine.cpp b/native_engine/impl/ark/ark_native_engine.cpp index 0684a24895db39092c5db98dd889590969b5ce4b..4715f4eb9537992f8a09721667e346ef8265b711 100644 --- a/native_engine/impl/ark/ark_native_engine.cpp +++ b/native_engine/impl/ark/ark_native_engine.cpp @@ -1863,7 +1863,7 @@ napi_value ArkNativeEngine::NapiLoadModule(const char* path) return JsValueFromLocalValue(scope.Escape(exportObj)); } -napi_value ArkNativeEngine::NapiLoadModuleWithInfo(const char* path, const char* module_info, bool isHybrid) +napi_value ArkNativeEngine::NapiLoadModuleWithInfo(const char* path, const char* module_info) { if (path == nullptr) { HILOG_ERROR("ArkNativeEngine:The module name is empty"); @@ -1876,7 +1876,34 @@ napi_value ArkNativeEngine::NapiLoadModuleWithInfo(const char* path, const char* std::string modulePath; if (module_info != nullptr) { modulePath = module_info; - exportObj = panda::JSNApi::GetModuleNameSpaceWithModuleInfo(vm_, inputPath, modulePath, isHybrid); + exportObj = panda::JSNApi::GetModuleNameSpaceWithModuleInfoForNormalApp(vm_, inputPath, modulePath); + } else { + exportObj = NapiLoadNativeModule(inputPath); + } + + if (panda::JSNApi::HasPendingException(vm_)) { + HILOG_WARN("ArkNativeEngine:NapiLoadModuleWithInfo failed."); + panda::JSNApi::PrintExceptionInfo(vm_); + panda::JSNApi::GetAndClearUncaughtException(vm_); // clear exception here + return JsValueFromLocalValue(scope.Escape(undefObj)); + } + return JsValueFromLocalValue(scope.Escape(exportObj)); +} + +napi_value ArkNativeEngine::NapiLoadModuleWithInfoForHybridApp(const char* path, const char* module_info) +{ + if (path == nullptr) { + HILOG_ERROR("ArkNativeEngine:The module name is empty"); + return nullptr; + } + panda::EscapeLocalScope scope(vm_); + Local undefObj = JSValueRef::Undefined(vm_); + Local exportObj(undefObj); + std::string inputPath(path); + std::string modulePath; + if (module_info != nullptr) { + modulePath = module_info; + exportObj = panda::JSNApi::GetModuleNameSpaceWithModuleInfoForHybridApp(vm_, inputPath, modulePath); } else { exportObj = NapiLoadNativeModule(inputPath); } diff --git a/native_engine/impl/ark/ark_native_engine.h b/native_engine/impl/ark/ark_native_engine.h index 82040cd4f0f7849d42a7cfea74247784e38588ee..47ab97607bdeed05669a505bce5969d118104d5b 100644 --- a/native_engine/impl/ark/ark_native_engine.h +++ b/native_engine/impl/ark/ark_native_engine.h @@ -347,7 +347,8 @@ public: const std::string& moduleName, bool isAppModule, const std::string& id, const std::string& param, const std::string& instanceName, void** instance); napi_value NapiLoadModule(const char* path) override; - napi_value NapiLoadModuleWithInfo(const char* path, const char* module_info, bool isHybrid = false) override; + napi_value NapiLoadModuleWithInfo(const char* path, const char* module_info) override; + napi_value NapiLoadModuleWithInfoForHybridApp(const char* path, const char* module_info) override; std::string GetOhmurl(std::string str); Local NapiLoadNativeModule(std::string path); NativeReference* GetPromiseRejectCallBackRef() diff --git a/native_engine/native_api.cpp b/native_engine/native_api.cpp index 6c2db316688e66adf8b8a07ada37011fcf8588d9..4ca0b58fa9fbced9099af49075c77118b005f5e6 100644 --- a/native_engine/native_api.cpp +++ b/native_engine/native_api.cpp @@ -3295,13 +3295,12 @@ NAPI_EXTERN napi_status napi_load_module_with_info(napi_env env, NAPI_EXTERN napi_status napi_load_module_with_info_hybrid(napi_env env, const char* path, const char* module_info, - napi_value* result, - bool isHybrid) + napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, result); auto engine = reinterpret_cast(env); - *result = engine->NapiLoadModuleWithInfo(path, module_info, isHybrid); + *result = engine->NapiLoadModuleWithInfoForHybridApp(path, module_info); return GET_RETURN_STATUS(env); } // Memory management @@ -4604,7 +4603,7 @@ NAPI_EXTERN napi_status napi_load_module_with_module_request(napi_env env, const if (request_name[0] == NAME_SPACE_TAG) { // load module with OhmUrl auto [path, module_info] = panda::JSNApi::ResolveOhmUrl(request_name); - napi_load_module_with_info_hybrid(env, path.c_str(), module_info.c_str(), result, true); + napi_load_module_with_info_hybrid(env, path.c_str(), module_info.c_str(), result); } else { napi_load_module_with_path(env, request_name, result); } diff --git a/native_engine/native_engine.h b/native_engine/native_engine.h index c3bd0abb61169f020cd3b014ee188a19d0fc86b1..54ab66e3dee0a6202e4b3c51c70e1ced0881c736 100644 --- a/native_engine/native_engine.h +++ b/native_engine/native_engine.h @@ -521,7 +521,8 @@ public: void SetModuleLoadChecker(const std::shared_ptr& moduleCheckerDelegate); virtual napi_value NapiLoadModule(const char* path) = 0; - virtual napi_value NapiLoadModuleWithInfo(const char* path, const char* module_info, bool isHybrid = false) = 0; + virtual napi_value NapiLoadModuleWithInfo(const char* path, const char* module_info) = 0; + virtual napi_value NapiLoadModuleWithInfoForHybridApp(const char* path, const char* module_info) = 0; virtual std::string GetPkgName(const std::string &moduleName) = 0; double NewAsyncId() diff --git a/test/unittest/test_napi.cpp b/test/unittest/test_napi.cpp index 8fa34980a00464df408fdca9a3555d544cf51a48..e8c6c2923b1dcae970fb61b5d078f920206927de 100644 --- a/test/unittest/test_napi.cpp +++ b/test/unittest/test_napi.cpp @@ -13659,6 +13659,46 @@ HWTEST_F(NapiBasicTest, NapiLoadModuleWithInfoTest004, testing::ext::TestSize.Le ASSERT_EQ(result2->error_code, napi_generic_failure); } +/** + * @tc.name: NapiLoadModuleWithInfoForHybridAppTest + * @tc.desc: Test interface of napi_load_module_with_info_hybrid + * @tc.type: FUNC + */ +HWTEST_F(NapiBasicTest, NapiLoadModuleWithInfoForHybridAppTest001, testing::ext::TestSize.Level1) +{ + auto res = napi_load_module_with_info_hybrid(nullptr, nullptr, nullptr, nullptr); + ASSERT_EQ(res, napi_invalid_arg); +} + +/** + * @tc.name: NapiLoadModuleWithInfoForHybridAppTest + * @tc.desc: Test interface of napi_load_module_with_info_hybrid + * @tc.type: FUNC + */ +HWTEST_F(NapiBasicTest, NapiLoadModuleWithInfoForHybridAppTest002, testing::ext::TestSize.Level1) +{ + ASSERT_NE(engine_, nullptr); + napi_env env = reinterpret_cast(engine_); + + auto res = napi_load_module_with_info_hybrid(env, nullptr, nullptr, nullptr); + ASSERT_EQ(res, napi_invalid_arg); +} + +/** + * @tc.name: NapiLoadModuleWithInfoForHybridAppTest + * @tc.desc: Test interface of napi_load_module_with_info_hybrid + * @tc.type: FUNC + */ +HWTEST_F(NapiBasicTest, NapiLoadModuleWithInfoForHybridAppTest003, testing::ext::TestSize.Level1) +{ + ASSERT_NE(engine_, nullptr); + napi_env env = reinterpret_cast(engine_); + + napi_value result = nullptr; + auto res = napi_load_module_with_info_hybrid(env, nullptr, nullptr, &result); + ASSERT_EQ(res, napi_ok); +} + /** * @tc.name: NapiSerializeTest * @tc.desc: Test interface of napi_serialize