1 /*
2 * Copyright (c) 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 #include "ohos_nweb/bridge/ark_web_engine_impl.h"
17
18 #include "ohos_nweb/bridge/ark_web_adsblock_manager_impl.h"
19 #include "ohos_nweb/bridge/ark_web_cookie_manager_impl.h"
20 #include "ohos_nweb/bridge/ark_web_data_base_impl.h"
21 #include "ohos_nweb/bridge/ark_web_download_manager_impl.h"
22 #include "ohos_nweb/bridge/ark_web_engine_init_args_wrapper.h"
23 #include "ohos_nweb/bridge/ark_web_engine_prefetch_args_wrapper.h"
24 #include "ohos_nweb/bridge/ark_web_nweb_create_info_wrapper.h"
25 #include "ohos_nweb/bridge/ark_web_nweb_impl.h"
26 #include "ohos_nweb/bridge/ark_web_web_storage_impl.h"
27 #include "ohos_nweb/bridge/ark_web_proxy_changed_callback_impl.h"
28
29 #include "base/bridge/ark_web_bridge_macros.h"
30
31 namespace OHOS::ArkWeb {
32 using ArkWebRenderProcessMode = OHOS::NWeb::RenderProcessMode;
33
ArkWebEngineImpl(std::shared_ptr<OHOS::NWeb::NWebEngine> nweb_engine)34 ArkWebEngineImpl::ArkWebEngineImpl(std::shared_ptr<OHOS::NWeb::NWebEngine> nweb_engine) : nweb_engine_(nweb_engine) {}
35
GetInstance()36 ArkWebRefPtr<ArkWebEngine> ArkWebEngine::GetInstance()
37 {
38 std::shared_ptr<OHOS::NWeb::NWebEngine> nweb_engine = OHOS::NWeb::NWebEngine::GetInstance();
39 if (CHECK_SHARED_PTR_IS_NULL(nweb_engine)) {
40 return nullptr;
41 }
42
43 return new ArkWebEngineImpl(nweb_engine);
44 }
45
CreateNWeb(ArkWebRefPtr<ArkWebNWebCreateInfo> create_info)46 ArkWebRefPtr<ArkWebNWeb> ArkWebEngineImpl::CreateNWeb(ArkWebRefPtr<ArkWebNWebCreateInfo> create_info)
47 {
48 std::shared_ptr<OHOS::NWeb::NWebCreateInfo> nweb_create_info = nullptr;
49 if (!CHECK_REF_PTR_IS_NULL(create_info)) {
50 nweb_create_info = std::make_shared<ArkWebNWebCreateInfoWrapper>(create_info);
51 }
52
53 std::shared_ptr<OHOS::NWeb::NWeb> nweb = nweb_engine_->CreateNWeb(nweb_create_info);
54 if (CHECK_SHARED_PTR_IS_NULL(nweb)) {
55 return nullptr;
56 }
57
58 return new ArkWebNWebImpl(nweb);
59 }
60
GetNWeb(int32_t nweb_id)61 ArkWebRefPtr<ArkWebNWeb> ArkWebEngineImpl::GetNWeb(int32_t nweb_id)
62 {
63 std::shared_ptr<OHOS::NWeb::NWeb> nweb = nweb_engine_->GetNWeb(nweb_id);
64 if (CHECK_SHARED_PTR_IS_NULL(nweb)) {
65 return nullptr;
66 }
67
68 return new ArkWebNWebImpl(nweb);
69 }
70
GetDataBase()71 ArkWebRefPtr<ArkWebDataBase> ArkWebEngineImpl::GetDataBase()
72 {
73 std::shared_ptr<OHOS::NWeb::NWebDataBase> nweb_data_base = nweb_engine_->GetDataBase();
74 if (CHECK_SHARED_PTR_IS_NULL(nweb_data_base)) {
75 return nullptr;
76 }
77
78 return new ArkWebDataBaseImpl(nweb_data_base);
79 }
80
GetWebStorage()81 ArkWebRefPtr<ArkWebWebStorage> ArkWebEngineImpl::GetWebStorage()
82 {
83 std::shared_ptr<OHOS::NWeb::NWebWebStorage> nweb_web_storage = nweb_engine_->GetWebStorage();
84 if (CHECK_SHARED_PTR_IS_NULL(nweb_web_storage)) {
85 return nullptr;
86 }
87
88 return new ArkWebWebStorageImpl(nweb_web_storage);
89 }
90
GetCookieManager()91 ArkWebRefPtr<ArkWebCookieManager> ArkWebEngineImpl::GetCookieManager()
92 {
93 std::shared_ptr<OHOS::NWeb::NWebCookieManager> nweb_cookie_manager = nweb_engine_->GetCookieManager();
94 if (CHECK_SHARED_PTR_IS_NULL(nweb_cookie_manager)) {
95 return nullptr;
96 }
97
98 return new ArkWebCookieManagerImpl(nweb_cookie_manager);
99 }
100
GetDownloadManager()101 ArkWebRefPtr<ArkWebDownloadManager> ArkWebEngineImpl::GetDownloadManager()
102 {
103 std::shared_ptr<OHOS::NWeb::NWebDownloadManager> nweb_download_manager = nweb_engine_->GetDownloadManager();
104 if (CHECK_SHARED_PTR_IS_NULL(nweb_download_manager)) {
105 return nullptr;
106 }
107
108 return new ArkWebDownloadManagerImpl(nweb_download_manager);
109 }
110
SetWebTag(int32_t nweb_id,const char * web_tag)111 void ArkWebEngineImpl::SetWebTag(int32_t nweb_id, const char* web_tag)
112 {
113 nweb_engine_->SetWebTag(nweb_id, web_tag);
114 }
115
InitializeWebEngine(ArkWebRefPtr<ArkWebEngineInitArgs> init_args)116 void ArkWebEngineImpl::InitializeWebEngine(ArkWebRefPtr<ArkWebEngineInitArgs> init_args)
117 {
118 if (CHECK_REF_PTR_IS_NULL(init_args)) {
119 nweb_engine_->InitializeWebEngine(nullptr);
120 return;
121 }
122
123 std::shared_ptr<OHOS::NWeb::NWebEngineInitArgs> nweb_engine_init_args =
124 std::make_shared<ArkWebEngineInitArgsWrapper>(init_args);
125 nweb_engine_->InitializeWebEngine(nweb_engine_init_args);
126 }
127
PrepareForPageLoad(const ArkWebString & url,bool preconnectable,int32_t num_sockets)128 void ArkWebEngineImpl::PrepareForPageLoad(const ArkWebString& url, bool preconnectable, int32_t num_sockets)
129 {
130 nweb_engine_->PrepareForPageLoad(ArkWebStringStructToClass(url), preconnectable, num_sockets);
131 }
132
SetWebDebuggingAccess(bool isEnableDebug)133 void ArkWebEngineImpl::SetWebDebuggingAccess(bool isEnableDebug)
134 {
135 nweb_engine_->SetWebDebuggingAccess(isEnableDebug);
136 }
137
AddIntelligentTrackingPreventionBypassingList(const ArkWebStringVector & hosts)138 void ArkWebEngineImpl::AddIntelligentTrackingPreventionBypassingList(const ArkWebStringVector& hosts)
139 {
140 nweb_engine_->AddIntelligentTrackingPreventionBypassingList(ArkWebStringVectorStructToClass(hosts));
141 }
142
RemoveIntelligentTrackingPreventionBypassingList(const ArkWebStringVector & hosts)143 void ArkWebEngineImpl::RemoveIntelligentTrackingPreventionBypassingList(const ArkWebStringVector& hosts)
144 {
145 nweb_engine_->RemoveIntelligentTrackingPreventionBypassingList(ArkWebStringVectorStructToClass(hosts));
146 }
147
ClearIntelligentTrackingPreventionBypassingList()148 void ArkWebEngineImpl::ClearIntelligentTrackingPreventionBypassingList()
149 {
150 nweb_engine_->ClearIntelligentTrackingPreventionBypassingList();
151 }
152
GetDefaultUserAgent()153 ArkWebString ArkWebEngineImpl::GetDefaultUserAgent()
154 {
155 return ArkWebStringClassToStruct(nweb_engine_->GetDefaultUserAgent());
156 }
157
PauseAllTimers()158 void ArkWebEngineImpl::PauseAllTimers()
159 {
160 nweb_engine_->PauseAllTimers();
161 }
162
ResumeAllTimers()163 void ArkWebEngineImpl::ResumeAllTimers()
164 {
165 nweb_engine_->ResumeAllTimers();
166 }
167
PrefetchResource(ArkWebRefPtr<ArkWebEnginePrefetchArgs> & pre_args,const ArkWebStringMap & additional_http_headers,const ArkWebString & cache_key,const uint32_t & cache_valid_time)168 void ArkWebEngineImpl::PrefetchResource(ArkWebRefPtr<ArkWebEnginePrefetchArgs>& pre_args,
169 const ArkWebStringMap& additional_http_headers, const ArkWebString& cache_key, const uint32_t& cache_valid_time)
170 {
171 std::shared_ptr<OHOS::NWeb::NWebEnginePrefetchArgs> nweb_engine_pre_args =
172 std::make_shared<ArkWebEnginePrefetchArgsWrapper>(pre_args);
173 nweb_engine_->PrefetchResource(nweb_engine_pre_args, ArkWebStringMapStructToClass(additional_http_headers),
174 ArkWebStringStructToClass(cache_key), cache_valid_time);
175 }
176
SetRenderProcessMode(int32_t mode)177 void ArkWebEngineImpl::SetRenderProcessMode(int32_t mode)
178 {
179 nweb_engine_->SetRenderProcessMode(static_cast<ArkWebRenderProcessMode>(mode));
180 }
181
GetRenderProcessMode()182 int32_t ArkWebEngineImpl::GetRenderProcessMode()
183 {
184 return static_cast<int32_t>(nweb_engine_->GetRenderProcessMode());
185 }
186
ClearPrefetchedResource(const ArkWebStringVector & cache_key_list)187 void ArkWebEngineImpl::ClearPrefetchedResource(const ArkWebStringVector& cache_key_list)
188 {
189 nweb_engine_->ClearPrefetchedResource(ArkWebStringVectorStructToClass(cache_key_list));
190 }
191
WarmupServiceWorker(const ArkWebString & url)192 void ArkWebEngineImpl::WarmupServiceWorker(const ArkWebString& url)
193 {
194 nweb_engine_->WarmupServiceWorker(ArkWebStringStructToClass(url));
195 }
196
SetHostIP(const ArkWebString & hostName,const ArkWebString & address,int32_t aliveTime)197 void ArkWebEngineImpl::SetHostIP(const ArkWebString& hostName, const ArkWebString& address, int32_t aliveTime)
198 {
199 nweb_engine_->SetHostIP(ArkWebStringStructToClass(hostName), ArkWebStringStructToClass(address), aliveTime);
200 }
201
ClearHostIP(const ArkWebString & hostName)202 void ArkWebEngineImpl::ClearHostIP(const ArkWebString& hostName)
203 {
204 nweb_engine_->ClearHostIP(ArkWebStringStructToClass(hostName));
205 }
206
SetAppCustomUserAgent(const ArkWebString & userAgent)207 void ArkWebEngineImpl::SetAppCustomUserAgent(const ArkWebString& userAgent)
208 {
209 nweb_engine_->SetAppCustomUserAgent(ArkWebStringStructToClass(userAgent));
210 }
211
SetUserAgentForHosts(const ArkWebString & userAgent,const ArkWebStringVector & hosts)212 void ArkWebEngineImpl::SetUserAgentForHosts(const ArkWebString& userAgent, const ArkWebStringVector& hosts)
213 {
214 nweb_engine_->SetUserAgentForHosts(ArkWebStringStructToClass(userAgent), ArkWebStringVectorStructToClass(hosts));
215 }
216
EnableWholeWebPageDrawing()217 void ArkWebEngineImpl::EnableWholeWebPageDrawing()
218 {
219 nweb_engine_->EnableWholeWebPageDrawing();
220 }
221
GetAdsBlockManager()222 ArkWebRefPtr<ArkWebAdsBlockManager> ArkWebEngineImpl::GetAdsBlockManager()
223 {
224 std::shared_ptr<OHOS::NWeb::NWebAdsBlockManager> nweb_adsBlock_manager = nweb_engine_->GetAdsBlockManager();
225 if (CHECK_SHARED_PTR_IS_NULL(nweb_adsBlock_manager)) {
226 return nullptr;
227 }
228 return new ArkWebAdsBlockManagerImpl(nweb_adsBlock_manager);
229 }
230
TrimMemoryByPressureLevel(int32_t memoryLevel)231 void ArkWebEngineImpl::TrimMemoryByPressureLevel(int32_t memoryLevel)
232 {
233 nweb_engine_->TrimMemoryByPressureLevel(memoryLevel);
234 }
235
SetArkWebRomApiLevel(int apiLevel)236 void ArkWebEngineImpl::SetArkWebRomApiLevel(int apiLevel)
237 {
238 nweb_engine_->SetArkWebRomApiLevel(apiLevel);
239 }
240
GetArkWebCoreApiLevel()241 int ArkWebEngineImpl::GetArkWebCoreApiLevel()
242 {
243 return nweb_engine_->GetArkWebCoreApiLevel();
244 }
245
RemoveAllCache(bool include_disk_files)246 void ArkWebEngineImpl::RemoveAllCache(bool include_disk_files)
247 {
248 nweb_engine_->RemoveAllCache(include_disk_files);
249 }
250
SetProxyOverride(const ArkWebStringVector & proxyUrls,const ArkWebStringVector & proxySchemeFilters,const ArkWebStringVector & bypassRules,const bool & reverseBypass,ArkWebRefPtr<ArkWebProxyChangedCallback> callback)251 void ArkWebEngineImpl::SetProxyOverride(const ArkWebStringVector& proxyUrls,
252 const ArkWebStringVector& proxySchemeFilters,
253 const ArkWebStringVector& bypassRules,
254 const bool& reverseBypass,
255 ArkWebRefPtr<ArkWebProxyChangedCallback> callback)
256 {
257 std::shared_ptr<OHOS::NWeb::NWebProxyChangedCallback> nweb_proxy_callback =
258 std::make_shared<ArkWebProxyChangedCallbackImpl>(callback);
259 nweb_engine_->SetProxyOverride(ArkWebStringVectorStructToClass(proxyUrls),
260 ArkWebStringVectorStructToClass(proxySchemeFilters),
261 ArkWebStringVectorStructToClass(bypassRules),
262 reverseBypass,
263 nweb_proxy_callback);
264 }
265
RemoveProxyOverride(ArkWebRefPtr<ArkWebProxyChangedCallback> callback)266 void ArkWebEngineImpl::RemoveProxyOverride(ArkWebRefPtr<ArkWebProxyChangedCallback> callback)
267 {
268 std::shared_ptr<OHOS::NWeb::NWebProxyChangedCallback> nweb_proxy_callback =
269 std::make_shared<ArkWebProxyChangedCallbackImpl>(callback);
270 nweb_engine_->RemoveProxyOverride(nweb_proxy_callback);
271 }
272
SetWebDebuggingAccessAndPort(bool isEnableDebug,int32_t port)273 void ArkWebEngineImpl::SetWebDebuggingAccessAndPort(bool isEnableDebug, int32_t port)
274 {
275 nweb_engine_->SetWebDebuggingAccessAndPort(isEnableDebug, port);
276 }
277
AddBlanklessLoadingUrls(const ArkWebStringVector & urls)278 uint32_t ArkWebEngineImpl::AddBlanklessLoadingUrls(const ArkWebStringVector& urls)
279 {
280 return nweb_engine_->AddBlanklessLoadingUrls(ArkWebStringVectorStructToClass(urls));
281 }
282
RemoveBlanklessLoadingUrls(const ArkWebStringVector & urls)283 void ArkWebEngineImpl::RemoveBlanklessLoadingUrls(const ArkWebStringVector& urls)
284 {
285 nweb_engine_->RemoveBlanklessLoadingUrls(ArkWebStringVectorStructToClass(urls));
286 }
287
ClearBlanklessLoadingCache(const ArkWebStringVector & urls)288 void ArkWebEngineImpl::ClearBlanklessLoadingCache(const ArkWebStringVector& urls)
289 {
290 nweb_engine_->ClearBlanklessLoadingCache(ArkWebStringVectorStructToClass(urls));
291 }
292
CheckBlankOptEnable(const ArkWebString & url,int32_t nweb_id)293 ArkWebString ArkWebEngineImpl::CheckBlankOptEnable(const ArkWebString& url, int32_t nweb_id)
294 {
295 return ArkWebStringClassToStruct(nweb_engine_->CheckBlankOptEnable(ArkWebStringStructToClass(url), nweb_id));
296 }
297
SetBlanklessLoadingCacheCapacity(int32_t capacity)298 void ArkWebEngineImpl::SetBlanklessLoadingCacheCapacity(int32_t capacity)
299 {
300 nweb_engine_->SetBlanklessLoadingCacheCapacity(capacity);
301 }
302
EnablePrivateNetworkAccess(bool enable)303 void ArkWebEngineImpl::EnablePrivateNetworkAccess(bool enable)
304 {
305 nweb_engine_->EnablePrivateNetworkAccess(enable);
306 }
307
IsPrivateNetworkAccessEnabled()308 bool ArkWebEngineImpl::IsPrivateNetworkAccessEnabled()
309 {
310 return nweb_engine_->IsPrivateNetworkAccessEnabled();
311 }
312
SetWebDestroyMode(int32_t mode)313 void ArkWebEngineImpl::SetWebDestroyMode(int32_t mode)
314 {
315 nweb_engine_->SetWebDestroyMode(static_cast<OHOS::NWeb::WebDestroyMode>(mode));
316 }
317
318 } // namespace OHOS::ArkWeb
319