1 /*
2  * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_WEB_WEB_MODEL_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_WEB_WEB_MODEL_H
18 
19 #include <mutex>
20 
21 #include "bridge/declarative_frontend/view_stack_processor.h"
22 #include "core/components/web/web_property.h"
23 #include "core/components_ng/property/menu_property.h"
24 
25 namespace OHOS::Ace {
26 using ScriptItems = std::map<std::string, std::vector<std::string>>;
27 class ACE_FORCE_EXPORT WebModel {
28 public:
29     static WebModel* GetInstance();
30     virtual ~WebModel() = default;
31 
32     virtual void Create(const std::string& src, const RefPtr<WebController>& webController,
33         RenderMode renderMode = RenderMode::ASYNC_RENDER, bool incognitoMode = false,
34         const std::string& sharedRenderProcessToken = "") = 0;
35     virtual void Create(const std::string& src, std::function<void(int32_t)>&& setWebIdCallback,
36         std::function<void(const std::string&)>&& setHapPathCallback, int32_t parentWebId, bool popup,
37         RenderMode renderMode = RenderMode::ASYNC_RENDER, bool incognitoMode = false,
38         const std::string& sharedRenderProcessToken = "") = 0;
GetDefaultBackgroundColor()39     virtual Color GetDefaultBackgroundColor() { return Color::WHITE; }
40     virtual void SetCustomScheme(const std::string& cmdLine) = 0;
SetFocusable(bool focusable)41     virtual void SetFocusable(bool focusable) {};
SetFocusNode(bool isFocusNode)42     virtual void SetFocusNode(bool isFocusNode) {};
43     virtual void SetOnCommonDialog(
44         std::function<bool(const BaseEventInfo* info)>&& jsCallback, int dialogEventType) = 0;
45     virtual void SetOnConsoleLog(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
46     virtual void SetOnPageStart(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
47     virtual void SetOnPageFinish(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
48     virtual void SetOnProgressChange(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
49     virtual void SetOnTitleReceive(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
50     virtual void SetOnFullScreenExit(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
51     virtual void SetOnFullScreenEnter(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
52     virtual void SetOnGeolocationHide(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
53     virtual void SetOnGeolocationShow(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
54     virtual void SetOnRequestFocus(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
55     virtual void SetOnDownloadStart(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
56     virtual void SetOnHttpAuthRequest(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
57     virtual void SetOnSslErrorRequest(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
58     virtual void SetOnAllSslErrorRequest(std::function<bool(const BaseEventInfo *info)> &&jsCallback) = 0;
59     virtual void SetOnSslSelectCertRequest(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
60     virtual void SetMediaPlayGestureAccess(bool isNeedGestureAccess) = 0;
61     virtual void SetOnKeyEvent(std::function<void(KeyEventInfo& keyEventInfo)>&& jsCallback) = 0;
62     virtual void SetOnErrorReceive(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
63     virtual void SetOnHttpErrorReceive(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
64     virtual void SetOnInterceptRequest(std::function<RefPtr<WebResponse>(const BaseEventInfo* info)>&& jsCallback) = 0;
65     virtual void SetOnUrlLoadIntercept(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
66     virtual void SetOnLoadIntercept(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
67     virtual void SetOnFileSelectorShow(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
68     virtual void SetOnContextMenuShow(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
69     virtual void SetOnContextMenuHide(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
SetNewDragStyle(bool isNewDragStyle)70     virtual void SetNewDragStyle(bool isNewDragStyle) {}
SetPreviewSelectionMenu(const std::shared_ptr<WebPreviewSelectionMenuParam> & param)71     virtual void SetPreviewSelectionMenu(const std::shared_ptr<WebPreviewSelectionMenuParam>& param) {}
72     virtual void SetJsEnabled(bool isJsEnabled) = 0;
73     virtual void SetFileAccessEnabled(bool isFileAccessEnabled) = 0;
74     virtual void SetOnLineImageAccessEnabled(bool isOnLineImageAccessEnabled) = 0;
75     virtual void SetDomStorageAccessEnabled(bool isDomStorageAccessEnabled) = 0;
76     virtual void SetImageAccessEnabled(bool isImageAccessEnabled) = 0;
77     virtual void SetMixedMode(MixedModeContent mixedMode) = 0;
78     virtual void SetZoomAccessEnabled(bool isZoomAccessEnabled) = 0;
79     virtual void SetGeolocationAccessEnabled(bool isGeolocationAccessEnabled) = 0;
80     virtual void SetJsProxyCallback(std::function<void()>&& jsProxyCallback) = 0;
81     virtual void SetUserAgent(const std::string& userAgent) = 0;
82     virtual void SetRenderExitedId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
83     virtual void SetRefreshAccessedHistoryId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
84     virtual void SetCacheMode(WebCacheMode cacheMode) = 0;
85     virtual void SetOverviewModeAccessEnabled(bool isOverviewModeAccessEnabled) = 0;
86     virtual void SetFileFromUrlAccessEnabled(bool isFileFromUrlAccessEnabled) = 0;
87     virtual void SetDatabaseAccessEnabled(bool isDatabaseAccessEnabled) = 0;
88     virtual void SetTextZoomRatio(int32_t textZoomRatioNum) = 0;
89     virtual void SetWebDebuggingAccessEnabled(bool isWebDebuggingAccessEnabled) = 0;
90     virtual void SetOnMouseEvent(std::function<void(MouseInfo& info)>&& jsCallback) = 0;
91     virtual void SetResourceLoadId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
92     virtual void SetScaleChangeId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
93     virtual void SetScrollId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
94     virtual void SetPermissionRequestEventId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
95     virtual void SetBackgroundColor(Color backgroundColor) = 0;
96     virtual void InitialScale(float scale) = 0;
97     virtual void SetSearchResultReceiveEventId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
98 
99     virtual void SetOnDragStart(
100         std::function<NG::DragDropBaseInfo(const RefPtr<OHOS::Ace::DragEvent>& info, const std::string& extraParams)>&&
101             onDragStart) = 0;
102     virtual void SetOnDragEnter(
103         std::function<void(const RefPtr<OHOS::Ace::DragEvent>& info, const std::string& extraParams)>&&
104             onDragEnter) = 0;
105     virtual void SetOnDragMove(
106         std::function<void(const RefPtr<DragEvent>& info, const std::string& extraParams)>&& onDragMoveId) = 0;
107     virtual void SetOnDragLeave(std::function<void(const RefPtr<DragEvent>&, const std::string&)>&& onDragLeave) = 0;
108     virtual void SetOnDrop(std::function<void(const RefPtr<DragEvent>&, const std::string&)>&& onDropId) = 0;
109     virtual void SetPinchSmoothModeEnabled(bool isPinchSmoothModeEnabled) = 0;
110     virtual void SetWindowNewEvent(std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& jsCallback) = 0;
111     virtual void SetWindowExitEventId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
112 
113     virtual void SetMultiWindowAccessEnabled(bool isMultiWindowAccessEnable) = 0;
114     virtual void SetAllowWindowOpenMethod(bool isAllowWindowOpenMethod) = 0;
SetWebCursiveFont(const std::string & cursiveFontFamily)115     virtual void SetWebCursiveFont(const std::string& cursiveFontFamily) {};
SetWebFantasyFont(const std::string & fixedFontFamily)116     virtual void SetWebFantasyFont(const std::string& fixedFontFamily) {};
SetWebFixedFont(const std::string & fixedFontFamily)117     virtual void SetWebFixedFont(const std::string& fixedFontFamily) {};
SetWebSansSerifFont(const std::string & sansSerifFontFamily)118     virtual void SetWebSansSerifFont(const std::string& sansSerifFontFamily) {};
SetWebSerifFont(const std::string & serifFontFamily)119     virtual void SetWebSerifFont(const std::string& serifFontFamily) {};
SetWebStandardFont(const std::string & standardFontFamily)120     virtual void SetWebStandardFont(const std::string& standardFontFamily) {};
SetDefaultFixedFontSize(int32_t defaultFixedFontSize)121     virtual void SetDefaultFixedFontSize(int32_t defaultFixedFontSize) {};
SetDefaultFontSize(int32_t defaultFontSize)122     virtual void SetDefaultFontSize(int32_t defaultFontSize) {};
SetDefaultTextEncodingFormat(const std::string & textEncodingFormat)123     virtual void SetDefaultTextEncodingFormat(const std::string& textEncodingFormat) {};
SetMinFontSize(int32_t minFontSize)124     virtual void SetMinFontSize(int32_t minFontSize) {};
SetMinLogicalFontSize(int32_t minLogicalFontSize)125     virtual void SetMinLogicalFontSize(int32_t minLogicalFontSize) {};
SetBlockNetwork(bool isNetworkBlocked)126     virtual void SetBlockNetwork(bool isNetworkBlocked) {};
127 
SetPageVisibleId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && pageVisibleId)128     virtual void SetPageVisibleId(std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& pageVisibleId) {};
SetAudioStateChangedId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && audioStateChanged)129     virtual void SetAudioStateChangedId(
130         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& audioStateChanged) {};
SetFirstContentfulPaintId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && firstContentfulPaintId)131     virtual void SetFirstContentfulPaintId(
132         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& firstContentfulPaintId) {};
SetFirstMeaningfulPaintId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && firstMeaningfulPaintId)133     virtual void SetFirstMeaningfulPaintId(
134         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& firstMeaningfulPaintId) {};
SetLargestContentfulPaintId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && largestContentfulPaintId)135     virtual void SetLargestContentfulPaintId(
136         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& largestContentfulPaintId) {};
SetSafeBrowsingCheckResultId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && safeBrowsingCheckResultId)137     virtual void SetSafeBrowsingCheckResultId(
138         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& safeBrowsingCheckResultId) {};
SetNavigationEntryCommittedId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && navigationEntryCommittedId)139     virtual void SetNavigationEntryCommittedId(
140         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& navigationEntryCommittedId) {};
141     virtual void SetOnInterceptKeyEventCallback(std::function<bool(KeyEventInfo& keyEventInfo)>&& keyEventInfo) = 0;
SetOnDataResubmitted(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && dataResubmittedId)142     virtual void SetOnDataResubmitted(
143         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& dataResubmittedId) {};
SetDataResubmittedId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && dataResubmittedId)144     virtual void SetDataResubmittedId(
145         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& dataResubmittedId) {};
SetFaviconReceivedId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && faviconReceivedId)146     virtual void SetFaviconReceivedId(
147         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& faviconReceivedId) {};
SetTouchIconUrlId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && touchIconUrlId)148     virtual void SetTouchIconUrlId(std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&& touchIconUrlId) {};
149 
SetDarkMode(WebDarkMode mode)150     virtual void SetDarkMode(WebDarkMode mode) {};
SetForceDarkAccess(bool access)151     virtual void SetForceDarkAccess(bool access) {};
SetHorizontalScrollBarAccessEnabled(bool isHorizontalScrollBarAccessEnabled)152     virtual void SetHorizontalScrollBarAccessEnabled(bool isHorizontalScrollBarAccessEnabled) {};
SetVerticalScrollBarAccessEnabled(bool isVerticalScrollBarAccessEnabled)153     virtual void SetVerticalScrollBarAccessEnabled(bool isVerticalScrollBarAccessEnabled) {};
154 
SetOnControllerAttached(std::function<void ()> && callback)155     virtual void SetOnControllerAttached(std::function<void()>&& callback) {};
NotifyPopupWindowResult(int32_t webId,bool result)156     virtual void NotifyPopupWindowResult(int32_t webId, bool result) {};
SetAudioResumeInterval(int32_t resumeInterval)157     virtual void SetAudioResumeInterval(int32_t resumeInterval) {};
SetAudioExclusive(bool audioExclusive)158     virtual void SetAudioExclusive(bool audioExclusive) {};
159     virtual void SetOverScrollId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
160     virtual void SetNativeEmbedModeEnabled(bool isEmbedModeEnabled) = 0;
161     virtual void RegisterNativeEmbedRule(const std::string&, const std::string&) = 0;
162     virtual void SetNativeEmbedLifecycleChangeId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
163     virtual void SetNativeEmbedVisibilityChangeId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
164     virtual void SetNativeEmbedGestureEventId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
165 
SetScreenCaptureRequestEventId(std::function<void (const BaseEventInfo * info)> && jsCallback)166     virtual void SetScreenCaptureRequestEventId(std::function<void(const BaseEventInfo* info)>&& jsCallback) {};
167 
SetNestedScroll(const NestedScrollOptions & nestedOpt)168     virtual void SetNestedScroll(const NestedScrollOptions& nestedOpt) {}
SetNestedScrollExt(const NestedScrollOptionsExt & nestedOpt)169     virtual void SetNestedScrollExt(const NestedScrollOptionsExt& nestedOpt) {}
SetMetaViewport(bool enabled)170     virtual void SetMetaViewport(bool enabled) {}
SetLayoutMode(WebLayoutMode mode)171     virtual void SetLayoutMode(WebLayoutMode mode) {}
JavaScriptOnDocumentStart(const ScriptItems & scriptItems)172     virtual void JavaScriptOnDocumentStart(const ScriptItems& scriptItems) {};
JavaScriptOnDocumentEnd(const ScriptItems & scriptItems)173     virtual void JavaScriptOnDocumentEnd(const ScriptItems& scriptItems) {};
SetOverScrollMode(OverScrollMode mode)174     virtual void SetOverScrollMode(OverScrollMode mode) {};
SetBlurOnKeyboardHideMode(BlurOnKeyboardHideMode mode)175     virtual void SetBlurOnKeyboardHideMode(BlurOnKeyboardHideMode mode) {}
SetCopyOptionMode(CopyOptions mode)176     virtual void SetCopyOptionMode(CopyOptions mode) {};
177 
SetDefaultFileSelectorShow(std::function<void (const std::shared_ptr<BaseEventInfo> &)> && jsCallback)178     virtual void SetDefaultFileSelectorShow(std::function<void(const std::shared_ptr<BaseEventInfo>&)>&& jsCallback) {};
SetPermissionClipboard(std::function<void (const std::shared_ptr<BaseEventInfo> &)> && jsCallback)179     virtual void SetPermissionClipboard(std::function<void(const std::shared_ptr<BaseEventInfo>&)>&& jsCallback) {};
SetOpenAppLinkFunction(std::function<void (const std::shared_ptr<BaseEventInfo> &)> && jsCallback)180     virtual void SetOpenAppLinkFunction(std::function<void(const std::shared_ptr<BaseEventInfo>&)>&& jsCallback) {};
SetIntelligentTrackingPreventionResultId(std::function<void (const std::shared_ptr<BaseEventInfo> & info)> && intelligentTrackingPreventionResultId)181     virtual void SetIntelligentTrackingPreventionResultId(
182         std::function<void(const std::shared_ptr<BaseEventInfo>& info)>&&
183             intelligentTrackingPreventionResultId) {};
184     virtual void SetOnOverrideUrlLoading(std::function<bool(const BaseEventInfo* info)>&& jsCallback) = 0;
SetTextAutosizing(bool isTextAutosizing)185     virtual void SetTextAutosizing(bool isTextAutosizing) {};
186     virtual void SetNativeVideoPlayerConfig(bool enable, bool shouldOverlay) = 0;
187     virtual void SetRenderProcessNotRespondingId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
188     virtual void SetRenderProcessRespondingId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
189     virtual void SetViewportFitChangedId(std::function<void(const BaseEventInfo* info)> && jsCallback) = 0;
SetSelectionMenuOptions(const WebMenuOptionsParam & webMenuOption)190     virtual void SetSelectionMenuOptions(const WebMenuOptionsParam& webMenuOption) {};
SetOnInterceptKeyboardAttach(std::function<WebKeyboardOption (const BaseEventInfo * info)> && jsCallback)191     virtual void SetOnInterceptKeyboardAttach(
192         std::function<WebKeyboardOption(const BaseEventInfo* info)>&& jsCallback) {}
193 
194     virtual void SetUpdateInstanceIdCallback(std::function<void(int32_t)> &&callback) = 0;
195     virtual void SetAdsBlockedEventId(std::function<void(const BaseEventInfo* info)>&& jsCallback) = 0;
SetOverlayScrollbarEnabled(bool isEnabled)196     virtual void SetOverlayScrollbarEnabled(bool isEnabled) {};
SetKeyboardAvoidMode(const WebKeyboardAvoidMode & mode)197     virtual void SetKeyboardAvoidMode(const WebKeyboardAvoidMode& mode) {}
SetEditMenuOptions(const NG::OnCreateMenuCallback && onCreateMenuCallback,const NG::OnMenuItemClickCallback && onMenuItemClick)198     virtual void SetEditMenuOptions(const NG::OnCreateMenuCallback&& onCreateMenuCallback,
199         const NG::OnMenuItemClickCallback&& onMenuItemClick) {};
SetEnabledHapticFeedback(bool isEnabled)200     virtual void SetEnabledHapticFeedback(bool isEnabled) {}
201 private:
202     static std::unique_ptr<WebModel> instance_;
203     static std::mutex mutex_;
204 };
205 } // namespace OHOS::Ace
206 
207 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_WEB_WEB_MODEL_H
208