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