1 /*
2  * Copyright (c) 2023-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 "arkweb_scheme_handler.h"
17 
18 #include <memory>
19 #include <mutex>
20 #include <unordered_map>
21 #include <vector>
22 
23 #include "nweb.h"
24 #include "nweb_helper.h"
25 #include "nweb_log.h"
26 
27 namespace {
28 
29 // Run DO macro for every function defined in the API.
30 #define FOR_EACH_API_FN(DO)                             \
31     DO(OH_ArkWebRequestHeaderList_Destroy);             \
32     DO(OH_ArkWebRequestHeaderList_GetSize);             \
33     DO(OH_ArkWebRequestHeaderList_GetHeader);           \
34     DO(OH_ArkWebResourceRequest_GetMethod);             \
35     DO(OH_ArkWebResourceRequest_GetUrl);                \
36     DO(OH_ArkWebResourceRequest_GetHttpBodyStream);     \
37     DO(OH_ArkWebResourceRequest_DestroyHttpBodyStream); \
38     DO(OH_ArkWebResourceRequest_GetResourceType);       \
39     DO(OH_ArkWebResourceRequest_GetFrameUrl);           \
40     DO(OH_ArkWebHttpBodyStream_SetReadCallback);        \
41     DO(OH_ArkWebHttpBodyStream_SetUserData);            \
42     DO(OH_ArkWebHttpBodyStream_GetUserData);            \
43     DO(OH_ArkWebHttpBodyStream_Init);                   \
44     DO(OH_ArkWebHttpBodyStream_Read);                   \
45     DO(OH_ArkWebHttpBodyStream_GetSize);                \
46     DO(OH_ArkWebHttpBodyStream_GetPosition);            \
47     DO(OH_ArkWebHttpBodyStream_IsChunked);              \
48     DO(OH_ArkWebHttpBodyStream_IsEof);                  \
49     DO(OH_ArkWebHttpBodyStream_IsInMemory);             \
50     DO(OH_ArkWebResourceRequest_Destroy);               \
51     DO(OH_ArkWebResourceRequest_SetUserData);           \
52     DO(OH_ArkWebResourceRequest_GetUserData);           \
53     DO(OH_ArkWebResourceRequest_GetReferrer);           \
54     DO(OH_ArkWebResourceRequest_GetRequestHeaders);     \
55     DO(OH_ArkWebResourceRequest_IsRedirect);            \
56     DO(OH_ArkWebResourceRequest_IsMainFrame);           \
57     DO(OH_ArkWebResourceRequest_HasGesture);            \
58     DO(OH_ArkWeb_RegisterCustomSchemes);                \
59     DO(OH_ArkWeb_SetSchemeHandler);                     \
60     DO(OH_ArkWebServiceWorker_SetSchemeHandler);        \
61     DO(OH_ArkWebServiceWorker_ClearSchemeHandlers);     \
62     DO(OH_ArkWeb_ClearSchemeHandlers);                  \
63     DO(OH_ArkWeb_CreateSchemeHandler);                  \
64     DO(OH_ArkWeb_DestroySchemeHandler);                 \
65     DO(OH_ArkWebSchemeHandler_SetOnRequestStart);       \
66     DO(OH_ArkWebSchemeHandler_SetOnRequestStop);        \
67     DO(OH_ArkWebSchemeHandler_SetUserData);             \
68     DO(OH_ArkWebSchemeHandler_GetUserData);             \
69     DO(OH_ArkWeb_CreateResponse);                       \
70     DO(OH_ArkWeb_DestroyResponse);                      \
71     DO(OH_ArkWebResponse_GetUrl);                       \
72     DO(OH_ArkWebResponse_SetUrl);                       \
73     DO(OH_ArkWebResponse_SetError);                     \
74     DO(OH_ArkWebResponse_GetError);                     \
75     DO(OH_ArkWebResponse_SetStatus);                    \
76     DO(OH_ArkWebResponse_GetStatus);                    \
77     DO(OH_ArkWebResponse_SetStatusText);                \
78     DO(OH_ArkWebResponse_GetStatusText);                \
79     DO(OH_ArkWebResponse_SetMimeType);                  \
80     DO(OH_ArkWebResponse_GetMimeType);                  \
81     DO(OH_ArkWebResponse_SetCharset);                   \
82     DO(OH_ArkWebResponse_GetCharset);                   \
83     DO(OH_ArkWebResponse_SetHeaderByName);              \
84     DO(OH_ArkWebResponse_GetHeaderByName);              \
85     DO(OH_ArkWebResourceHandler_Destroy);               \
86     DO(OH_ArkWebResourceHandler_DidReceiveResponse);    \
87     DO(OH_ArkWebResourceHandler_DidReceiveData);        \
88     DO(OH_ArkWebResourceHandler_DidFinish);             \
89     DO(OH_ArkWebResourceHandler_DidFailWithError);      \
90     DO(OH_ArkWeb_ReleaseString);                        \
91     DO(OH_ArkWeb_ReleaseByteArray);                     \
92     DO(OH_ArkWebSchemeHandler_SetFromEts)
93 
94 struct SchemeHandlerApi {
95 #define GEN_FN_PTR(fn) decltype(&(fn)) impl_##fn = nullptr
96     FOR_EACH_API_FN(GEN_FN_PTR);
97 #undef GEN_FN_PTR
98 };
99 
100 template<typename Fn>
LoadFunction(const char * functionName,Fn * fnOut)101 void LoadFunction(const char* functionName, Fn* fnOut)
102 {
103     void* fn = OHOS::NWeb::NWebHelper::Instance().LoadFuncSymbol(functionName);
104     if (!fn) {
105         WVLOG_E("%{public}s not found.", functionName);
106         return;
107     }
108     *fnOut = reinterpret_cast<Fn>(fn);
109 }
110 
111 SchemeHandlerApi* g_SchemeHandlerApi = nullptr;
112 
LoadSchemeHandlerApi(SchemeHandlerApi * api)113 void LoadSchemeHandlerApi(SchemeHandlerApi* api)
114 {
115     // Initialize each function pointer field from the so.
116 #define LOAD_FN_PTR(fn) LoadFunction(#fn, &api->impl_##fn)
117     FOR_EACH_API_FN(LOAD_FN_PTR);
118 #undef LOAD_FN_PTR
119 }
120 
EnsureSdkLoaded()121 bool EnsureSdkLoaded()
122 {
123     if (g_SchemeHandlerApi) {
124         WVLOG_I("SchemeHandlerApi had loaded.");
125         return true;
126     }
127 
128     auto* schemeHandlerApi = new (std::nothrow) SchemeHandlerApi();
129     if (schemeHandlerApi == nullptr) {
130         WVLOG_I("schemeHandlerApi is nullptr.");
131         return false;
132     }
133     LoadSchemeHandlerApi(schemeHandlerApi);
134     g_SchemeHandlerApi = schemeHandlerApi;
135     return true;
136 }
137 #undef FOR_EACH_API_FN
138 } // namespace
139 
140 using namespace OHOS;
OH_ArkWebRequestHeaderList_Destroy(ArkWeb_RequestHeaderList * requestHeaderList)141 void OH_ArkWebRequestHeaderList_Destroy(ArkWeb_RequestHeaderList* requestHeaderList)
142 {
143     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_Destroy) {
144         WVLOG_E("OH_ArkWebRequestHeaderList_Destroy not found.");
145         return;
146     }
147 
148     return g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_Destroy(requestHeaderList);
149 }
150 
OH_ArkWebRequestHeaderList_GetSize(const ArkWeb_RequestHeaderList * requestHeaderList)151 int32_t OH_ArkWebRequestHeaderList_GetSize(const ArkWeb_RequestHeaderList* requestHeaderList)
152 {
153     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetSize) {
154         WVLOG_E("OH_ArkWebRequestHeaderList_GetSize not found.");
155         return -1;
156     }
157 
158     return g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetSize(requestHeaderList);
159 }
160 
OH_ArkWebRequestHeaderList_GetHeader(const ArkWeb_RequestHeaderList * requestHeaderList,int32_t index,char ** key,char ** value)161 void OH_ArkWebRequestHeaderList_GetHeader(
162     const ArkWeb_RequestHeaderList* requestHeaderList, int32_t index, char** key, char** value)
163 {
164     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetHeader) {
165         WVLOG_E("OH_ArkWebRequestHeaderList_GetHeader not found.");
166         return;
167     }
168 
169     return g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetHeader(requestHeaderList, index, key, value);
170 }
171 
OH_ArkWebResourceRequest_GetMethod(const ArkWeb_ResourceRequest * resourceRequest,char ** method)172 void OH_ArkWebResourceRequest_GetMethod(const ArkWeb_ResourceRequest* resourceRequest, char** method)
173 {
174     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetMethod) {
175         WVLOG_E("OH_ArkWebResourceRequest_GetMethod not found.");
176         return;
177     }
178 
179     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetMethod(resourceRequest, method);
180 }
181 
OH_ArkWebResourceRequest_GetUrl(const ArkWeb_ResourceRequest * resourceRequest,char ** url)182 void OH_ArkWebResourceRequest_GetUrl(const ArkWeb_ResourceRequest* resourceRequest, char** url)
183 {
184     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUrl) {
185         WVLOG_E("OH_ArkWebResourceRequest_GetUrl not found.");
186         return;
187     }
188 
189     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUrl(resourceRequest, url);
190 }
191 
OH_ArkWebResourceRequest_GetHttpBodyStream(const ArkWeb_ResourceRequest * resourceRequest,ArkWeb_HttpBodyStream ** httpBodyStream)192 void OH_ArkWebResourceRequest_GetHttpBodyStream(
193     const ArkWeb_ResourceRequest* resourceRequest, ArkWeb_HttpBodyStream** httpBodyStream)
194 {
195     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetHttpBodyStream) {
196         WVLOG_E("OH_ArkWebResourceRequest_GetHttpBodyStream not found.");
197         return;
198     }
199 
200     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetHttpBodyStream(resourceRequest, httpBodyStream);
201 }
202 
OH_ArkWebResourceRequest_DestroyHttpBodyStream(ArkWeb_HttpBodyStream * httpBodyStream)203 void OH_ArkWebResourceRequest_DestroyHttpBodyStream(ArkWeb_HttpBodyStream* httpBodyStream)
204 {
205     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_DestroyHttpBodyStream) {
206         WVLOG_E("OH_ArkWebResourceRequest_DestroyHttpBodyStream not found.");
207         return;
208     }
209 
210     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_DestroyHttpBodyStream(httpBodyStream);
211 }
212 
OH_ArkWebResourceRequest_GetResourceType(const ArkWeb_ResourceRequest * resourceRequest)213 int32_t OH_ArkWebResourceRequest_GetResourceType(const ArkWeb_ResourceRequest* resourceRequest)
214 {
215     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetResourceType) {
216         WVLOG_E("OH_ArkWebResourceRequest_GetResourceType not found.");
217         return -1;
218     }
219 
220     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetResourceType(resourceRequest);
221 }
222 
OH_ArkWebResourceRequest_GetFrameUrl(const ArkWeb_ResourceRequest * resourceRequest,char ** frameUrl)223 void OH_ArkWebResourceRequest_GetFrameUrl(const ArkWeb_ResourceRequest* resourceRequest, char** frameUrl)
224 {
225     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetFrameUrl) {
226         WVLOG_E("OH_ArkWebResourceRequest_GetFrameUrl not found.");
227         return;
228     }
229 
230     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetFrameUrl(resourceRequest, frameUrl);
231 }
232 
OH_ArkWebHttpBodyStream_SetUserData(ArkWeb_HttpBodyStream * httpBodyStream,void * userData)233 int32_t OH_ArkWebHttpBodyStream_SetUserData(ArkWeb_HttpBodyStream* httpBodyStream, void* userData)
234 {
235     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetUserData) {
236         WVLOG_E("OH_ArkWebHttpBodyStream_SetUserData not found.");
237         return ARKWEB_ERROR_UNKNOWN;
238     }
239     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetUserData(httpBodyStream, userData);
240 }
241 
OH_ArkWebHttpBodyStream_GetUserData(const ArkWeb_HttpBodyStream * httpBodyStream)242 void* OH_ArkWebHttpBodyStream_GetUserData(const ArkWeb_HttpBodyStream* httpBodyStream)
243 {
244     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetUserData) {
245         WVLOG_E("OH_ArkWebHttpBodyStream_GetUserData not found.");
246         return nullptr;
247     }
248     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetUserData(httpBodyStream);
249 }
250 
OH_ArkWebHttpBodyStream_SetReadCallback(ArkWeb_HttpBodyStream * httpBodyStream,ArkWeb_HttpBodyStreamReadCallback readCallback)251 int32_t OH_ArkWebHttpBodyStream_SetReadCallback(
252     ArkWeb_HttpBodyStream* httpBodyStream, ArkWeb_HttpBodyStreamReadCallback readCallback)
253 {
254     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetReadCallback) {
255         WVLOG_E("OH_ArkWebHttpBodyStream_SetReadCallback not found.");
256         return ARKWEB_ERROR_UNKNOWN;
257     }
258 
259     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetReadCallback(httpBodyStream, readCallback);
260 }
261 
OH_ArkWebHttpBodyStream_Init(ArkWeb_HttpBodyStream * httpBodyStream,ArkWeb_HttpBodyStreamInitCallback initCallback)262 int32_t OH_ArkWebHttpBodyStream_Init(
263     ArkWeb_HttpBodyStream* httpBodyStream, ArkWeb_HttpBodyStreamInitCallback initCallback)
264 {
265     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Init) {
266         WVLOG_E("OH_ArkWebHttpBodyStream_Init not found.");
267         return ARKWEB_ERROR_UNKNOWN;
268     }
269 
270     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Init(httpBodyStream, initCallback);
271 }
272 
OH_ArkWebHttpBodyStream_Read(const ArkWeb_HttpBodyStream * httpBodyStream,uint8_t * buffer,int bufLen)273 void OH_ArkWebHttpBodyStream_Read(const ArkWeb_HttpBodyStream* httpBodyStream, uint8_t* buffer, int bufLen)
274 {
275     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Read) {
276         WVLOG_E("OH_ArkWebHttpBodyStream_Read not found.");
277         return;
278     }
279 
280     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Read(httpBodyStream, buffer, bufLen);
281 }
282 
OH_ArkWebHttpBodyStream_GetSize(const ArkWeb_HttpBodyStream * httpBodyStream)283 uint64_t OH_ArkWebHttpBodyStream_GetSize(const ArkWeb_HttpBodyStream* httpBodyStream)
284 {
285     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetSize) {
286         WVLOG_E("OH_ArkWebHttpBodyStream_GetSize not found.");
287         return 0;
288     }
289 
290     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetSize(httpBodyStream);
291 }
292 
OH_ArkWebHttpBodyStream_GetPosition(const ArkWeb_HttpBodyStream * httpBodyStream)293 uint64_t OH_ArkWebHttpBodyStream_GetPosition(const ArkWeb_HttpBodyStream* httpBodyStream)
294 {
295     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetPosition) {
296         WVLOG_E("OH_ArkWebHttpBodyStream_GetPosition not found.");
297         return 0;
298     }
299 
300     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetPosition(httpBodyStream);
301 }
302 
OH_ArkWebHttpBodyStream_IsChunked(const ArkWeb_HttpBodyStream * httpBodyStream)303 bool OH_ArkWebHttpBodyStream_IsChunked(const ArkWeb_HttpBodyStream* httpBodyStream)
304 {
305     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsChunked) {
306         WVLOG_E("OH_ArkWebHttpBodyStream_IsTrunked not found.");
307         return false;
308     }
309 
310     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsChunked(httpBodyStream);
311 }
312 
OH_ArkWebHttpBodyStream_IsEof(const ArkWeb_HttpBodyStream * httpBodyStream)313 bool OH_ArkWebHttpBodyStream_IsEof(const ArkWeb_HttpBodyStream* httpBodyStream)
314 {
315     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsEof) {
316         WVLOG_E("OH_ArkWebHttpBodyStream_HasNullSource not found.");
317         return false;
318     }
319 
320     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsEof(httpBodyStream);
321 }
322 
OH_ArkWebHttpBodyStream_IsInMemory(const ArkWeb_HttpBodyStream * httpBodyStream)323 bool OH_ArkWebHttpBodyStream_IsInMemory(const ArkWeb_HttpBodyStream* httpBodyStream)
324 {
325     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsInMemory) {
326         WVLOG_E("OH_ArkWebHttpBodyStream_IsInMemory not found.");
327         return false;
328     }
329 
330     return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsInMemory(httpBodyStream);
331 }
332 
OH_ArkWebResourceRequest_Destroy(const ArkWeb_ResourceRequest * resourceRequest)333 int32_t OH_ArkWebResourceRequest_Destroy(const ArkWeb_ResourceRequest* resourceRequest)
334 {
335     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_Destroy) {
336         WVLOG_E("OH_ArkWebResourceRequest_Destroy not found.");
337         return ARKWEB_ERROR_UNKNOWN;
338     }
339 
340     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_Destroy(resourceRequest);
341 }
342 
OH_ArkWebResourceRequest_GetReferrer(const ArkWeb_ResourceRequest * resourceRequest,char ** referrer)343 void OH_ArkWebResourceRequest_GetReferrer(const ArkWeb_ResourceRequest* resourceRequest, char** referrer)
344 {
345     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetReferrer) {
346         WVLOG_E("OH_ArkWebResourceRequest_GetReferrer not found.");
347         return;
348     }
349 
350     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetReferrer(resourceRequest, referrer);
351 }
352 
OH_ArkWebResourceRequest_SetUserData(ArkWeb_ResourceRequest * resourceRequest,void * userData)353 int32_t OH_ArkWebResourceRequest_SetUserData(ArkWeb_ResourceRequest* resourceRequest, void* userData)
354 {
355     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_SetUserData) {
356         WVLOG_E("OH_ArkWebResourceRequest_SetUserData not found.");
357         return ARKWEB_ERROR_UNKNOWN;
358     }
359 
360     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_SetUserData(resourceRequest, userData);
361 }
362 
OH_ArkWebResourceRequest_GetUserData(const ArkWeb_ResourceRequest * resourceRequest)363 void* OH_ArkWebResourceRequest_GetUserData(const ArkWeb_ResourceRequest* resourceRequest)
364 {
365     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUserData) {
366         WVLOG_E("OH_ArkWebResourceRequest_GetUserData not found.");
367         return nullptr;
368     }
369 
370     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUserData(resourceRequest);
371 }
372 
OH_ArkWebResourceRequest_GetRequestHeaders(const ArkWeb_ResourceRequest * resourceRequest,ArkWeb_RequestHeaderList ** requestHeaderList)373 void OH_ArkWebResourceRequest_GetRequestHeaders(
374     const ArkWeb_ResourceRequest* resourceRequest, ArkWeb_RequestHeaderList** requestHeaderList)
375 {
376     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetRequestHeaders) {
377         WVLOG_E("OH_ArkWebResourceRequest_GetRequestHeaders not found.");
378         return;
379     }
380 
381     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetRequestHeaders(resourceRequest, requestHeaderList);
382 }
383 
OH_ArkWebResourceRequest_IsRedirect(const ArkWeb_ResourceRequest * resourceRequest)384 bool OH_ArkWebResourceRequest_IsRedirect(const ArkWeb_ResourceRequest* resourceRequest)
385 {
386     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsRedirect) {
387         WVLOG_E("OH_ArkWebResourceRequest_IsRedirect not found.");
388         return false;
389     }
390 
391     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsRedirect(resourceRequest);
392 }
393 
OH_ArkWebResourceRequest_IsMainFrame(const ArkWeb_ResourceRequest * resourceRequest)394 bool OH_ArkWebResourceRequest_IsMainFrame(const ArkWeb_ResourceRequest* resourceRequest)
395 {
396     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsMainFrame) {
397         WVLOG_E("OH_ArkWebResourceRequest_IsMainFrame not found.");
398         return false;
399     }
400 
401     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsMainFrame(resourceRequest);
402 }
403 
OH_ArkWebResourceRequest_HasGesture(const ArkWeb_ResourceRequest * resourceRequest)404 bool OH_ArkWebResourceRequest_HasGesture(const ArkWeb_ResourceRequest* resourceRequest)
405 {
406     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_HasGesture) {
407         WVLOG_E("OH_ArkWebResourceRequest_HasGesture not found.");
408         return false;
409     }
410 
411     return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_HasGesture(resourceRequest);
412 }
413 
OH_ArkWeb_RegisterCustomSchemes(const char * scheme,int32_t option)414 int32_t OH_ArkWeb_RegisterCustomSchemes(const char* scheme, int32_t option)
415 {
416     if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
417         if (!EnsureSdkLoaded()) {
418             WVLOG_E("OH_ArkWeb_RegisterCustomSchemes sdk not loaded.");
419         }
420     } else {
421         WVLOG_E("OH_ArkWeb_RegisterCustomSchemes webEngineHandle is nullptr.");
422     }
423 
424     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_RegisterCustomSchemes) {
425         WVLOG_E("OH_ArkWeb_RegisterCustomSchemes not found.");
426         return ARKWEB_ERROR_UNKNOWN;
427     }
428 
429     return g_SchemeHandlerApi->impl_OH_ArkWeb_RegisterCustomSchemes(scheme, option);
430 }
431 
OH_ArkWeb_SetSchemeHandler(const char * scheme,const char * webTag,ArkWeb_SchemeHandler * schemeHandler)432 bool OH_ArkWeb_SetSchemeHandler(const char* scheme, const char* webTag, ArkWeb_SchemeHandler* schemeHandler)
433 {
434     if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
435         if (!EnsureSdkLoaded()) {
436             WVLOG_E("scheme_handler sdk not loaded.");
437         }
438     } else {
439         WVLOG_E("scheme_handler webEngineHandle is nullptr.");
440     }
441     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_SetSchemeHandler) {
442         WVLOG_E("OH_ArkWeb_SetSchemeHandler not found.");
443         return false;
444     }
445 
446     return g_SchemeHandlerApi->impl_OH_ArkWeb_SetSchemeHandler(scheme, webTag, schemeHandler);
447 }
448 
OH_ArkWebServiceWorker_SetSchemeHandler(const char * scheme,ArkWeb_SchemeHandler * schemeHandler)449 bool OH_ArkWebServiceWorker_SetSchemeHandler(const char* scheme, ArkWeb_SchemeHandler* schemeHandler)
450 {
451     if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
452         if (!EnsureSdkLoaded()) {
453             WVLOG_E("scheme_handler sdk not loaded.");
454         }
455     } else {
456         WVLOG_E("scheme_handler webEngineHandle is nullptr.");
457     }
458     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_SetSchemeHandler) {
459         WVLOG_E("OH_ArkWebServiceWorker_SetSchemeHandler not found.");
460         return false;
461     }
462 
463     return g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_SetSchemeHandler(scheme, schemeHandler);
464 }
465 
OH_ArkWeb_ClearSchemeHandlers(const char * webTag)466 int32_t OH_ArkWeb_ClearSchemeHandlers(const char* webTag)
467 {
468     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_ClearSchemeHandlers) {
469         WVLOG_E("OH_ArkWeb_ClearSchemeHandlers not found.");
470         return ARKWEB_ERROR_UNKNOWN;
471     }
472 
473     return g_SchemeHandlerApi->impl_OH_ArkWeb_ClearSchemeHandlers(webTag);
474 }
475 
OH_ArkWebServiceWorker_ClearSchemeHandlers()476 int32_t OH_ArkWebServiceWorker_ClearSchemeHandlers()
477 {
478     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_ClearSchemeHandlers) {
479         WVLOG_E("OH_ArkWebServiceWorker_ClearSchemeHandlers not found.");
480         return ARKWEB_ERROR_UNKNOWN;
481     }
482 
483     return g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_ClearSchemeHandlers();
484 }
485 
OH_ArkWeb_CreateSchemeHandler(ArkWeb_SchemeHandler ** schemeHandler)486 void OH_ArkWeb_CreateSchemeHandler(ArkWeb_SchemeHandler** schemeHandler)
487 {
488     if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
489         if (!EnsureSdkLoaded()) {
490             WVLOG_E("scheme_handler sdk not loaded.");
491         }
492     } else {
493         WVLOG_E("scheme_handler webEngineHandle is nullptr.");
494     }
495     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_CreateSchemeHandler) {
496         WVLOG_E("OH_ArkWeb_CreateSchemeHandler not found.");
497         return;
498     }
499 
500     return g_SchemeHandlerApi->impl_OH_ArkWeb_CreateSchemeHandler(schemeHandler);
501 }
502 
OH_ArkWeb_DestroySchemeHandler(ArkWeb_SchemeHandler * schemeHandler)503 void OH_ArkWeb_DestroySchemeHandler(ArkWeb_SchemeHandler* schemeHandler)
504 {
505     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_DestroySchemeHandler) {
506         WVLOG_E("OH_ArkWeb_DestroySchemeHandler not found.");
507         return;
508     }
509 
510     return g_SchemeHandlerApi->impl_OH_ArkWeb_DestroySchemeHandler(schemeHandler);
511 }
512 
OH_ArkWebSchemeHandler_SetUserData(ArkWeb_SchemeHandler * schemeHandler,void * userData)513 int32_t OH_ArkWebSchemeHandler_SetUserData(ArkWeb_SchemeHandler* schemeHandler, void* userData)
514 {
515     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetUserData) {
516         WVLOG_E("OH_ArkWebSchemeHandler_SetUserData not found.");
517         return ARKWEB_ERROR_UNKNOWN;
518     }
519     return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetUserData(schemeHandler, userData);
520 }
521 
OH_ArkWebSchemeHandler_GetUserData(const ArkWeb_SchemeHandler * schemeHandler)522 void* OH_ArkWebSchemeHandler_GetUserData(const ArkWeb_SchemeHandler* schemeHandler)
523 {
524     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_GetUserData) {
525         WVLOG_E("OH_ArkWebSchemeHandler_GetUserData not found.");
526         return nullptr;
527     }
528     return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_GetUserData(schemeHandler);
529 }
530 
OH_ArkWebSchemeHandler_SetOnRequestStart(ArkWeb_SchemeHandler * schemeHandler,ArkWeb_OnRequestStart onRequestStart)531 int32_t OH_ArkWebSchemeHandler_SetOnRequestStart(
532     ArkWeb_SchemeHandler* schemeHandler, ArkWeb_OnRequestStart onRequestStart)
533 {
534     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStart) {
535         WVLOG_E("OH_ArkWebSchemeHandler_SetOnRequestStart not found.");
536         return ARKWEB_ERROR_UNKNOWN;
537     }
538 
539     return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStart(schemeHandler, onRequestStart);
540 }
541 
OH_ArkWebSchemeHandler_SetOnRequestStop(ArkWeb_SchemeHandler * schemeHandler,ArkWeb_OnRequestStop onRequestStop)542 int32_t OH_ArkWebSchemeHandler_SetOnRequestStop(
543     ArkWeb_SchemeHandler* schemeHandler, ArkWeb_OnRequestStop onRequestStop)
544 {
545     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStop) {
546         WVLOG_E("OH_ArkWebSchemeHandler_SetOnRequestStop not found.");
547         return ARKWEB_ERROR_UNKNOWN;
548     }
549 
550     return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStop(schemeHandler, onRequestStop);
551 }
552 
OH_ArkWeb_CreateResponse(ArkWeb_Response ** response)553 void OH_ArkWeb_CreateResponse(ArkWeb_Response** response)
554 {
555     if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
556         if (!EnsureSdkLoaded()) {
557             WVLOG_E("scheme_handler sdk not loaded.");
558         }
559     } else {
560         WVLOG_E("scheme_handler webEngineHandle is nullptr.");
561     }
562     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_CreateResponse) {
563         WVLOG_E("OH_ArkWeb_CreateResponse not found.");
564         return;
565     }
566 
567     return g_SchemeHandlerApi->impl_OH_ArkWeb_CreateResponse(response);
568 }
569 
OH_ArkWeb_DestroyResponse(ArkWeb_Response * response)570 void OH_ArkWeb_DestroyResponse(ArkWeb_Response* response)
571 {
572     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_DestroyResponse) {
573         WVLOG_E("OH_ArkWeb_DestroyResponse not found.");
574         return;
575     }
576 
577     return g_SchemeHandlerApi->impl_OH_ArkWeb_DestroyResponse(response);
578 }
579 
OH_ArkWebResponse_SetUrl(ArkWeb_Response * response,const char * url)580 int32_t OH_ArkWebResponse_SetUrl(ArkWeb_Response* response, const char* url)
581 {
582     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetUrl) {
583         WVLOG_E("OH_ArkWebResponse_SetUrl not found.");
584         return ARKWEB_ERROR_UNKNOWN;
585     }
586 
587     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetUrl(response, url);
588 }
589 
OH_ArkWebResponse_GetUrl(const ArkWeb_Response * response,char ** url)590 void OH_ArkWebResponse_GetUrl(const ArkWeb_Response* response, char** url)
591 {
592     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetUrl) {
593         WVLOG_E("OH_ArkWebResponse_GetUrl not found.");
594         return;
595     }
596 
597     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetUrl(response, url);
598 }
599 
OH_ArkWebResponse_SetError(ArkWeb_Response * response,ArkWeb_NetError errorCode)600 int32_t OH_ArkWebResponse_SetError(ArkWeb_Response* response, ArkWeb_NetError errorCode)
601 {
602     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetError) {
603         WVLOG_E("OH_ArkWebResponse_SetError not found.");
604         return ARKWEB_ERROR_UNKNOWN;
605     }
606 
607     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetError(response, errorCode);
608 }
609 
OH_ArkWebResponse_GetError(const ArkWeb_Response * response)610 ArkWeb_NetError OH_ArkWebResponse_GetError(const ArkWeb_Response* response)
611 {
612     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetError) {
613         WVLOG_E("OH_ArkWebResponse_GetError not found.");
614         return ARKWEB_ERR_FAILED;
615     }
616 
617     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetError(response);
618 }
619 
OH_ArkWebResponse_SetStatus(ArkWeb_Response * response,int status)620 int32_t OH_ArkWebResponse_SetStatus(ArkWeb_Response* response, int status)
621 {
622     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatus) {
623         WVLOG_E("OH_ArkWebResponse_SetStatus not found.");
624         return ARKWEB_ERROR_UNKNOWN;
625     }
626 
627     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatus(response, status);
628 }
629 
OH_ArkWebResponse_GetStatus(const ArkWeb_Response * response)630 int OH_ArkWebResponse_GetStatus(const ArkWeb_Response* response)
631 {
632     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatus) {
633         WVLOG_E("OH_ArkWebResponse_GetStatus not found.");
634         return -1;
635     }
636 
637     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatus(response);
638 }
639 
OH_ArkWebResponse_SetStatusText(ArkWeb_Response * response,const char * statusText)640 int32_t OH_ArkWebResponse_SetStatusText(ArkWeb_Response* response, const char* statusText)
641 {
642     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatusText) {
643         WVLOG_E("OH_ArkWebResponse_SetStatusText not found.");
644         return ARKWEB_ERROR_UNKNOWN;
645     }
646 
647     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatusText(response, statusText);
648 }
649 
OH_ArkWebResponse_GetStatusText(const ArkWeb_Response * response,char ** statusText)650 void OH_ArkWebResponse_GetStatusText(const ArkWeb_Response* response, char** statusText)
651 {
652     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatusText) {
653         WVLOG_E("OH_ArkWebResponse_GetStatusText not found.");
654         return;
655     }
656 
657     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatusText(response, statusText);
658 }
659 
OH_ArkWebResponse_SetMimeType(ArkWeb_Response * response,const char * mimeType)660 int32_t OH_ArkWebResponse_SetMimeType(ArkWeb_Response* response, const char* mimeType)
661 {
662     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetMimeType) {
663         WVLOG_E("OH_ArkWebResponse_SetMimeType not found.");
664         return ARKWEB_ERROR_UNKNOWN;
665     }
666 
667     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetMimeType(response, mimeType);
668 }
669 
OH_ArkWebResponse_GetMimeType(const ArkWeb_Response * response,char ** mimeType)670 void OH_ArkWebResponse_GetMimeType(const ArkWeb_Response* response, char** mimeType)
671 {
672     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetMimeType) {
673         WVLOG_E("OH_ArkWebResponse_GetMimeType not found.");
674         return;
675     }
676 
677     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetMimeType(response, mimeType);
678 }
679 
OH_ArkWebResponse_SetCharset(ArkWeb_Response * response,const char * charset)680 int32_t OH_ArkWebResponse_SetCharset(ArkWeb_Response* response, const char* charset)
681 {
682     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetCharset) {
683         WVLOG_E("OH_ArkWebResponse_SetCharset not found.");
684         return ARKWEB_ERROR_UNKNOWN;
685     }
686 
687     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetCharset(response, charset);
688 }
689 
OH_ArkWebResponse_GetCharset(const ArkWeb_Response * response,char ** charset)690 void OH_ArkWebResponse_GetCharset(const ArkWeb_Response* response, char** charset)
691 {
692     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetCharset) {
693         WVLOG_E("OH_ArkWebResponse_GetCharset not found.");
694         return;
695     }
696 
697     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetCharset(response, charset);
698 }
699 
OH_ArkWebResponse_SetHeaderByName(ArkWeb_Response * response,const char * name,const char * value,bool overwrite)700 int32_t OH_ArkWebResponse_SetHeaderByName(
701     ArkWeb_Response* response, const char* name, const char* value, bool overwrite)
702 {
703     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetHeaderByName) {
704         WVLOG_E("OH_ArkWebResponse_SetHeaderByName not found.");
705         return ARKWEB_ERROR_UNKNOWN;
706     }
707 
708     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetHeaderByName(response, name, value, overwrite);
709 }
710 
OH_ArkWebResponse_GetHeaderByName(const ArkWeb_Response * response,const char * name,char ** value)711 void OH_ArkWebResponse_GetHeaderByName(const ArkWeb_Response* response, const char* name, char** value)
712 {
713     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetHeaderByName) {
714         WVLOG_E("OH_ArkWebResponse_GetHeaderByName not found.");
715         return;
716     }
717 
718     return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetHeaderByName(response, name, value);
719 }
720 
OH_ArkWebResourceHandler_Destroy(const ArkWeb_ResourceHandler * resourceHandler)721 int32_t OH_ArkWebResourceHandler_Destroy(const ArkWeb_ResourceHandler* resourceHandler)
722 {
723     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_Destroy) {
724         WVLOG_E("OH_ArkWebResourceHandler_Destroy not found.");
725         return ARKWEB_ERROR_UNKNOWN;
726     }
727 
728     return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_Destroy(resourceHandler);
729 }
730 
OH_ArkWebResourceHandler_DidReceiveResponse(const ArkWeb_ResourceHandler * resourceHandler,const ArkWeb_Response * response)731 int32_t OH_ArkWebResourceHandler_DidReceiveResponse(
732     const ArkWeb_ResourceHandler* resourceHandler, const ArkWeb_Response* response)
733 {
734     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveResponse) {
735         WVLOG_E("OH_ArkWebResourceHandler_DidReceiveResponse not found.");
736         return ARKWEB_ERROR_UNKNOWN;
737     }
738 
739     return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveResponse(resourceHandler, response);
740 }
741 
OH_ArkWebResourceHandler_DidReceiveData(const ArkWeb_ResourceHandler * resourceHandler,const uint8_t * buffer,int64_t bufLen)742 int32_t OH_ArkWebResourceHandler_DidReceiveData(
743     const ArkWeb_ResourceHandler* resourceHandler, const uint8_t* buffer, int64_t bufLen)
744 {
745     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveData) {
746         WVLOG_E("OH_ArkWebResourceHandler_DidReceiveData not found.");
747         return ARKWEB_ERROR_UNKNOWN;
748     }
749 
750     return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveData(resourceHandler, buffer, bufLen);
751 }
752 
OH_ArkWebResourceHandler_DidFinish(const ArkWeb_ResourceHandler * resourceHandler)753 int32_t OH_ArkWebResourceHandler_DidFinish(const ArkWeb_ResourceHandler* resourceHandler)
754 {
755     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFinish) {
756         WVLOG_E("OH_ArkWeb_ResourceHandler_DidFinish not found.");
757         return ARKWEB_ERROR_UNKNOWN;
758     }
759 
760     return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFinish(resourceHandler);
761 }
762 
OH_ArkWebResourceHandler_DidFailWithError(const ArkWeb_ResourceHandler * resourceHandler,ArkWeb_NetError errorCode)763 int32_t OH_ArkWebResourceHandler_DidFailWithError(
764     const ArkWeb_ResourceHandler* resourceHandler, ArkWeb_NetError errorCode)
765 {
766     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFailWithError) {
767         WVLOG_E("OH_ArkWeb_ResourceHandler_DidFailWithError not found.");
768         return ARKWEB_ERROR_UNKNOWN;
769     }
770 
771     return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFailWithError(resourceHandler, errorCode);
772 }
773 
OH_ArkWeb_ReleaseString(char * string)774 void OH_ArkWeb_ReleaseString(char* string)
775 {
776     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseString) {
777         WVLOG_E("OH_ArkWeb_ReleaseString not found.");
778         return;
779     }
780 
781     return g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseString(string);
782 }
783 
OH_ArkWeb_ReleaseByteArray(uint8_t * byteArray)784 void OH_ArkWeb_ReleaseByteArray(uint8_t* byteArray)
785 {
786     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseByteArray) {
787         WVLOG_E("OH_ArkWeb_ReleaseByteArray not found.");
788         return;
789     }
790 
791     return g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseByteArray(byteArray);
792 }
793 
OH_ArkWebSchemeHandler_SetFromEts(ArkWeb_SchemeHandler * schemeHandler,bool fromEts)794 int32_t OH_ArkWebSchemeHandler_SetFromEts(
795     ArkWeb_SchemeHandler* schemeHandler, bool fromEts)
796 {
797     if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetFromEts) {
798         WVLOG_E("impl_OH_ArkWebSchemeHandler_SetFromEts not found.");
799         return ARKWEB_ERROR_UNKNOWN;
800     }
801 
802     return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetFromEts(schemeHandler, fromEts);
803 }