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_WEBVIEW_CONTROLLER_H
170826e83eSopenharmony_ci#define NWEB_WEBVIEW_CONTROLLER_H
180826e83eSopenharmony_ci
190826e83eSopenharmony_ci#include <filesystem>
200826e83eSopenharmony_ci#include <memory>
210826e83eSopenharmony_ci#include <string>
220826e83eSopenharmony_ci#include <unordered_map>
230826e83eSopenharmony_ci
240826e83eSopenharmony_ci#include "napi/native_api.h"
250826e83eSopenharmony_ci#include "napi/native_common.h"
260826e83eSopenharmony_ci#include "napi/native_node_api.h"
270826e83eSopenharmony_ci#include "nweb.h"
280826e83eSopenharmony_ci#include "nweb_helper.h"
290826e83eSopenharmony_ci#include "nweb_web_message.h"
300826e83eSopenharmony_ci#include "web_errors.h"
310826e83eSopenharmony_ci#include "webview_javascript_result_callback.h"
320826e83eSopenharmony_ci#include "print_manager_adapter.h"
330826e83eSopenharmony_ci
340826e83eSopenharmony_ci#include "web_scheme_handler_request.h"
350826e83eSopenharmony_ci
360826e83eSopenharmony_cinamespace OHOS {
370826e83eSopenharmony_cinamespace NWeb {
380826e83eSopenharmony_cienum class WebHitTestType : int {
390826e83eSopenharmony_ci    EDIT = 0,
400826e83eSopenharmony_ci    EMAIL,
410826e83eSopenharmony_ci    HTTP,
420826e83eSopenharmony_ci    HTTP_IMG,
430826e83eSopenharmony_ci    IMG,
440826e83eSopenharmony_ci    MAP,
450826e83eSopenharmony_ci    PHONE,
460826e83eSopenharmony_ci    UNKNOWN
470826e83eSopenharmony_ci};
480826e83eSopenharmony_ci
490826e83eSopenharmony_cienum class SecureDnsModeType : int {
500826e83eSopenharmony_ci    OFF = 0,
510826e83eSopenharmony_ci    AUTO,
520826e83eSopenharmony_ci    SECURE_ONLY
530826e83eSopenharmony_ci};
540826e83eSopenharmony_ci
550826e83eSopenharmony_cienum class ResourceType : uint32_t {
560826e83eSopenharmony_ci    COLOR = 10001,
570826e83eSopenharmony_ci    FLOAT,
580826e83eSopenharmony_ci    STRING,
590826e83eSopenharmony_ci    PLURAL,
600826e83eSopenharmony_ci    BOOLEAN,
610826e83eSopenharmony_ci    INTARRAY,
620826e83eSopenharmony_ci    INTEGER,
630826e83eSopenharmony_ci    PATTERN,
640826e83eSopenharmony_ci    STRARRAY,
650826e83eSopenharmony_ci    MEDIA = 20000,
660826e83eSopenharmony_ci    RAWFILE = 30000
670826e83eSopenharmony_ci};
680826e83eSopenharmony_ci
690826e83eSopenharmony_cienum class WebMessageType : int {
700826e83eSopenharmony_ci    NOTSUPPORT = 0,
710826e83eSopenharmony_ci    STRING,
720826e83eSopenharmony_ci    NUMBER,
730826e83eSopenharmony_ci    BOOLEAN,
740826e83eSopenharmony_ci    ARRAYBUFFER,
750826e83eSopenharmony_ci    ARRAY,
760826e83eSopenharmony_ci    ERROR
770826e83eSopenharmony_ci};
780826e83eSopenharmony_ci
790826e83eSopenharmony_cienum class MediaPlaybackState : int {
800826e83eSopenharmony_ci    NONE = 0,
810826e83eSopenharmony_ci    PLAYING,
820826e83eSopenharmony_ci    PAUSED,
830826e83eSopenharmony_ci    STOP
840826e83eSopenharmony_ci};
850826e83eSopenharmony_ci
860826e83eSopenharmony_cienum class SecurityLevel : int {
870826e83eSopenharmony_ci    NONE = 0,
880826e83eSopenharmony_ci    SECURE,
890826e83eSopenharmony_ci    WARNING,
900826e83eSopenharmony_ci    DANGEROUS
910826e83eSopenharmony_ci};
920826e83eSopenharmony_ci
930826e83eSopenharmony_cienum class CoreSecurityLevel : int {
940826e83eSopenharmony_ci    NONE = 0,
950826e83eSopenharmony_ci    SECURE = 3,
960826e83eSopenharmony_ci    DANGEROUS = 5,
970826e83eSopenharmony_ci    WARNING = 6
980826e83eSopenharmony_ci};
990826e83eSopenharmony_ci
1000826e83eSopenharmony_cienum class OfflineResourceType : int {
1010826e83eSopenharmony_ci    IMAGE = 0,
1020826e83eSopenharmony_ci    CSS,
1030826e83eSopenharmony_ci    CLASSIC_JS,
1040826e83eSopenharmony_ci    MODULE_JS
1050826e83eSopenharmony_ci};
1060826e83eSopenharmony_ci
1070826e83eSopenharmony_cienum class ParseURLResult : int {
1080826e83eSopenharmony_ci    OK = 0,
1090826e83eSopenharmony_ci    FAILED,
1100826e83eSopenharmony_ci    INVALID_URL
1110826e83eSopenharmony_ci};
1120826e83eSopenharmony_ci
1130826e83eSopenharmony_cienum class UrlListSetResult : int {
1140826e83eSopenharmony_ci    INIT_ERROR = -2,
1150826e83eSopenharmony_ci    PARAM_ERROR = -1,
1160826e83eSopenharmony_ci    SET_OK = 0,
1170826e83eSopenharmony_ci};
1180826e83eSopenharmony_ci
1190826e83eSopenharmony_cienum class PressureLevel : int {
1200826e83eSopenharmony_ci    MEMORY_PRESSURE_LEVEL_MODERATE = 1,
1210826e83eSopenharmony_ci    MEMORY_PRESSURE_LEVEL_CRITICAL = 2,
1220826e83eSopenharmony_ci};
1230826e83eSopenharmony_ci
1240826e83eSopenharmony_cienum class ScrollType : int {
1250826e83eSopenharmony_ci    EVENT = 0,
1260826e83eSopenharmony_ci};
1270826e83eSopenharmony_ci
1280826e83eSopenharmony_ciclass WebPrintDocument;
1290826e83eSopenharmony_ciclass WebviewController {
1300826e83eSopenharmony_cipublic:
1310826e83eSopenharmony_ci    explicit WebviewController() = default;
1320826e83eSopenharmony_ci    explicit WebviewController(int32_t nwebId);
1330826e83eSopenharmony_ci    explicit WebviewController(const std::string& webTag);
1340826e83eSopenharmony_ci    ~WebviewController();
1350826e83eSopenharmony_ci
1360826e83eSopenharmony_ci    bool IsInit() const;
1370826e83eSopenharmony_ci
1380826e83eSopenharmony_ci    void SetWebId(int32_t nwebId);
1390826e83eSopenharmony_ci
1400826e83eSopenharmony_ci    WebviewController* FromID(int32_t nwebId);
1410826e83eSopenharmony_ci
1420826e83eSopenharmony_ci    bool AccessForward() const;
1430826e83eSopenharmony_ci
1440826e83eSopenharmony_ci    bool AccessBackward() const;
1450826e83eSopenharmony_ci
1460826e83eSopenharmony_ci    bool AccessStep(int32_t step) const;
1470826e83eSopenharmony_ci
1480826e83eSopenharmony_ci    void ClearHistory();
1490826e83eSopenharmony_ci
1500826e83eSopenharmony_ci    void Forward();
1510826e83eSopenharmony_ci
1520826e83eSopenharmony_ci    void Backward();
1530826e83eSopenharmony_ci
1540826e83eSopenharmony_ci    void OnActive();
1550826e83eSopenharmony_ci
1560826e83eSopenharmony_ci    void OnInactive();
1570826e83eSopenharmony_ci
1580826e83eSopenharmony_ci    void Refresh();
1590826e83eSopenharmony_ci
1600826e83eSopenharmony_ci    ErrCode ZoomIn();
1610826e83eSopenharmony_ci
1620826e83eSopenharmony_ci    ErrCode ZoomOut();
1630826e83eSopenharmony_ci
1640826e83eSopenharmony_ci    int32_t GetWebId() const;
1650826e83eSopenharmony_ci
1660826e83eSopenharmony_ci    std::string GetUserAgent();
1670826e83eSopenharmony_ci
1680826e83eSopenharmony_ci    std::string GetCustomUserAgent() const;
1690826e83eSopenharmony_ci
1700826e83eSopenharmony_ci    ErrCode SetCustomUserAgent(const std::string& userAgent);
1710826e83eSopenharmony_ci
1720826e83eSopenharmony_ci    std::string GetTitle();
1730826e83eSopenharmony_ci
1740826e83eSopenharmony_ci    int32_t GetPageHeight();
1750826e83eSopenharmony_ci
1760826e83eSopenharmony_ci    ErrCode BackOrForward(int32_t step);
1770826e83eSopenharmony_ci
1780826e83eSopenharmony_ci    void StoreWebArchiveCallback(const std::string &baseName, bool autoName, napi_env env, napi_ref jsCallback);
1790826e83eSopenharmony_ci
1800826e83eSopenharmony_ci    void StoreWebArchivePromise(const std::string &baseName, bool autoName, napi_env env, napi_deferred deferred);
1810826e83eSopenharmony_ci
1820826e83eSopenharmony_ci    std::vector<std::string> CreateWebMessagePorts();
1830826e83eSopenharmony_ci
1840826e83eSopenharmony_ci    ErrCode PostWebMessage(std::string& message, std::vector<std::string>& ports, std::string& targetUrl);
1850826e83eSopenharmony_ci
1860826e83eSopenharmony_ci    std::shared_ptr<HitTestResult> GetHitTestValue();
1870826e83eSopenharmony_ci
1880826e83eSopenharmony_ci    void RequestFocus();
1890826e83eSopenharmony_ci
1900826e83eSopenharmony_ci    bool ParseUrl(napi_env env, napi_value urlObj, std::string& result) const;
1910826e83eSopenharmony_ci
1920826e83eSopenharmony_ci    ErrCode LoadUrl(std::string url);
1930826e83eSopenharmony_ci
1940826e83eSopenharmony_ci    ErrCode LoadUrl(std::string url, std::map<std::string, std::string> httpHeaders);
1950826e83eSopenharmony_ci
1960826e83eSopenharmony_ci    ErrCode LoadData(std::string data, std::string mimeType, std::string encoding,
1970826e83eSopenharmony_ci        std::string baseUrl, std::string historyUrl);
1980826e83eSopenharmony_ci
1990826e83eSopenharmony_ci    int GetHitTest();
2000826e83eSopenharmony_ci
2010826e83eSopenharmony_ci    void ClearMatches();
2020826e83eSopenharmony_ci
2030826e83eSopenharmony_ci    void SearchNext(bool forward);
2040826e83eSopenharmony_ci
2050826e83eSopenharmony_ci    void SearchAllAsync(const std::string& searchString);
2060826e83eSopenharmony_ci
2070826e83eSopenharmony_ci    void ClearSslCache();
2080826e83eSopenharmony_ci
2090826e83eSopenharmony_ci    void ClearClientAuthenticationCache();
2100826e83eSopenharmony_ci
2110826e83eSopenharmony_ci    void Stop();
2120826e83eSopenharmony_ci
2130826e83eSopenharmony_ci    ErrCode Zoom(float factor);
2140826e83eSopenharmony_ci
2150826e83eSopenharmony_ci    void InnerCompleteWindowNew(int32_t parentNwebId);
2160826e83eSopenharmony_ci
2170826e83eSopenharmony_ci    void SetNWebJavaScriptResultCallBack();
2180826e83eSopenharmony_ci
2190826e83eSopenharmony_ci    void RegisterJavaScriptProxy(RegisterJavaScriptProxyParam& param);
2200826e83eSopenharmony_ci
2210826e83eSopenharmony_ci    ErrCode DeleteJavaScriptRegister(const std::string& objName,
2220826e83eSopenharmony_ci        const std::vector<std::string>& methodList);
2230826e83eSopenharmony_ci
2240826e83eSopenharmony_ci    void RunJavaScriptCallback(const std::string &script, napi_env env, napi_ref jsCallback, bool extention);
2250826e83eSopenharmony_ci
2260826e83eSopenharmony_ci    void RunJavaScriptPromise(const std::string &script, napi_env env, napi_deferred deferred, bool extention);
2270826e83eSopenharmony_ci
2280826e83eSopenharmony_ci    void RunJavaScriptCallbackExt(
2290826e83eSopenharmony_ci        const int fd, const size_t scriptLength, napi_env env, napi_ref jsCallback, bool extention);
2300826e83eSopenharmony_ci
2310826e83eSopenharmony_ci    void RunJavaScriptPromiseExt(
2320826e83eSopenharmony_ci        const int fd, const size_t scriptLength, napi_env env, napi_deferred deferred, bool extention);
2330826e83eSopenharmony_ci
2340826e83eSopenharmony_ci    std::string GetUrl();
2350826e83eSopenharmony_ci
2360826e83eSopenharmony_ci    std::string GetOriginalUrl();
2370826e83eSopenharmony_ci
2380826e83eSopenharmony_ci    bool TerminateRenderProcess() const;
2390826e83eSopenharmony_ci
2400826e83eSopenharmony_ci    void PutNetworkAvailable(bool available);
2410826e83eSopenharmony_ci
2420826e83eSopenharmony_ci    bool HasImage(std::shared_ptr<NWebBoolValueCallback> callback);
2430826e83eSopenharmony_ci
2440826e83eSopenharmony_ci    ErrCode HasImagesCallback(napi_env env, napi_ref jsCallback);
2450826e83eSopenharmony_ci
2460826e83eSopenharmony_ci    ErrCode HasImagesPromise(napi_env env, napi_deferred deferred);
2470826e83eSopenharmony_ci
2480826e83eSopenharmony_ci    void RemoveCache(bool includeDiskFiles);
2490826e83eSopenharmony_ci
2500826e83eSopenharmony_ci    std::shared_ptr<NWebHistoryList> GetHistoryList();
2510826e83eSopenharmony_ci
2520826e83eSopenharmony_ci    bool GetFavicon(
2530826e83eSopenharmony_ci        const void **data, size_t &width, size_t &height, ImageColorType &colorType, ImageAlphaType &alphaType) const;
2540826e83eSopenharmony_ci
2550826e83eSopenharmony_ci    std::vector<uint8_t> SerializeWebState();
2560826e83eSopenharmony_ci
2570826e83eSopenharmony_ci    bool RestoreWebState(const std::vector<uint8_t> &state) const;
2580826e83eSopenharmony_ci
2590826e83eSopenharmony_ci    void ScrollPageDown(bool bottom);
2600826e83eSopenharmony_ci
2610826e83eSopenharmony_ci    void ScrollPageUp(bool top);
2620826e83eSopenharmony_ci
2630826e83eSopenharmony_ci    void ScrollTo(float x, float y);
2640826e83eSopenharmony_ci
2650826e83eSopenharmony_ci    void ScrollBy(float deltaX, float deltaY);
2660826e83eSopenharmony_ci
2670826e83eSopenharmony_ci    void SlideScroll(float vx, float vy);
2680826e83eSopenharmony_ci
2690826e83eSopenharmony_ci    void SetScrollable(bool enable);
2700826e83eSopenharmony_ci
2710826e83eSopenharmony_ci    void SetScrollable(bool enable, int32_t scrollType);
2720826e83eSopenharmony_ci
2730826e83eSopenharmony_ci    bool GetScrollable() const;
2740826e83eSopenharmony_ci
2750826e83eSopenharmony_ci    void InnerSetHapPath(const std::string &hapPath);
2760826e83eSopenharmony_ci
2770826e83eSopenharmony_ci    bool GetCertChainDerData(std::vector<std::string> &certChainDerData) const;
2780826e83eSopenharmony_ci
2790826e83eSopenharmony_ci    ErrCode SetAudioMuted(bool muted);
2800826e83eSopenharmony_ci
2810826e83eSopenharmony_ci    ErrCode PrefetchPage(std::string& url, std::map<std::string, std::string> additionalHttpHeaders);
2820826e83eSopenharmony_ci
2830826e83eSopenharmony_ci    void* CreateWebPrintDocumentAdapter(const std::string &jobName);
2840826e83eSopenharmony_ci
2850826e83eSopenharmony_ci    ErrCode PostUrl(std::string& url, std::vector<char>& postData);
2860826e83eSopenharmony_ci
2870826e83eSopenharmony_ci    int GetSecurityLevel();
2880826e83eSopenharmony_ci
2890826e83eSopenharmony_ci    void EnableSafeBrowsing(bool enable);
2900826e83eSopenharmony_ci
2910826e83eSopenharmony_ci    bool IsSafeBrowsingEnabled() const;
2920826e83eSopenharmony_ci
2930826e83eSopenharmony_ci    bool IsIncognitoMode() const;
2940826e83eSopenharmony_ci
2950826e83eSopenharmony_ci    void SetPrintBackground(bool enable);
2960826e83eSopenharmony_ci
2970826e83eSopenharmony_ci    bool GetPrintBackground() const;
2980826e83eSopenharmony_ci
2990826e83eSopenharmony_ci    std::string GetLastJavascriptProxyCallingFrameUrl();
3000826e83eSopenharmony_ci
3010826e83eSopenharmony_ci    static std::string GenerateWebTag();
3020826e83eSopenharmony_ci
3030826e83eSopenharmony_ci    bool SetWebSchemeHandler(const char* scheme, WebSchemeHandler* handler) const;
3040826e83eSopenharmony_ci
3050826e83eSopenharmony_ci    int32_t ClearWebSchemeHandler();
3060826e83eSopenharmony_ci
3070826e83eSopenharmony_ci    static bool SetWebServiveWorkerSchemeHandler(
3080826e83eSopenharmony_ci        const char* scheme, WebSchemeHandler* handler);
3090826e83eSopenharmony_ci
3100826e83eSopenharmony_ci    static int32_t ClearWebServiceWorkerSchemeHandler();
3110826e83eSopenharmony_ci
3120826e83eSopenharmony_ci    void CloseAllMediaPresentations();
3130826e83eSopenharmony_ci
3140826e83eSopenharmony_ci    void StopAllMedia();
3150826e83eSopenharmony_ci
3160826e83eSopenharmony_ci    void ResumeAllMedia();
3170826e83eSopenharmony_ci
3180826e83eSopenharmony_ci    void PauseAllMedia();
3190826e83eSopenharmony_ci
3200826e83eSopenharmony_ci    int GetMediaPlaybackState();
3210826e83eSopenharmony_ci
3220826e83eSopenharmony_ci    void EnableIntelligentTrackingPrevention(bool enable);
3230826e83eSopenharmony_ci
3240826e83eSopenharmony_ci    bool IsIntelligentTrackingPreventionEnabled() const;
3250826e83eSopenharmony_ci
3260826e83eSopenharmony_ci    ErrCode StartCamera();
3270826e83eSopenharmony_ci
3280826e83eSopenharmony_ci    ErrCode StopCamera();
3290826e83eSopenharmony_ci
3300826e83eSopenharmony_ci    ErrCode CloseCamera();
3310826e83eSopenharmony_ci
3320826e83eSopenharmony_ci    void OnCreateNativeMediaPlayer(napi_env env, napi_ref callback);
3330826e83eSopenharmony_ci
3340826e83eSopenharmony_ci    bool ParseScriptContent(napi_env env, napi_value value, std::string &script);
3350826e83eSopenharmony_ci
3360826e83eSopenharmony_ci    std::shared_ptr<CacheOptions> ParseCacheOptions(napi_env env, napi_value value);
3370826e83eSopenharmony_ci
3380826e83eSopenharmony_ci    void PrecompileJavaScriptPromise(napi_env env,
3390826e83eSopenharmony_ci                                     napi_deferred deferred,
3400826e83eSopenharmony_ci                                     const std::string &url, const std::string &script,
3410826e83eSopenharmony_ci                                     std::shared_ptr<CacheOptions> cacheOptions);
3420826e83eSopenharmony_ci
3430826e83eSopenharmony_ci    bool ParseResponseHeaders(napi_env env,
3440826e83eSopenharmony_ci                              napi_value value,
3450826e83eSopenharmony_ci                              std::map<std::string, std::string> &responseHeaders) const;
3460826e83eSopenharmony_ci
3470826e83eSopenharmony_ci    ParseURLResult ParseURLList(napi_env env, napi_value value, std::vector<std::string>& urlList);
3480826e83eSopenharmony_ci
3490826e83eSopenharmony_ci    bool CheckURL(std::string& url) const;
3500826e83eSopenharmony_ci
3510826e83eSopenharmony_ci    std::vector<uint8_t> ParseUint8Array(napi_env env, napi_value value);
3520826e83eSopenharmony_ci
3530826e83eSopenharmony_ci    void InjectOfflineResource(const std::vector<std::string>& urlList,
3540826e83eSopenharmony_ci                               const std::vector<uint8_t>& resource,
3550826e83eSopenharmony_ci                               const std::map<std::string, std::string>& response_headers,
3560826e83eSopenharmony_ci                               const uint32_t type);
3570826e83eSopenharmony_ci
3580826e83eSopenharmony_ci    ErrCode SetUrlTrustList(const std::string& urlTrustList, std::string& detailErrMsg);
3590826e83eSopenharmony_ci
3600826e83eSopenharmony_ci    void EnableAdsBlock(bool enable);
3610826e83eSopenharmony_ci
3620826e83eSopenharmony_ci    bool IsAdsBlockEnabled() const;
3630826e83eSopenharmony_ci
3640826e83eSopenharmony_ci    bool IsAdsBlockEnabledForCurPage() const;
3650826e83eSopenharmony_ci
3660826e83eSopenharmony_ci    std::string GetSurfaceId();
3670826e83eSopenharmony_ci
3680826e83eSopenharmony_ci    void UpdateInstanceId(int32_t newId);
3690826e83eSopenharmony_ci
3700826e83eSopenharmony_ci    bool ParseJsLengthToInt(napi_env env,
3710826e83eSopenharmony_ci                            napi_value jsLength,
3720826e83eSopenharmony_ci                            PixelUnit& type,
3730826e83eSopenharmony_ci                            int32_t& result) const;
3740826e83eSopenharmony_ci
3750826e83eSopenharmony_ci    ErrCode WebPageSnapshot(const char* id,
3760826e83eSopenharmony_ci                            PixelUnit type,
3770826e83eSopenharmony_ci                            int32_t width,
3780826e83eSopenharmony_ci                            int32_t height,
3790826e83eSopenharmony_ci                            const WebSnapshotCallback callback);
3800826e83eSopenharmony_ci
3810826e83eSopenharmony_ci    void SetPathAllowingUniversalAccess(const std::vector<std::string>& pathList,
3820826e83eSopenharmony_ci                                        std::string& errorPath);
3830826e83eSopenharmony_ci
3840826e83eSopenharmony_ci    void ScrollToWithAnime(float x, float y, int32_t duration) ;
3850826e83eSopenharmony_ci
3860826e83eSopenharmony_ci    void ScrollByWithAnime(float deltaX, float deltaY, int32_t duration) ;
3870826e83eSopenharmony_ci
3880826e83eSopenharmony_ci    void SetBackForwardCacheOptions(int32_t size, int32_t timeToLive);
3890826e83eSopenharmony_ci
3900826e83eSopenharmony_ci    void GetScrollOffset(float* offset_x, float* offset_y);
3910826e83eSopenharmony_ci
3920826e83eSopenharmony_ci    void CreatePDFCallbackExt(
3930826e83eSopenharmony_ci        napi_env env, std::shared_ptr<NWebPDFConfigArgs> pdfConfig, napi_ref pdfCallback);
3940826e83eSopenharmony_ci
3950826e83eSopenharmony_ci    void CreatePDFPromiseExt(
3960826e83eSopenharmony_ci        napi_env env, std::shared_ptr<NWebPDFConfigArgs> pdfConfig, napi_deferred deferred);
3970826e83eSopenharmony_ci
3980826e83eSopenharmony_ci    bool ScrollByWithResult(float deltaX, float deltaY) const;
3990826e83eSopenharmony_ciprivate:
4000826e83eSopenharmony_ci    int ConverToWebHitTestType(int hitType);
4010826e83eSopenharmony_ci
4020826e83eSopenharmony_ci    bool GetRawFileUrl(const std::string &fileName,
4030826e83eSopenharmony_ci        const std::string& bundleName, const std::string& moduleName, std::string &result) const;
4040826e83eSopenharmony_ci
4050826e83eSopenharmony_ci    bool ParseRawFileUrl(napi_env env, napi_value urlObj, std::string& result) const;
4060826e83eSopenharmony_ci
4070826e83eSopenharmony_ci    bool GetResourceUrl(napi_env env, napi_value urlObj, std::string& result) const;
4080826e83eSopenharmony_ci
4090826e83eSopenharmony_ci    bool ParseJsLengthResourceToInt(napi_env env,
4100826e83eSopenharmony_ci                                    napi_value jsLength,
4110826e83eSopenharmony_ci                                    PixelUnit& type,
4120826e83eSopenharmony_ci                                    int32_t& result) const;
4130826e83eSopenharmony_ci    bool GetHapModuleInfo();
4140826e83eSopenharmony_ci
4150826e83eSopenharmony_cipublic:
4160826e83eSopenharmony_ci    static std::string customeSchemeCmdLine_;
4170826e83eSopenharmony_ci    static bool existNweb_;
4180826e83eSopenharmony_ci    static bool webDebuggingAccess_;
4190826e83eSopenharmony_ci    static std::set<std::string> webTagSet_;
4200826e83eSopenharmony_ci    static int32_t webTagStrId_;
4210826e83eSopenharmony_ci
4220826e83eSopenharmony_ciprivate:
4230826e83eSopenharmony_ci    std::mutex webMtx_;
4240826e83eSopenharmony_ci    int32_t nwebId_ = -1;
4250826e83eSopenharmony_ci    std::shared_ptr<WebviewJavaScriptResultCallBack> javaScriptResultCb_ = nullptr;
4260826e83eSopenharmony_ci    std::string hapPath_ = "";
4270826e83eSopenharmony_ci    std::string webTag_ = "";
4280826e83eSopenharmony_ci    std::vector<std::string> moduleName_;
4290826e83eSopenharmony_ci};
4300826e83eSopenharmony_ci
4310826e83eSopenharmony_ciclass WebMessagePort {
4320826e83eSopenharmony_cipublic:
4330826e83eSopenharmony_ci    WebMessagePort(int32_t nwebId, std::string& port, bool isExtentionType);
4340826e83eSopenharmony_ci
4350826e83eSopenharmony_ci    ~WebMessagePort() = default;
4360826e83eSopenharmony_ci
4370826e83eSopenharmony_ci    ErrCode ClosePort();
4380826e83eSopenharmony_ci
4390826e83eSopenharmony_ci    ErrCode PostPortMessage(std::shared_ptr<NWebMessage> data);
4400826e83eSopenharmony_ci
4410826e83eSopenharmony_ci    ErrCode SetPortMessageCallback(std::shared_ptr<NWebMessageValueCallback> callback);
4420826e83eSopenharmony_ci
4430826e83eSopenharmony_ci    std::string GetPortHandle() const;
4440826e83eSopenharmony_ci
4450826e83eSopenharmony_ci    bool IsExtentionType()
4460826e83eSopenharmony_ci    {
4470826e83eSopenharmony_ci        return isExtentionType_;
4480826e83eSopenharmony_ci    }
4490826e83eSopenharmony_ci
4500826e83eSopenharmony_ciprivate:
4510826e83eSopenharmony_ci    int32_t nwebId_ = -1;
4520826e83eSopenharmony_ci    std::string portHandle_;
4530826e83eSopenharmony_ci    bool isExtentionType_;
4540826e83eSopenharmony_ci};
4550826e83eSopenharmony_ci
4560826e83eSopenharmony_ciclass WebMessageExt {
4570826e83eSopenharmony_cipublic:
4580826e83eSopenharmony_ci    explicit WebMessageExt(std::shared_ptr<NWebMessage> data) : data_(data) {};
4590826e83eSopenharmony_ci    ~WebMessageExt() = default;
4600826e83eSopenharmony_ci
4610826e83eSopenharmony_ci    void SetType(int type);
4620826e83eSopenharmony_ci
4630826e83eSopenharmony_ci    int ConvertNwebType2JsType(NWebValue::Type type);
4640826e83eSopenharmony_ci
4650826e83eSopenharmony_ci    int GetType()
4660826e83eSopenharmony_ci    {
4670826e83eSopenharmony_ci        if (data_) {
4680826e83eSopenharmony_ci            return ConvertNwebType2JsType(data_->GetType());
4690826e83eSopenharmony_ci        }
4700826e83eSopenharmony_ci        return static_cast<int>(WebMessageType::NOTSUPPORT);
4710826e83eSopenharmony_ci    }
4720826e83eSopenharmony_ci
4730826e83eSopenharmony_ci    void SetString(std::string value)
4740826e83eSopenharmony_ci    {
4750826e83eSopenharmony_ci        if (data_) {
4760826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::STRING);
4770826e83eSopenharmony_ci            data_->SetString(value);
4780826e83eSopenharmony_ci        }
4790826e83eSopenharmony_ci    }
4800826e83eSopenharmony_ci
4810826e83eSopenharmony_ci    void SetNumber(double value)
4820826e83eSopenharmony_ci    {
4830826e83eSopenharmony_ci        if (data_) {
4840826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::DOUBLE);
4850826e83eSopenharmony_ci            data_->SetDouble(value);
4860826e83eSopenharmony_ci        }
4870826e83eSopenharmony_ci    }
4880826e83eSopenharmony_ci
4890826e83eSopenharmony_ci    void SetBoolean(bool value)
4900826e83eSopenharmony_ci    {
4910826e83eSopenharmony_ci        if (data_) {
4920826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::BOOLEAN);
4930826e83eSopenharmony_ci            data_->SetBoolean(value);
4940826e83eSopenharmony_ci        }
4950826e83eSopenharmony_ci    }
4960826e83eSopenharmony_ci
4970826e83eSopenharmony_ci    void SetArrayBuffer(std::vector<uint8_t>& value)
4980826e83eSopenharmony_ci    {
4990826e83eSopenharmony_ci        if (data_) {
5000826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::BINARY);
5010826e83eSopenharmony_ci            data_->SetBinary(value);
5020826e83eSopenharmony_ci        }
5030826e83eSopenharmony_ci    }
5040826e83eSopenharmony_ci
5050826e83eSopenharmony_ci    void SetStringArray(std::vector<std::string> value)
5060826e83eSopenharmony_ci    {
5070826e83eSopenharmony_ci        if (data_) {
5080826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::STRINGARRAY);
5090826e83eSopenharmony_ci            data_->SetStringArray(value);
5100826e83eSopenharmony_ci        }
5110826e83eSopenharmony_ci    }
5120826e83eSopenharmony_ci
5130826e83eSopenharmony_ci    void SetDoubleArray(std::vector<double> value)
5140826e83eSopenharmony_ci    {
5150826e83eSopenharmony_ci        if (data_) {
5160826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::DOUBLEARRAY);
5170826e83eSopenharmony_ci            data_->SetDoubleArray(value);
5180826e83eSopenharmony_ci        }
5190826e83eSopenharmony_ci    }
5200826e83eSopenharmony_ci
5210826e83eSopenharmony_ci    void SetInt64Array(std::vector<int64_t> value)
5220826e83eSopenharmony_ci    {
5230826e83eSopenharmony_ci        if (data_) {
5240826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::INT64ARRAY);
5250826e83eSopenharmony_ci            data_->SetInt64Array(value);
5260826e83eSopenharmony_ci        }
5270826e83eSopenharmony_ci    }
5280826e83eSopenharmony_ci
5290826e83eSopenharmony_ci    void SetBooleanArray(std::vector<bool> value)
5300826e83eSopenharmony_ci    {
5310826e83eSopenharmony_ci        if (data_) {
5320826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::BOOLEANARRAY);
5330826e83eSopenharmony_ci            data_->SetBooleanArray(value);
5340826e83eSopenharmony_ci        }
5350826e83eSopenharmony_ci    }
5360826e83eSopenharmony_ci
5370826e83eSopenharmony_ci    void SetError(std::string name, std::string message)
5380826e83eSopenharmony_ci    {
5390826e83eSopenharmony_ci        if (data_) {
5400826e83eSopenharmony_ci            data_->SetType(NWebValue::Type::ERROR);
5410826e83eSopenharmony_ci            data_->SetErrName(name);
5420826e83eSopenharmony_ci            data_->SetErrMsg(message);
5430826e83eSopenharmony_ci        }
5440826e83eSopenharmony_ci    }
5450826e83eSopenharmony_ci
5460826e83eSopenharmony_ci    std::shared_ptr<NWebMessage> GetData() const
5470826e83eSopenharmony_ci    {
5480826e83eSopenharmony_ci        return data_;
5490826e83eSopenharmony_ci    }
5500826e83eSopenharmony_ci
5510826e83eSopenharmony_ciprivate:
5520826e83eSopenharmony_ci    int type_ = 0;
5530826e83eSopenharmony_ci    std::shared_ptr<NWebMessage> data_;
5540826e83eSopenharmony_ci};
5550826e83eSopenharmony_ci
5560826e83eSopenharmony_ciclass WebHistoryList {
5570826e83eSopenharmony_cipublic:
5580826e83eSopenharmony_ci    explicit WebHistoryList(std::shared_ptr<NWebHistoryList> sptrHistoryList) : sptrHistoryList_(sptrHistoryList) {};
5590826e83eSopenharmony_ci    ~WebHistoryList() = default;
5600826e83eSopenharmony_ci
5610826e83eSopenharmony_ci    int32_t GetCurrentIndex();
5620826e83eSopenharmony_ci
5630826e83eSopenharmony_ci    std::shared_ptr<NWebHistoryItem> GetItem(int32_t index);
5640826e83eSopenharmony_ci
5650826e83eSopenharmony_ci    int32_t GetListSize();
5660826e83eSopenharmony_ci
5670826e83eSopenharmony_ciprivate:
5680826e83eSopenharmony_ci    OHOS::NWeb::NWeb* nweb_ = nullptr;
5690826e83eSopenharmony_ci    std::shared_ptr<NWebHistoryList> sptrHistoryList_ = nullptr;
5700826e83eSopenharmony_ci};
5710826e83eSopenharmony_ci
5720826e83eSopenharmony_ciclass WebPrintDocument {
5730826e83eSopenharmony_cipublic:
5740826e83eSopenharmony_ci    explicit WebPrintDocument(void* webPrintdoc) : printDocAdapter_((PrintDocumentAdapterAdapter*)webPrintdoc) {};
5750826e83eSopenharmony_ci    ~WebPrintDocument() = default;
5760826e83eSopenharmony_ci    void OnStartLayoutWrite(const std::string& jobId, const PrintAttributesAdapter& oldAttrs,
5770826e83eSopenharmony_ci        const PrintAttributesAdapter& newAttrs, uint32_t fd,
5780826e83eSopenharmony_ci        std::function<void(std::string, uint32_t)> writeResultCallback);
5790826e83eSopenharmony_ci
5800826e83eSopenharmony_ci    void OnJobStateChanged(const std::string& jobId, uint32_t state);
5810826e83eSopenharmony_ci
5820826e83eSopenharmony_ciprivate:
5830826e83eSopenharmony_ci    std::unique_ptr<PrintDocumentAdapterAdapter> printDocAdapter_ = nullptr;
5840826e83eSopenharmony_ci};
5850826e83eSopenharmony_ci
5860826e83eSopenharmony_ciclass WebPrintWriteResultCallbackAdapter : public PrintWriteResultCallbackAdapter {
5870826e83eSopenharmony_cipublic:
5880826e83eSopenharmony_ci    explicit WebPrintWriteResultCallbackAdapter(std::function<void(std::string, uint32_t)>& cb) : cb_(cb) {};
5890826e83eSopenharmony_ci
5900826e83eSopenharmony_ci    void WriteResultCallback(std::string jobId, uint32_t code) override;
5910826e83eSopenharmony_ci
5920826e83eSopenharmony_ciprivate:
5930826e83eSopenharmony_ci    std::function<void(std::string, uint32_t)> cb_;
5940826e83eSopenharmony_ci};
5950826e83eSopenharmony_ci} // namespace NWeb
5960826e83eSopenharmony_ci} // namespace OHOS
5970826e83eSopenharmony_ci
5980826e83eSopenharmony_ci#endif // NWEB_WEBVIEW_CONTROLLER_H
599