From 0860d2abd7daead7debe4427bfbb5f7d91d7d68f Mon Sep 17 00:00:00 2001 From: jerry Date: Thu, 20 Apr 2023 08:31:44 +0000 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=80=80=20'Pull=20Request=20!5271=20?= =?UTF-8?q?:=20=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81=E5=88=A0=E9=99=A4'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/js/napi/app/error_manager/BUILD.gn | 1 + .../error_manager/error_manager_module.cpp | 14 +++++ .../app/error_manager/js_error_manager.cpp | 56 ++++++++++++++++++- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/frameworks/js/napi/app/error_manager/BUILD.gn b/frameworks/js/napi/app/error_manager/BUILD.gn index 2b61548aa4..65fd963c28 100644 --- a/frameworks/js/napi/app/error_manager/BUILD.gn +++ b/frameworks/js/napi/app/error_manager/BUILD.gn @@ -54,4 +54,5 @@ errormanager("errormanager_napi") { errormanager("errormanager") { relative_install_dir = "module/app/ability" + defines = [ "ENABLE_ERRCODE" ] } diff --git a/frameworks/js/napi/app/error_manager/error_manager_module.cpp b/frameworks/js/napi/app/error_manager/error_manager_module.cpp index b197e201fe..d68b42be64 100644 --- a/frameworks/js/napi/app/error_manager/error_manager_module.cpp +++ b/frameworks/js/napi/app/error_manager/error_manager_module.cpp @@ -17,6 +17,7 @@ #include "native_engine/native_engine.h" extern "C" __attribute__((constructor)) +#ifdef ENABLE_ERRCODE void NAPI_app_ability_ErrorManager_AutoRegister() { NativeModule newModuleInfo = { @@ -28,3 +29,16 @@ void NAPI_app_ability_ErrorManager_AutoRegister() auto moduleManager = NativeModuleManager::GetInstance(); moduleManager->Register(&newModuleInfo); } +#else +void NAPI_application_ErrorManager_AutoRegister() +{ + NativeModule newModuleInfo = { + .name = "application.errorManager", + .fileName = "application/errormanager_napi.so/error_manager.js", + .registerCallback = OHOS::AbilityRuntime::JsErrorManagerInit, + }; + + auto moduleManager = NativeModuleManager::GetInstance(); + moduleManager->Register(&newModuleInfo); +} +#endif diff --git a/frameworks/js/napi/app/error_manager/js_error_manager.cpp b/frameworks/js/napi/app/error_manager/js_error_manager.cpp index c9aadff5b1..5aa91ada6d 100644 --- a/frameworks/js/napi/app/error_manager/js_error_manager.cpp +++ b/frameworks/js/napi/app/error_manager/js_error_manager.cpp @@ -29,11 +29,19 @@ namespace OHOS { namespace AbilityRuntime { namespace { +#ifndef ENABLE_ERRCODE +constexpr int32_t ERROR_CODE = -1; +constexpr int32_t INVALID_PARAM = -2; +#endif constexpr int32_t INDEX_ZERO = 0; constexpr int32_t INDEX_ONE = 1; constexpr size_t ARGC_TWO = 2; +#ifdef ENABLE_ERRCODE constexpr int32_t INDEX_TWO = 2; constexpr size_t ARGC_THREE = 3; +#else +constexpr size_t ARGC_ONE = 1; +#endif class JsErrorManager final { public: @@ -42,7 +50,7 @@ public: static void Finalizer(NativeEngine* engine, void* data, void* hint) { - HILOG_DEBUG("JsErrorManager Finalizer is called"); + HILOG_INFO("JsErrorManager Finalizer is called"); std::unique_ptr(static_cast(data)); } @@ -62,6 +70,7 @@ private: NativeValue* OnRegisterErrorObserver(NativeEngine& engine, const NativeCallbackInfo& info) { HILOG_INFO("Register errorObserver is called."); +#ifdef ENABLE_ERRCODE if (info.argc != ARGC_TWO) { HILOG_ERROR("The param is invalid, observers need."); ThrowTooFewParametersError(engine); @@ -74,7 +83,13 @@ private: ThrowError(engine, AbilityErrorCode::ERROR_CODE_INVALID_PARAM); return engine.CreateUndefined(); } - +#else + // only support one + if (info.argc != ARGC_ONE) { + HILOG_ERROR("The param is invalid, observers need."); + return engine.CreateUndefined(); + } +#endif int32_t observerId = serialNumber_; if (serialNumber_ < INT32_MAX) { serialNumber_++; @@ -87,13 +102,18 @@ private: observer_ = std::make_shared(engine); AppExecFwk::ApplicationDataManager::GetInstance().AddErrorObserver(observer_); } +#ifdef ENABLE_ERRCODE observer_->AddJsObserverObject(observerId, info.argv[INDEX_ONE]); +#else + observer_->AddJsObserverObject(observerId, info.argv[INDEX_ZERO]); +#endif return engine.CreateNumber(observerId); } NativeValue* OnUnregisterErrorObserver(NativeEngine& engine, NativeCallbackInfo& info) { int32_t observerId = -1; +#ifdef ENABLE_ERRCODE if (info.argc != ARGC_TWO && info.argc != ARGC_THREE) { ThrowTooFewParametersError(engine); HILOG_ERROR("unregister errorObserver error, not enough params."); @@ -109,6 +129,16 @@ private: ThrowError(engine, AbilityErrorCode::ERROR_CODE_INVALID_PARAM); return engine.CreateUndefined(); } +#else + // only support one or two params + if (info.argc != ARGC_ONE && info.argc != ARGC_TWO) { + HILOG_ERROR("unregister errorObserver error, not enough params."); + } else { + napi_get_value_int32(reinterpret_cast(&engine), + reinterpret_cast(info.argv[INDEX_ZERO]), &observerId); + HILOG_INFO("unregister errorObserver called, observer:%{public}d", observerId); + } +#endif std::weak_ptr observerWptr(observer_); AsyncTask::CompleteCallback complete = @@ -116,22 +146,38 @@ private: NativeEngine& engine, AsyncTask& task, int32_t status) { HILOG_INFO("Unregister errorObserver called."); if (observerId == -1) { +#ifdef ENABLE_ERRCODE task.Reject(engine, CreateJsError(engine, AbilityErrorCode::ERROR_CODE_INVALID_PARAM)); +#else + task.Reject(engine, CreateJsError(engine, INVALID_PARAM, "param is invalid!")); +#endif return; } auto observer = observerWptr.lock(); bool isEmpty = false; if (observer && observer->RemoveJsObserverObject(observerId, isEmpty)) { +#ifdef ENABLE_ERRCODE task.ResolveWithNoError(engine, engine.CreateUndefined()); +#else + task.Resolve(engine, engine.CreateUndefined()); +#endif } else { +#ifdef ENABLE_ERRCODE task.Reject(engine, CreateJsError(engine, AbilityErrorCode::ERROR_CODE_INVALID_ID)); +#else + task.Reject(engine, CreateJsError(engine, ERROR_CODE, "observer is not exist!")); +#endif } if (isEmpty) { AppExecFwk::ApplicationDataManager::GetInstance().RemoveErrorObserver(); } }; +#ifdef ENABLE_ERRCODE NativeValue* lastParam = (info.argc <= ARGC_TWO) ? nullptr : info.argv[INDEX_TWO]; +#else + NativeValue* lastParam = (info.argc <= ARGC_ONE) ? nullptr : info.argv[INDEX_ONE]; +#endif NativeValue* result = nullptr; AsyncTask::Schedule("JSErrorManager::OnUnregisterErrorObserver", engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); @@ -162,8 +208,14 @@ NativeValue* JsErrorManagerInit(NativeEngine* engine, NativeValue* exportObj) HILOG_INFO("JsErrorManager BindNativeFunction called"); const char *moduleName = "JsErrorManager"; +#ifdef ENABLE_ERRCODE BindNativeFunction(*engine, *object, "on", moduleName, JsErrorManager::RegisterErrorObserver); BindNativeFunction(*engine, *object, "off", moduleName, JsErrorManager::UnregisterErrorObserver); +#else + BindNativeFunction(*engine, *object, "registerErrorObserver", moduleName, JsErrorManager::RegisterErrorObserver); + BindNativeFunction(*engine, *object, "unregisterErrorObserver", + moduleName, JsErrorManager::UnregisterErrorObserver); +#endif return engine->CreateUndefined(); } } // namespace AbilityRuntime