1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef NWEB_WEBVIEW_JAVA_SCRIPT_EXECUTE_CALLBACK_H 16 #define NWEB_WEBVIEW_JAVA_SCRIPT_EXECUTE_CALLBACK_H 17 18 #include <string> 19 #include <uv.h> 20 21 #include "napi/native_api.h" 22 #include "napi/native_node_api.h" 23 #include "napi_parse_utils.h" 24 #include "nweb_value_callback.h" 25 #include "nweb_web_message.h" 26 #include "nweb_message_ext.h" 27 28 namespace OHOS::NWeb { 29 enum class JsMessageType : int { 30 NOTSUPPORT = 0, 31 STRING, 32 NUMBER, 33 BOOLEAN, 34 ARRAYBUFFER, 35 ARRAY 36 }; 37 38 class NapiJsMessageExt { 39 public: 40 NapiJsMessageExt() = default; 41 ~NapiJsMessageExt() = default; 42 43 static napi_value JsConstructor(napi_env env, napi_callback_info info); 44 45 static napi_value GetType(napi_env env, napi_callback_info info); 46 static napi_value GetString(napi_env env, napi_callback_info info); 47 static napi_value GetNumber(napi_env env, napi_callback_info info); 48 static napi_value GetBoolean(napi_env env, napi_callback_info info); 49 static napi_value GetArrayBuffer(napi_env env, napi_callback_info info); 50 static napi_value GetArray(napi_env env, napi_callback_info info); 51 }; 52 53 class WebJsMessageExt { 54 public: WebJsMessageExt(std::shared_ptr<NWebMessage> value)55 explicit WebJsMessageExt(std::shared_ptr<NWebMessage> value) : value_(value) {} 56 ~WebJsMessageExt() = default; 57 58 int32_t ConvertToJsType(NWebValue::Type type); 59 int32_t GetType(); 60 std::string GetString(); 61 double GetNumber(); 62 bool GetBoolean(); GetJsMsgResult()63 std::shared_ptr<NWebMessage> GetJsMsgResult() 64 { 65 return value_; 66 } 67 68 private: 69 std::shared_ptr<NWebMessage> value_ = nullptr; 70 }; 71 72 class WebviewJavaScriptExecuteCallback : public NWebMessageValueCallback { 73 public: WebviewJavaScriptExecuteCallback(napi_env env,napi_ref callbackRef,napi_deferred deferred,bool extention)74 explicit WebviewJavaScriptExecuteCallback( 75 napi_env env, napi_ref callbackRef, napi_deferred deferred, bool extention) 76 : env_(env), callbackRef_(callbackRef), deferred_(deferred), extention_(extention) 77 {} 78 ~WebviewJavaScriptExecuteCallback() = default; 79 void OnReceiveValue(std::shared_ptr<NWebMessage> result) override; 80 void OnReceiveValueV2(std::shared_ptr<NWebHapValue> value) override; 81 82 private: 83 struct JavaScriptExecuteParam { 84 napi_env env_; 85 napi_ref callbackRef_; 86 napi_deferred deferred_; 87 std::shared_ptr<NWebMessage> result_; 88 bool extention_; 89 }; 90 91 napi_env env_ = nullptr; 92 napi_ref callbackRef_ = nullptr; 93 napi_deferred deferred_ = nullptr; 94 bool extention_ = false; 95 96 static void UvAfterWorkCb(uv_work_t* work, int status); 97 static void UvAfterWorkCbAsync( 98 napi_env env, napi_ref callbackRef, std::shared_ptr<NWebMessage> result, bool extention); 99 static void UvAfterWorkCbPromise( 100 napi_env env, napi_deferred deferred, std::shared_ptr<NWebMessage> result, bool extention); 101 102 public: 103 static void InitJSExcute(napi_env env, napi_value exports); 104 }; 105 106 } // namespace OHOS::NWeb 107 #endif 108