10826e83eSopenharmony_ci/*
20826e83eSopenharmony_ci * Copyright (c) 2022 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#ifndef NWEB_NAPI_WEBVIEW_CONTROLLER_H
170826e83eSopenharmony_ci#define NWEB_NAPI_WEBVIEW_CONTROLLER_H
180826e83eSopenharmony_ci
190826e83eSopenharmony_ci#include <atomic>
200826e83eSopenharmony_ci#include <condition_variable>
210826e83eSopenharmony_ci#include <mutex>
220826e83eSopenharmony_ci
230826e83eSopenharmony_ci#include "napi/native_api.h"
240826e83eSopenharmony_ci#include "napi/native_common.h"
250826e83eSopenharmony_ci#include "napi/native_node_api.h"
260826e83eSopenharmony_ci#include "uv.h"
270826e83eSopenharmony_ci#include "webview_controller.h"
280826e83eSopenharmony_ci
290826e83eSopenharmony_cinamespace OHOS {
300826e83eSopenharmony_cinamespace NWeb {
310826e83eSopenharmony_ciconst std::string WEBVIEW_CONTROLLER_CLASS_NAME = "WebviewController";
320826e83eSopenharmony_ciconst std::string WEB_MESSAGE_PORT_CLASS_NAME = "WebMessagePort";
330826e83eSopenharmony_ciconst std::string WEB_PORT_MSG_ENUM_NAME = "WebMessageType";
340826e83eSopenharmony_ciconst std::string WEB_EXT_MSG_CLASS_NAME = "WebMessageExt";
350826e83eSopenharmony_ciconst std::string WEB_HITTESTTYPE_V9_ENUM_NAME = "HitTestTypeV9";
360826e83eSopenharmony_ciconst std::string WEB_HITTESTTYPE_ENUM_NAME = "WebHitTestType";
370826e83eSopenharmony_ciconst std::string WEB_HISTORY_LIST_CLASS_NAME = "WebHistoryList";
380826e83eSopenharmony_ciconst std::string WEB_SECURE_DNS_MODE_ENUM_NAME = "SecureDnsMode";
390826e83eSopenharmony_ciconst std::string WEB_PRINT_DOCUMENT_CLASS_NAME = "WebPrintDocument";
400826e83eSopenharmony_ciconst std::string WEB_SECURITY_LEVEL_ENUM_NAME = "WebSecurityLevel";
410826e83eSopenharmony_ciconst std::string WEB_RENDER_PROCESS_MODE_ENUM_NAME = "RenderProcessMode";
420826e83eSopenharmony_ciconst std::string OFFLINE_RESOURCE_TYPE_ENUM_NAME = "OfflineResourceType";
430826e83eSopenharmony_ciconst std::string WEB_PRESSURE_LEVEL_ENUM_NAME = "PressureLevel";
440826e83eSopenharmony_ciconst std::string WEB_SCROLL_TYPE_ENUM_NAME = "ScrollType";
450826e83eSopenharmony_ciconstexpr double TEN_MILLIMETER_TO_INCH = 0.39;
460826e83eSopenharmony_ci
470826e83eSopenharmony_cistruct Scheme {
480826e83eSopenharmony_ci    std::string name;
490826e83eSopenharmony_ci    bool isSupportCORS;
500826e83eSopenharmony_ci    bool isSupportFetch;
510826e83eSopenharmony_ci    bool isStandard;
520826e83eSopenharmony_ci    bool isLocal;
530826e83eSopenharmony_ci    bool isDisplayIsolated;
540826e83eSopenharmony_ci    bool isSecure;
550826e83eSopenharmony_ci    bool isCspBypassing;
560826e83eSopenharmony_ci    bool isCodeCacheSupported;
570826e83eSopenharmony_ci    int32_t option = 0;
580826e83eSopenharmony_ci};
590826e83eSopenharmony_ci
600826e83eSopenharmony_cistruct OfflineResourceValue {
610826e83eSopenharmony_ci    napi_value urlList;
620826e83eSopenharmony_ci    napi_value resource;
630826e83eSopenharmony_ci    napi_value responseHeaders;
640826e83eSopenharmony_ci    napi_value type;
650826e83eSopenharmony_ci};
660826e83eSopenharmony_ci
670826e83eSopenharmony_cistruct PDFMarginConfig {
680826e83eSopenharmony_ci    double top = TEN_MILLIMETER_TO_INCH;
690826e83eSopenharmony_ci    double bottom = TEN_MILLIMETER_TO_INCH;
700826e83eSopenharmony_ci    double right = TEN_MILLIMETER_TO_INCH;
710826e83eSopenharmony_ci    double left = TEN_MILLIMETER_TO_INCH;
720826e83eSopenharmony_ci};
730826e83eSopenharmony_ci
740826e83eSopenharmony_ciclass NapiWebviewController {
750826e83eSopenharmony_cipublic:
760826e83eSopenharmony_ci    NapiWebviewController() {}
770826e83eSopenharmony_ci    ~NapiWebviewController() = default;
780826e83eSopenharmony_ci
790826e83eSopenharmony_ci    static napi_value Init(napi_env env, napi_value exports);
800826e83eSopenharmony_ci
810826e83eSopenharmony_ciprivate:
820826e83eSopenharmony_ci    static napi_value JsConstructor(napi_env env, napi_callback_info info);
830826e83eSopenharmony_ci
840826e83eSopenharmony_ci    static napi_value InitializeWebEngine(napi_env env, napi_callback_info info);
850826e83eSopenharmony_ci
860826e83eSopenharmony_ci    static napi_value SetHttpDns(napi_env env, napi_callback_info info);
870826e83eSopenharmony_ci
880826e83eSopenharmony_ci    static napi_value SetWebDebuggingAccess(napi_env env, napi_callback_info info);
890826e83eSopenharmony_ci
900826e83eSopenharmony_ci    static napi_value EnableSafeBrowsing(napi_env env, napi_callback_info info);
910826e83eSopenharmony_ci
920826e83eSopenharmony_ci    static napi_value IsSafeBrowsingEnabled(napi_env env, napi_callback_info info);
930826e83eSopenharmony_ci
940826e83eSopenharmony_ci    static napi_value InnerGetWebDebuggingAccess(napi_env env, napi_callback_info info);
950826e83eSopenharmony_ci
960826e83eSopenharmony_ci    static napi_value SetWebId(napi_env env, napi_callback_info info);
970826e83eSopenharmony_ci
980826e83eSopenharmony_ci    static napi_value InnerJsProxy(napi_env env, napi_callback_info info);
990826e83eSopenharmony_ci
1000826e83eSopenharmony_ci    static napi_value InnerGetCustomeSchemeCmdLine(napi_env env, napi_callback_info info);
1010826e83eSopenharmony_ci
1020826e83eSopenharmony_ci    static napi_value AccessForward(napi_env env, napi_callback_info info);
1030826e83eSopenharmony_ci
1040826e83eSopenharmony_ci    static napi_value AccessBackward(napi_env env, napi_callback_info info);
1050826e83eSopenharmony_ci
1060826e83eSopenharmony_ci    static napi_value Forward(napi_env env, napi_callback_info info);
1070826e83eSopenharmony_ci
1080826e83eSopenharmony_ci    static napi_value Backward(napi_env env, napi_callback_info info);
1090826e83eSopenharmony_ci
1100826e83eSopenharmony_ci    static napi_value AccessStep(napi_env env, napi_callback_info info);
1110826e83eSopenharmony_ci
1120826e83eSopenharmony_ci    static napi_value ClearHistory(napi_env env, napi_callback_info info);
1130826e83eSopenharmony_ci
1140826e83eSopenharmony_ci    static napi_value OnActive(napi_env env, napi_callback_info info);
1150826e83eSopenharmony_ci
1160826e83eSopenharmony_ci    static napi_value OnInactive(napi_env env, napi_callback_info info);
1170826e83eSopenharmony_ci
1180826e83eSopenharmony_ci    static napi_value Refresh(napi_env env, napi_callback_info info);
1190826e83eSopenharmony_ci
1200826e83eSopenharmony_ci    static napi_value ZoomIn(napi_env env, napi_callback_info info);
1210826e83eSopenharmony_ci
1220826e83eSopenharmony_ci    static napi_value ZoomOut(napi_env env, napi_callback_info info);
1230826e83eSopenharmony_ci
1240826e83eSopenharmony_ci    static napi_value GetWebId(napi_env env, napi_callback_info info);
1250826e83eSopenharmony_ci
1260826e83eSopenharmony_ci    static napi_value GetUserAgent(napi_env env, napi_callback_info info);
1270826e83eSopenharmony_ci
1280826e83eSopenharmony_ci    static napi_value GetCustomUserAgent(napi_env env, napi_callback_info info);
1290826e83eSopenharmony_ci
1300826e83eSopenharmony_ci    static napi_value SetCustomUserAgent(napi_env env, napi_callback_info info);
1310826e83eSopenharmony_ci
1320826e83eSopenharmony_ci    static napi_value GetTitle(napi_env env, napi_callback_info info);
1330826e83eSopenharmony_ci
1340826e83eSopenharmony_ci    static napi_value GetPageHeight(napi_env env, napi_callback_info info);
1350826e83eSopenharmony_ci
1360826e83eSopenharmony_ci    static napi_value BackOrForward(napi_env env, napi_callback_info info);
1370826e83eSopenharmony_ci
1380826e83eSopenharmony_ci    static napi_value StoreWebArchive(napi_env env, napi_callback_info info);
1390826e83eSopenharmony_ci
1400826e83eSopenharmony_ci    static napi_value StoreWebArchiveInternal(napi_env env, napi_callback_info info,
1410826e83eSopenharmony_ci        const std::string &baseName, bool autoName);
1420826e83eSopenharmony_ci
1430826e83eSopenharmony_ci    static napi_value CreateWebMessagePorts(napi_env env, napi_callback_info info);
1440826e83eSopenharmony_ci
1450826e83eSopenharmony_ci    static napi_value PostMessage(napi_env env, napi_callback_info info);
1460826e83eSopenharmony_ci
1470826e83eSopenharmony_ci    static napi_value GetHitTestValue(napi_env env, napi_callback_info info);
1480826e83eSopenharmony_ci
1490826e83eSopenharmony_ci    static napi_value RequestFocus(napi_env env, napi_callback_info info);
1500826e83eSopenharmony_ci
1510826e83eSopenharmony_ci    static napi_value LoadUrl(napi_env env, napi_callback_info info);
1520826e83eSopenharmony_ci
1530826e83eSopenharmony_ci    static napi_value LoadUrlWithHttpHeaders(napi_env env, napi_callback_info info, const std::string& url,
1540826e83eSopenharmony_ci        const napi_value* argv, WebviewController* webviewController);
1550826e83eSopenharmony_ci
1560826e83eSopenharmony_ci    static napi_value LoadData(napi_env env, napi_callback_info info);
1570826e83eSopenharmony_ci
1580826e83eSopenharmony_ci    static napi_value GetHitTest(napi_env env, napi_callback_info info);
1590826e83eSopenharmony_ci
1600826e83eSopenharmony_ci    static napi_value ClearMatches(napi_env env, napi_callback_info info);
1610826e83eSopenharmony_ci
1620826e83eSopenharmony_ci    static napi_value SearchNext(napi_env env, napi_callback_info info);
1630826e83eSopenharmony_ci
1640826e83eSopenharmony_ci    static napi_value SearchAllAsync(napi_env env, napi_callback_info info);
1650826e83eSopenharmony_ci
1660826e83eSopenharmony_ci    static napi_value ClearSslCache(napi_env env, napi_callback_info info);
1670826e83eSopenharmony_ci
1680826e83eSopenharmony_ci    static napi_value ClearClientAuthenticationCache(napi_env env, napi_callback_info info);
1690826e83eSopenharmony_ci
1700826e83eSopenharmony_ci    static napi_value Stop(napi_env env, napi_callback_info info);
1710826e83eSopenharmony_ci
1720826e83eSopenharmony_ci    static napi_value Zoom(napi_env env, napi_callback_info info);
1730826e83eSopenharmony_ci
1740826e83eSopenharmony_ci    static napi_value InnerCompleteWindowNew(napi_env env, napi_callback_info info);
1750826e83eSopenharmony_ci
1760826e83eSopenharmony_ci    static napi_value RegisterJavaScriptProxy(napi_env env, napi_callback_info info);
1770826e83eSopenharmony_ci
1780826e83eSopenharmony_ci    static napi_value DeleteJavaScriptRegister(napi_env env, napi_callback_info info);
1790826e83eSopenharmony_ci
1800826e83eSopenharmony_ci    static napi_value RunJavaScript(napi_env env, napi_callback_info info);
1810826e83eSopenharmony_ci
1820826e83eSopenharmony_ci    static napi_value RunJavaScriptExt(napi_env env, napi_callback_info info);
1830826e83eSopenharmony_ci
1840826e83eSopenharmony_ci    static napi_value RunJS(napi_env env, napi_callback_info info, bool extention);
1850826e83eSopenharmony_ci
1860826e83eSopenharmony_ci    static napi_value RunJavaScriptInternal(napi_env env, napi_callback_info info,
1870826e83eSopenharmony_ci        const std::string &script, bool extention);
1880826e83eSopenharmony_ci
1890826e83eSopenharmony_ci    static ErrCode ConstructFlowbuf(napi_env env, napi_value argv, int& fd, size_t& scriptLength);
1900826e83eSopenharmony_ci
1910826e83eSopenharmony_ci    static napi_value RunJSBackToOriginal(napi_env env, napi_callback_info info,
1920826e83eSopenharmony_ci        bool extention, napi_value argv, napi_value result);
1930826e83eSopenharmony_ci
1940826e83eSopenharmony_ci    static napi_value RunJavaScriptInternalExt(napi_env env, napi_callback_info info, bool extention);
1950826e83eSopenharmony_ci
1960826e83eSopenharmony_ci    static napi_value RunCreatePDFExt(napi_env env, napi_callback_info info);
1970826e83eSopenharmony_ci
1980826e83eSopenharmony_ci    static napi_value TerminateRenderProcess(napi_env env, napi_callback_info info);
1990826e83eSopenharmony_ci
2000826e83eSopenharmony_ci    static napi_value GetUrl(napi_env env, napi_callback_info info);
2010826e83eSopenharmony_ci
2020826e83eSopenharmony_ci    static napi_value GetOriginalUrl(napi_env env, napi_callback_info info);
2030826e83eSopenharmony_ci
2040826e83eSopenharmony_ci    static napi_value SetNetworkAvailable(napi_env env, napi_callback_info info);
2050826e83eSopenharmony_ci
2060826e83eSopenharmony_ci    static napi_value InnerGetWebId(napi_env env, napi_callback_info info);
2070826e83eSopenharmony_ci
2080826e83eSopenharmony_ci    static napi_value HasImage(napi_env env, napi_callback_info info);
2090826e83eSopenharmony_ci
2100826e83eSopenharmony_ci    static napi_value HasImageInternal(napi_env env, napi_callback_info info);
2110826e83eSopenharmony_ci
2120826e83eSopenharmony_ci    static napi_value RemoveCache(napi_env env, napi_callback_info info);
2130826e83eSopenharmony_ci
2140826e83eSopenharmony_ci    static napi_value getBackForwardEntries(napi_env env, napi_callback_info info);
2150826e83eSopenharmony_ci
2160826e83eSopenharmony_ci    static napi_value GetFavicon(napi_env env, napi_callback_info info);
2170826e83eSopenharmony_ci
2180826e83eSopenharmony_ci    static napi_value SerializeWebState(napi_env env, napi_callback_info info);
2190826e83eSopenharmony_ci
2200826e83eSopenharmony_ci    static napi_value RestoreWebState(napi_env env, napi_callback_info info);
2210826e83eSopenharmony_ci
2220826e83eSopenharmony_ci    static napi_value ScrollPageDown(napi_env env, napi_callback_info info);
2230826e83eSopenharmony_ci
2240826e83eSopenharmony_ci    static napi_value ScrollPageUp(napi_env env, napi_callback_info info);
2250826e83eSopenharmony_ci
2260826e83eSopenharmony_ci    static napi_value ScrollTo(napi_env env, napi_callback_info info);
2270826e83eSopenharmony_ci
2280826e83eSopenharmony_ci    static napi_value ScrollBy(napi_env env, napi_callback_info info);
2290826e83eSopenharmony_ci
2300826e83eSopenharmony_ci    static napi_value SlideScroll(napi_env env, napi_callback_info info);
2310826e83eSopenharmony_ci
2320826e83eSopenharmony_ci    static napi_value SetScrollable(napi_env env, napi_callback_info info);
2330826e83eSopenharmony_ci
2340826e83eSopenharmony_ci    static napi_value GetScrollable(napi_env env, napi_callback_info info);
2350826e83eSopenharmony_ci
2360826e83eSopenharmony_ci    static napi_value CustomizeSchemes(napi_env env, napi_callback_info info);
2370826e83eSopenharmony_ci
2380826e83eSopenharmony_ci    static napi_value InnerSetHapPath(napi_env env, napi_callback_info info);
2390826e83eSopenharmony_ci
2400826e83eSopenharmony_ci    static napi_value InnerGetCertificate(napi_env env, napi_callback_info info);
2410826e83eSopenharmony_ci
2420826e83eSopenharmony_ci    static napi_value SetAudioMuted(napi_env env, napi_callback_info info);
2430826e83eSopenharmony_ci
2440826e83eSopenharmony_ci    static napi_value InnerGetThisVar(napi_env env, napi_callback_info info);
2450826e83eSopenharmony_ci
2460826e83eSopenharmony_ci    static napi_value PrefetchPage(napi_env env, napi_callback_info info);
2470826e83eSopenharmony_ci
2480826e83eSopenharmony_ci    static napi_value PrefetchPageWithHttpHeaders(napi_env env, napi_callback_info info, std::string& url,
2490826e83eSopenharmony_ci        const napi_value* argv, WebviewController* webviewController);
2500826e83eSopenharmony_ci
2510826e83eSopenharmony_ci    static napi_value PrepareForPageLoad(napi_env env, napi_callback_info info);
2520826e83eSopenharmony_ci
2530826e83eSopenharmony_ci    static napi_value CreateWebPrintDocumentAdapter(napi_env env, napi_callback_info info);
2540826e83eSopenharmony_ci
2550826e83eSopenharmony_ci    static napi_value PostUrl(napi_env env, napi_callback_info info);
2560826e83eSopenharmony_ci
2570826e83eSopenharmony_ci    static napi_value SetDownloadDelegate(napi_env env, napi_callback_info info);
2580826e83eSopenharmony_ci
2590826e83eSopenharmony_ci    static napi_value StartDownload(napi_env env, napi_callback_info info);
2600826e83eSopenharmony_ci
2610826e83eSopenharmony_ci    static napi_value SetConnectionTimeout(napi_env env, napi_callback_info info);
2620826e83eSopenharmony_ci
2630826e83eSopenharmony_ci    static napi_value GetSecurityLevel(napi_env env, napi_callback_info info);
2640826e83eSopenharmony_ci
2650826e83eSopenharmony_ci    static napi_value IsIncognitoMode(napi_env env, napi_callback_info info);
2660826e83eSopenharmony_ci
2670826e83eSopenharmony_ci    static napi_value SetPrintBackground(napi_env env, napi_callback_info info);
2680826e83eSopenharmony_ci
2690826e83eSopenharmony_ci    static napi_value GetPrintBackground(napi_env env, napi_callback_info info);
2700826e83eSopenharmony_ci
2710826e83eSopenharmony_ci    static napi_value SetWebSchemeHandler(napi_env env, napi_callback_info info);
2720826e83eSopenharmony_ci
2730826e83eSopenharmony_ci    static napi_value ClearWebSchemeHandler(napi_env env, napi_callback_info info);
2740826e83eSopenharmony_ci
2750826e83eSopenharmony_ci    static napi_value SetServiceWorkerWebSchemeHandler(
2760826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2770826e83eSopenharmony_ci
2780826e83eSopenharmony_ci    static napi_value ClearServiceWorkerWebSchemeHandler(
2790826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2800826e83eSopenharmony_ci
2810826e83eSopenharmony_ci    static napi_value EnableIntelligentTrackingPrevention(
2820826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2830826e83eSopenharmony_ci
2840826e83eSopenharmony_ci    static napi_value IsIntelligentTrackingPreventionEnabled(
2850826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2860826e83eSopenharmony_ci
2870826e83eSopenharmony_ci    static napi_value AddIntelligentTrackingPreventionBypassingList(
2880826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2890826e83eSopenharmony_ci
2900826e83eSopenharmony_ci    static napi_value RemoveIntelligentTrackingPreventionBypassingList(
2910826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2920826e83eSopenharmony_ci
2930826e83eSopenharmony_ci    static napi_value ClearIntelligentTrackingPreventionBypassingList(
2940826e83eSopenharmony_ci        napi_env env, napi_callback_info info);
2950826e83eSopenharmony_ci
2960826e83eSopenharmony_ci    static napi_value GetDefaultUserAgent(napi_env env, napi_callback_info info);
2970826e83eSopenharmony_ci
2980826e83eSopenharmony_ci    static napi_value GetLastJavascriptProxyCallingFrameUrl(napi_env env, napi_callback_info info);
2990826e83eSopenharmony_ci
3000826e83eSopenharmony_ci    static napi_value PauseAllTimers(napi_env env, napi_callback_info info);
3010826e83eSopenharmony_ci
3020826e83eSopenharmony_ci    static napi_value ResumeAllTimers(napi_env env, napi_callback_info info);
3030826e83eSopenharmony_ci
3040826e83eSopenharmony_ci    static napi_value StartCamera(napi_env env, napi_callback_info info);
3050826e83eSopenharmony_ci
3060826e83eSopenharmony_ci    static napi_value StopCamera(napi_env env, napi_callback_info info);
3070826e83eSopenharmony_ci
3080826e83eSopenharmony_ci    static napi_value CloseCamera(napi_env env, napi_callback_info info);
3090826e83eSopenharmony_ci
3100826e83eSopenharmony_ci    static napi_value CloseAllMediaPresentations(napi_env env, napi_callback_info info);
3110826e83eSopenharmony_ci
3120826e83eSopenharmony_ci    static napi_value StopAllMedia(napi_env env, napi_callback_info info);
3130826e83eSopenharmony_ci
3140826e83eSopenharmony_ci    static napi_value ResumeAllMedia(napi_env env, napi_callback_info info);
3150826e83eSopenharmony_ci
3160826e83eSopenharmony_ci    static napi_value PauseAllMedia(napi_env env, napi_callback_info info);
3170826e83eSopenharmony_ci
3180826e83eSopenharmony_ci    static napi_value GetMediaPlaybackState(napi_env env, napi_callback_info info);
3190826e83eSopenharmony_ci
3200826e83eSopenharmony_ci    static napi_value PrefetchResource(napi_env env, napi_callback_info info);
3210826e83eSopenharmony_ci
3220826e83eSopenharmony_ci    static napi_value ClearPrefetchedResource(napi_env env, napi_callback_info info);
3230826e83eSopenharmony_ci
3240826e83eSopenharmony_ci    static napi_value OnCreateNativeMediaPlayer(napi_env env, napi_callback_info info);
3250826e83eSopenharmony_ci
3260826e83eSopenharmony_ci    static napi_value SetRenderProcessMode(napi_env env, napi_callback_info info);
3270826e83eSopenharmony_ci
3280826e83eSopenharmony_ci    static napi_value GetRenderProcessMode(napi_env env, napi_callback_info info);
3290826e83eSopenharmony_ci
3300826e83eSopenharmony_ci    static napi_value PrecompileJavaScript(napi_env env, napi_callback_info info);
3310826e83eSopenharmony_ci
3320826e83eSopenharmony_ci    static napi_value InjectOfflineResources(napi_env env, napi_callback_info info);
3330826e83eSopenharmony_ci
3340826e83eSopenharmony_ci    static void AddResourcesToMemoryCache(napi_env env,
3350826e83eSopenharmony_ci                                          napi_callback_info info,
3360826e83eSopenharmony_ci                                          napi_value& resourcesList);
3370826e83eSopenharmony_ci
3380826e83eSopenharmony_ci    static void AddResourceItemToMemoryCache(napi_env env,
3390826e83eSopenharmony_ci                                             napi_callback_info info,
3400826e83eSopenharmony_ci                                             OfflineResourceValue resourceValue);
3410826e83eSopenharmony_ci
3420826e83eSopenharmony_ci    static napi_value SetHostIP(napi_env env, napi_callback_info info);
3430826e83eSopenharmony_ci
3440826e83eSopenharmony_ci    static napi_value ClearHostIP(napi_env env, napi_callback_info info);
3450826e83eSopenharmony_ci
3460826e83eSopenharmony_ci    static napi_value WarmupServiceWorker(napi_env env, napi_callback_info info);
3470826e83eSopenharmony_ci
3480826e83eSopenharmony_ci    static napi_value GetSurfaceId(napi_env env, napi_callback_info info);
3490826e83eSopenharmony_ci
3500826e83eSopenharmony_ci    static napi_value EnableWholeWebPageDrawing(napi_env env, napi_callback_info info);
3510826e83eSopenharmony_ci
3520826e83eSopenharmony_ci    static napi_value EnableAdsBlock(napi_env env, napi_callback_info info);
3530826e83eSopenharmony_ci
3540826e83eSopenharmony_ci    static napi_value IsAdsBlockEnabled(napi_env env, napi_callback_info info);
3550826e83eSopenharmony_ci
3560826e83eSopenharmony_ci    static napi_value IsAdsBlockEnabledForCurPage(napi_env env, napi_callback_info info);
3570826e83eSopenharmony_ci
3580826e83eSopenharmony_ci    static napi_value WebPageSnapshot(napi_env env, napi_callback_info info);
3590826e83eSopenharmony_ci
3600826e83eSopenharmony_ci    static napi_value SetUrlTrustList(napi_env env, napi_callback_info info);
3610826e83eSopenharmony_ci
3620826e83eSopenharmony_ci    static napi_value UpdateInstanceId(napi_env env, napi_callback_info info);
3630826e83eSopenharmony_ci
3640826e83eSopenharmony_ci    static napi_value SetPathAllowingUniversalAccess(napi_env env, napi_callback_info info);
3650826e83eSopenharmony_ci
3660826e83eSopenharmony_ci    static napi_value EnableBackForwardCache(napi_env env, napi_callback_info info);
3670826e83eSopenharmony_ci
3680826e83eSopenharmony_ci    static napi_value SetBackForwardCacheOptions(napi_env env, napi_callback_info info);
3690826e83eSopenharmony_ci
3700826e83eSopenharmony_ci    static napi_value ScrollByWithResult(napi_env env, napi_callback_info info);
3710826e83eSopenharmony_ci
3720826e83eSopenharmony_ci    static napi_value TrimMemoryByPressureLevel(napi_env env, napi_callback_info info);
3730826e83eSopenharmony_ci
3740826e83eSopenharmony_ci    static napi_value GetScrollOffset(napi_env env, napi_callback_info info);
3750826e83eSopenharmony_ci    static int32_t maxFdNum_;
3760826e83eSopenharmony_ci    static std::atomic<int32_t> usedFd_;
3770826e83eSopenharmony_ci};
3780826e83eSopenharmony_ci
3790826e83eSopenharmony_ciclass NWebValueCallbackImpl : public NWebMessageValueCallback {
3800826e83eSopenharmony_cipublic:
3810826e83eSopenharmony_ci    NWebValueCallbackImpl(napi_env env, napi_ref callback, bool extention)
3820826e83eSopenharmony_ci        : env_(env), callback_(callback), extention_(extention)
3830826e83eSopenharmony_ci    {}
3840826e83eSopenharmony_ci    ~NWebValueCallbackImpl();
3850826e83eSopenharmony_ci    void OnReceiveValue(std::shared_ptr<NWebMessage> result) override;
3860826e83eSopenharmony_ci
3870826e83eSopenharmony_ciprivate:
3880826e83eSopenharmony_ci    napi_env env_;
3890826e83eSopenharmony_ci    napi_ref callback_;
3900826e83eSopenharmony_ci    bool extention_;
3910826e83eSopenharmony_ci    static void UvWebMessageOnReceiveValueCallback(uv_work_t *work, int status);
3920826e83eSopenharmony_ci};
3930826e83eSopenharmony_ci
3940826e83eSopenharmony_ciclass NapiWebMessageExt {
3950826e83eSopenharmony_cipublic:
3960826e83eSopenharmony_ci    NapiWebMessageExt() = default;
3970826e83eSopenharmony_ci    ~NapiWebMessageExt() = default;
3980826e83eSopenharmony_ci
3990826e83eSopenharmony_ci    static napi_value JsConstructor(napi_env env, napi_callback_info info);
4000826e83eSopenharmony_ci    static napi_value GetType(napi_env env, napi_callback_info info);
4010826e83eSopenharmony_ci    static napi_value GetString(napi_env env, napi_callback_info info);
4020826e83eSopenharmony_ci    static napi_value GetNumber(napi_env env, napi_callback_info info);
4030826e83eSopenharmony_ci    static napi_value GetBoolean(napi_env env, napi_callback_info info);
4040826e83eSopenharmony_ci    static napi_value GetArrayBuffer(napi_env env, napi_callback_info info);
4050826e83eSopenharmony_ci    static napi_value GetArray(napi_env env, napi_callback_info info);
4060826e83eSopenharmony_ci    static napi_value GetError(napi_env env, napi_callback_info info);
4070826e83eSopenharmony_ci    static napi_value SetType(napi_env env, napi_callback_info info);
4080826e83eSopenharmony_ci    static napi_value SetString(napi_env env, napi_callback_info info);
4090826e83eSopenharmony_ci    static napi_value SetNumber(napi_env env, napi_callback_info info);
4100826e83eSopenharmony_ci    static napi_value SetBoolean(napi_env env, napi_callback_info info);
4110826e83eSopenharmony_ci    static napi_value SetArrayBuffer(napi_env env, napi_callback_info info);
4120826e83eSopenharmony_ci    static napi_value SetArray(napi_env env, napi_callback_info info);
4130826e83eSopenharmony_ci    static napi_value SetError(napi_env env, napi_callback_info info);
4140826e83eSopenharmony_ci};
4150826e83eSopenharmony_ci
4160826e83eSopenharmony_ciclass NapiWebMessagePort {
4170826e83eSopenharmony_cipublic:
4180826e83eSopenharmony_ci    NapiWebMessagePort() = default;
4190826e83eSopenharmony_ci    ~NapiWebMessagePort() = default;
4200826e83eSopenharmony_ci
4210826e83eSopenharmony_ci    struct WebMsgPortParam {
4220826e83eSopenharmony_ci        bool extention_;
4230826e83eSopenharmony_ci        napi_env env_;
4240826e83eSopenharmony_ci        napi_ref callback_;
4250826e83eSopenharmony_ci        std::shared_ptr<NWebMessage> msg_;
4260826e83eSopenharmony_ci        std::mutex mutex_;
4270826e83eSopenharmony_ci        bool ready_ = false;
4280826e83eSopenharmony_ci        std::condition_variable condition_;
4290826e83eSopenharmony_ci    };
4300826e83eSopenharmony_ci
4310826e83eSopenharmony_ci    static napi_value JsConstructor(napi_env env, napi_callback_info info);
4320826e83eSopenharmony_ci
4330826e83eSopenharmony_ci    static napi_value Close(napi_env env, napi_callback_info info);
4340826e83eSopenharmony_ci
4350826e83eSopenharmony_ci    static napi_value PostMessageEvent(napi_env env, napi_callback_info info);
4360826e83eSopenharmony_ci
4370826e83eSopenharmony_ci    static napi_value OnMessageEvent(napi_env env, napi_callback_info info);
4380826e83eSopenharmony_ci
4390826e83eSopenharmony_ci    static napi_value PostMessageEventExt(napi_env env, napi_callback_info info);
4400826e83eSopenharmony_ci
4410826e83eSopenharmony_ci    static napi_value OnMessageEventExt(napi_env env, napi_callback_info info);
4420826e83eSopenharmony_ci};
4430826e83eSopenharmony_ci
4440826e83eSopenharmony_ciclass NapiWebHistoryList {
4450826e83eSopenharmony_cipublic:
4460826e83eSopenharmony_ci    NapiWebHistoryList() = default;
4470826e83eSopenharmony_ci    ~NapiWebHistoryList() = default;
4480826e83eSopenharmony_ci
4490826e83eSopenharmony_ci    static napi_value JsConstructor(napi_env env, napi_callback_info info);
4500826e83eSopenharmony_ci
4510826e83eSopenharmony_ci    static napi_value GetItem(napi_env env, napi_callback_info info);
4520826e83eSopenharmony_ci
4530826e83eSopenharmony_ciprivate:
4540826e83eSopenharmony_ci    static napi_value GetFavicon(napi_env env, std::shared_ptr<NWebHistoryItem> item);
4550826e83eSopenharmony_ci};
4560826e83eSopenharmony_ci
4570826e83eSopenharmony_ciclass NapiWebPrintDocument {
4580826e83eSopenharmony_cipublic:
4590826e83eSopenharmony_ci    NapiWebPrintDocument() = default;
4600826e83eSopenharmony_ci    ~NapiWebPrintDocument() = default;
4610826e83eSopenharmony_ci
4620826e83eSopenharmony_ci    static napi_value JsConstructor(napi_env env, napi_callback_info info);
4630826e83eSopenharmony_ci
4640826e83eSopenharmony_ci    static napi_value OnStartLayoutWrite(napi_env env, napi_callback_info info);
4650826e83eSopenharmony_ci
4660826e83eSopenharmony_ci    static napi_value OnJobStateChanged(napi_env env, napi_callback_info info);
4670826e83eSopenharmony_ci};
4680826e83eSopenharmony_ci} // namespace NWeb
4690826e83eSopenharmony_ci} // namespace OHOS
4700826e83eSopenharmony_ci
4710826e83eSopenharmony_ci#endif // NWEB_NAPI_WEBVIEW_CONTROLLER_H
472