1 /* 2 * Copyright (c) 2024 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_CREAT_PDF_EXECUTE_CALLBACK_H 16 #define NWEB_WEBVIEW_CREAT_PDF_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 27 namespace OHOS::NWeb { 28 enum class JsCreatePDFType : int { ARRAYBUFFER = 0 }; 29 30 class NapiArrayBufferExt { 31 public: 32 NapiArrayBufferExt() = default; 33 ~NapiArrayBufferExt() = default; 34 35 static napi_value JsConstructor(napi_env env, napi_callback_info info); 36 37 static napi_value GetArrayBuffer(napi_env env, napi_callback_info info); 38 }; 39 40 class WebJsArrayBufferExt { 41 public: WebJsArrayBufferExt(const char* value, const long size)42 explicit WebJsArrayBufferExt(const char* value, const long size) : value_(value), size_(size) {}; 43 ~WebJsArrayBufferExt() = default; 44 GetPDFResult() const45 const char* GetPDFResult() const 46 { 47 return value_; 48 } 49 GetPDFSize() const50 long GetPDFSize() const 51 { 52 return size_; 53 } 54 55 private: 56 const char* value_ = nullptr; 57 long size_ = 0; 58 }; 59 60 class WebviewCreatePDFExecuteCallback : public NWebArrayBufferValueCallback { 61 public: WebviewCreatePDFExecuteCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred)62 explicit WebviewCreatePDFExecuteCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred) 63 : env_(env), callbackRef_(callbackRef), deferred_(deferred) 64 {} 65 ~WebviewCreatePDFExecuteCallback() = default; 66 void OnReceiveValue(const char* value, const long size) override; 67 68 private: 69 struct ArrayBufferExecuteParam { 70 napi_env env_; 71 napi_ref callbackRef_; 72 napi_deferred deferred_; 73 char* result_; 74 long size_; 75 }; 76 77 napi_env env_ = nullptr; 78 napi_ref callbackRef_ = nullptr; 79 napi_deferred deferred_ = nullptr; 80 81 static void UvAfterWorkCb(uv_work_t* work, int status); 82 static void UvAfterWorkCbAsync(napi_env env, napi_ref callbackRef, const char* result, const long size); 83 static void UvAfterWorkCbPromise(napi_env env, napi_deferred deferred, const char* result, const long size); 84 static void ReleaseArrayBufferExecuteParamAndUvWork(ArrayBufferExecuteParam* param, uv_work_t* work); 85 86 public: 87 static void InitJSExcute(napi_env env, napi_value exports); 88 }; 89 90 } // namespace OHOS::NWeb 91 #endif 92