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