10826e83eSopenharmony_ci/*
20826e83eSopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
30826e83eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40826e83eSopenharmony_ci * you may not use this file except in compliance with the License.
50826e83eSopenharmony_ci * You may obtain a copy of the License at
60826e83eSopenharmony_ci *
70826e83eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
80826e83eSopenharmony_ci *
90826e83eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100826e83eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110826e83eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120826e83eSopenharmony_ci * See the License for the specific language governing permissions and
130826e83eSopenharmony_ci * limitations under the License.
140826e83eSopenharmony_ci */
150826e83eSopenharmony_ci
160826e83eSopenharmony_ci#include "arkweb_scheme_handler.h"
170826e83eSopenharmony_ci
180826e83eSopenharmony_ci#include <memory>
190826e83eSopenharmony_ci#include <mutex>
200826e83eSopenharmony_ci#include <unordered_map>
210826e83eSopenharmony_ci#include <vector>
220826e83eSopenharmony_ci
230826e83eSopenharmony_ci#include "nweb.h"
240826e83eSopenharmony_ci#include "nweb_helper.h"
250826e83eSopenharmony_ci#include "nweb_log.h"
260826e83eSopenharmony_ci
270826e83eSopenharmony_cinamespace {
280826e83eSopenharmony_ci
290826e83eSopenharmony_ci// Run DO macro for every function defined in the API.
300826e83eSopenharmony_ci#define FOR_EACH_API_FN(DO)                             \
310826e83eSopenharmony_ci    DO(OH_ArkWebRequestHeaderList_Destroy);             \
320826e83eSopenharmony_ci    DO(OH_ArkWebRequestHeaderList_GetSize);             \
330826e83eSopenharmony_ci    DO(OH_ArkWebRequestHeaderList_GetHeader);           \
340826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetMethod);             \
350826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetUrl);                \
360826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetHttpBodyStream);     \
370826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_DestroyHttpBodyStream); \
380826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetResourceType);       \
390826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetFrameUrl);           \
400826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_SetReadCallback);        \
410826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_SetUserData);            \
420826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_GetUserData);            \
430826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_Init);                   \
440826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_Read);                   \
450826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_GetSize);                \
460826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_GetPosition);            \
470826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_IsChunked);              \
480826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_IsEof);                  \
490826e83eSopenharmony_ci    DO(OH_ArkWebHttpBodyStream_IsInMemory);             \
500826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_Destroy);               \
510826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_SetUserData);           \
520826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetUserData);           \
530826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetReferrer);           \
540826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_GetRequestHeaders);     \
550826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_IsRedirect);            \
560826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_IsMainFrame);           \
570826e83eSopenharmony_ci    DO(OH_ArkWebResourceRequest_HasGesture);            \
580826e83eSopenharmony_ci    DO(OH_ArkWeb_RegisterCustomSchemes);                \
590826e83eSopenharmony_ci    DO(OH_ArkWeb_SetSchemeHandler);                     \
600826e83eSopenharmony_ci    DO(OH_ArkWebServiceWorker_SetSchemeHandler);        \
610826e83eSopenharmony_ci    DO(OH_ArkWebServiceWorker_ClearSchemeHandlers);     \
620826e83eSopenharmony_ci    DO(OH_ArkWeb_ClearSchemeHandlers);                  \
630826e83eSopenharmony_ci    DO(OH_ArkWeb_CreateSchemeHandler);                  \
640826e83eSopenharmony_ci    DO(OH_ArkWeb_DestroySchemeHandler);                 \
650826e83eSopenharmony_ci    DO(OH_ArkWebSchemeHandler_SetOnRequestStart);       \
660826e83eSopenharmony_ci    DO(OH_ArkWebSchemeHandler_SetOnRequestStop);        \
670826e83eSopenharmony_ci    DO(OH_ArkWebSchemeHandler_SetUserData);             \
680826e83eSopenharmony_ci    DO(OH_ArkWebSchemeHandler_GetUserData);             \
690826e83eSopenharmony_ci    DO(OH_ArkWeb_CreateResponse);                       \
700826e83eSopenharmony_ci    DO(OH_ArkWeb_DestroyResponse);                      \
710826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetUrl);                       \
720826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetUrl);                       \
730826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetError);                     \
740826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetError);                     \
750826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetStatus);                    \
760826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetStatus);                    \
770826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetStatusText);                \
780826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetStatusText);                \
790826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetMimeType);                  \
800826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetMimeType);                  \
810826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetCharset);                   \
820826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetCharset);                   \
830826e83eSopenharmony_ci    DO(OH_ArkWebResponse_SetHeaderByName);              \
840826e83eSopenharmony_ci    DO(OH_ArkWebResponse_GetHeaderByName);              \
850826e83eSopenharmony_ci    DO(OH_ArkWebResourceHandler_Destroy);               \
860826e83eSopenharmony_ci    DO(OH_ArkWebResourceHandler_DidReceiveResponse);    \
870826e83eSopenharmony_ci    DO(OH_ArkWebResourceHandler_DidReceiveData);        \
880826e83eSopenharmony_ci    DO(OH_ArkWebResourceHandler_DidFinish);             \
890826e83eSopenharmony_ci    DO(OH_ArkWebResourceHandler_DidFailWithError);      \
900826e83eSopenharmony_ci    DO(OH_ArkWeb_ReleaseString);                        \
910826e83eSopenharmony_ci    DO(OH_ArkWeb_ReleaseByteArray);                     \
920826e83eSopenharmony_ci    DO(OH_ArkWebSchemeHandler_SetFromEts)
930826e83eSopenharmony_ci
940826e83eSopenharmony_cistruct SchemeHandlerApi {
950826e83eSopenharmony_ci#define GEN_FN_PTR(fn) decltype(&(fn)) impl_##fn = nullptr
960826e83eSopenharmony_ci    FOR_EACH_API_FN(GEN_FN_PTR);
970826e83eSopenharmony_ci#undef GEN_FN_PTR
980826e83eSopenharmony_ci};
990826e83eSopenharmony_ci
1000826e83eSopenharmony_citemplate<typename Fn>
1010826e83eSopenharmony_civoid LoadFunction(const char* functionName, Fn* fnOut)
1020826e83eSopenharmony_ci{
1030826e83eSopenharmony_ci    void* fn = OHOS::NWeb::NWebHelper::Instance().LoadFuncSymbol(functionName);
1040826e83eSopenharmony_ci    if (!fn) {
1050826e83eSopenharmony_ci        WVLOG_E("%{public}s not found.", functionName);
1060826e83eSopenharmony_ci        return;
1070826e83eSopenharmony_ci    }
1080826e83eSopenharmony_ci    *fnOut = reinterpret_cast<Fn>(fn);
1090826e83eSopenharmony_ci}
1100826e83eSopenharmony_ci
1110826e83eSopenharmony_ciSchemeHandlerApi* g_SchemeHandlerApi = nullptr;
1120826e83eSopenharmony_ci
1130826e83eSopenharmony_civoid LoadSchemeHandlerApi(SchemeHandlerApi* api)
1140826e83eSopenharmony_ci{
1150826e83eSopenharmony_ci    // Initialize each function pointer field from the so.
1160826e83eSopenharmony_ci#define LOAD_FN_PTR(fn) LoadFunction(#fn, &api->impl_##fn)
1170826e83eSopenharmony_ci    FOR_EACH_API_FN(LOAD_FN_PTR);
1180826e83eSopenharmony_ci#undef LOAD_FN_PTR
1190826e83eSopenharmony_ci}
1200826e83eSopenharmony_ci
1210826e83eSopenharmony_cibool EnsureSdkLoaded()
1220826e83eSopenharmony_ci{
1230826e83eSopenharmony_ci    if (g_SchemeHandlerApi) {
1240826e83eSopenharmony_ci        WVLOG_I("SchemeHandlerApi had loaded.");
1250826e83eSopenharmony_ci        return true;
1260826e83eSopenharmony_ci    }
1270826e83eSopenharmony_ci
1280826e83eSopenharmony_ci    auto* schemeHandlerApi = new (std::nothrow) SchemeHandlerApi();
1290826e83eSopenharmony_ci    if (schemeHandlerApi == nullptr) {
1300826e83eSopenharmony_ci        WVLOG_I("schemeHandlerApi is nullptr.");
1310826e83eSopenharmony_ci        return false;
1320826e83eSopenharmony_ci    }
1330826e83eSopenharmony_ci    LoadSchemeHandlerApi(schemeHandlerApi);
1340826e83eSopenharmony_ci    g_SchemeHandlerApi = schemeHandlerApi;
1350826e83eSopenharmony_ci    return true;
1360826e83eSopenharmony_ci}
1370826e83eSopenharmony_ci#undef FOR_EACH_API_FN
1380826e83eSopenharmony_ci} // namespace
1390826e83eSopenharmony_ci
1400826e83eSopenharmony_ciusing namespace OHOS;
1410826e83eSopenharmony_civoid OH_ArkWebRequestHeaderList_Destroy(ArkWeb_RequestHeaderList* requestHeaderList)
1420826e83eSopenharmony_ci{
1430826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_Destroy) {
1440826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebRequestHeaderList_Destroy not found.");
1450826e83eSopenharmony_ci        return;
1460826e83eSopenharmony_ci    }
1470826e83eSopenharmony_ci
1480826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_Destroy(requestHeaderList);
1490826e83eSopenharmony_ci}
1500826e83eSopenharmony_ci
1510826e83eSopenharmony_ciint32_t OH_ArkWebRequestHeaderList_GetSize(const ArkWeb_RequestHeaderList* requestHeaderList)
1520826e83eSopenharmony_ci{
1530826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetSize) {
1540826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebRequestHeaderList_GetSize not found.");
1550826e83eSopenharmony_ci        return -1;
1560826e83eSopenharmony_ci    }
1570826e83eSopenharmony_ci
1580826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetSize(requestHeaderList);
1590826e83eSopenharmony_ci}
1600826e83eSopenharmony_ci
1610826e83eSopenharmony_civoid OH_ArkWebRequestHeaderList_GetHeader(
1620826e83eSopenharmony_ci    const ArkWeb_RequestHeaderList* requestHeaderList, int32_t index, char** key, char** value)
1630826e83eSopenharmony_ci{
1640826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetHeader) {
1650826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebRequestHeaderList_GetHeader not found.");
1660826e83eSopenharmony_ci        return;
1670826e83eSopenharmony_ci    }
1680826e83eSopenharmony_ci
1690826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebRequestHeaderList_GetHeader(requestHeaderList, index, key, value);
1700826e83eSopenharmony_ci}
1710826e83eSopenharmony_ci
1720826e83eSopenharmony_civoid OH_ArkWebResourceRequest_GetMethod(const ArkWeb_ResourceRequest* resourceRequest, char** method)
1730826e83eSopenharmony_ci{
1740826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetMethod) {
1750826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetMethod not found.");
1760826e83eSopenharmony_ci        return;
1770826e83eSopenharmony_ci    }
1780826e83eSopenharmony_ci
1790826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetMethod(resourceRequest, method);
1800826e83eSopenharmony_ci}
1810826e83eSopenharmony_ci
1820826e83eSopenharmony_civoid OH_ArkWebResourceRequest_GetUrl(const ArkWeb_ResourceRequest* resourceRequest, char** url)
1830826e83eSopenharmony_ci{
1840826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUrl) {
1850826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetUrl not found.");
1860826e83eSopenharmony_ci        return;
1870826e83eSopenharmony_ci    }
1880826e83eSopenharmony_ci
1890826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUrl(resourceRequest, url);
1900826e83eSopenharmony_ci}
1910826e83eSopenharmony_ci
1920826e83eSopenharmony_civoid OH_ArkWebResourceRequest_GetHttpBodyStream(
1930826e83eSopenharmony_ci    const ArkWeb_ResourceRequest* resourceRequest, ArkWeb_HttpBodyStream** httpBodyStream)
1940826e83eSopenharmony_ci{
1950826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetHttpBodyStream) {
1960826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetHttpBodyStream not found.");
1970826e83eSopenharmony_ci        return;
1980826e83eSopenharmony_ci    }
1990826e83eSopenharmony_ci
2000826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetHttpBodyStream(resourceRequest, httpBodyStream);
2010826e83eSopenharmony_ci}
2020826e83eSopenharmony_ci
2030826e83eSopenharmony_civoid OH_ArkWebResourceRequest_DestroyHttpBodyStream(ArkWeb_HttpBodyStream* httpBodyStream)
2040826e83eSopenharmony_ci{
2050826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_DestroyHttpBodyStream) {
2060826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_DestroyHttpBodyStream not found.");
2070826e83eSopenharmony_ci        return;
2080826e83eSopenharmony_ci    }
2090826e83eSopenharmony_ci
2100826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_DestroyHttpBodyStream(httpBodyStream);
2110826e83eSopenharmony_ci}
2120826e83eSopenharmony_ci
2130826e83eSopenharmony_ciint32_t OH_ArkWebResourceRequest_GetResourceType(const ArkWeb_ResourceRequest* resourceRequest)
2140826e83eSopenharmony_ci{
2150826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetResourceType) {
2160826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetResourceType not found.");
2170826e83eSopenharmony_ci        return -1;
2180826e83eSopenharmony_ci    }
2190826e83eSopenharmony_ci
2200826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetResourceType(resourceRequest);
2210826e83eSopenharmony_ci}
2220826e83eSopenharmony_ci
2230826e83eSopenharmony_civoid OH_ArkWebResourceRequest_GetFrameUrl(const ArkWeb_ResourceRequest* resourceRequest, char** frameUrl)
2240826e83eSopenharmony_ci{
2250826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetFrameUrl) {
2260826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetFrameUrl not found.");
2270826e83eSopenharmony_ci        return;
2280826e83eSopenharmony_ci    }
2290826e83eSopenharmony_ci
2300826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetFrameUrl(resourceRequest, frameUrl);
2310826e83eSopenharmony_ci}
2320826e83eSopenharmony_ci
2330826e83eSopenharmony_ciint32_t OH_ArkWebHttpBodyStream_SetUserData(ArkWeb_HttpBodyStream* httpBodyStream, void* userData)
2340826e83eSopenharmony_ci{
2350826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetUserData) {
2360826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_SetUserData not found.");
2370826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
2380826e83eSopenharmony_ci    }
2390826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetUserData(httpBodyStream, userData);
2400826e83eSopenharmony_ci}
2410826e83eSopenharmony_ci
2420826e83eSopenharmony_civoid* OH_ArkWebHttpBodyStream_GetUserData(const ArkWeb_HttpBodyStream* httpBodyStream)
2430826e83eSopenharmony_ci{
2440826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetUserData) {
2450826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_GetUserData not found.");
2460826e83eSopenharmony_ci        return nullptr;
2470826e83eSopenharmony_ci    }
2480826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetUserData(httpBodyStream);
2490826e83eSopenharmony_ci}
2500826e83eSopenharmony_ci
2510826e83eSopenharmony_ciint32_t OH_ArkWebHttpBodyStream_SetReadCallback(
2520826e83eSopenharmony_ci    ArkWeb_HttpBodyStream* httpBodyStream, ArkWeb_HttpBodyStreamReadCallback readCallback)
2530826e83eSopenharmony_ci{
2540826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetReadCallback) {
2550826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_SetReadCallback not found.");
2560826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
2570826e83eSopenharmony_ci    }
2580826e83eSopenharmony_ci
2590826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_SetReadCallback(httpBodyStream, readCallback);
2600826e83eSopenharmony_ci}
2610826e83eSopenharmony_ci
2620826e83eSopenharmony_ciint32_t OH_ArkWebHttpBodyStream_Init(
2630826e83eSopenharmony_ci    ArkWeb_HttpBodyStream* httpBodyStream, ArkWeb_HttpBodyStreamInitCallback initCallback)
2640826e83eSopenharmony_ci{
2650826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Init) {
2660826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_Init not found.");
2670826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
2680826e83eSopenharmony_ci    }
2690826e83eSopenharmony_ci
2700826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Init(httpBodyStream, initCallback);
2710826e83eSopenharmony_ci}
2720826e83eSopenharmony_ci
2730826e83eSopenharmony_civoid OH_ArkWebHttpBodyStream_Read(const ArkWeb_HttpBodyStream* httpBodyStream, uint8_t* buffer, int bufLen)
2740826e83eSopenharmony_ci{
2750826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Read) {
2760826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_Read not found.");
2770826e83eSopenharmony_ci        return;
2780826e83eSopenharmony_ci    }
2790826e83eSopenharmony_ci
2800826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_Read(httpBodyStream, buffer, bufLen);
2810826e83eSopenharmony_ci}
2820826e83eSopenharmony_ci
2830826e83eSopenharmony_ciuint64_t OH_ArkWebHttpBodyStream_GetSize(const ArkWeb_HttpBodyStream* httpBodyStream)
2840826e83eSopenharmony_ci{
2850826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetSize) {
2860826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_GetSize not found.");
2870826e83eSopenharmony_ci        return 0;
2880826e83eSopenharmony_ci    }
2890826e83eSopenharmony_ci
2900826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetSize(httpBodyStream);
2910826e83eSopenharmony_ci}
2920826e83eSopenharmony_ci
2930826e83eSopenharmony_ciuint64_t OH_ArkWebHttpBodyStream_GetPosition(const ArkWeb_HttpBodyStream* httpBodyStream)
2940826e83eSopenharmony_ci{
2950826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetPosition) {
2960826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_GetPosition not found.");
2970826e83eSopenharmony_ci        return 0;
2980826e83eSopenharmony_ci    }
2990826e83eSopenharmony_ci
3000826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_GetPosition(httpBodyStream);
3010826e83eSopenharmony_ci}
3020826e83eSopenharmony_ci
3030826e83eSopenharmony_cibool OH_ArkWebHttpBodyStream_IsChunked(const ArkWeb_HttpBodyStream* httpBodyStream)
3040826e83eSopenharmony_ci{
3050826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsChunked) {
3060826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_IsTrunked not found.");
3070826e83eSopenharmony_ci        return false;
3080826e83eSopenharmony_ci    }
3090826e83eSopenharmony_ci
3100826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsChunked(httpBodyStream);
3110826e83eSopenharmony_ci}
3120826e83eSopenharmony_ci
3130826e83eSopenharmony_cibool OH_ArkWebHttpBodyStream_IsEof(const ArkWeb_HttpBodyStream* httpBodyStream)
3140826e83eSopenharmony_ci{
3150826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsEof) {
3160826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_HasNullSource not found.");
3170826e83eSopenharmony_ci        return false;
3180826e83eSopenharmony_ci    }
3190826e83eSopenharmony_ci
3200826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsEof(httpBodyStream);
3210826e83eSopenharmony_ci}
3220826e83eSopenharmony_ci
3230826e83eSopenharmony_cibool OH_ArkWebHttpBodyStream_IsInMemory(const ArkWeb_HttpBodyStream* httpBodyStream)
3240826e83eSopenharmony_ci{
3250826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsInMemory) {
3260826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebHttpBodyStream_IsInMemory not found.");
3270826e83eSopenharmony_ci        return false;
3280826e83eSopenharmony_ci    }
3290826e83eSopenharmony_ci
3300826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebHttpBodyStream_IsInMemory(httpBodyStream);
3310826e83eSopenharmony_ci}
3320826e83eSopenharmony_ci
3330826e83eSopenharmony_ciint32_t OH_ArkWebResourceRequest_Destroy(const ArkWeb_ResourceRequest* resourceRequest)
3340826e83eSopenharmony_ci{
3350826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_Destroy) {
3360826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_Destroy not found.");
3370826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
3380826e83eSopenharmony_ci    }
3390826e83eSopenharmony_ci
3400826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_Destroy(resourceRequest);
3410826e83eSopenharmony_ci}
3420826e83eSopenharmony_ci
3430826e83eSopenharmony_civoid OH_ArkWebResourceRequest_GetReferrer(const ArkWeb_ResourceRequest* resourceRequest, char** referrer)
3440826e83eSopenharmony_ci{
3450826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetReferrer) {
3460826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetReferrer not found.");
3470826e83eSopenharmony_ci        return;
3480826e83eSopenharmony_ci    }
3490826e83eSopenharmony_ci
3500826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetReferrer(resourceRequest, referrer);
3510826e83eSopenharmony_ci}
3520826e83eSopenharmony_ci
3530826e83eSopenharmony_ciint32_t OH_ArkWebResourceRequest_SetUserData(ArkWeb_ResourceRequest* resourceRequest, void* userData)
3540826e83eSopenharmony_ci{
3550826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_SetUserData) {
3560826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_SetUserData not found.");
3570826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
3580826e83eSopenharmony_ci    }
3590826e83eSopenharmony_ci
3600826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_SetUserData(resourceRequest, userData);
3610826e83eSopenharmony_ci}
3620826e83eSopenharmony_ci
3630826e83eSopenharmony_civoid* OH_ArkWebResourceRequest_GetUserData(const ArkWeb_ResourceRequest* resourceRequest)
3640826e83eSopenharmony_ci{
3650826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUserData) {
3660826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetUserData not found.");
3670826e83eSopenharmony_ci        return nullptr;
3680826e83eSopenharmony_ci    }
3690826e83eSopenharmony_ci
3700826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetUserData(resourceRequest);
3710826e83eSopenharmony_ci}
3720826e83eSopenharmony_ci
3730826e83eSopenharmony_civoid OH_ArkWebResourceRequest_GetRequestHeaders(
3740826e83eSopenharmony_ci    const ArkWeb_ResourceRequest* resourceRequest, ArkWeb_RequestHeaderList** requestHeaderList)
3750826e83eSopenharmony_ci{
3760826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetRequestHeaders) {
3770826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_GetRequestHeaders not found.");
3780826e83eSopenharmony_ci        return;
3790826e83eSopenharmony_ci    }
3800826e83eSopenharmony_ci
3810826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_GetRequestHeaders(resourceRequest, requestHeaderList);
3820826e83eSopenharmony_ci}
3830826e83eSopenharmony_ci
3840826e83eSopenharmony_cibool OH_ArkWebResourceRequest_IsRedirect(const ArkWeb_ResourceRequest* resourceRequest)
3850826e83eSopenharmony_ci{
3860826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsRedirect) {
3870826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_IsRedirect not found.");
3880826e83eSopenharmony_ci        return false;
3890826e83eSopenharmony_ci    }
3900826e83eSopenharmony_ci
3910826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsRedirect(resourceRequest);
3920826e83eSopenharmony_ci}
3930826e83eSopenharmony_ci
3940826e83eSopenharmony_cibool OH_ArkWebResourceRequest_IsMainFrame(const ArkWeb_ResourceRequest* resourceRequest)
3950826e83eSopenharmony_ci{
3960826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsMainFrame) {
3970826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_IsMainFrame not found.");
3980826e83eSopenharmony_ci        return false;
3990826e83eSopenharmony_ci    }
4000826e83eSopenharmony_ci
4010826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_IsMainFrame(resourceRequest);
4020826e83eSopenharmony_ci}
4030826e83eSopenharmony_ci
4040826e83eSopenharmony_cibool OH_ArkWebResourceRequest_HasGesture(const ArkWeb_ResourceRequest* resourceRequest)
4050826e83eSopenharmony_ci{
4060826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_HasGesture) {
4070826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceRequest_HasGesture not found.");
4080826e83eSopenharmony_ci        return false;
4090826e83eSopenharmony_ci    }
4100826e83eSopenharmony_ci
4110826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceRequest_HasGesture(resourceRequest);
4120826e83eSopenharmony_ci}
4130826e83eSopenharmony_ci
4140826e83eSopenharmony_ciint32_t OH_ArkWeb_RegisterCustomSchemes(const char* scheme, int32_t option)
4150826e83eSopenharmony_ci{
4160826e83eSopenharmony_ci    if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
4170826e83eSopenharmony_ci        if (!EnsureSdkLoaded()) {
4180826e83eSopenharmony_ci            WVLOG_E("OH_ArkWeb_RegisterCustomSchemes sdk not loaded.");
4190826e83eSopenharmony_ci        }
4200826e83eSopenharmony_ci    } else {
4210826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_RegisterCustomSchemes webEngineHandle is nullptr.");
4220826e83eSopenharmony_ci    }
4230826e83eSopenharmony_ci
4240826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_RegisterCustomSchemes) {
4250826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_RegisterCustomSchemes not found.");
4260826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
4270826e83eSopenharmony_ci    }
4280826e83eSopenharmony_ci
4290826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_RegisterCustomSchemes(scheme, option);
4300826e83eSopenharmony_ci}
4310826e83eSopenharmony_ci
4320826e83eSopenharmony_cibool OH_ArkWeb_SetSchemeHandler(const char* scheme, const char* webTag, ArkWeb_SchemeHandler* schemeHandler)
4330826e83eSopenharmony_ci{
4340826e83eSopenharmony_ci    if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
4350826e83eSopenharmony_ci        if (!EnsureSdkLoaded()) {
4360826e83eSopenharmony_ci            WVLOG_E("scheme_handler sdk not loaded.");
4370826e83eSopenharmony_ci        }
4380826e83eSopenharmony_ci    } else {
4390826e83eSopenharmony_ci        WVLOG_E("scheme_handler webEngineHandle is nullptr.");
4400826e83eSopenharmony_ci    }
4410826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_SetSchemeHandler) {
4420826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_SetSchemeHandler not found.");
4430826e83eSopenharmony_ci        return false;
4440826e83eSopenharmony_ci    }
4450826e83eSopenharmony_ci
4460826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_SetSchemeHandler(scheme, webTag, schemeHandler);
4470826e83eSopenharmony_ci}
4480826e83eSopenharmony_ci
4490826e83eSopenharmony_cibool OH_ArkWebServiceWorker_SetSchemeHandler(const char* scheme, ArkWeb_SchemeHandler* schemeHandler)
4500826e83eSopenharmony_ci{
4510826e83eSopenharmony_ci    if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
4520826e83eSopenharmony_ci        if (!EnsureSdkLoaded()) {
4530826e83eSopenharmony_ci            WVLOG_E("scheme_handler sdk not loaded.");
4540826e83eSopenharmony_ci        }
4550826e83eSopenharmony_ci    } else {
4560826e83eSopenharmony_ci        WVLOG_E("scheme_handler webEngineHandle is nullptr.");
4570826e83eSopenharmony_ci    }
4580826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_SetSchemeHandler) {
4590826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebServiceWorker_SetSchemeHandler not found.");
4600826e83eSopenharmony_ci        return false;
4610826e83eSopenharmony_ci    }
4620826e83eSopenharmony_ci
4630826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_SetSchemeHandler(scheme, schemeHandler);
4640826e83eSopenharmony_ci}
4650826e83eSopenharmony_ci
4660826e83eSopenharmony_ciint32_t OH_ArkWeb_ClearSchemeHandlers(const char* webTag)
4670826e83eSopenharmony_ci{
4680826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_ClearSchemeHandlers) {
4690826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_ClearSchemeHandlers not found.");
4700826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
4710826e83eSopenharmony_ci    }
4720826e83eSopenharmony_ci
4730826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_ClearSchemeHandlers(webTag);
4740826e83eSopenharmony_ci}
4750826e83eSopenharmony_ci
4760826e83eSopenharmony_ciint32_t OH_ArkWebServiceWorker_ClearSchemeHandlers()
4770826e83eSopenharmony_ci{
4780826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_ClearSchemeHandlers) {
4790826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebServiceWorker_ClearSchemeHandlers not found.");
4800826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
4810826e83eSopenharmony_ci    }
4820826e83eSopenharmony_ci
4830826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebServiceWorker_ClearSchemeHandlers();
4840826e83eSopenharmony_ci}
4850826e83eSopenharmony_ci
4860826e83eSopenharmony_civoid OH_ArkWeb_CreateSchemeHandler(ArkWeb_SchemeHandler** schemeHandler)
4870826e83eSopenharmony_ci{
4880826e83eSopenharmony_ci    if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
4890826e83eSopenharmony_ci        if (!EnsureSdkLoaded()) {
4900826e83eSopenharmony_ci            WVLOG_E("scheme_handler sdk not loaded.");
4910826e83eSopenharmony_ci        }
4920826e83eSopenharmony_ci    } else {
4930826e83eSopenharmony_ci        WVLOG_E("scheme_handler webEngineHandle is nullptr.");
4940826e83eSopenharmony_ci    }
4950826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_CreateSchemeHandler) {
4960826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_CreateSchemeHandler not found.");
4970826e83eSopenharmony_ci        return;
4980826e83eSopenharmony_ci    }
4990826e83eSopenharmony_ci
5000826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_CreateSchemeHandler(schemeHandler);
5010826e83eSopenharmony_ci}
5020826e83eSopenharmony_ci
5030826e83eSopenharmony_civoid OH_ArkWeb_DestroySchemeHandler(ArkWeb_SchemeHandler* schemeHandler)
5040826e83eSopenharmony_ci{
5050826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_DestroySchemeHandler) {
5060826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_DestroySchemeHandler not found.");
5070826e83eSopenharmony_ci        return;
5080826e83eSopenharmony_ci    }
5090826e83eSopenharmony_ci
5100826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_DestroySchemeHandler(schemeHandler);
5110826e83eSopenharmony_ci}
5120826e83eSopenharmony_ci
5130826e83eSopenharmony_ciint32_t OH_ArkWebSchemeHandler_SetUserData(ArkWeb_SchemeHandler* schemeHandler, void* userData)
5140826e83eSopenharmony_ci{
5150826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetUserData) {
5160826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebSchemeHandler_SetUserData not found.");
5170826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
5180826e83eSopenharmony_ci    }
5190826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetUserData(schemeHandler, userData);
5200826e83eSopenharmony_ci}
5210826e83eSopenharmony_ci
5220826e83eSopenharmony_civoid* OH_ArkWebSchemeHandler_GetUserData(const ArkWeb_SchemeHandler* schemeHandler)
5230826e83eSopenharmony_ci{
5240826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_GetUserData) {
5250826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebSchemeHandler_GetUserData not found.");
5260826e83eSopenharmony_ci        return nullptr;
5270826e83eSopenharmony_ci    }
5280826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_GetUserData(schemeHandler);
5290826e83eSopenharmony_ci}
5300826e83eSopenharmony_ci
5310826e83eSopenharmony_ciint32_t OH_ArkWebSchemeHandler_SetOnRequestStart(
5320826e83eSopenharmony_ci    ArkWeb_SchemeHandler* schemeHandler, ArkWeb_OnRequestStart onRequestStart)
5330826e83eSopenharmony_ci{
5340826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStart) {
5350826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebSchemeHandler_SetOnRequestStart not found.");
5360826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
5370826e83eSopenharmony_ci    }
5380826e83eSopenharmony_ci
5390826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStart(schemeHandler, onRequestStart);
5400826e83eSopenharmony_ci}
5410826e83eSopenharmony_ci
5420826e83eSopenharmony_ciint32_t OH_ArkWebSchemeHandler_SetOnRequestStop(
5430826e83eSopenharmony_ci    ArkWeb_SchemeHandler* schemeHandler, ArkWeb_OnRequestStop onRequestStop)
5440826e83eSopenharmony_ci{
5450826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStop) {
5460826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebSchemeHandler_SetOnRequestStop not found.");
5470826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
5480826e83eSopenharmony_ci    }
5490826e83eSopenharmony_ci
5500826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetOnRequestStop(schemeHandler, onRequestStop);
5510826e83eSopenharmony_ci}
5520826e83eSopenharmony_ci
5530826e83eSopenharmony_civoid OH_ArkWeb_CreateResponse(ArkWeb_Response** response)
5540826e83eSopenharmony_ci{
5550826e83eSopenharmony_ci    if (OHOS::NWeb::NWebHelper::Instance().LoadWebEngine(true, false)) {
5560826e83eSopenharmony_ci        if (!EnsureSdkLoaded()) {
5570826e83eSopenharmony_ci            WVLOG_E("scheme_handler sdk not loaded.");
5580826e83eSopenharmony_ci        }
5590826e83eSopenharmony_ci    } else {
5600826e83eSopenharmony_ci        WVLOG_E("scheme_handler webEngineHandle is nullptr.");
5610826e83eSopenharmony_ci    }
5620826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_CreateResponse) {
5630826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_CreateResponse not found.");
5640826e83eSopenharmony_ci        return;
5650826e83eSopenharmony_ci    }
5660826e83eSopenharmony_ci
5670826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_CreateResponse(response);
5680826e83eSopenharmony_ci}
5690826e83eSopenharmony_ci
5700826e83eSopenharmony_civoid OH_ArkWeb_DestroyResponse(ArkWeb_Response* response)
5710826e83eSopenharmony_ci{
5720826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_DestroyResponse) {
5730826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_DestroyResponse not found.");
5740826e83eSopenharmony_ci        return;
5750826e83eSopenharmony_ci    }
5760826e83eSopenharmony_ci
5770826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_DestroyResponse(response);
5780826e83eSopenharmony_ci}
5790826e83eSopenharmony_ci
5800826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetUrl(ArkWeb_Response* response, const char* url)
5810826e83eSopenharmony_ci{
5820826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetUrl) {
5830826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetUrl not found.");
5840826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
5850826e83eSopenharmony_ci    }
5860826e83eSopenharmony_ci
5870826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetUrl(response, url);
5880826e83eSopenharmony_ci}
5890826e83eSopenharmony_ci
5900826e83eSopenharmony_civoid OH_ArkWebResponse_GetUrl(const ArkWeb_Response* response, char** url)
5910826e83eSopenharmony_ci{
5920826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetUrl) {
5930826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetUrl not found.");
5940826e83eSopenharmony_ci        return;
5950826e83eSopenharmony_ci    }
5960826e83eSopenharmony_ci
5970826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetUrl(response, url);
5980826e83eSopenharmony_ci}
5990826e83eSopenharmony_ci
6000826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetError(ArkWeb_Response* response, ArkWeb_NetError errorCode)
6010826e83eSopenharmony_ci{
6020826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetError) {
6030826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetError not found.");
6040826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
6050826e83eSopenharmony_ci    }
6060826e83eSopenharmony_ci
6070826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetError(response, errorCode);
6080826e83eSopenharmony_ci}
6090826e83eSopenharmony_ci
6100826e83eSopenharmony_ciArkWeb_NetError OH_ArkWebResponse_GetError(const ArkWeb_Response* response)
6110826e83eSopenharmony_ci{
6120826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetError) {
6130826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetError not found.");
6140826e83eSopenharmony_ci        return ARKWEB_ERR_FAILED;
6150826e83eSopenharmony_ci    }
6160826e83eSopenharmony_ci
6170826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetError(response);
6180826e83eSopenharmony_ci}
6190826e83eSopenharmony_ci
6200826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetStatus(ArkWeb_Response* response, int status)
6210826e83eSopenharmony_ci{
6220826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatus) {
6230826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetStatus not found.");
6240826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
6250826e83eSopenharmony_ci    }
6260826e83eSopenharmony_ci
6270826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatus(response, status);
6280826e83eSopenharmony_ci}
6290826e83eSopenharmony_ci
6300826e83eSopenharmony_ciint OH_ArkWebResponse_GetStatus(const ArkWeb_Response* response)
6310826e83eSopenharmony_ci{
6320826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatus) {
6330826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetStatus not found.");
6340826e83eSopenharmony_ci        return -1;
6350826e83eSopenharmony_ci    }
6360826e83eSopenharmony_ci
6370826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatus(response);
6380826e83eSopenharmony_ci}
6390826e83eSopenharmony_ci
6400826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetStatusText(ArkWeb_Response* response, const char* statusText)
6410826e83eSopenharmony_ci{
6420826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatusText) {
6430826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetStatusText not found.");
6440826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
6450826e83eSopenharmony_ci    }
6460826e83eSopenharmony_ci
6470826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetStatusText(response, statusText);
6480826e83eSopenharmony_ci}
6490826e83eSopenharmony_ci
6500826e83eSopenharmony_civoid OH_ArkWebResponse_GetStatusText(const ArkWeb_Response* response, char** statusText)
6510826e83eSopenharmony_ci{
6520826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatusText) {
6530826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetStatusText not found.");
6540826e83eSopenharmony_ci        return;
6550826e83eSopenharmony_ci    }
6560826e83eSopenharmony_ci
6570826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetStatusText(response, statusText);
6580826e83eSopenharmony_ci}
6590826e83eSopenharmony_ci
6600826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetMimeType(ArkWeb_Response* response, const char* mimeType)
6610826e83eSopenharmony_ci{
6620826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetMimeType) {
6630826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetMimeType not found.");
6640826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
6650826e83eSopenharmony_ci    }
6660826e83eSopenharmony_ci
6670826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetMimeType(response, mimeType);
6680826e83eSopenharmony_ci}
6690826e83eSopenharmony_ci
6700826e83eSopenharmony_civoid OH_ArkWebResponse_GetMimeType(const ArkWeb_Response* response, char** mimeType)
6710826e83eSopenharmony_ci{
6720826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetMimeType) {
6730826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetMimeType not found.");
6740826e83eSopenharmony_ci        return;
6750826e83eSopenharmony_ci    }
6760826e83eSopenharmony_ci
6770826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetMimeType(response, mimeType);
6780826e83eSopenharmony_ci}
6790826e83eSopenharmony_ci
6800826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetCharset(ArkWeb_Response* response, const char* charset)
6810826e83eSopenharmony_ci{
6820826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetCharset) {
6830826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetCharset not found.");
6840826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
6850826e83eSopenharmony_ci    }
6860826e83eSopenharmony_ci
6870826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetCharset(response, charset);
6880826e83eSopenharmony_ci}
6890826e83eSopenharmony_ci
6900826e83eSopenharmony_civoid OH_ArkWebResponse_GetCharset(const ArkWeb_Response* response, char** charset)
6910826e83eSopenharmony_ci{
6920826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetCharset) {
6930826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetCharset not found.");
6940826e83eSopenharmony_ci        return;
6950826e83eSopenharmony_ci    }
6960826e83eSopenharmony_ci
6970826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetCharset(response, charset);
6980826e83eSopenharmony_ci}
6990826e83eSopenharmony_ci
7000826e83eSopenharmony_ciint32_t OH_ArkWebResponse_SetHeaderByName(
7010826e83eSopenharmony_ci    ArkWeb_Response* response, const char* name, const char* value, bool overwrite)
7020826e83eSopenharmony_ci{
7030826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetHeaderByName) {
7040826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_SetHeaderByName not found.");
7050826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
7060826e83eSopenharmony_ci    }
7070826e83eSopenharmony_ci
7080826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_SetHeaderByName(response, name, value, overwrite);
7090826e83eSopenharmony_ci}
7100826e83eSopenharmony_ci
7110826e83eSopenharmony_civoid OH_ArkWebResponse_GetHeaderByName(const ArkWeb_Response* response, const char* name, char** value)
7120826e83eSopenharmony_ci{
7130826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetHeaderByName) {
7140826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResponse_GetHeaderByName not found.");
7150826e83eSopenharmony_ci        return;
7160826e83eSopenharmony_ci    }
7170826e83eSopenharmony_ci
7180826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResponse_GetHeaderByName(response, name, value);
7190826e83eSopenharmony_ci}
7200826e83eSopenharmony_ci
7210826e83eSopenharmony_ciint32_t OH_ArkWebResourceHandler_Destroy(const ArkWeb_ResourceHandler* resourceHandler)
7220826e83eSopenharmony_ci{
7230826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_Destroy) {
7240826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceHandler_Destroy not found.");
7250826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
7260826e83eSopenharmony_ci    }
7270826e83eSopenharmony_ci
7280826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_Destroy(resourceHandler);
7290826e83eSopenharmony_ci}
7300826e83eSopenharmony_ci
7310826e83eSopenharmony_ciint32_t OH_ArkWebResourceHandler_DidReceiveResponse(
7320826e83eSopenharmony_ci    const ArkWeb_ResourceHandler* resourceHandler, const ArkWeb_Response* response)
7330826e83eSopenharmony_ci{
7340826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveResponse) {
7350826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceHandler_DidReceiveResponse not found.");
7360826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
7370826e83eSopenharmony_ci    }
7380826e83eSopenharmony_ci
7390826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveResponse(resourceHandler, response);
7400826e83eSopenharmony_ci}
7410826e83eSopenharmony_ci
7420826e83eSopenharmony_ciint32_t OH_ArkWebResourceHandler_DidReceiveData(
7430826e83eSopenharmony_ci    const ArkWeb_ResourceHandler* resourceHandler, const uint8_t* buffer, int64_t bufLen)
7440826e83eSopenharmony_ci{
7450826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveData) {
7460826e83eSopenharmony_ci        WVLOG_E("OH_ArkWebResourceHandler_DidReceiveData not found.");
7470826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
7480826e83eSopenharmony_ci    }
7490826e83eSopenharmony_ci
7500826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidReceiveData(resourceHandler, buffer, bufLen);
7510826e83eSopenharmony_ci}
7520826e83eSopenharmony_ci
7530826e83eSopenharmony_ciint32_t OH_ArkWebResourceHandler_DidFinish(const ArkWeb_ResourceHandler* resourceHandler)
7540826e83eSopenharmony_ci{
7550826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFinish) {
7560826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_ResourceHandler_DidFinish not found.");
7570826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
7580826e83eSopenharmony_ci    }
7590826e83eSopenharmony_ci
7600826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFinish(resourceHandler);
7610826e83eSopenharmony_ci}
7620826e83eSopenharmony_ci
7630826e83eSopenharmony_ciint32_t OH_ArkWebResourceHandler_DidFailWithError(
7640826e83eSopenharmony_ci    const ArkWeb_ResourceHandler* resourceHandler, ArkWeb_NetError errorCode)
7650826e83eSopenharmony_ci{
7660826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFailWithError) {
7670826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_ResourceHandler_DidFailWithError not found.");
7680826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
7690826e83eSopenharmony_ci    }
7700826e83eSopenharmony_ci
7710826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebResourceHandler_DidFailWithError(resourceHandler, errorCode);
7720826e83eSopenharmony_ci}
7730826e83eSopenharmony_ci
7740826e83eSopenharmony_civoid OH_ArkWeb_ReleaseString(char* string)
7750826e83eSopenharmony_ci{
7760826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseString) {
7770826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_ReleaseString not found.");
7780826e83eSopenharmony_ci        return;
7790826e83eSopenharmony_ci    }
7800826e83eSopenharmony_ci
7810826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseString(string);
7820826e83eSopenharmony_ci}
7830826e83eSopenharmony_ci
7840826e83eSopenharmony_civoid OH_ArkWeb_ReleaseByteArray(uint8_t* byteArray)
7850826e83eSopenharmony_ci{
7860826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseByteArray) {
7870826e83eSopenharmony_ci        WVLOG_E("OH_ArkWeb_ReleaseByteArray not found.");
7880826e83eSopenharmony_ci        return;
7890826e83eSopenharmony_ci    }
7900826e83eSopenharmony_ci
7910826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWeb_ReleaseByteArray(byteArray);
7920826e83eSopenharmony_ci}
7930826e83eSopenharmony_ci
7940826e83eSopenharmony_ciint32_t OH_ArkWebSchemeHandler_SetFromEts(
7950826e83eSopenharmony_ci    ArkWeb_SchemeHandler* schemeHandler, bool fromEts)
7960826e83eSopenharmony_ci{
7970826e83eSopenharmony_ci    if (!g_SchemeHandlerApi || !g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetFromEts) {
7980826e83eSopenharmony_ci        WVLOG_E("impl_OH_ArkWebSchemeHandler_SetFromEts not found.");
7990826e83eSopenharmony_ci        return ARKWEB_ERROR_UNKNOWN;
8000826e83eSopenharmony_ci    }
8010826e83eSopenharmony_ci
8020826e83eSopenharmony_ci    return g_SchemeHandlerApi->impl_OH_ArkWebSchemeHandler_SetFromEts(schemeHandler, fromEts);
8030826e83eSopenharmony_ci}
804