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