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