diff --git a/frameworks/js/audio_haptic/include/audio_haptic_common_napi.h b/frameworks/js/audio_haptic/include/audio_haptic_common_napi.h index d96b2b7e0dbb4e4eb71fed51516929485b710828..026cf9a92b6c6b42447bd8b1306c0551a78ae264 100644 --- a/frameworks/js/audio_haptic/include/audio_haptic_common_napi.h +++ b/frameworks/js/audio_haptic/include/audio_haptic_common_napi.h @@ -34,6 +34,7 @@ public: AudioHapticCommonNapi() = delete; ~AudioHapticCommonNapi() = delete; static void ThrowError(napi_env env, int32_t code); + static void ThrowError(napi_env env, int32_t code, const std::string &errMessage); static std::string GetMessageByCode(int32_t &code); static std::string GetStringArgument(napi_env env, napi_value value); }; diff --git a/frameworks/js/audio_haptic/src/audio_haptic_common_napi.cpp b/frameworks/js/audio_haptic/src/audio_haptic_common_napi.cpp index 239d4a3ed6e1c1e098e32983a374f27e11955890..08e0ca2243e40228ac941375802ed196adac0367 100644 --- a/frameworks/js/audio_haptic/src/audio_haptic_common_napi.cpp +++ b/frameworks/js/audio_haptic/src/audio_haptic_common_napi.cpp @@ -35,6 +35,11 @@ void AudioHapticCommonNapi::ThrowError(napi_env env, int32_t code) napi_throw_error(env, (std::to_string(code)).c_str(), messageValue.c_str()); } +void AudioHapticCommonNapi::ThrowError(napi_env env, int32_t code, const std::string &errMessage) +{ + napi_throw_error(env, (std::to_string(code)).c_str(), errMessage.c_str()); +} + std::string AudioHapticCommonNapi::GetMessageByCode(int32_t &code) { std::string errMessage; diff --git a/frameworks/js/audio_haptic/src/audio_haptic_manager_napi.cpp b/frameworks/js/audio_haptic/src/audio_haptic_manager_napi.cpp index 68ef3ec8ee044190a9c39c337ebd4e87151ac968..c0e7640ff0446cc943b94077ed8e481154dc6c10 100644 --- a/frameworks/js/audio_haptic/src/audio_haptic_manager_napi.cpp +++ b/frameworks/js/audio_haptic/src/audio_haptic_manager_napi.cpp @@ -229,7 +229,7 @@ napi_value AudioHapticManagerNapi::RegisterSource(napi_env env, napi_callback_in CHECK_AND_RETURN_RET_LOG(status == napi_ok && thisVar != nullptr, result, "RegisterSource: napi_get_cb_info fail"); if (argc != ARGS_TWO) { MEDIA_LOGE("RegisterSource: requires 2 parameters"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); return result; } @@ -249,7 +249,8 @@ napi_value AudioHapticManagerNapi::RegisterSource(napi_env env, napi_callback_in asyncContext->hapticUri = std::string(buffer); } else { MEDIA_LOGE("RegisterSource: the param type mismatch"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of audioUri and hapticUri must be string"); return result; } } @@ -324,7 +325,7 @@ napi_value AudioHapticManagerNapi::UnregisterSource(napi_env env, napi_callback_ "UnregisterSource: Failed to retrieve details about the callback"); if (argc != ARGS_ONE) { MEDIA_LOGE("UnregisterSource: requires 1 parameter"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); return result; } @@ -337,7 +338,8 @@ napi_value AudioHapticManagerNapi::UnregisterSource(napi_env env, napi_callback_ napi_get_value_int32(env, argv[PARAM0], &asyncContext->sourceID); } else { MEDIA_LOGE("UnregisterSource: the param type mismatch"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of id must be number"); return result; } napi_create_promise(env, &asyncContext->deferred, &result); @@ -469,7 +471,7 @@ napi_value AudioHapticManagerNapi::SetStreamUsage(napi_env env, napi_callback_in napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); if (argc != ARGS_TWO) { MEDIA_LOGE("SetStreamUsage: requires 2 parameters"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); return result; } @@ -485,7 +487,7 @@ napi_value AudioHapticManagerNapi::SetStreamUsage(napi_env env, napi_callback_in napi_typeof(env, argv[PARAM0], &valueType); if (valueType != napi_number) { MEDIA_LOGE("SetStreamUsage: the param type mismatch"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "the type of id must be number"); return result; } int32_t sourceID = 0; @@ -494,14 +496,15 @@ napi_value AudioHapticManagerNapi::SetStreamUsage(napi_env env, napi_callback_in napi_typeof(env, argv[PARAM1], &valueType); if (valueType != napi_number) { MEDIA_LOGE("SetStreamUsage: the param type mismatch"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "the type of usage must be number"); return result; } int32_t streamUsage = 0; napi_get_value_int32(env, argv[PARAM1], &streamUsage); if (!IsLegalAudioStreamUsage (streamUsage)) { MEDIA_LOGE("SetStreamUsage: the value of streamUsage is invalid"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, + "the param of usage must be enum audio.StreamUsage"); return result; } @@ -554,14 +557,13 @@ napi_value AudioHapticManagerNapi::CreatePlayer(napi_env env, napi_callback_info CHECK_AND_RETURN_RET_LOG((status == napi_ok && thisVar != nullptr), result, "napi_get_cb_info failed"); if (argc != ARGS_ONE && argc != ARGS_TWO) { MEDIA_LOGE("CreatePlayer: requires 1 parameter or 2 parameters"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); return result; } std::unique_ptr asyncContext = std::make_unique(); status = napi_unwrap(env, thisVar, reinterpret_cast(&asyncContext->objectInfo)); - CHECK_AND_RETURN_RET_LOG(status == napi_ok && asyncContext->objectInfo != nullptr, result, - "Failed to get asyncContext->objectInfo"); + CHECK_AND_RETURN_RET_LOG(status == napi_ok && asyncContext->objectInfo != nullptr, result, "objectInfo invalid"); for (size_t i = PARAM0; i < argc; i++) { napi_valuetype valueType = napi_undefined; @@ -577,7 +579,8 @@ napi_value AudioHapticManagerNapi::CreatePlayer(napi_env env, napi_callback_info } } else { MEDIA_LOGE("CreatePlayer: the param type mismatch"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of id must be number; The type of options must be object"); return result; } } diff --git a/frameworks/js/audio_haptic/src/audio_haptic_player/audio_haptic_player_napi.cpp b/frameworks/js/audio_haptic/src/audio_haptic_player/audio_haptic_player_napi.cpp index 145e8c9ff952846d1c5389fb78abf127360be02e..26c1c3b8b7194b055c59cfca67581f77839cde18 100644 --- a/frameworks/js/audio_haptic/src/audio_haptic_player/audio_haptic_player_napi.cpp +++ b/frameworks/js/audio_haptic/src/audio_haptic_player/audio_haptic_player_napi.cpp @@ -154,7 +154,7 @@ napi_value AudioHapticPlayerNapi::IsMuted(napi_env env, napi_callback_info info) CHECK_AND_RETURN_RET_LOG(status == napi_ok && thisVar != nullptr, result, "IsMuted: napi_get_cb_info fail"); if (argc != ARGS_ONE) { MEDIA_LOGE("IsMuted: requires 1 parameters"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); return result; } @@ -174,7 +174,8 @@ napi_value AudioHapticPlayerNapi::IsMuted(napi_env env, napi_callback_info info) } if (!IsLegalAudioHapticType(jsAudioHapticType)) { MEDIA_LOGE("IsMuted: the param type mismatch"); - AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID); + AudioHapticCommonNapi::ThrowError(env, NAPI_ERR_INPUT_INVALID, + "parameter verification failed: The param of type must be enum AudioHapticType"); return result; } diff --git a/frameworks/js/system_sound_manager/include/ringtone_player/ringtone_common_napi.h b/frameworks/js/system_sound_manager/include/ringtone_player/ringtone_common_napi.h index 00a3a7be4be0629ef9b446573619ffbe3aca4a63..4bba4c1a57c40f7c9fa8510f3677d16ca0a10585 100644 --- a/frameworks/js/system_sound_manager/include/ringtone_player/ringtone_common_napi.h +++ b/frameworks/js/system_sound_manager/include/ringtone_player/ringtone_common_napi.h @@ -23,14 +23,6 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" -#define THROW_ERROR_ASSERT(env, assertion, code) \ - do { \ - if (!(assertion)) { \ - RingtoneCommonNapi::ThrowError(env, code); \ - return nullptr; \ - } \ - } while (0) - namespace OHOS { namespace Media { const int32_t NAPI_ERR_INPUT_INVALID = 401; @@ -49,7 +41,7 @@ public: RingtoneCommonNapi() = delete; ~RingtoneCommonNapi() = delete; static std::string GetStringArgument(napi_env env, napi_value value); - static void ThrowError(napi_env env, int32_t code); + static void ThrowError(napi_env env, int32_t code, const std::string &errMessage); static std::string GetMessageByCode(int32_t &code); }; } // namespace Media diff --git a/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_common_napi.cpp b/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_common_napi.cpp index c055f1ab9af94fdc32e99de97bc638a32b53cdb6..de542af94c58793643081fc3d929341467c963b7 100644 --- a/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_common_napi.cpp +++ b/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_common_napi.cpp @@ -42,9 +42,14 @@ std::string RingtoneCommonNapi::GetStringArgument(napi_env env, napi_value value return strValue; } -void RingtoneCommonNapi::ThrowError(napi_env env, int32_t code) +void RingtoneCommonNapi::ThrowError(napi_env env, int32_t code, const std::string &errMessage) { - std::string messageValue = RingtoneCommonNapi::GetMessageByCode(code); + std::string messageValue; + if (code == NAPI_ERR_INVALID_PARAM || code == NAPI_ERR_INPUT_INVALID) { + messageValue = errMessage.c_str(); + } else { + messageValue = RingtoneCommonNapi::GetMessageByCode(code); + } napi_throw_error(env, (std::to_string(code)).c_str(), messageValue.c_str()); } diff --git a/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_player_napi.cpp b/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_player_napi.cpp index 4459538162831c707cb170cccb24560105b2737a..eea2fcf9fad9fa24ad431d28e07af0221544dfdb 100644 --- a/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_player_napi.cpp +++ b/frameworks/js/system_sound_manager/src/ringtone_player/ringtone_player_napi.cpp @@ -56,6 +56,12 @@ RingtonePlayerNapi::RingtonePlayerNapi() : env_(nullptr) {} RingtonePlayerNapi::~RingtonePlayerNapi() = default; +static napi_value ThrowErrorAndReturn(napi_env env, int32_t errCode, const std::string &errMessage) +{ + RingtoneCommonNapi::ThrowError(env, errCode, errMessage); + return nullptr; +} + napi_value RingtonePlayerNapi::Init(napi_env env, napi_value exports) { napi_status status; @@ -628,12 +634,19 @@ napi_value RingtonePlayerNapi::On(napi_env env, napi_callback_info info) napi_value argv[requireArgc + 1] = {nullptr, nullptr, nullptr}; napi_value jsThis = nullptr; napi_status status = napi_get_cb_info(env, info, &argc, argv, &jsThis, nullptr); - THROW_ERROR_ASSERT(env, status == napi_ok, NAPI_ERR_SYSTEM); - THROW_ERROR_ASSERT(env, argc >= requireArgc, NAPI_ERR_INPUT_INVALID); + if (status != napi_ok) { + ThrowErrorAndReturn(env, NAPI_ERR_SYSTEM, "system err"); + } + if (argc < requireArgc) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); + } napi_valuetype argvType = napi_undefined; napi_typeof(env, argv[0], &argvType); - THROW_ERROR_ASSERT(env, argvType == napi_string, NAPI_ERR_INPUT_INVALID); + if (argvType != napi_string) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of eventType must be string"); + } std::string callbackName = RingtoneCommonNapi::GetStringArgument(env, argv[0]); MEDIA_LOGI("RingtonePlayerNapi: On callbackName: %{public}s", callbackName.c_str()); @@ -641,16 +654,25 @@ napi_value RingtonePlayerNapi::On(napi_env env, napi_callback_info info) napi_valuetype callbackFunction = napi_undefined; if (argc == requireArgc) { napi_typeof(env, argv[1], &callbackFunction); - THROW_ERROR_ASSERT(env, callbackFunction == napi_function, NAPI_ERR_INPUT_INVALID); + if (callbackFunction != napi_function) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of callback must be function"); + } } else { napi_valuetype paramArg1 = napi_undefined; napi_typeof(env, argv[1], ¶mArg1); napi_valuetype expectedValType = napi_number; // Default. Reset it with 'callbackName' if check, if required. - THROW_ERROR_ASSERT(env, paramArg1 == expectedValType, NAPI_ERR_INPUT_INVALID); + if (paramArg1 != expectedValType) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The parameter must be number"); + } const int32_t arg2 = 2; napi_typeof(env, argv[arg2], &callbackFunction); - THROW_ERROR_ASSERT(env, callbackFunction == napi_function, NAPI_ERR_INPUT_INVALID); + if (callbackFunction != napi_function) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of callback must be function"); + } } return RegisterCallback(env, jsThis, argv, callbackName); @@ -661,10 +683,15 @@ napi_value RingtonePlayerNapi::RegisterCallback(napi_env env, napi_value jsThis, { RingtonePlayerNapi *ringtonePlayerNapi = nullptr; napi_status status = napi_unwrap(env, jsThis, reinterpret_cast(&ringtonePlayerNapi)); - THROW_ERROR_ASSERT(env, status == napi_ok, NAPI_ERR_SYSTEM); - THROW_ERROR_ASSERT(env, ringtonePlayerNapi != nullptr, NAPI_ERR_NO_MEMORY); - - THROW_ERROR_ASSERT(env, ringtonePlayerNapi->ringtonePlayer_ != nullptr, NAPI_ERR_NO_MEMORY); + if (status != napi_ok) { + ThrowErrorAndReturn(env, NAPI_ERR_SYSTEM, "system err"); + } + if (ringtonePlayerNapi == nullptr) { + ThrowErrorAndReturn(env, NAPI_ERR_NO_MEMORY, "no memory"); + } + if (ringtonePlayerNapi->ringtonePlayer_ == nullptr) { + ThrowErrorAndReturn(env, NAPI_ERR_NO_MEMORY, "no memory"); + } napi_value result = nullptr; napi_get_undefined(env, &result); @@ -673,7 +700,10 @@ napi_value RingtonePlayerNapi::RegisterCallback(napi_env env, napi_value jsThis, result = RegisterRingtonePlayerCallback(env, argv, cbName, ringtonePlayerNapi); } else { bool unknownCallback = true; - THROW_ERROR_ASSERT(env, !unknownCallback, NAPI_ERR_INVALID_PARAM); + if (unknownCallback) { + ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, + "parameter verification failed: The param of type is not supported"); + } } return result; @@ -682,7 +712,9 @@ napi_value RingtonePlayerNapi::RegisterCallback(napi_env env, napi_value jsThis, napi_value RingtonePlayerNapi::RegisterRingtonePlayerCallback(napi_env env, napi_value* argv, const std::string& cbName, RingtonePlayerNapi *ringtonePlayerNapi) { - THROW_ERROR_ASSERT(env, ringtonePlayerNapi->callbackNapi_ != nullptr, NAPI_ERR_NO_MEMORY); + if (ringtonePlayerNapi->callbackNapi_ == nullptr) { + ThrowErrorAndReturn(env, NAPI_ERR_NO_MEMORY, "no memory"); + } std::shared_ptr cb = std::static_pointer_cast(ringtonePlayerNapi->callbackNapi_); @@ -701,12 +733,19 @@ napi_value RingtonePlayerNapi::Off(napi_env env, napi_callback_info info) napi_value argv[requireArgc + 1] = {nullptr, nullptr, nullptr}; napi_value jsThis = nullptr; napi_status status = napi_get_cb_info(env, info, &argc, argv, &jsThis, nullptr); - THROW_ERROR_ASSERT(env, status == napi_ok, NAPI_ERR_SYSTEM); - THROW_ERROR_ASSERT(env, argc <= requireArgc, NAPI_ERR_INVALID_PARAM); + if (status != napi_ok) { + ThrowErrorAndReturn(env, NAPI_ERR_SYSTEM, "system err"); + } + if (argc > requireArgc) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, "mandatory parameters are left unspecified"); + } napi_valuetype callbackNameType = napi_undefined; napi_typeof(env, argv[0], &callbackNameType); - THROW_ERROR_ASSERT(env, callbackNameType == napi_string, NAPI_ERR_INVALID_PARAM); + if (callbackNameType != napi_string) { + ThrowErrorAndReturn(env, NAPI_ERR_INPUT_INVALID, + "incorrect parameter types: The type of eventType must be string"); + } string callbackName = RingtoneCommonNapi::GetStringArgument(env, argv[0]); MEDIA_LOGI("Off callbackName: %{public}s", callbackName.c_str()); @@ -718,15 +757,24 @@ napi_value RingtonePlayerNapi::UnregisterCallback(napi_env env, napi_value jsThi { RingtonePlayerNapi *ringtonePlayerNapi = nullptr; napi_status status = napi_unwrap(env, jsThis, reinterpret_cast(&ringtonePlayerNapi)); - THROW_ERROR_ASSERT(env, status == napi_ok, NAPI_ERR_SYSTEM); - THROW_ERROR_ASSERT(env, ringtonePlayerNapi != nullptr, NAPI_ERR_NO_MEMORY); - THROW_ERROR_ASSERT(env, ringtonePlayerNapi->ringtonePlayer_ != nullptr, NAPI_ERR_NO_MEMORY); + if (status != napi_ok) { + ThrowErrorAndReturn(env, NAPI_ERR_SYSTEM, "system err"); + } + if (ringtonePlayerNapi == nullptr) { + ThrowErrorAndReturn(env, NAPI_ERR_NO_MEMORY, "no memory"); + } + if (ringtonePlayerNapi->ringtonePlayer_ == nullptr) { + ThrowErrorAndReturn(env, NAPI_ERR_NO_MEMORY, "no memory"); + } if (!cbName.compare(AUDIO_INTERRUPT_CALLBACK_NAME)) { UnregisterRingtonePlayerCallback(ringtonePlayerNapi, cbName); } else { bool unknownCallback = true; - THROW_ERROR_ASSERT(env, !unknownCallback, NAPI_ERR_UNSUPPORTED); + if (unknownCallback) { + ThrowErrorAndReturn(env, NAPI_ERR_INVALID_PARAM, + "parameter verification failed: The param of type is not supported"); + } } napi_value result = nullptr;