1 /*
2 * Copyright (c) 2025 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 <gtest/gtest.h>
17 #include <gmock/gmock.h>
18 #include <securec.h>
19
20 #define private public
21 #include "nweb.h"
22 #include "nweb_helper.h"
23 #include "nweb_config_helper.h"
24 #include "nweb_adapter_helper.h"
25 #include "base/web/webview/interfaces/native/arkweb_interface.h"
26
27 using namespace testing;
28 using namespace testing::ext;
29
30 namespace OHOS {
31 namespace NWeb {
32 class MockNWebEngine : public OHOS::NWeb::NWebEngine {
33 public:
CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info)34 std::shared_ptr<NWeb> CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info)
35 {
36 return nullptr;
37 }
38
GetNWeb(int32_t nweb_id)39 std::shared_ptr<NWeb> GetNWeb(int32_t nweb_id)
40 {
41 return nullptr;
42 }
43
GetDataBase()44 std::shared_ptr<NWebDataBase> GetDataBase()
45 {
46 return nullptr;
47 }
48
GetWebStorage()49 std::shared_ptr<NWebWebStorage> GetWebStorage()
50 {
51 return nullptr;
52 }
53
GetCookieManager()54 std::shared_ptr<NWebCookieManager> GetCookieManager()
55 {
56 return nullptr;
57 }
58
GetDownloadManager()59 std::shared_ptr<NWebDownloadManager> GetDownloadManager()
60 {
61 return nullptr;
62 }
63
SetWebTag(int32_t nweb_id,const char * web_tag)64 void SetWebTag(int32_t nweb_id, const char* web_tag) {}
65
InitializeWebEngine(std::shared_ptr<NWebEngineInitArgs> init_args)66 void InitializeWebEngine(std::shared_ptr<NWebEngineInitArgs> init_args) {}
67
PrepareForPageLoad(const std::string & url,bool preconnectable,int32_t num_sockets)68 void PrepareForPageLoad(const std::string& url, bool preconnectable, int32_t num_sockets) {}
69
SetWebDebuggingAccess(bool isEnableDebug)70 void SetWebDebuggingAccess(bool isEnableDebug) {}
71
AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)72 void AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts) {}
73
RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)74 void RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts) {}
ClearIntelligentTrackingPreventionBypassingList()75 void ClearIntelligentTrackingPreventionBypassingList() {}
76
GetDefaultUserAgent()77 std::string GetDefaultUserAgent()
78 {
79 return "";
80 }
81
PauseAllTimers()82 void PauseAllTimers() {}
83
ResumeAllTimers()84 void ResumeAllTimers() {}
85
PrefetchResource(const std::shared_ptr<NWebEnginePrefetchArgs> & pre_args,const std::map<std::string,std::string> & additional_http_headers,const std::string & cache_key,const uint32_t & cache_valid_time)86 void PrefetchResource(const std::shared_ptr<NWebEnginePrefetchArgs>& pre_args,
87 const std::map<std::string, std::string>& additional_http_headers, const std::string& cache_key,
88 const uint32_t& cache_valid_time)
89 {}
90
SetRenderProcessMode(RenderProcessMode mode)91 void SetRenderProcessMode(RenderProcessMode mode) {}
92
GetRenderProcessMode()93 RenderProcessMode GetRenderProcessMode()
94 {
95 return RenderProcessMode::SINGLE_MODE;
96 }
97
ClearPrefetchedResource(const std::vector<std::string> & cache_key_list)98 void ClearPrefetchedResource(const std::vector<std::string>& cache_key_list) {}
99
WarmupServiceWorker(const std::string & url)100 void WarmupServiceWorker(const std::string& url) {}
101
SetHostIP(const std::string & hostName,const std::string & address,int32_t aliveTime)102 void SetHostIP(const std::string& hostName, const std::string& address, int32_t aliveTime) {}
103
ClearHostIP(const std::string & hostName)104 void ClearHostIP(const std::string& hostName) {}
105
SetWholeWebDrawing()106 void SetWholeWebDrawing() {}
107
GetAdsBlockManager()108 std::shared_ptr<NWebAdsBlockManager> GetAdsBlockManager()
109 {
110 return nullptr;
111 }
112
EnableBackForwardCache(bool nativeEmbed,bool mediaTakeOver)113 void EnableBackForwardCache(bool nativeEmbed, bool mediaTakeOver) {}
114
RemoveAllCache(bool include_disk_files)115 void RemoveAllCache(bool include_disk_files) {}
116 };
117
118 class OHArkWebInterfaceTest : public testing::Test {
119 public:
120 static void SetUpTestCase(void);
121 static void TearDownTestCase(void);
122 void SetUp();
123 void TearDown();
124 };
125
SetUpTestCase(void)126 void OHArkWebInterfaceTest::SetUpTestCase(void)
127 {}
128
TearDownTestCase(void)129 void OHArkWebInterfaceTest::TearDownTestCase(void)
130 {}
131
SetUp(void)132 void OHArkWebInterfaceTest::SetUp(void)
133 {}
134
TearDown(void)135 void OHArkWebInterfaceTest::TearDown(void)
136 {}
137
138 /**
139 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_001
140 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadComponentAPI
141 */
142 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_001, TestSize.Level1) {
143 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_COMPONENT;
144 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
145 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
146
147 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
148 EXPECT_NE(result, nullptr);
149
150 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
151 EXPECT_NE(result1, nullptr);
152
153 OH_ArkWeb_DestroyGlobalPointersForTest();
154 NWebHelper::Instance().nwebEngine_ = nullptr;
155 NWebHelper::Instance().bundlePath_ = "";
156 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
157 EXPECT_EQ(result2, nullptr);
158 }
159
160 /**
161 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_002
162 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadControllerAPI
163 */
164 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_002, TestSize.Level1) {
165 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_CONTROLLER;
166 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
167 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
168
169 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
170 EXPECT_NE(result, nullptr);
171
172 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
173 EXPECT_NE(result1, nullptr);
174
175 OH_ArkWeb_DestroyGlobalPointersForTest();
176 NWebHelper::Instance().nwebEngine_ = nullptr;
177 NWebHelper::Instance().bundlePath_ = "";
178 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
179 EXPECT_EQ(result2, nullptr);
180 }
181
182 /**
183 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_003
184 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadWebMessagePortAPI
185 */
186 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_003, TestSize.Level1) {
187 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_WEB_MESSAGE_PORT;
188 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
189 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
190
191 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
192 EXPECT_NE(result, nullptr);
193
194 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
195 EXPECT_NE(result1, nullptr);
196
197 OH_ArkWeb_DestroyGlobalPointersForTest();
198 NWebHelper::Instance().nwebEngine_ = nullptr;
199 NWebHelper::Instance().bundlePath_ = "";
200 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
201 EXPECT_EQ(result2, nullptr);
202 }
203
204 /**
205 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_004
206 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadWebMessageAPI
207 */
208 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_004, TestSize.Level1) {
209 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_WEB_MESSAGE;
210 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
211 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
212
213 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
214 EXPECT_NE(result, nullptr);
215
216 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
217 EXPECT_NE(result1, nullptr);
218
219 OH_ArkWeb_DestroyGlobalPointersForTest();
220 NWebHelper::Instance().nwebEngine_ = nullptr;
221 NWebHelper::Instance().bundlePath_ = "";
222 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
223 EXPECT_EQ(result2, nullptr);
224 }
225
226
227 /**
228 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_005
229 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadCookieManagerAPI
230 */
231 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_005, TestSize.Level1) {
232 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_COOKIE_MANAGER;
233 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
234 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
235 NWebHelper::Instance().initFlag_ = true;
236
237 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
238 EXPECT_NE(result, nullptr);
239
240 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
241 EXPECT_NE(result1, nullptr);
242
243 OH_ArkWeb_DestroyGlobalPointersForTest();
244 NWebHelper::Instance().nwebEngine_ = nullptr;
245 NWebHelper::Instance().bundlePath_ = "";
246 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
247 EXPECT_EQ(result2, nullptr);
248 }
249
250 /**
251 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_006
252 * @tc.desc : Test OH_ArkWeb_GetNativeAPI->LoadJavaScriptValueAPI
253 */
254 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_GetNativeAPI_006, TestSize.Level1) {
255 ArkWeb_NativeAPIVariantKind type = ARKWEB_NATIVE_JAVASCRIPT_VALUE;
256 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
257 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
258
259 ArkWeb_AnyNativeAPI* result = OH_ArkWeb_GetNativeAPI(type);
260 EXPECT_NE(result, nullptr);
261
262 ArkWeb_AnyNativeAPI* result1 = OH_ArkWeb_GetNativeAPI(type);
263 EXPECT_NE(result1, nullptr);
264
265 OH_ArkWeb_DestroyGlobalPointersForTest();
266 NWebHelper::Instance().nwebEngine_ = nullptr;
267 NWebHelper::Instance().bundlePath_ = "";
268 ArkWeb_AnyNativeAPI* result2 = OH_ArkWeb_GetNativeAPI(type);
269 EXPECT_EQ(result2, nullptr);
270 }
271
272 /**
273 * @tc.name : OHArkWebInterfaceTest_OH_ArkWeb_RegisterScrollCallback
274 * @tc.desc : Test OH_ArkWeb_RegisterScrollCallback
275 */
276 HWTEST_F(OHArkWebInterfaceTest, OHArkWebInterfaceTest_OH_ArkWeb_RegisterScrollCallback, TestSize.Level1) {
277 const char* webTag = "testWebTag";
278 void* userData = nullptr;
__anonc6ac4f470102(const char* webTag, void* userData, double x, double y) 279 ArkWeb_OnScrollCallback callback = [](const char* webTag, void* userData, double x, double y) {};
280 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
281 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
282 bool result = OH_ArkWeb_RegisterScrollCallback(webTag, callback, userData);
283 EXPECT_EQ(result, false);
284 result = OH_ArkWeb_RegisterScrollCallback(webTag, callback, userData);
285 EXPECT_EQ(result, false);
286 OH_ArkWeb_DestroyGlobalPointersForTest();
287 NWebHelper::Instance().nwebEngine_ = nullptr;
288 NWebHelper::Instance().bundlePath_ = "";
289 result = OH_ArkWeb_RegisterScrollCallback(webTag, callback, userData);
290 EXPECT_EQ(result, false);
291 }
292
293 }
294 }