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 
16 #ifndef NWEB_NAPI_WEB_SCHEME_HANDLER_REQUEST_H
17 #define NWEB_NAPI_WEB_SCHEME_HANDLER_REQUEST_H
18 
19 #include "napi/native_api.h"
20 #include "napi/native_common.h"
21 #include "napi/native_node_api.h"
22 
23 namespace OHOS {
24 namespace NWeb {
25 enum class WebResourceType {
26     /* These constants match their equivalents in Chromium's ResourceType and should not be renumbered. */
27     MAIN_FRAME = 0,
28     SUB_FRAME,
29     STYLE_SHEET,
30     SCRIPT,
31     IMAGE,
32     FONT_RESOURCE,
33     SUB_RESOURCE,
34     OBJECT,
35     MEDIA,
36     WORKER,
37     SHARED_WORKER,
38     PREFETCH,
39     FAVICON,
40     XHR,
41     PING,
42     SERVICE_WORKER,
43     CSP_REPORT,
44     PLUGIN_RESOURCE,
45     NAVIGATION_PRELOAD_MAIN_FRAME = 19,
46     NAVIGATION_PRELOAD_SUB_FRAME = 20
47 };
48 const std::string WEB_SCHEME_HANDLER = "WebSchemeHandler";
49 const std::string WEB_SCHEME_HANDLER_REQUEST = "WebSchemeHandlerRequest";
50 const std::string WEB_SCHEME_HANDLER_RESPONSE = "WebSchemeHandlerResponse";
51 const std::string WEB_RESOURCE_HANDLER = "WebResourceHandler";
52 const std::string WEB_HTTP_BODY_STREAM = "WebHttpBodyStream";
53 const std::string WEB_NET_ERROR_CODE = "WebNetErrorCode";
54 class NapiWebSchemeHandlerRequest {
55 public:
56     NapiWebSchemeHandlerRequest() = default;
57     ~NapiWebSchemeHandlerRequest() = default;
58 
59     static napi_value Init(napi_env env, napi_value exports);
60     static void ExportWebSchemeHandlerRequestClass(napi_env, napi_value* exportsPointer);
61     static napi_status DefineProperties(napi_env env, napi_value* object);
62 
63     static napi_value JS_Constructor(napi_env env, napi_callback_info cbinfo);
64     static napi_value JS_GetHeader(napi_env env, napi_callback_info cbinfo);
65     static napi_value JS_GetRequestUrl(napi_env env, napi_callback_info cbinfo);
66     static napi_value JS_GetRequestMethod(napi_env env, napi_callback_info cbinfo);
67     static napi_value JS_GetReferrer(napi_env env, napi_callback_info cbinfo);
68     static napi_value JS_IsRedirect(napi_env env, napi_callback_info cbinfo);
69     static napi_value JS_IsMainFrame(napi_env env, napi_callback_info cbinfo);
70     static napi_value JS_HasGesture(napi_env env, napi_callback_info cbinfo);
71     static napi_value JS_HttpBodyStream(napi_env env, napi_callback_info cbinfo);
72     static napi_value JS_GetRequestResourceType(napi_env env, napi_callback_info cbinfo);
73     static napi_value JS_GetFrameUrl(napi_env env, napi_callback_info cbinfo);
74 
75 private:
76     static napi_status ExportEnumWebResourceType(napi_env env, napi_value* value);
77 };
78 
79 class NapiWebSchemeHandlerResponse {
80 public:
81     NapiWebSchemeHandlerResponse() = default;
82     ~NapiWebSchemeHandlerResponse() = default;
83 
84     static napi_value Init(napi_env env, napi_value exports);
85     static void ExportWebSchemeHandlerResponseClass(napi_env, napi_value* exportsPointer);
86 
87     static napi_value JS_Constructor(napi_env env, napi_callback_info cbinfo);
88     static napi_value JS_GetUrl(napi_env env, napi_callback_info cbinfo);
89     static napi_value JS_SetUrl(napi_env env, napi_callback_info cbinfo);
90     static napi_value JS_GetStatus(napi_env env, napi_callback_info cbinfo);
91     static napi_value JS_SetStatus(napi_env env, napi_callback_info cbinfo);
92     static napi_value JS_GetStatusText(napi_env env, napi_callback_info cbinfo);
93     static napi_value JS_SetStatusText(napi_env env, napi_callback_info cbinfo);
94     static napi_value JS_GetMimeType(napi_env env, napi_callback_info cbinfo);
95     static napi_value JS_SetMimeType(napi_env env, napi_callback_info cbinfo);
96     static napi_value JS_GetEncoding(napi_env env, napi_callback_info cbinfo);
97     static napi_value JS_SetEncoding(napi_env env, napi_callback_info cbinfo);
98     static napi_value JS_GetHeaderByName(napi_env env, napi_callback_info cbinfo);
99     static napi_value JS_SetHeaderByName(napi_env env, napi_callback_info cbinfo);
100     static napi_value JS_GetNetErrorCode(napi_env env, napi_callback_info cbinfo);
101     static napi_value JS_SetNetErrorCode(napi_env env, napi_callback_info cbinfo);
102 };
103 
104 class NapiWebSchemeHandler {
105 public:
106     NapiWebSchemeHandler() = default;
107     ~NapiWebSchemeHandler() = default;
108 
109     static napi_value Init(napi_env env, napi_value exports);
110     static napi_value JS_Constructor(napi_env env, napi_callback_info info);
111     static napi_value JS_RequestStart(napi_env env, napi_callback_info info);
112     static napi_value JS_RequestStop(napi_env env, napi_callback_info info);
113 };
114 
115 class NapiWebResourceHandler {
116 public:
117     NapiWebResourceHandler() = default;
118     ~NapiWebResourceHandler() = default;
119 
120     static napi_value Init(napi_env env, napi_value exports);
121     static void ExportWebResourceHandlerClass(napi_env, napi_value* exportsPointer);
122     static napi_status DefineProperties(napi_env env, napi_value* object);
123 
124     static napi_value JS_Constructor(napi_env env, napi_callback_info info);
125     static napi_value JS_DidReceiveResponse(napi_env env, napi_callback_info info);
126     static napi_value JS_DidReceiveResponseBody(napi_env env, napi_callback_info info);
127     static napi_value JS_DidFinish(napi_env env, napi_callback_info info);
128     static napi_value JS_DidFailWithError(napi_env env, napi_callback_info info);
129 };
130 
131 class NapiWebHttpBodyStream {
132 public:
133     NapiWebHttpBodyStream() = default;
134     ~NapiWebHttpBodyStream() = default;
135 
136     static napi_value Init(napi_env env, napi_value exports);
137     static void ExportWebHttpBodyStreamClass(napi_env, napi_value* exportsPointer);
138     static napi_status DefineProperties(napi_env env, napi_value* object);
139 
140     static napi_value JS_Constructor(napi_env env, napi_callback_info info);
141     static napi_value JS_Initialize(napi_env env, napi_callback_info info);
142     static napi_value JS_Read(napi_env env, napi_callback_info info);
143     static napi_value JS_GetSize(napi_env env, napi_callback_info info);
144     static napi_value JS_GetPostion(napi_env env, napi_callback_info info);
145     static napi_value JS_IsChunked(napi_env env, napi_callback_info info);
146     static napi_value JS_IsEof(napi_env env, napi_callback_info info);
147     static napi_value JS_IsInMemory(napi_env env, napi_callback_info info);
148 };
149 } // namespace NWeb
150 } // namespace OHOS
151 
152 #endif // NWEB_NAPI_WEB_SCHEME_HANDLER_REQUEST_H
153