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 class NapiArrayBufferExt { 29 public: 30 NapiArrayBufferExt() = default; 31 ~NapiArrayBufferExt() = default; 32 33 static napi_value JsConstructor(napi_env env, napi_callback_info info); 34 35 static napi_value GetArrayBuffer(napi_env env, napi_callback_info info); 36 }; 37 38 class WebJsArrayBufferExt { 39 public: WebJsArrayBufferExt(const char * value,const long size)40 explicit WebJsArrayBufferExt(const char* value, const long size) : size_(size) 41 { 42 if (value != nullptr && size > 0) { 43 value_ = new (std::nothrow) char[size]; 44 if (value_ != nullptr) { 45 if (memcpy_s(value_, size, value, size) != 0) { 46 WVLOG_E("[CreatePDF] memcpy failed"); 47 delete[] value_; 48 value_ = nullptr; 49 size_ = 0; 50 } 51 } 52 } 53 }; ~WebJsArrayBufferExt()54 ~WebJsArrayBufferExt() 55 { 56 size_ = 0; 57 if (value_ != nullptr) { 58 delete[] value_; 59 value_ = nullptr; 60 } 61 } 62 GetPDFResult()63 const char* GetPDFResult() const 64 { 65 return value_; 66 } 67 GetPDFSize()68 long GetPDFSize() const 69 { 70 return size_; 71 } 72 73 private: 74 char* value_ = nullptr; 75 long size_ = 0; 76 }; 77 78 class WebviewCreatePDFExecuteCallback : public NWebArrayBufferValueCallback { 79 public: WebviewCreatePDFExecuteCallback(napi_env env,napi_ref callbackRef,napi_deferred deferred)80 explicit WebviewCreatePDFExecuteCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred) 81 : env_(env), callbackRef_(callbackRef), deferred_(deferred) 82 {} 83 ~WebviewCreatePDFExecuteCallback() = default; 84 void OnReceiveValue(const char* value, const long size) override; 85 86 private: 87 struct ArrayBufferExecuteParam { 88 napi_env env_; 89 napi_ref callbackRef_; 90 napi_deferred deferred_; 91 char* result_; 92 long size_; 93 }; 94 95 napi_env env_ = nullptr; 96 napi_ref callbackRef_ = nullptr; 97 napi_deferred deferred_ = nullptr; 98 99 static void UvAfterWorkCb(uv_work_t* work, int status); 100 static void UvAfterWorkCbAsync(napi_env env, napi_ref callbackRef, const char* result, const long size); 101 static void UvAfterWorkCbPromise(napi_env env, napi_deferred deferred, const char* result, const long size); 102 static void ReleaseArrayBufferExecuteParamAndUvWork(ArrayBufferExecuteParam* param, uv_work_t* work); 103 104 public: 105 static void InitJSExcute(napi_env env, napi_value exports); 106 }; 107 108 } // namespace OHOS::NWeb 109 #endif 110