• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "hilog/log.h"
17 #include "napi/native_api.h"
18 #include "rawfile_request.h"
19 #include "rawfile/raw_file_manager.h"
20 #include "web/arkweb_scheme_handler.h"
21 #include "web/arkweb_net_error_list.h"
22 #include <bits/alltypes.h>
23 #include <web/arkweb_interface.h>
24 
25 #undef LOG_TAG
26 #define LOG_TAG "ss-handler"
27 
28 ArkWeb_SchemeHandler *g_schemeHandler;
29 ArkWeb_SchemeHandler *g_schemeHandlerForSW;
30 NativeResourceManager *g_resourceManager;
31 
32 int32_t testReleaseString = -1;
33 int32_t testReleaseByteArray = -1;
34 int32_t testDestroyHttpBodyStream = -1;
35 int32_t testSetHeaderByName = -1;
36 
37 int32_t testResourceHandler = -1;
38 int32_t testResponse = -1;
39 std::string testResourceRequest("test");
40 int32_t testRequestHeaderList = -1;
41 int32_t testHttpBodyStream = -1;
42 int32_t testHttpBodyStreamInitCallback = -1;
43 int32_t testHttpBodyStreamReadCallback = -1;
44 int32_t testRegisterCustom = -1;
45 
46 // 注册三方协议的配置,需要在Web内核初始化之前调用,否则会注册失败。
RegisterCustomSchemes(napi_env env,napi_callback_info info)47 static napi_value RegisterCustomSchemes(napi_env env, napi_callback_info info)
48 {
49     OH_LOG_INFO(LOG_APP, "register custom schemes");
50     testRegisterCustom = OH_ArkWeb_RegisterCustomSchemes("custom",  ARKWEB_SCHEME_OPTION_DISPLAY_ISOLATED
51     | ARKWEB_SCHEME_OPTION_FETCH_ENABLED | ARKWEB_SCHEME_OPTION_CORS_ENABLED | ARKWEB_SCHEME_OPTION_CSP_BYPASSING);
52 
53     return nullptr;
54 }
55 
56 // 请求开始的回调,在该函数中我们创建一个RawfileRequest来实现对Web内核请求的拦截。
OnURLRequestStart(const ArkWeb_SchemeHandler * schemeHandler,ArkWeb_ResourceRequest * resourceRequest,const ArkWeb_ResourceHandler * resourceHandler,bool * intercept)57 void OnURLRequestStart(const ArkWeb_SchemeHandler *schemeHandler, ArkWeb_ResourceRequest *resourceRequest,
58                        const ArkWeb_ResourceHandler *resourceHandler, bool *intercept)
59 {
60     *intercept = true;
61     RawfileRequest *request = new RawfileRequest(resourceRequest, resourceHandler, g_resourceManager);
62 
63     OH_ArkWebResourceRequest_SetUserData(resourceRequest, request);
64     request->Start();
65 
66     testReleaseString = request->releaseString();
67     testReleaseByteArray = request->releaseByteArray();
68     testSetHeaderByName = request->setHeaderByName();
69 
70     testHttpBodyStream = request->haveBodyStream();
71     testRequestHeaderList = request->getRequestHeaderList();
72     testResourceRequest = request->reqUrl();
73     testHttpBodyStreamInitCallback = request->isInit();
74     testHttpBodyStreamReadCallback = request->isRead();
75 
76     OH_ArkWebSchemeHandler_GetUserData(schemeHandler);
77 }
78 
79 // 请求结束的回调,在该函数中我们需要标记RawfileRequest已经结束了,内部不应该再使用ResourceHandler。
OnURLRequestStop(const ArkWeb_SchemeHandler * schemeHandler,const ArkWeb_ResourceRequest * request)80 void OnURLRequestStop(const ArkWeb_SchemeHandler *schemeHandler, const ArkWeb_ResourceRequest *request)
81 {
82     if (!request) {
83         OH_LOG_ERROR(LOG_APP, "on request stop request is nullptr.");
84         return;
85     }
86 
87     RawfileRequest *rawfileRequest = (RawfileRequest *)OH_ArkWebResourceRequest_GetUserData(request);
88     if (rawfileRequest) {
89         rawfileRequest->Stop();
90         testDestroyHttpBodyStream = rawfileRequest->destroyHttpBodyStream();
91 
92         testResponse = rawfileRequest->haveResponse();
93         testResourceHandler = rawfileRequest->haveResourceHandler();
94     }
95 
96     OH_ArkWebSchemeHandler_SetUserData(g_schemeHandler, rawfileRequest);
97     OH_ArkWebServiceWorker_ClearSchemeHandlers();
98 }
99 
100 // 设置SchemeHandler。
SetSchemeHandler(napi_env env,napi_callback_info info)101 static napi_value SetSchemeHandler(napi_env env, napi_callback_info info)
102 {
103     OH_LOG_INFO(LOG_APP, "set scheme handler");
104     napi_value result;
105 
106     OH_ArkWeb_CreateSchemeHandler(&g_schemeHandler);
107     OH_ArkWeb_CreateSchemeHandler(&g_schemeHandlerForSW);
108     OH_ArkWebSchemeHandler_SetOnRequestStart(g_schemeHandler, OnURLRequestStart);
109 
110     OH_ArkWebSchemeHandler_SetOnRequestStop(g_schemeHandler, OnURLRequestStop);
111 
112     OH_ArkWebSchemeHandler_SetOnRequestStart(g_schemeHandlerForSW, OnURLRequestStart);
113     OH_ArkWebSchemeHandler_SetOnRequestStop(g_schemeHandlerForSW, OnURLRequestStop);
114     OH_ArkWeb_SetSchemeHandler("custom", "scheme-handler", g_schemeHandler);
115     OH_ArkWebServiceWorker_SetSchemeHandler("custom", g_schemeHandlerForSW);
116 
117     OH_ArkWeb_SetSchemeHandler("http", "scheme-handler", g_schemeHandler);
118     OH_ArkWeb_SetSchemeHandler("https", "scheme-handler", g_schemeHandler);
119     OH_ArkWebServiceWorker_SetSchemeHandler("https", g_schemeHandlerForSW);
120 
121     napi_create_int32(env, 0, &result);
122     return result;
123 }
124 
InitResourceManager(napi_env env,napi_callback_info info)125 static napi_value InitResourceManager(napi_env env, napi_callback_info info)
126 {
127     size_t argc = 2;
128     napi_value argv[2] = {nullptr};
129     napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
130     g_resourceManager = OH_ResourceManager_InitNativeResourceManager(env, argv[0]);
131     return nullptr;
132 }
133 
GetNativeAPI(napi_env env,napi_callback_info info)134 static napi_value GetNativeAPI(napi_env env, napi_callback_info info)
135 {
136     napi_value result;
137     OH_LOG_INFO(LOG_APP, "OH_ArkWeb_GetNativeAPI");
138     ArkWeb_AnyNativeAPI* api = OH_ArkWeb_GetNativeAPI(ARKWEB_NATIVE_COMPONENT);
139     size_t api_size = api->size;
140     napi_create_int32(env, api_size, &result);
141 
142     return result;
143 }
144 
ReleaseString(napi_env env,napi_callback_info info)145 static napi_value ReleaseString(napi_env env, napi_callback_info info)
146 {
147     napi_value result;
148     OH_LOG_INFO(LOG_APP, "OH_ArkWeb_ReleaseString");
149 
150     if (testReleaseString == 0) {
151         napi_create_int32(env, 0, &result);
152     } else {
153         napi_create_int32(env, -1, &result);
154     }
155     return result;
156 }
157 
ReleaseByteArray(napi_env env,napi_callback_info info)158 static napi_value ReleaseByteArray(napi_env env, napi_callback_info info)
159 {
160     napi_value result;
161     OH_LOG_INFO(LOG_APP, "OH_ArkWeb_ReleaseByteArray");
162 
163     if (testReleaseByteArray == 0) {
164         napi_create_int32(env, 0, &result);
165     } else {
166         napi_create_int32(env, -1, &result);
167     }
168     return result;
169 }
170 
DestroyHttpBodyStream(napi_env env,napi_callback_info info)171 static napi_value DestroyHttpBodyStream(napi_env env, napi_callback_info info)
172 {
173     napi_value result;
174     OH_LOG_INFO(LOG_APP, "OH_ArkWebResourceRequest_DestroyHttpBodyStream");
175 
176     if (testDestroyHttpBodyStream == 0) {
177         napi_create_int32(env, 0, &result);
178     } else {
179         napi_create_int32(env, -1, &result);
180     }
181     return result;
182 }
183 
SetHeaderByName(napi_env env,napi_callback_info info)184 static napi_value SetHeaderByName(napi_env env, napi_callback_info info)
185 {
186     napi_value result;
187     OH_LOG_INFO(LOG_APP, "OH_ArkWebResponse_SetHeaderByName");
188 
189     if (testSetHeaderByName == 0) {
190         napi_create_int32(env, 0, &result);
191     } else {
192         napi_create_int32(env, -1, &result);
193     }
194     return result;
195 }
196 
ResourceHandler(napi_env env,napi_callback_info info)197 static napi_value ResourceHandler(napi_env env, napi_callback_info info)
198 {
199     napi_value result;
200     OH_LOG_INFO(LOG_APP, "ArkWeb_ResourceHandler");
201 
202     if (testResourceHandler == 0) {
203         napi_create_int32(env, 0, &result);
204     } else {
205         napi_create_int32(env, -1, &result);
206     }
207     return result;
208 }
209 
Response(napi_env env,napi_callback_info info)210 static napi_value Response(napi_env env, napi_callback_info info)
211 {
212     napi_value result;
213     OH_LOG_INFO(LOG_APP, "ArkWeb_Response");
214 
215     if (testResponse == 0) {
216         napi_create_int32(env, 0, &result);
217     } else {
218         napi_create_int32(env, -1, &result);
219     }
220     return result;
221 }
222 
ResourceRequest(napi_env env,napi_callback_info info)223 static napi_value ResourceRequest(napi_env env, napi_callback_info info)
224 {
225     napi_value result;
226     OH_LOG_INFO(LOG_APP, "ArkWeb_ResourceRequest ");
227 
228     if (testResourceRequest != "test") {
229         napi_create_int32(env, 0, &result);
230     } else {
231         napi_create_int32(env, -1, &result);
232     }
233     return result;
234 }
235 
RequestHeaderList(napi_env env,napi_callback_info info)236 static napi_value RequestHeaderList(napi_env env, napi_callback_info info)
237 {
238     napi_value result;
239     OH_LOG_INFO(LOG_APP, "ArkWeb_RequestHeaderList ");
240 
241     if (testRequestHeaderList != -1) {
242         napi_create_int32(env, 0, &result);
243     } else {
244         napi_create_int32(env, -1, &result);
245     }
246     return result;
247 }
248 
HttpBodyStream(napi_env env,napi_callback_info info)249 static napi_value HttpBodyStream(napi_env env, napi_callback_info info)
250 {
251     napi_value result;
252     OH_LOG_INFO(LOG_APP, "ArkWeb_HttpBodyStream  ");
253 
254     if (testHttpBodyStream == 0) {
255         napi_create_int32(env, 0, &result);
256     } else {
257         napi_create_int32(env, -1, &result);
258     }
259     return result;
260 }
261 
HttpBodyStreamInitCallback(napi_env env,napi_callback_info info)262 static napi_value HttpBodyStreamInitCallback(napi_env env, napi_callback_info info)
263 {
264     napi_value result;
265     OH_LOG_INFO(LOG_APP, "ArkWeb_HttpBodyStreamInitCallback");
266 
267     if (testHttpBodyStreamInitCallback == 0) {
268         napi_create_int32(env, 0, &result);
269     } else {
270         napi_create_int32(env, -1, &result);
271     }
272     return result;
273 }
274 
HttpBodyStreamReadCallback(napi_env env,napi_callback_info info)275 static napi_value HttpBodyStreamReadCallback(napi_env env, napi_callback_info info)
276 {
277     napi_value result;
278     OH_LOG_INFO(LOG_APP, "ArkWeb_HttpBodyStreamReadCallback ");
279 
280     if (testHttpBodyStreamReadCallback == 0) {
281         napi_create_int32(env, 0, &result);
282     } else {
283         napi_create_int32(env, -1, &result);
284     }
285     return result;
286 }
287 
GetNativeApiFalse(napi_env env,napi_callback_info info)288 static napi_value GetNativeApiFalse(napi_env env, napi_callback_info info)
289 {
290     napi_value result;
291     ArkWeb_AnyNativeAPI* api = OH_ArkWeb_GetNativeAPI(ArkWeb_NativeAPIVariantKind(5));
292     if (!api) {
293         OH_LOG_INFO(LOG_APP, "OH_ArkWeb_GetNativeAPI nullptr");
294         napi_create_int32(env, 0, &result);
295     } else {
296         napi_create_int32(env, -1, &result);
297     }
298     return result;
299 }
300 
RequestHeaderListFalse(napi_env env,napi_callback_info info)301 static napi_value RequestHeaderListFalse(napi_env env, napi_callback_info info)
302 {
303     napi_value result;
304     int32_t headerSize = OH_ArkWebRequestHeaderList_GetSize(nullptr);
305     napi_create_int32(env, headerSize, &result);
306     return result;
307 }
308 
HttpBodyStreamSetUserDataFalse(napi_env env,napi_callback_info info)309 static napi_value HttpBodyStreamSetUserDataFalse(napi_env env, napi_callback_info info)
310 {
311     napi_value result;
312     int32_t isTest = OH_ArkWebHttpBodyStream_SetUserData(nullptr, nullptr);
313     napi_create_int32(env, isTest, &result);
314     return result;
315 }
316 
HttpBodyStreamSetReadCallbackFalse(napi_env env,napi_callback_info info)317 static napi_value HttpBodyStreamSetReadCallbackFalse(napi_env env, napi_callback_info info)
318 {
319     napi_value result;
320     int32_t isTest = OH_ArkWebHttpBodyStream_SetReadCallback(nullptr, nullptr);
321     napi_create_int32(env, isTest, &result);
322     return result;
323 }
324 
HttpBodyStreamInitFalse(napi_env env,napi_callback_info info)325 static napi_value HttpBodyStreamInitFalse(napi_env env, napi_callback_info info)
326 {
327     napi_value result;
328     int32_t isTest = OH_ArkWebHttpBodyStream_Init(nullptr, nullptr);
329     napi_create_int32(env, isTest, &result);
330     return result;
331 }
332 
333 
HttpBodyStreamIsChunkedFalse(napi_env env,napi_callback_info info)334 static napi_value HttpBodyStreamIsChunkedFalse(napi_env env, napi_callback_info info)
335 {
336     napi_value result;
337 
338     bool isTestChunked = OH_ArkWebHttpBodyStream_IsChunked(nullptr);
339     if (!isTestChunked) {
340         napi_create_int32(env, 0, &result);
341     } else {
342         napi_create_int32(env, -1, &result);
343     }
344     return result;
345 }
346 
HttpBodyStreamIsEofFalse(napi_env env,napi_callback_info info)347 static napi_value HttpBodyStreamIsEofFalse(napi_env env, napi_callback_info info)
348 {
349     napi_value result;
350 
351     bool isTestEof = OH_ArkWebHttpBodyStream_IsEof(nullptr);
352     if (!isTestEof) {
353         napi_create_int32(env, 0, &result);
354     } else {
355         napi_create_int32(env, -1, &result);
356     }
357     return result;
358 }
359 
HttpBodyStreamIsInMemoryFalse(napi_env env,napi_callback_info info)360 static napi_value HttpBodyStreamIsInMemoryFalse(napi_env env, napi_callback_info info)
361 {
362     napi_value result;
363 
364     bool isTestInMemory = OH_ArkWebHttpBodyStream_IsInMemory(nullptr);
365     if (!isTestInMemory) {
366         napi_create_int32(env, 0, &result);
367     } else {
368         napi_create_int32(env, -1, &result);
369     }
370     return result;
371 }
372 
ResourceRequestIsRedirectFalse(napi_env env,napi_callback_info info)373 static napi_value ResourceRequestIsRedirectFalse(napi_env env, napi_callback_info info)
374 {
375     napi_value result;
376 
377     bool isTestIsRedirect = OH_ArkWebResourceRequest_IsRedirect(nullptr);
378     if (!isTestIsRedirect) {
379         napi_create_int32(env, 0, &result);
380     } else {
381         napi_create_int32(env, -1, &result);
382     }
383     return result;
384 }
385 
ResourceRequestIsMainFrameFalse(napi_env env,napi_callback_info info)386 static napi_value ResourceRequestIsMainFrameFalse(napi_env env, napi_callback_info info)
387 {
388     napi_value result;
389 
390     bool isTestIsMainFrame = OH_ArkWebResourceRequest_IsMainFrame(nullptr);
391     if (!isTestIsMainFrame) {
392         napi_create_int32(env, 0, &result);
393     } else {
394         napi_create_int32(env, -1, &result);
395     }
396     return result;
397 }
398 
ResourceRequestHasGestureFalse(napi_env env,napi_callback_info info)399 static napi_value ResourceRequestHasGestureFalse(napi_env env, napi_callback_info info)
400 {
401     napi_value result;
402 
403     bool isTestHasGesture = OH_ArkWebResourceRequest_HasGesture(nullptr);
404     if (!isTestHasGesture) {
405         napi_create_int32(env, 0, &result);
406     } else {
407         napi_create_int32(env, -1, &result);
408     }
409     return result;
410 }
411 
RegisterCustomSchemesTrue(napi_env env,napi_callback_info info)412 static napi_value RegisterCustomSchemesTrue(napi_env env, napi_callback_info info)
413 {
414     napi_value result;
415     napi_create_int32(env, testRegisterCustom, &result);
416     return result;
417 }
418 
RegisterCustomSchemesInvalid(napi_env env,napi_callback_info info)419 static napi_value RegisterCustomSchemesInvalid(napi_env env, napi_callback_info info)
420 {
421     napi_value result;
422     int32_t isTest = OH_ArkWeb_RegisterCustomSchemes(nullptr, -2);
423     napi_create_int32(env, isTest, &result);
424     return result;
425 }
426 
RegisterCustomSchemesError(napi_env env,napi_callback_info info)427 static napi_value RegisterCustomSchemesError(napi_env env, napi_callback_info info)
428 {
429     napi_value result;
430     int32_t isTest = OH_ArkWeb_RegisterCustomSchemes("test", -2);
431     napi_create_int32(env, isTest, &result);
432     return result;
433 }
434 
ServiceWorkerSetSchemeHandlerFalse(napi_env env,napi_callback_info info)435 static napi_value ServiceWorkerSetSchemeHandlerFalse(napi_env env, napi_callback_info info)
436 {
437     napi_value result;
438     bool isTest = OH_ArkWebServiceWorker_SetSchemeHandler(nullptr, nullptr);
439     if (!isTest) {
440         napi_create_int32(env, 0, &result);
441     } else {
442         napi_create_int32(env, -1, &result);
443     }
444     return result;
445 }
446 
SetSchemeHandlerFalse(napi_env env,napi_callback_info info)447 static napi_value SetSchemeHandlerFalse(napi_env env, napi_callback_info info)
448 {
449     napi_value result;
450     bool isTest = OH_ArkWeb_SetSchemeHandler(nullptr, nullptr, nullptr);
451     if (!isTest) {
452         napi_create_int32(env, 0, &result);
453     } else {
454         napi_create_int32(env, -1, &result);
455     }
456     return result;
457 }
458 
ClearSchemeHandlersFalse(napi_env env,napi_callback_info info)459 static napi_value ClearSchemeHandlersFalse(napi_env env, napi_callback_info info)
460 {
461     napi_value result;
462     int32_t isTest = OH_ArkWeb_ClearSchemeHandlers(nullptr);
463     napi_create_int32(env, isTest, &result);
464     return result;
465 }
466 
SchemeHandlerSetUserDataFalse(napi_env env,napi_callback_info info)467 static napi_value SchemeHandlerSetUserDataFalse(napi_env env, napi_callback_info info)
468 {
469     napi_value result;
470     int32_t isTest = OH_ArkWebSchemeHandler_SetUserData(nullptr, nullptr);
471     napi_create_int32(env, isTest, &result);
472     return result;
473 }
474 
SetOnRequestStartFalse(napi_env env,napi_callback_info info)475 static napi_value SetOnRequestStartFalse(napi_env env, napi_callback_info info)
476 {
477     napi_value result;
478     int32_t isTest = OH_ArkWebSchemeHandler_SetOnRequestStart(nullptr, nullptr);
479     napi_create_int32(env, isTest, &result);
480     return result;
481 }
482 
SetOnRequestStopFalse(napi_env env,napi_callback_info info)483 static napi_value SetOnRequestStopFalse(napi_env env, napi_callback_info info)
484 {
485     napi_value result;
486     int32_t isTest = OH_ArkWebSchemeHandler_SetOnRequestStop(nullptr, nullptr);
487     napi_create_int32(env, isTest, &result);
488     return result;
489 }
490 
ResponseSetUrlFalse(napi_env env,napi_callback_info info)491 static napi_value ResponseSetUrlFalse(napi_env env, napi_callback_info info)
492 {
493     napi_value result;
494     int32_t isTestSetUrl = OH_ArkWebResponse_SetUrl(nullptr, "test");
495     napi_create_int32(env, isTestSetUrl, &result);
496     return result;
497 }
498 
ResponseSetErrorFalse(napi_env env,napi_callback_info info)499 static napi_value ResponseSetErrorFalse(napi_env env, napi_callback_info info)
500 {
501     napi_value result;
502     int32_t isTestSetCode = OH_ArkWebResponse_SetError(nullptr, ARKWEB_ERR_CACHE_READ_FAILURE);
503     napi_create_int32(env, isTestSetCode, &result);
504     return result;
505 }
506 
507 
ResponseSetStatusFalse(napi_env env,napi_callback_info info)508 static napi_value ResponseSetStatusFalse(napi_env env, napi_callback_info info)
509 {
510     napi_value result;
511     int32_t isTestSetCode = OH_ArkWebResponse_SetStatus(nullptr, 0);
512     napi_create_int32(env, isTestSetCode, &result);
513     return result;
514 }
515 
ResponseGetStatusFalse(napi_env env,napi_callback_info info)516 static napi_value ResponseGetStatusFalse(napi_env env, napi_callback_info info)
517 {
518     napi_value result;
519     int32_t isTestGetStatus = OH_ArkWebResponse_GetStatus(nullptr);
520     napi_create_int32(env, isTestGetStatus, &result);
521     return result;
522 }
523 
ResponseSetStatusTextFalse(napi_env env,napi_callback_info info)524 static napi_value ResponseSetStatusTextFalse(napi_env env, napi_callback_info info)
525 {
526     napi_value result;
527     int32_t isTestSetStatusText = OH_ArkWebResponse_SetStatusText(nullptr, "test");
528     napi_create_int32(env, isTestSetStatusText, &result);
529     return result;
530 }
531 
ResponseSetMimeTypeFalse(napi_env env,napi_callback_info info)532 static napi_value ResponseSetMimeTypeFalse(napi_env env, napi_callback_info info)
533 {
534     napi_value result;
535     int32_t isTestSetMimeType = OH_ArkWebResponse_SetMimeType(nullptr, "test");
536     napi_create_int32(env, isTestSetMimeType, &result);
537     return result;
538 }
539 
ResponseSetCharsetFalse(napi_env env,napi_callback_info info)540 static napi_value ResponseSetCharsetFalse(napi_env env, napi_callback_info info)
541 {
542     napi_value result;
543     int32_t isTestSetCharset = OH_ArkWebResponse_SetCharset(nullptr, "test");
544     napi_create_int32(env, isTestSetCharset, &result);
545     return result;
546 }
547 
SetHeaderByNameNameNull(napi_env env,napi_callback_info info)548 static napi_value SetHeaderByNameNameNull(napi_env env, napi_callback_info info)
549 {
550     napi_value result;
551     ArkWeb_Response* testResponse;
552     OH_ArkWeb_CreateResponse(&testResponse);
553     int32_t isSetHeader = OH_ArkWebResponse_SetHeaderByName(testResponse, nullptr, "test", true);
554     napi_create_int32(env, isSetHeader, &result);
555     return result;
556 }
557 
SetHeaderByNameValueNull(napi_env env,napi_callback_info info)558 static napi_value SetHeaderByNameValueNull(napi_env env, napi_callback_info info)
559 {
560     napi_value result;
561     ArkWeb_Response* testResponse;
562     OH_ArkWeb_CreateResponse(&testResponse);
563     int32_t isSetHeader = OH_ArkWebResponse_SetHeaderByName(testResponse, "test", nullptr, true);
564     napi_create_int32(env, isSetHeader, &result);
565     return result;
566 }
567 
SetHeaderByNameOverwriteNull(napi_env env,napi_callback_info info)568 static napi_value SetHeaderByNameOverwriteNull(napi_env env, napi_callback_info info)
569 {
570     napi_value result;
571     ArkWeb_Response* testResponse;
572     OH_ArkWeb_CreateResponse(&testResponse);
573     int32_t isSetHeader = OH_ArkWebResponse_SetHeaderByName(testResponse, "test", "test", 3);
574     napi_create_int32(env, isSetHeader, &result);
575     return result;
576 }
577 
ResourceHandlerDestroyFalse(napi_env env,napi_callback_info info)578 static napi_value ResourceHandlerDestroyFalse(napi_env env, napi_callback_info info)
579 {
580     napi_value result;
581     int32_t isDestroy = OH_ArkWebResourceHandler_Destroy(nullptr);
582     napi_create_int32(env, isDestroy, &result);
583     return result;
584 }
585 
DidReceiveResponseFalse(napi_env env,napi_callback_info info)586 static napi_value DidReceiveResponseFalse(napi_env env, napi_callback_info info)
587 {
588     napi_value result;
589     int32_t isResponse = OH_ArkWebResourceHandler_DidReceiveResponse(nullptr, nullptr);
590     napi_create_int32(env, isResponse, &result);
591     return result;
592 }
593 
DidReceiveDataFalse(napi_env env,napi_callback_info info)594 static napi_value DidReceiveDataFalse(napi_env env, napi_callback_info info)
595 {
596     napi_value result;
597     int32_t isResponse = OH_ArkWebResourceHandler_DidReceiveData(nullptr, nullptr, 200);
598     napi_create_int32(env, isResponse, &result);
599     return result;
600 }
601 
DidFinishFalse(napi_env env,napi_callback_info info)602 static napi_value DidFinishFalse(napi_env env, napi_callback_info info)
603 {
604     napi_value result;
605     int32_t isResponse = OH_ArkWebResourceHandler_DidFinish(nullptr);
606     napi_create_int32(env, isResponse, &result);
607     return result;
608 }
609 
DidFailWithErrorFalse(napi_env env,napi_callback_info info)610 static napi_value DidFailWithErrorFalse(napi_env env, napi_callback_info info)
611 {
612     napi_value result;
613     int32_t isResponse = OH_ArkWebResourceHandler_DidFailWithError(nullptr, ARKWEB_ERR_CACHE_READ_FAILURE);
614     napi_create_int32(env, isResponse, &result);
615     return result;
616 }
617 
618 
619 
620 EXTERN_C_START
Init(napi_env env,napi_value exports)621 static napi_value Init(napi_env env, napi_value exports) {
622     napi_property_descriptor desc[] = {
623         {"setSchemeHandler", nullptr, SetSchemeHandler, nullptr, nullptr, nullptr, napi_default, nullptr},
624         {"initResourceManager", nullptr, InitResourceManager, nullptr, nullptr, nullptr, napi_default, nullptr},
625         {"registerCustomSchemes", nullptr, RegisterCustomSchemes, nullptr, nullptr, nullptr, napi_default, nullptr},
626         {"getNativeAPI", nullptr, GetNativeAPI, nullptr, nullptr, nullptr, napi_default, nullptr},
627         {"releaseString", nullptr, ReleaseString, nullptr, nullptr, nullptr, napi_default, nullptr},
628         {"releaseByteArray", nullptr, ReleaseByteArray, nullptr, nullptr, nullptr, napi_default, nullptr},
629         {"destroyHttpBodyStream", nullptr, DestroyHttpBodyStream, nullptr, nullptr, nullptr, napi_default, nullptr},
630         {"setHeaderByName", nullptr, SetHeaderByName, nullptr, nullptr, nullptr, napi_default, nullptr},
631         {"resourceHandler", nullptr, ResourceHandler, nullptr, nullptr, nullptr, napi_default, nullptr},
632         {"response", nullptr, Response, nullptr, nullptr, nullptr, napi_default, nullptr},
633         {"resourceRequest", nullptr, ResourceRequest, nullptr, nullptr, nullptr, napi_default, nullptr},
634         {"requestHeaderList", nullptr, RequestHeaderList, nullptr, nullptr, nullptr, napi_default, nullptr},
635         {"httpBodyStream", nullptr, HttpBodyStream, nullptr, nullptr, nullptr, napi_default, nullptr},
636         {"httpBodyStreamInitCallback", nullptr, HttpBodyStreamInitCallback, nullptr, nullptr, nullptr, napi_default,
637     nullptr},
638         {"httpBodyStreamReadCallback", nullptr, HttpBodyStreamReadCallback, nullptr, nullptr, nullptr, napi_default,
639     nullptr},
640         {"getNativeApiFalse", nullptr, GetNativeApiFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
641         {"requestHeaderListFalse", nullptr, RequestHeaderListFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
642         {"httpBodyStreamSetUserDataFalse", nullptr, HttpBodyStreamSetUserDataFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
643         {"httpBodyStreamSetReadCallbackFalse", nullptr, HttpBodyStreamSetReadCallbackFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
644         {"httpBodyStreamInitFalse", nullptr, HttpBodyStreamInitFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
645         {"httpBodyStreamIsChunkedFalse", nullptr, HttpBodyStreamIsChunkedFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
646         {"httpBodyStreamIsEofFalse", nullptr, HttpBodyStreamIsEofFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
647         {"httpBodyStreamIsInMemoryFalse", nullptr, HttpBodyStreamIsInMemoryFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
648         {"resourceRequestIsRedirectFalse", nullptr, ResourceRequestIsRedirectFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
649         {"resourceRequestIsMainFrameFalse", nullptr, ResourceRequestIsMainFrameFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
650         {"resourceRequestHasGestureFalse", nullptr, ResourceRequestHasGestureFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
651         {"registerCustomSchemesTrue", nullptr, RegisterCustomSchemesTrue, nullptr, nullptr, nullptr, napi_default, nullptr},
652         {"registerCustomSchemesInvalid", nullptr, RegisterCustomSchemesInvalid, nullptr, nullptr, nullptr, napi_default, nullptr},
653         {"registerCustomSchemesError", nullptr, RegisterCustomSchemesError, nullptr, nullptr, nullptr, napi_default, nullptr},
654         {"serviceWorkerSetSchemeHandlerFalse", nullptr, ServiceWorkerSetSchemeHandlerFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
655         {"setSchemeHandlerFalse", nullptr, SetSchemeHandlerFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
656         {"clearSchemeHandlersFalse", nullptr, ClearSchemeHandlersFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
657         {"schemeHandlerSetUserDataFalse", nullptr, SchemeHandlerSetUserDataFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
658         {"setOnRequestStartFalse", nullptr, SetOnRequestStartFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
659         {"setOnRequestStopFalse", nullptr, SetOnRequestStopFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
660         {"responseSetUrlFalse", nullptr, ResponseSetUrlFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
661         {"responseSetErrorFalse", nullptr, ResponseSetErrorFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
662         {"responseSetStatusFalse", nullptr, ResponseSetStatusFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
663         {"responseGetStatusFalse", nullptr, ResponseGetStatusFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
664         {"responseSetStatusTextFalse", nullptr, ResponseSetStatusTextFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
665         {"responseSetMimeTypeFalse", nullptr, ResponseSetMimeTypeFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
666         {"responseSetCharsetFalse", nullptr, ResponseSetCharsetFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
667         {"setHeaderByNameNameNull", nullptr, SetHeaderByNameNameNull, nullptr, nullptr, nullptr, napi_default, nullptr},
668         {"setHeaderByNameValueNull", nullptr, SetHeaderByNameValueNull, nullptr, nullptr, nullptr, napi_default, nullptr},
669         {"setHeaderByNameOverwriteNull", nullptr, SetHeaderByNameOverwriteNull, nullptr, nullptr, nullptr, napi_default, nullptr},
670         {"resourceHandlerDestroyFalse", nullptr, ResourceHandlerDestroyFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
671         {"didReceiveResponseFalse", nullptr, DidReceiveResponseFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
672         {"didReceiveDataFalse", nullptr, DidReceiveDataFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
673         {"didFinishFalse", nullptr, DidFinishFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
674         {"didFailWithErrorFalse", nullptr, DidFailWithErrorFalse, nullptr, nullptr, nullptr, napi_default, nullptr},
675     };
676 
677     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
678     return exports;
679 }
680 EXTERN_C_END
681 
682 static napi_module demoModule = {
683     .nm_version = 1,
684     .nm_flags = 0,
685     .nm_filename = nullptr,
686     .nm_register_func = Init,
687     .nm_modname = "entry",
688     .nm_priv = ((void *)0),
689     .reserved = {0},
690 };
691 
RegisterEntryModule(void)692 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
693