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
28 #include "base/bridge/ark_web_bridge_macros.h"
29
30 namespace OHOS::NWeb {
31
GetInstance()32 std::shared_ptr<NWebEngine> NWebEngine::GetInstance()
33 {
34 ArkWebRefPtr<OHOS::ArkWeb::ArkWebEngine> ark_web_engine = OHOS::ArkWeb::ArkWebEngine::GetInstance();
35 if (CHECK_REF_PTR_IS_NULL(ark_web_engine)) {
36 return nullptr;
37 }
38
39 return std::make_shared<OHOS::ArkWeb::ArkWebEngineWrapper>(ark_web_engine);
40 }
41
42 } // namespace OHOS::NWeb
43
44 namespace OHOS::ArkWeb {
45
ArkWebEngineWrapper(ArkWebRefPtr<ArkWebEngine> ark_web_engine)46 ArkWebEngineWrapper::ArkWebEngineWrapper(ArkWebRefPtr<ArkWebEngine> ark_web_engine) : ark_web_engine_(ark_web_engine) {}
47
CreateNWeb(std::shared_ptr<OHOS::NWeb::NWebCreateInfo> create_info)48 std::shared_ptr<OHOS::NWeb::NWeb> ArkWebEngineWrapper::CreateNWeb(
49 std::shared_ptr<OHOS::NWeb::NWebCreateInfo> create_info)
50 {
51 ArkWebRefPtr<ArkWebNWebCreateInfo> ark_web_create_info = nullptr;
52 if (!CHECK_SHARED_PTR_IS_NULL(create_info)) {
53 ark_web_create_info = new ArkWebNWebCreateInfoImpl(create_info);
54 }
55
56 ArkWebRefPtr<ArkWebNWeb> ark_web_nweb = ark_web_engine_->CreateNWeb(ark_web_create_info);
57 if (CHECK_REF_PTR_IS_NULL(ark_web_nweb)) {
58 return nullptr;
59 }
60
61 return std::make_shared<ArkWebNWebWrapper>(ark_web_nweb);
62 }
63
GetNWeb(int32_t nweb_id)64 std::shared_ptr<OHOS::NWeb::NWeb> ArkWebEngineWrapper::GetNWeb(int32_t nweb_id)
65 {
66 ArkWebRefPtr<ArkWebNWeb> ark_web_nweb = ark_web_engine_->GetNWeb(nweb_id);
67 if (CHECK_REF_PTR_IS_NULL(ark_web_nweb)) {
68 return nullptr;
69 }
70
71 return std::make_shared<ArkWebNWebWrapper>(ark_web_nweb);
72 }
73
GetDataBase()74 std::shared_ptr<OHOS::NWeb::NWebDataBase> ArkWebEngineWrapper::GetDataBase()
75 {
76 ArkWebRefPtr<ArkWebDataBase> ark_web_data_base = ark_web_engine_->GetDataBase();
77 if (CHECK_REF_PTR_IS_NULL(ark_web_data_base)) {
78 return nullptr;
79 }
80
81 return std::make_shared<ArkWebDataBaseWrapper>(ark_web_data_base);
82 }
83
GetWebStorage()84 std::shared_ptr<OHOS::NWeb::NWebWebStorage> ArkWebEngineWrapper::GetWebStorage()
85 {
86 ArkWebRefPtr<ArkWebWebStorage> ark_web_web_storage = ark_web_engine_->GetWebStorage();
87 if (CHECK_REF_PTR_IS_NULL(ark_web_web_storage)) {
88 return nullptr;
89 }
90
91 return std::make_shared<ArkWebWebStorageWrapper>(ark_web_web_storage);
92 }
93
GetCookieManager()94 std::shared_ptr<OHOS::NWeb::NWebCookieManager> ArkWebEngineWrapper::GetCookieManager()
95 {
96 ArkWebRefPtr<ArkWebCookieManager> ark_web_cookie_manager = ark_web_engine_->GetCookieManager();
97 if (CHECK_REF_PTR_IS_NULL(ark_web_cookie_manager)) {
98 return nullptr;
99 }
100
101 return std::make_shared<ArkWebCookieManagerWrapper>(ark_web_cookie_manager);
102 }
103
GetDownloadManager()104 std::shared_ptr<OHOS::NWeb::NWebDownloadManager> ArkWebEngineWrapper::GetDownloadManager()
105 {
106 ArkWebRefPtr<ArkWebDownloadManager> ark_web_download_manager = ark_web_engine_->GetDownloadManager();
107 if (CHECK_REF_PTR_IS_NULL(ark_web_download_manager)) {
108 return nullptr;
109 }
110
111 return std::make_shared<ArkWebDownloadManagerWrapper>(ark_web_download_manager);
112 }
113
SetWebTag(int32_t nweb_id,const char * web_tag)114 void ArkWebEngineWrapper::SetWebTag(int32_t nweb_id, const char* web_tag)
115 {
116 ark_web_engine_->SetWebTag(nweb_id, web_tag);
117 }
118
InitializeWebEngine(std::shared_ptr<OHOS::NWeb::NWebEngineInitArgs> init_args)119 void ArkWebEngineWrapper::InitializeWebEngine(std::shared_ptr<OHOS::NWeb::NWebEngineInitArgs> init_args)
120 {
121 if (CHECK_SHARED_PTR_IS_NULL(init_args)) {
122 ark_web_engine_->InitializeWebEngine(nullptr);
123 return;
124 }
125
126 ArkWebRefPtr<ArkWebEngineInitArgs> ark_web_engine_init_args = new ArkWebEngineInitArgsImpl(init_args);
127 ark_web_engine_->InitializeWebEngine(ark_web_engine_init_args);
128 }
129
PrepareForPageLoad(const std::string & url,bool preconnectable,int32_t num_sockets)130 void ArkWebEngineWrapper::PrepareForPageLoad(const std::string& url, bool preconnectable, int32_t num_sockets)
131 {
132 ArkWebString stUrl = ArkWebStringClassToStruct(url);
133
134 ark_web_engine_->PrepareForPageLoad(stUrl, preconnectable, num_sockets);
135
136 ArkWebStringStructRelease(stUrl);
137 }
138
SetWebDebuggingAccess(bool isEnableDebug)139 void ArkWebEngineWrapper::SetWebDebuggingAccess(bool isEnableDebug)
140 {
141 ark_web_engine_->SetWebDebuggingAccess(isEnableDebug);
142 }
143
AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)144 void ArkWebEngineWrapper::AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts)
145 {
146 ArkWebStringVector stHosts = ArkWebStringVectorClassToStruct(hosts);
147
148 ark_web_engine_->AddIntelligentTrackingPreventionBypassingList(stHosts);
149
150 ArkWebStringVectorStructRelease(stHosts);
151 }
152
RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)153 void ArkWebEngineWrapper::RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts)
154 {
155 ArkWebStringVector stHosts = ArkWebStringVectorClassToStruct(hosts);
156
157 ark_web_engine_->RemoveIntelligentTrackingPreventionBypassingList(stHosts);
158
159 ArkWebStringVectorStructRelease(stHosts);
160 }
161
ClearIntelligentTrackingPreventionBypassingList()162 void ArkWebEngineWrapper::ClearIntelligentTrackingPreventionBypassingList()
163 {
164 ark_web_engine_->ClearIntelligentTrackingPreventionBypassingList();
165 }
166
GetDefaultUserAgent()167 std::string ArkWebEngineWrapper::GetDefaultUserAgent()
168 {
169 ArkWebString stUA = ark_web_engine_->GetDefaultUserAgent();
170
171 std::string objUA = ArkWebStringStructToClass(stUA);
172 ArkWebStringStructRelease(stUA);
173 return objUA;
174 }
175
PauseAllTimers()176 void ArkWebEngineWrapper::PauseAllTimers()
177 {
178 ark_web_engine_->PauseAllTimers();
179 }
180
ResumeAllTimers()181 void ArkWebEngineWrapper::ResumeAllTimers()
182 {
183 ark_web_engine_->ResumeAllTimers();
184 }
185
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)186 void ArkWebEngineWrapper::PrefetchResource(const std::shared_ptr<OHOS::NWeb::NWebEnginePrefetchArgs>& pre_args,
187 const std::map<std::string, std::string>& additional_http_headers, const std::string& cache_key,
188 const uint32_t& cache_valid_time)
189 {
190 ArkWebRefPtr<ArkWebEnginePrefetchArgs> ark_web_engine_pre_args = new ArkWebEnginePrefetchArgsImpl(pre_args);
191 ArkWebStringMap stHeaders = ArkWebStringMapClassToStruct(additional_http_headers);
192 ArkWebString stCacheKey = ArkWebStringClassToStruct(cache_key);
193 ark_web_engine_->PrefetchResource(ark_web_engine_pre_args, stHeaders, stCacheKey, cache_valid_time);
194
195 ArkWebStringMapStructRelease(stHeaders);
196 ArkWebStringStructRelease(stCacheKey);
197 }
198
SetRenderProcessMode(ArkWebRenderProcessMode mode)199 void ArkWebEngineWrapper::SetRenderProcessMode(ArkWebRenderProcessMode mode)
200 {
201 ark_web_engine_->SetRenderProcessMode(static_cast<int32_t>(mode));
202 }
203
GetRenderProcessMode()204 ArkWebRenderProcessMode ArkWebEngineWrapper::GetRenderProcessMode()
205 {
206 return static_cast<ArkWebRenderProcessMode>(ark_web_engine_->GetRenderProcessMode());
207 }
208
ClearPrefetchedResource(const std::vector<std::string> & cache_key_list)209 void ArkWebEngineWrapper::ClearPrefetchedResource(const std::vector<std::string>& cache_key_list)
210 {
211 ArkWebStringVector stCacheKeyList = ArkWebStringVectorClassToStruct(cache_key_list);
212
213 ark_web_engine_->ClearPrefetchedResource(stCacheKeyList);
214
215 ArkWebStringVectorStructRelease(stCacheKeyList);
216 }
217
SetHostIP(const std::string & hostName,const std::string & address,int32_t aliveTime)218 void ArkWebEngineWrapper::SetHostIP(const std::string& hostName, const std::string& address, int32_t aliveTime)
219 {
220 ark_web_engine_->SetHostIP(ArkWebStringClassToStruct(hostName), ArkWebStringClassToStruct(address), aliveTime);
221 }
222
ClearHostIP(const std::string & hostName)223 void ArkWebEngineWrapper::ClearHostIP(const std::string& hostName)
224 {
225 ark_web_engine_->ClearHostIP(ArkWebStringClassToStruct(hostName));
226 }
227
WarmupServiceWorker(const std::string & url)228 void ArkWebEngineWrapper::WarmupServiceWorker(const std::string& url)
229 {
230 ArkWebString stUrl = ArkWebStringClassToStruct(url);
231
232 ark_web_engine_->WarmupServiceWorker(stUrl);
233
234 ArkWebStringStructRelease(stUrl);
235 }
236
SetWholeWebDrawing()237 void ArkWebEngineWrapper::SetWholeWebDrawing()
238 {
239 ark_web_engine_->SetWholeWebDrawing();
240 }
241
GetAdsBlockManager()242 std::shared_ptr<OHOS::NWeb::NWebAdsBlockManager> ArkWebEngineWrapper::GetAdsBlockManager()
243 {
244 ArkWebRefPtr<ArkWebAdsBlockManager> ark_web_adsblock_manager = ark_web_engine_->GetAdsBlockManager();
245 if (CHECK_REF_PTR_IS_NULL(ark_web_adsblock_manager)) {
246 return nullptr;
247 }
248
249 return std::make_shared<ArkWebAdsBlockManagerWrapper>(ark_web_adsblock_manager);
250 }
251
TrimMemoryByPressureLevel(int32_t memoryLevel)252 void ArkWebEngineWrapper::TrimMemoryByPressureLevel(int32_t memoryLevel)
253 {
254 ark_web_engine_->TrimMemoryByPressureLevel(memoryLevel);
255 }
256
257 } // namespace OHOS::ArkWeb
258