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_wrapper.h"
17
18 #include "ohos_nweb/bridge/ark_web_adsblock_manager_wrapper.h"
19 #include "ohos_nweb/bridge/ark_web_cookie_manager_wrapper.h"
20 #include "ohos_nweb/bridge/ark_web_data_base_wrapper.h"
21 #include "ohos_nweb/bridge/ark_web_download_manager_wrapper.h"
22 #include "ohos_nweb/bridge/ark_web_engine_init_args_impl.h"
23 #include "ohos_nweb/bridge/ark_web_engine_prefetch_args_impl.h"
24 #include "ohos_nweb/bridge/ark_web_nweb_create_info_impl.h"
25 #include "ohos_nweb/bridge/ark_web_nweb_wrapper.h"
26 #include "ohos_nweb/bridge/ark_web_web_storage_wrapper.h"
27 #include "ohos_nweb/bridge/ark_web_proxy_changed_callback_wrapper.h"
28
29 #include "base/bridge/ark_web_bridge_macros.h"
30 #include "base/include/ark_web_errno.h"
31
32 namespace OHOS::NWeb {
33
GetInstance()34 std::shared_ptr<NWebEngine> NWebEngine::GetInstance()
35 {
36 ArkWebRefPtr<OHOS::ArkWeb::ArkWebEngine> ark_web_engine = OHOS::ArkWeb::ArkWebEngine::GetInstance();
37 if (CHECK_REF_PTR_IS_NULL(ark_web_engine)) {
38 return nullptr;
39 }
40
41 return std::make_shared<OHOS::ArkWeb::ArkWebEngineWrapper>(ark_web_engine);
42 }
43
44 } // namespace OHOS::NWeb
45
46 namespace OHOS::ArkWeb {
47
ArkWebEngineWrapper(ArkWebRefPtr<ArkWebEngine> ark_web_engine)48 ArkWebEngineWrapper::ArkWebEngineWrapper(ArkWebRefPtr<ArkWebEngine> ark_web_engine) : ark_web_engine_(ark_web_engine) {}
49
CreateNWeb(std::shared_ptr<OHOS::NWeb::NWebCreateInfo> create_info)50 std::shared_ptr<OHOS::NWeb::NWeb> ArkWebEngineWrapper::CreateNWeb(
51 std::shared_ptr<OHOS::NWeb::NWebCreateInfo> create_info)
52 {
53 ArkWebRefPtr<ArkWebNWebCreateInfo> ark_web_create_info = nullptr;
54 if (!CHECK_SHARED_PTR_IS_NULL(create_info)) {
55 ark_web_create_info = new ArkWebNWebCreateInfoImpl(create_info);
56 }
57
58 ArkWebRefPtr<ArkWebNWeb> ark_web_nweb = ark_web_engine_->CreateNWeb(ark_web_create_info);
59 if (CHECK_REF_PTR_IS_NULL(ark_web_nweb)) {
60 return nullptr;
61 }
62
63 return std::make_shared<ArkWebNWebWrapper>(ark_web_nweb);
64 }
65
GetNWeb(int32_t nweb_id)66 std::shared_ptr<OHOS::NWeb::NWeb> ArkWebEngineWrapper::GetNWeb(int32_t nweb_id)
67 {
68 ArkWebRefPtr<ArkWebNWeb> ark_web_nweb = ark_web_engine_->GetNWeb(nweb_id);
69 if (CHECK_REF_PTR_IS_NULL(ark_web_nweb)) {
70 return nullptr;
71 }
72
73 return std::make_shared<ArkWebNWebWrapper>(ark_web_nweb);
74 }
75
GetDataBase()76 std::shared_ptr<OHOS::NWeb::NWebDataBase> ArkWebEngineWrapper::GetDataBase()
77 {
78 ArkWebRefPtr<ArkWebDataBase> ark_web_data_base = ark_web_engine_->GetDataBase();
79 if (CHECK_REF_PTR_IS_NULL(ark_web_data_base)) {
80 return nullptr;
81 }
82
83 return std::make_shared<ArkWebDataBaseWrapper>(ark_web_data_base);
84 }
85
GetWebStorage()86 std::shared_ptr<OHOS::NWeb::NWebWebStorage> ArkWebEngineWrapper::GetWebStorage()
87 {
88 ArkWebRefPtr<ArkWebWebStorage> ark_web_web_storage = ark_web_engine_->GetWebStorage();
89 if (CHECK_REF_PTR_IS_NULL(ark_web_web_storage)) {
90 return nullptr;
91 }
92
93 return std::make_shared<ArkWebWebStorageWrapper>(ark_web_web_storage);
94 }
95
GetCookieManager()96 std::shared_ptr<OHOS::NWeb::NWebCookieManager> ArkWebEngineWrapper::GetCookieManager()
97 {
98 ArkWebRefPtr<ArkWebCookieManager> ark_web_cookie_manager = ark_web_engine_->GetCookieManager();
99 if (CHECK_REF_PTR_IS_NULL(ark_web_cookie_manager)) {
100 return nullptr;
101 }
102
103 return std::make_shared<ArkWebCookieManagerWrapper>(ark_web_cookie_manager);
104 }
105
GetDownloadManager()106 std::shared_ptr<OHOS::NWeb::NWebDownloadManager> ArkWebEngineWrapper::GetDownloadManager()
107 {
108 ArkWebRefPtr<ArkWebDownloadManager> ark_web_download_manager = ark_web_engine_->GetDownloadManager();
109 if (CHECK_REF_PTR_IS_NULL(ark_web_download_manager)) {
110 return nullptr;
111 }
112
113 return std::make_shared<ArkWebDownloadManagerWrapper>(ark_web_download_manager);
114 }
115
SetWebTag(int32_t nweb_id,const char * web_tag)116 void ArkWebEngineWrapper::SetWebTag(int32_t nweb_id, const char* web_tag)
117 {
118 ark_web_engine_->SetWebTag(nweb_id, web_tag);
119 }
120
InitializeWebEngine(std::shared_ptr<OHOS::NWeb::NWebEngineInitArgs> init_args)121 void ArkWebEngineWrapper::InitializeWebEngine(std::shared_ptr<OHOS::NWeb::NWebEngineInitArgs> init_args)
122 {
123 if (CHECK_SHARED_PTR_IS_NULL(init_args)) {
124 ark_web_engine_->InitializeWebEngine(nullptr);
125 return;
126 }
127
128 ArkWebRefPtr<ArkWebEngineInitArgs> ark_web_engine_init_args = new ArkWebEngineInitArgsImpl(init_args);
129 ark_web_engine_->InitializeWebEngine(ark_web_engine_init_args);
130 }
131
PrepareForPageLoad(const std::string & url,bool preconnectable,int32_t num_sockets)132 void ArkWebEngineWrapper::PrepareForPageLoad(const std::string& url, bool preconnectable, int32_t num_sockets)
133 {
134 ArkWebString stUrl = ArkWebStringClassToStruct(url);
135
136 ark_web_engine_->PrepareForPageLoad(stUrl, preconnectable, num_sockets);
137
138 ArkWebStringStructRelease(stUrl);
139 }
140
SetWebDebuggingAccess(bool isEnableDebug)141 void ArkWebEngineWrapper::SetWebDebuggingAccess(bool isEnableDebug)
142 {
143 ark_web_engine_->SetWebDebuggingAccess(isEnableDebug);
144 }
145
AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)146 void ArkWebEngineWrapper::AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts)
147 {
148 ArkWebStringVector stHosts = ArkWebStringVectorClassToStruct(hosts);
149
150 ark_web_engine_->AddIntelligentTrackingPreventionBypassingList(stHosts);
151
152 ArkWebStringVectorStructRelease(stHosts);
153 }
154
RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)155 void ArkWebEngineWrapper::RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts)
156 {
157 ArkWebStringVector stHosts = ArkWebStringVectorClassToStruct(hosts);
158
159 ark_web_engine_->RemoveIntelligentTrackingPreventionBypassingList(stHosts);
160
161 ArkWebStringVectorStructRelease(stHosts);
162 }
163
ClearIntelligentTrackingPreventionBypassingList()164 void ArkWebEngineWrapper::ClearIntelligentTrackingPreventionBypassingList()
165 {
166 ark_web_engine_->ClearIntelligentTrackingPreventionBypassingList();
167 }
168
GetDefaultUserAgent()169 std::string ArkWebEngineWrapper::GetDefaultUserAgent()
170 {
171 ArkWebString stUA = ark_web_engine_->GetDefaultUserAgent();
172
173 std::string objUA = ArkWebStringStructToClass(stUA);
174 ArkWebStringStructRelease(stUA);
175 return objUA;
176 }
177
PauseAllTimers()178 void ArkWebEngineWrapper::PauseAllTimers()
179 {
180 ark_web_engine_->PauseAllTimers();
181 }
182
ResumeAllTimers()183 void ArkWebEngineWrapper::ResumeAllTimers()
184 {
185 ark_web_engine_->ResumeAllTimers();
186 }
187
PrefetchResource(const std::shared_ptr<OHOS::NWeb::NWebEnginePrefetchArgs> & pre_args,const std::map<std::string,std::string> & additional_http_headers,const std::string & cache_key,const uint32_t & cache_valid_time)188 void ArkWebEngineWrapper::PrefetchResource(const std::shared_ptr<OHOS::NWeb::NWebEnginePrefetchArgs>& pre_args,
189 const std::map<std::string, std::string>& additional_http_headers, const std::string& cache_key,
190 const uint32_t& cache_valid_time)
191 {
192 ArkWebRefPtr<ArkWebEnginePrefetchArgs> ark_web_engine_pre_args = new ArkWebEnginePrefetchArgsImpl(pre_args);
193 ArkWebStringMap stHeaders = ArkWebStringMapClassToStruct(additional_http_headers);
194 ArkWebString stCacheKey = ArkWebStringClassToStruct(cache_key);
195 ark_web_engine_->PrefetchResource(ark_web_engine_pre_args, stHeaders, stCacheKey, cache_valid_time);
196
197 ArkWebStringMapStructRelease(stHeaders);
198 ArkWebStringStructRelease(stCacheKey);
199 }
200
SetRenderProcessMode(ArkWebRenderProcessMode mode)201 void ArkWebEngineWrapper::SetRenderProcessMode(ArkWebRenderProcessMode mode)
202 {
203 ark_web_engine_->SetRenderProcessMode(static_cast<int32_t>(mode));
204 }
205
GetRenderProcessMode()206 ArkWebRenderProcessMode ArkWebEngineWrapper::GetRenderProcessMode()
207 {
208 return static_cast<ArkWebRenderProcessMode>(ark_web_engine_->GetRenderProcessMode());
209 }
210
ClearPrefetchedResource(const std::vector<std::string> & cache_key_list)211 void ArkWebEngineWrapper::ClearPrefetchedResource(const std::vector<std::string>& cache_key_list)
212 {
213 ArkWebStringVector stCacheKeyList = ArkWebStringVectorClassToStruct(cache_key_list);
214
215 ark_web_engine_->ClearPrefetchedResource(stCacheKeyList);
216
217 ArkWebStringVectorStructRelease(stCacheKeyList);
218 }
219
WarmupServiceWorker(const std::string & url)220 void ArkWebEngineWrapper::WarmupServiceWorker(const std::string& url)
221 {
222 ArkWebString stUrl = ArkWebStringClassToStruct(url);
223
224 ark_web_engine_->WarmupServiceWorker(stUrl);
225
226 ArkWebStringStructRelease(stUrl);
227 }
228
SetHostIP(const std::string & hostName,const std::string & address,int32_t aliveTime)229 void ArkWebEngineWrapper::SetHostIP(const std::string& hostName, const std::string& address, int32_t aliveTime)
230 {
231 ark_web_engine_->SetHostIP(ArkWebStringClassToStruct(hostName), ArkWebStringClassToStruct(address), aliveTime);
232 }
233
ClearHostIP(const std::string & hostName)234 void ArkWebEngineWrapper::ClearHostIP(const std::string& hostName)
235 {
236 ark_web_engine_->ClearHostIP(ArkWebStringClassToStruct(hostName));
237 }
238
SetAppCustomUserAgent(const std::string & userAgent)239 void ArkWebEngineWrapper::SetAppCustomUserAgent(const std::string& userAgent)
240 {
241 ark_web_engine_->SetAppCustomUserAgent(ArkWebStringClassToStruct(userAgent));
242 }
243
SetUserAgentForHosts(const std::string & userAgent,const std::vector<std::string> & hosts)244 void ArkWebEngineWrapper::SetUserAgentForHosts(const std::string& userAgent, const std::vector<std::string>& hosts)
245 {
246 ark_web_engine_->SetUserAgentForHosts(ArkWebStringClassToStruct(userAgent), ArkWebStringVectorClassToStruct(hosts));
247 }
248
EnableWholeWebPageDrawing()249 void ArkWebEngineWrapper::EnableWholeWebPageDrawing()
250 {
251 ark_web_engine_->EnableWholeWebPageDrawing();
252 }
253
GetAdsBlockManager()254 std::shared_ptr<OHOS::NWeb::NWebAdsBlockManager> ArkWebEngineWrapper::GetAdsBlockManager()
255 {
256 ArkWebRefPtr<ArkWebAdsBlockManager> ark_web_adsblock_manager = ark_web_engine_->GetAdsBlockManager();
257 if (CHECK_REF_PTR_IS_NULL(ark_web_adsblock_manager)) {
258 return nullptr;
259 }
260
261 return std::make_shared<ArkWebAdsBlockManagerWrapper>(ark_web_adsblock_manager);
262 }
263
TrimMemoryByPressureLevel(int32_t memoryLevel)264 void ArkWebEngineWrapper::TrimMemoryByPressureLevel(int32_t memoryLevel)
265 {
266 ark_web_engine_->TrimMemoryByPressureLevel(memoryLevel);
267 }
268
SetArkWebRomApiLevel(int apiLevel)269 void ArkWebEngineWrapper::SetArkWebRomApiLevel(int apiLevel)
270 {
271 ark_web_engine_->SetArkWebRomApiLevel(apiLevel);
272 }
273
GetArkWebCoreApiLevel()274 int ArkWebEngineWrapper::GetArkWebCoreApiLevel()
275 {
276 return ark_web_engine_->GetArkWebCoreApiLevel();
277 }
278
RemoveAllCache(bool include_disk_files)279 void ArkWebEngineWrapper::RemoveAllCache(bool include_disk_files)
280 {
281 ark_web_engine_->RemoveAllCache(include_disk_files);
282 }
283
SetProxyOverride(const std::vector<std::string> & proxyUrls,const std::vector<std::string> & proxySchemeFilters,const std::vector<std::string> & bypassRules,const bool & reverseBypass,std::shared_ptr<OHOS::NWeb::NWebProxyChangedCallback> callback)284 void ArkWebEngineWrapper::SetProxyOverride(
285 const std::vector<std::string>& proxyUrls,
286 const std::vector<std::string>& proxySchemeFilters,
287 const std::vector<std::string>& bypassRules,
288 const bool& reverseBypass,
289 std::shared_ptr<OHOS::NWeb::NWebProxyChangedCallback> callback)
290 {
291 ArkWebStringVector stProxyRules = ArkWebStringVectorClassToStruct(proxyUrls);
292 ArkWebStringVector stProxySchemeFilters = ArkWebStringVectorClassToStruct(proxySchemeFilters);
293 ArkWebStringVector stBypassRules = ArkWebStringVectorClassToStruct(bypassRules);
294 ArkWebRefPtr<ArkWebProxyChangedCallback> ark_web_proxy_callback = new ArkWebProxyChangedCallbackWrapper(callback);
295
296 ark_web_engine_->SetProxyOverride(stProxyRules, stProxySchemeFilters, stBypassRules,
297 reverseBypass, ark_web_proxy_callback);
298
299 ArkWebStringVectorStructRelease(stProxyRules);
300 ArkWebStringVectorStructRelease(stProxySchemeFilters);
301 ArkWebStringVectorStructRelease(stBypassRules);
302 }
303
RemoveProxyOverride(std::shared_ptr<OHOS::NWeb::NWebProxyChangedCallback> callback)304 void ArkWebEngineWrapper::RemoveProxyOverride(std::shared_ptr<OHOS::NWeb::NWebProxyChangedCallback> callback)
305 {
306 ArkWebRefPtr<ArkWebProxyChangedCallback> ark_web_proxy_callback = new ArkWebProxyChangedCallbackWrapper(callback);
307 ark_web_engine_->RemoveProxyOverride(ark_web_proxy_callback);
308 }
309
SetWebDebuggingAccessAndPort(bool isEnableDebug,int32_t port)310 void ArkWebEngineWrapper::SetWebDebuggingAccessAndPort(
311 bool isEnableDebug, int32_t port)
312 {
313 ark_web_engine_->SetWebDebuggingAccessAndPort(isEnableDebug, port);
314 if (ArkWebGetErrno() != RESULT_OK) {
315 ark_web_engine_->SetWebDebuggingAccess(isEnableDebug);
316 }
317 }
318
AddBlanklessLoadingUrls(const std::vector<std::string> & urls)319 uint32_t ArkWebEngineWrapper::AddBlanklessLoadingUrls(const std::vector<std::string>& urls)
320 {
321 ArkWebStringVector stUrls = ArkWebStringVectorClassToStruct(urls);
322
323 uint32_t addCounts = ark_web_engine_->AddBlanklessLoadingUrls(stUrls);
324
325 ArkWebStringVectorStructRelease(stUrls);
326 return addCounts;
327 }
328
RemoveBlanklessLoadingUrls(const std::vector<std::string> & urls)329 void ArkWebEngineWrapper::RemoveBlanklessLoadingUrls(const std::vector<std::string>& urls)
330 {
331 ArkWebStringVector stUrls = ArkWebStringVectorClassToStruct(urls);
332
333 ark_web_engine_->RemoveBlanklessLoadingUrls(stUrls);
334
335 ArkWebStringVectorStructRelease(stUrls);
336 }
337
ClearBlanklessLoadingCache(const std::vector<std::string> & urls)338 void ArkWebEngineWrapper::ClearBlanklessLoadingCache(const std::vector<std::string>& urls)
339 {
340 ArkWebStringVector stUrls = ArkWebStringVectorClassToStruct(urls);
341
342 ark_web_engine_->ClearBlanklessLoadingCache(stUrls);
343
344 ArkWebStringVectorStructRelease(stUrls);
345 }
346
CheckBlankOptEnable(const std::string & url,int32_t nweb_id)347 std::string ArkWebEngineWrapper::CheckBlankOptEnable(const std::string& url, int32_t nweb_id)
348 {
349 ArkWebString url_ = ArkWebStringClassToStruct(url);
350 std::string ret = ArkWebStringStructToClass(ark_web_engine_->CheckBlankOptEnable(url_, nweb_id));
351 ArkWebStringStructRelease(url_);
352 return ret;
353 }
354
SetBlanklessLoadingCacheCapacity(int32_t capacity)355 void ArkWebEngineWrapper::SetBlanklessLoadingCacheCapacity(int32_t capacity)
356 {
357 ark_web_engine_->SetBlanklessLoadingCacheCapacity(capacity);
358 }
359
EnablePrivateNetworkAccess(bool enable)360 void ArkWebEngineWrapper::EnablePrivateNetworkAccess(bool enable)
361 {
362 ark_web_engine_->EnablePrivateNetworkAccess(enable);
363 }
364
IsPrivateNetworkAccessEnabled()365 bool ArkWebEngineWrapper::IsPrivateNetworkAccessEnabled()
366 {
367 return ark_web_engine_->IsPrivateNetworkAccessEnabled();
368 }
369
SetWebDestroyMode(OHOS::NWeb::WebDestroyMode mode)370 void ArkWebEngineWrapper::SetWebDestroyMode(OHOS::NWeb::WebDestroyMode mode)
371 {
372 ark_web_engine_->SetWebDestroyMode(static_cast<int32_t>(mode));
373 }
374
375 } // namespace OHOS::ArkWeb
376