1 /*
2 * Copyright (c) 2022 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 <cstring>
17 #include <gtest/gtest.h>
18 #include <gmock/gmock.h>
19 #include <securec.h>
20 #include <ui/rs_surface_node.h>
21 #include <unordered_map>
22
23 #define private public
24 #include "nweb.h"
25 #include "nweb_helper.h"
26 #include "nweb_config_helper.h"
27 #include "nweb_adapter_helper.h"
28 #include "nweb_create_window.h"
29 #include "nweb_c_api.h"
30 #include "nweb_init_params.h"
31 #include "application_context.h"
32
33 using namespace testing;
34 using namespace testing::ext;
35 using namespace OHOS;
36 using namespace OHOS::Rosen;
37 using namespace OHOS::AbilityRuntime;
38
39 namespace OHOS {
40 namespace {
41 sptr<Surface> g_surface = nullptr;
42 const bool RESULT_OK = true;
43 const int DEFAULT_WIDTH = 2560;
44 const int DEFAULT_HEIGHT = 1396;
45 const int32_t NWEB_MAX_WIDTH = 7681;
46 const int32_t LTPO_STRATEGY = 1;
47 const std::string MOCK_NWEB_INSTALLATION_DIR = "/data/app/el1/bundle/public/com.ohos.arkwebcore";
48 std::shared_ptr<AbilityRuntime::ApplicationContext> g_applicationContext = nullptr;
49 } // namespace
50
51 namespace AbilityRuntime {
GetApplicationContext()52 std::shared_ptr<ApplicationContext> Context::GetApplicationContext()
53 {
54 return g_applicationContext;
55 }
56 } // namespace AbilityRuntime
57
58 namespace NWeb {
59
60 class NwebHelperTest : public testing::Test {
61 public:
62 static void SetUpTestCase(void);
63 static void TearDownTestCase(void);
64 void SetUp();
65 void TearDown();
66 };
67
68 class ApplicationContextMock : public ApplicationContext {
69 public:
70 MOCK_CONST_METHOD0(GetBaseDir, std::string());
71 };
72
73 class MockNWebEngine : public OHOS::NWeb::NWebEngine {
74 public:
CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info)75 std::shared_ptr<NWeb> CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info)
76 {
77 return nullptr;
78 }
79
GetNWeb(int32_t nweb_id)80 std::shared_ptr<NWeb> GetNWeb(int32_t nweb_id)
81 {
82 return nullptr;
83 }
84
GetDataBase()85 std::shared_ptr<NWebDataBase> GetDataBase()
86 {
87 return nullptr;
88 }
89
GetWebStorage()90 std::shared_ptr<NWebWebStorage> GetWebStorage()
91 {
92 return nullptr;
93 }
94
GetCookieManager()95 std::shared_ptr<NWebCookieManager> GetCookieManager()
96 {
97 return nullptr;
98 }
99
GetDownloadManager()100 std::shared_ptr<NWebDownloadManager> GetDownloadManager()
101 {
102 return nullptr;
103 }
104
SetWebTag(int32_t nweb_id,const char * web_tag)105 void SetWebTag(int32_t nweb_id, const char* web_tag) {}
106
InitializeWebEngine(std::shared_ptr<NWebEngineInitArgs> init_args)107 void InitializeWebEngine(std::shared_ptr<NWebEngineInitArgs> init_args) {}
108
PrepareForPageLoad(const std::string & url,bool preconnectable,int32_t num_sockets)109 void PrepareForPageLoad(const std::string& url, bool preconnectable, int32_t num_sockets) {}
110
SetWebDebuggingAccess(bool isEnableDebug)111 void SetWebDebuggingAccess(bool isEnableDebug) {}
112
AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)113 void AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts) {}
114
RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string> & hosts)115 void RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts) {}
ClearIntelligentTrackingPreventionBypassingList()116 void ClearIntelligentTrackingPreventionBypassingList() {}
117
GetDefaultUserAgent()118 std::string GetDefaultUserAgent()
119 {
120 return "";
121 }
122
PauseAllTimers()123 void PauseAllTimers() {}
124
ResumeAllTimers()125 void ResumeAllTimers() {}
126
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)127 void PrefetchResource(const std::shared_ptr<NWebEnginePrefetchArgs>& pre_args,
128 const std::map<std::string, std::string>& additional_http_headers, const std::string& cache_key,
129 const uint32_t& cache_valid_time)
130 {}
131
SetRenderProcessMode(RenderProcessMode mode)132 void SetRenderProcessMode(RenderProcessMode mode) {}
133
GetRenderProcessMode()134 RenderProcessMode GetRenderProcessMode()
135 {
136 return RenderProcessMode::SINGLE_MODE;
137 }
138
ClearPrefetchedResource(const std::vector<std::string> & cache_key_list)139 void ClearPrefetchedResource(const std::vector<std::string>& cache_key_list) {}
140
WarmupServiceWorker(const std::string & url)141 void WarmupServiceWorker(const std::string& url) {}
142
SetHostIP(const std::string & hostName,const std::string & address,int32_t aliveTime)143 void SetHostIP(const std::string& hostName, const std::string& address, int32_t aliveTime) {}
144
ClearHostIP(const std::string & hostName)145 void ClearHostIP(const std::string& hostName) {}
146
SetAppCustomUserAgent(const std::string & userAgent)147 void SetAppCustomUserAgent(const std::string& userAgent) {}
148
SetUserAgentForHosts(const std::string & userAgent,const std::vector<std::string> & hosts)149 void SetUserAgentForHosts(const std::string& userAgent, const std::vector<std::string>& hosts) {}
150
EnableWholeWebPageDrawing()151 void EnableWholeWebPageDrawing() {}
152
GetAdsBlockManager()153 std::shared_ptr<NWebAdsBlockManager> GetAdsBlockManager()
154 {
155 return nullptr;
156 }
157
EnableBackForwardCache(bool nativeEmbed,bool mediaTakeOver)158 void EnableBackForwardCache(bool nativeEmbed, bool mediaTakeOver) {}
159
RemoveAllCache(bool include_disk_files)160 void RemoveAllCache(bool include_disk_files) {}
161 };
162
SetUpTestCase(void)163 void NwebHelperTest::SetUpTestCase(void)
164 {
165 RSSurfaceNodeConfig config;
166 config.SurfaceNodeName = "webTestSurfaceName";
167 auto surfaceNode = RSSurfaceNode::Create(config, false);
168 EXPECT_NE(surfaceNode, nullptr);
169 g_surface = surfaceNode->GetSurface();
170 EXPECT_NE(g_surface, nullptr);
171 }
172
TearDownTestCase(void)173 void NwebHelperTest::TearDownTestCase(void)
174 {}
175
SetUp(void)176 void NwebHelperTest::SetUp(void)
177 {}
178
TearDown(void)179 void NwebHelperTest::TearDown(void)
180 {}
181
182 std::unordered_map<std::string, std::string> g_argsMap;
183
184 /**
185 * @tc.name: NWebHelper_SetBundlePath_001
186 * @tc.desc: SetBundlePath.
187 * @tc.type: FUNC
188 * @tc.require: AR000GGHJ8
189 */
190 HWTEST_F(NwebHelperTest, NWebHelper_SetBundlePath_001, TestSize.Level1)
191 {
192 int32_t nweb_id = 1;
193 bool result = NWebHelper::Instance().LoadNWebSDK();
194 EXPECT_FALSE(result);
195 NWebHelper::Instance().SetBundlePath(MOCK_NWEB_INSTALLATION_DIR);
196 result = NWebAdapterHelper::Instance().Init(false);
197 EXPECT_EQ(RESULT_OK, result);
198 std::shared_ptr<NWebCreateInfoImpl> create_info = std::make_shared<NWebCreateInfoImpl>();
199 std::shared_ptr<NWeb> nweb = NWebHelper::Instance().CreateNWeb(create_info);
200 EXPECT_EQ(nweb, nullptr);
201 std::shared_ptr<NWebDOHConfigImpl> config = std::make_shared<NWebDOHConfigImpl>();
202 NWebHelper::Instance().SetHttpDns(config);
203 auto nwebHelper = NWebHelper::Instance().GetNWeb(nweb_id);
204 EXPECT_EQ(nwebHelper, nullptr);
205 NWebHelper::Instance().PrepareForPageLoad("web_test", true, 0);
206 NWebHelper::Instance().WarmupServiceWorker("web_test");
207 NWebHelper::Instance().PrefetchResource(nullptr, {}, "web_test", 0);
208 NWebHelper::Instance().ClearPrefetchedResource({"web_test"});
209 NWebAdapterHelper::Instance().ReadConfigIfNeeded();
210 std::string bundleName = "LTPODynamicApp";
211 EXPECT_FALSE(NWebAdapterHelper::Instance().IsLTPODynamicApp(bundleName));
212 int32_t actualValue = NWebAdapterHelper::Instance().GetLTPOStrategy();
213 EXPECT_TRUE(actualValue);
214 NWebHelper::Instance().EnableBackForwardCache(true, true);
215 result = NWebHelper::Instance().InitAndRun(false);
216 EXPECT_FALSE(result);
217 ApplicationContextMock *contextMock = new ApplicationContextMock();
218 ASSERT_NE(contextMock, nullptr);
219 g_applicationContext.reset(contextMock);
220 EXPECT_CALL(*contextMock, GetBaseDir())
221 .Times(1)
222 .WillRepeatedly(::testing::Return(""));
223 result = NWebHelper::Instance().InitAndRun(false);
224 EXPECT_FALSE(result);
225 NWebAdapterHelper::Instance().CreateNWeb(g_surface, GetInitArgs(),
226 DEFAULT_WIDTH, DEFAULT_HEIGHT);
227 EXPECT_CALL(*contextMock, GetBaseDir())
228 .Times(2)
229 .WillRepeatedly(::testing::Return("test_web"));
230 result = NWebHelper::Instance().InitAndRun(false);
231 EXPECT_TRUE(result);
232 NWebAdapterHelper::Instance().CreateNWeb(g_surface, GetInitArgs(),
233 DEFAULT_WIDTH, DEFAULT_HEIGHT);
234 result = NWebHelper::Instance().LoadNWebSDK();
235 EXPECT_TRUE(result);
236 result = NWebHelper::Instance().LoadNWebSDK();
237 EXPECT_TRUE(result);
238 WebDownloadManager_PutDownloadCallback(nullptr);
239 g_applicationContext.reset();
240 }
241
242 /**
243 * @tc.name: NWebHelper_GetWebStorage_002
244 * @tc.desc: GetWebStorage.
245 * @tc.type: FUNC
246 * @tc.require: AR000GGHJ8
247 */
248 HWTEST_F(NwebHelperTest, NWebHelper_GetWebStorage_002, TestSize.Level1)
249 {
250 auto web_storage = NWebHelper::Instance().GetWebStorage();
251 bool result = false;
252 if (web_storage != nullptr) {
253 result = true;
254 }
255 EXPECT_EQ(RESULT_OK, result);
256 std::string config = NWebAdapterHelper::Instance().ParsePerfConfig("web", "test");
257 EXPECT_TRUE(config.empty());
258 NWebConfigHelper::Instance().perfConfig_.emplace("web/test", "web_test");
259 config = NWebAdapterHelper::Instance().ParsePerfConfig("web", "test");
260 EXPECT_FALSE(config.empty());
261 }
262
263 /**
264 * @tc.name: NWebHelper_GetDataBase_003
265 * @tc.desc: GetDataBase.
266 * @tc.type: FUNC
267 * @tc.require:issueI5OESN
268 */
269 HWTEST_F(NwebHelperTest, NWebHelper_GetDataBase_003, TestSize.Level1)
270 {
271 auto dataBase = NWebHelper::Instance().GetDataBase();
272 bool result = false;
273 if (dataBase != nullptr) {
274 result = true;
275 }
276 EXPECT_EQ(RESULT_OK, result);
277
278 std::shared_ptr<NWebCookieManager> cook = NWebHelper::Instance().GetCookieManager();
279 EXPECT_NE(cook, nullptr);
280
281 void *enhanceSurfaceInfo = nullptr;
282 int32_t temp = 1;
283 std::shared_ptr<NWeb> nweb =
284 NWebAdapterHelper::Instance().CreateNWeb(enhanceSurfaceInfo, GetInitArgs(),
285 DEFAULT_WIDTH, DEFAULT_HEIGHT);
286 EXPECT_EQ(nweb, nullptr);
287 enhanceSurfaceInfo = static_cast<void *>(&temp);
288 nweb = NWebAdapterHelper::Instance().CreateNWeb(enhanceSurfaceInfo, GetInitArgs(),
289 DEFAULT_WIDTH, DEFAULT_HEIGHT);
290 EXPECT_EQ(nweb, nullptr);
291 nweb = NWebAdapterHelper::Instance().CreateNWeb(enhanceSurfaceInfo, GetInitArgs(),
292 DEFAULT_WIDTH, NWEB_MAX_WIDTH);
293 EXPECT_EQ(nweb, nullptr);
294 nweb = NWebAdapterHelper::Instance().CreateNWeb(enhanceSurfaceInfo, GetInitArgs(),
295 NWEB_MAX_WIDTH, DEFAULT_HEIGHT);
296 EXPECT_EQ(nweb, nullptr);
297 std::shared_ptr<NWebCreateInfoImpl> create_info = std::make_shared<NWebCreateInfoImpl>();
298 nweb = NWebHelper::Instance().CreateNWeb(create_info);
299 EXPECT_EQ(nweb, nullptr);
300 }
301
302 /**
303 * @tc.name: NWebHelper_TryPreReadLib_004
304 * @tc.desc: TryPreReadLib.
305 * @tc.type: FUNC
306 * @tc.require: AR000GGHJ8
307 */
308 HWTEST_F(NwebHelperTest, NWebHelper_TryPreReadLib_004, TestSize.Level1)
309 {
310 std::string hapPath = "";
311 if (access(MOCK_NWEB_INSTALLATION_DIR.c_str(), F_OK) == 0) {
312 hapPath = MOCK_NWEB_INSTALLATION_DIR;
313 }
314 NWebHelper::Instance().TryPreReadLib(false, hapPath);
315 NWebHelper::Instance().TryPreReadLib(true, hapPath);
316 bool result = NWebHelper::Instance().Init(false);
317 EXPECT_TRUE(result);
318 sptr<Surface> surface = nullptr;
319 std::shared_ptr<NWeb> nweb =
320 NWebAdapterHelper::Instance().CreateNWeb(surface, GetInitArgs(),
321 DEFAULT_WIDTH, DEFAULT_HEIGHT);
322 EXPECT_EQ(nweb, nullptr);
323 nweb = NWebAdapterHelper::Instance().CreateNWeb(g_surface, GetInitArgs(),
324 DEFAULT_WIDTH, NWEB_MAX_WIDTH);
325 EXPECT_EQ(nweb, nullptr);
326 nweb = NWebAdapterHelper::Instance().CreateNWeb(g_surface, GetInitArgs(),
327 NWEB_MAX_WIDTH, DEFAULT_HEIGHT);
328 EXPECT_EQ(nweb, nullptr);
329 }
330
331 /**
332 * @tc.name: NWebHelper_GetConfigPath_005
333 * @tc.desc: GetConfigPath.
334 * @tc.type: FUNC
335 * @tc.require: AR000GGHJ8
336 */
337 HWTEST_F(NwebHelperTest, NWebHelper_GetConfigPath_005, TestSize.Level1)
338 {
339 std::string configFileName = "test";
340 std::string figPath = NWebConfigHelper::Instance().GetConfigPath(configFileName);
341 EXPECT_FALSE(figPath.empty());
342 std::shared_ptr<NWebEngineInitArgsImpl> initArgs = std::make_shared<NWebEngineInitArgsImpl>();
343 NWebAdapterHelper::Instance().ParseConfig(initArgs);
344 NWebHelper::Instance().PrepareForPageLoad("web_test", true, 0);
345 NWebHelper::Instance().WarmupServiceWorker("web_test");
346 NWebHelper::Instance().PrefetchResource(nullptr, {}, "web_test", 0);
347 NWebHelper::Instance().ClearPrefetchedResource({"web_test"});
348 NWebHelper::Instance().bundlePath_.clear();
349 NWebHelper::Instance().EnableBackForwardCache(true, true);
350 NWebHelper::Instance().SetCustomSchemeCmdLine("single-process");
351 bool result = NWebHelper::Instance().InitAndRun(false);
352 EXPECT_TRUE(result);
353 NWebHelper::Instance().SetConnectionTimeout(1);
354 NWebHelper::Instance().LoadWebEngine(true, false);
355
356 // To test SetRenderProcessMode and GetRenderProcessMode.
357 NWebHelper::Instance().SetRenderProcessMode(RenderProcessMode::SINGLE_MODE);
358 RenderProcessMode render_process_mode =
359 NWebHelper::Instance().GetRenderProcessMode();
360 EXPECT_EQ(render_process_mode, RenderProcessMode::SINGLE_MODE);
361 NWebHelper::Instance().SetRenderProcessMode(RenderProcessMode::MULTIPLE_MODE);
362 render_process_mode = NWebHelper::Instance().GetRenderProcessMode();
363 EXPECT_EQ(render_process_mode, RenderProcessMode::MULTIPLE_MODE);
364
365 NWebHelper::Instance().nwebEngine_ = nullptr;
366 NWebHelper::Instance().SetRenderProcessMode(RenderProcessMode::MULTIPLE_MODE);
367 EXPECT_EQ(NWebHelper::Instance().GetRenderProcessMode(), RenderProcessMode::SINGLE_MODE);
368 }
369
370 /**
371 * @tc.name: NWebHelper_LoadNWebSDK_006
372 * @tc.desc: LoadNWebSDK.
373 * @tc.type: FUNC
374 * @tc.require:
375 */
376 HWTEST_F(NwebHelperTest, NWebHelper_LoadNWebSDK_006, TestSize.Level1)
377 {
378 std::shared_ptr<NWebCreateInfo> create_info = std::make_shared<NWebCreateInfoImpl>();
379 NWebHelper::Instance().SetBundlePath(MOCK_NWEB_INSTALLATION_DIR);
380 bool result = NWebAdapterHelper::Instance().Init(false);
381 EXPECT_EQ(RESULT_OK, result);
382 std::shared_ptr<NWeb> nweb = NWebHelper::Instance().CreateNWeb(create_info);
383 EXPECT_EQ(nweb, nullptr);
384 result = NWebHelper::Instance().LoadNWebSDK();
385 EXPECT_TRUE(result);
386 static WebDownloadDelegateCallback *downloadCallback;
387 WebDownloader_CreateDownloadDelegateCallback(&downloadCallback);
388 EXPECT_NE(downloadCallback, nullptr);
__anonef8f59fc0202(NWebDownloadItem *downloadItem, WebBeforeDownloadCallbackWrapper *wrapper) 389 OnDownloadBeforeStart fun = [] (NWebDownloadItem *downloadItem, WebBeforeDownloadCallbackWrapper *wrapper) {};
390 WebDownloader_SetDownloadBeforeStart(downloadCallback, fun);
391 WebDownloadManager_PutDownloadCallback(downloadCallback);
__anonef8f59fc0302(NWebDownloadItem *downloadItem, WebDownloadItemCallbackWrapper *wrapper) 392 OnDownloadDidUpdate didUpdate = [] (NWebDownloadItem *downloadItem, WebDownloadItemCallbackWrapper *wrapper) {};
393 WebDownloader_SetDownloadDidUpdate(downloadCallback, didUpdate);
394 NWebDownloadItem *downloadItem = nullptr;
395 WebDownloadItem_CreateWebDownloadItem(&downloadItem);
396 EXPECT_NE(downloadItem, nullptr);
397 WebDownloader_ResumeDownloadStatic(downloadItem);
398 WebDownloader_StartDownload(1, "test_web");
399 WebDownload_Continue(nullptr, "test_web");
400 WebDownload_CancelBeforeDownload(nullptr);
401 WebDownload_PauseBeforeDownload(nullptr);
402 WebDownload_ResumeBeforeDownload(nullptr);
403 WebDownload_Cancel(nullptr);
404 WebDownload_Pause(nullptr);
405 WebDownload_Resume(nullptr);
406 long itemId = WebDownloadItem_GetDownloadItemId(downloadItem);
407 EXPECT_NE(itemId, -1);
408 WebDownloadItem_GetState(nullptr);
409 NWebDownloadItem *download = nullptr;
410 int speed = WebDownloadItem_CurrentSpeed(download);
411 EXPECT_EQ(speed, 0);
412 int complete = WebDownloadItem_PercentComplete(download);
413 EXPECT_EQ(complete, 0);
414 WebDownloadItem_SetReceivedBytes(downloadItem, 1);
415 WebDownloadItem_TotalBytes(downloadItem);
416 int64_t receivedBytes = WebDownloadItem_ReceivedBytes(downloadItem);
417 EXPECT_NE(receivedBytes, 0);
418 char* originalUrl = WebDownloadItem_OriginalUrl(downloadItem);
419 EXPECT_EQ(originalUrl, nullptr);
420 char* fileName = WebDownloadItem_SuggestedFileName(downloadItem);
421 EXPECT_EQ(fileName, nullptr);
422 char* disposition = WebDownloadItem_ContentDisposition(downloadItem);
423 EXPECT_EQ(disposition, nullptr);
424 }
425
426 /**
427 * @tc.name: NWebHelper_WebDownloadItem_IsPaused_007
428 * @tc.desc: WebDownloadItem_IsPaused.
429 * @tc.type: FUNC
430 * @tc.require:
431 */
432 HWTEST_F(NwebHelperTest, NWebHelper_WebDownloadItem_IsPaused_007, TestSize.Level1)
433 {
434 bool result = NWebHelper::Instance().LoadNWebSDK();
435 EXPECT_TRUE(result);
436 NWebDownloadItem *downloadItem = nullptr;
437 WebDownloadItem_CreateWebDownloadItem(&downloadItem);
438 EXPECT_NE(downloadItem, nullptr);
439 NWebDownloadItem *download = nullptr;
440 bool isPaused = WebDownloadItem_IsPaused(download);
441 EXPECT_FALSE(isPaused);
442 char* method = WebDownloadItem_Method(downloadItem);
443 EXPECT_EQ(method, nullptr);
444 WebDownloadItem_LastErrorCode(downloadItem);
445 char* receivedSlices = WebDownloadItem_ReceivedSlices(downloadItem);
446 EXPECT_EQ(receivedSlices, nullptr);
447 char* lastModified = WebDownloadItem_LastModified(downloadItem);
448 EXPECT_EQ(lastModified, nullptr);
449 int nWebId = WebDownloadItem_NWebId(download);
450 EXPECT_EQ(nWebId, 0);
451 WebDownloadItem_Destroy(downloadItem);
452 DestroyBeforeDownloadCallbackWrapper(nullptr);
453 DestroyDownloadItemCallbackWrapper(nullptr);
454 WebDownloadItem_SetGuid(downloadItem, "test_web");
455 WebDownloadItem_SetUrl(downloadItem, "test_web");
456 WebDownloadItem_SetFullPath(downloadItem, "test_web");
457 WebDownloadItem_SetETag(downloadItem, "test_web");
458 WebDownloadItem_SetLastModified(downloadItem, "test_web");
459 WebDownloadItem_SetMimeType(downloadItem, "test_web");
460 WebDownloadItem_SetReceivedBytes(downloadItem, 1);
461 WebDownloadItem_SetTotalBytes(downloadItem, 1);
462 WebDownloadItem_SetReceivedSlices(downloadItem, "test_web");
463 char* guid = WebDownloadItem_Guid(downloadItem);
464 EXPECT_NE(guid, nullptr);
465 int64_t totalBytes = WebDownloadItem_TotalBytes(downloadItem);
466 EXPECT_NE(totalBytes, 0);
467 int64_t receivedBytes = WebDownloadItem_ReceivedBytes(downloadItem);
468 EXPECT_NE(receivedBytes, 0);
469 char* fullPath = WebDownloadItem_FullPath(downloadItem);
470 EXPECT_NE(fullPath, nullptr);
471 char* url = WebDownloadItem_Url(downloadItem);
472 EXPECT_NE(url, nullptr);
473 char* eTag = WebDownloadItem_ETag(downloadItem);
474 EXPECT_NE(eTag, nullptr);
475 char* mimeType = WebDownloadItem_MimeType(downloadItem);
476 EXPECT_NE(mimeType, nullptr);
477 long itemId = WebDownloadItem_GetDownloadItemId(downloadItem);
478 auto state1 = WebDownload_GetItemState(nWebId, itemId);
479 auto state2 = WebDownload_GetItemStateByGuid("test_web");
480 WebDownload_GetItemStateByGuidV2("test_web");
481 EXPECT_EQ(state1, state2);
482 }
483
484 /**
485 * @tc.name: NWebHelper_LoadWebEngine_008
486 * @tc.desc: LoadWebEngine.
487 * @tc.type: FUNC
488 * @tc.require: AR000GGHJ8
489 */
490 HWTEST_F(NwebHelperTest, NWebHelper_LoadWebEngine_008, TestSize.Level1)
491 {
492 NWebHelper::Instance().nwebEngine_ = nullptr;
493 std::shared_ptr<NWebCreateInfoImpl> create_info = std::make_shared<NWebCreateInfoImpl>();
494 std::shared_ptr<NWeb> nweb = NWebHelper::Instance().CreateNWeb(create_info);
495 EXPECT_EQ(nweb, nullptr);
496 nweb = NWebHelper::Instance().GetNWeb(1);
497 EXPECT_EQ(nweb, nullptr);
498 std::shared_ptr<NWebCookieManager> cook = NWebHelper::Instance().GetCookieManager();
499 EXPECT_NE(cook, nullptr);
500 auto manager = NWebHelper::Instance().GetAdsBlockManager();
501 EXPECT_NE(manager, nullptr);
502 std::shared_ptr<NWebDOHConfigImpl> config = std::make_shared<NWebDOHConfigImpl>();
503 NWebHelper::Instance().SetHttpDns(config);
504 NWebHelper::Instance().PrepareForPageLoad("web_test", true, 0);
505 NWebHelper::Instance().WarmupServiceWorker("web_test");
506 NWebHelper::Instance().GetDataBase();
507 std::shared_ptr<NWebWebStorage> storage = NWebHelper::Instance().GetWebStorage();
508 EXPECT_NE(storage, nullptr);
509 NWebHelper::Instance().SetConnectionTimeout(1);
510 std::vector<std::string> hosts;
511 NWebHelper::Instance().AddIntelligentTrackingPreventionBypassingList(hosts);
512 NWebHelper::Instance().RemoveIntelligentTrackingPreventionBypassingList(hosts);
513 NWebHelper::Instance().ClearIntelligentTrackingPreventionBypassingList();
514 NWebHelper::Instance().GetDefaultUserAgent();
515 NWebHelper::Instance().SetAppCustomUserAgent("web_test");
516 NWebHelper::Instance().SetUserAgentForHosts("web_test", hosts);
517 NWebHelper::Instance().PauseAllTimers();
518 NWebHelper::Instance().ResumeAllTimers();
519 NWebHelper::Instance().SetWebDestroyMode(WebDestroyMode::NORMAL_MODE);
520 EXPECT_NE(NWebHelper::Instance().nwebEngine_, nullptr);
521 NWebHelper::Instance().LoadWebEngine(true, false);
522 bool result = NWebHelper::Instance().GetWebEngine(true);
523 EXPECT_TRUE(result);
524 result = NWebHelper::Instance().GetWebEngine(true);
525 EXPECT_TRUE(result);
526 cook = NWebHelper::Instance().GetCookieManager();
527 EXPECT_NE(cook, nullptr);
528 manager = NWebHelper::Instance().GetAdsBlockManager();
529 EXPECT_NE(manager, nullptr);
530 NWebHelper::Instance().SetWebTag(1, "webtag");
531
532 NWebHelper::Instance().SetWebTag(1, "webtag");
533 NWebHelper::Instance().AddIntelligentTrackingPreventionBypassingList(hosts);
534 NWebHelper::Instance().RemoveIntelligentTrackingPreventionBypassingList(hosts);
535 NWebHelper::Instance().ClearIntelligentTrackingPreventionBypassingList();
536 NWebHelper::Instance().GetDefaultUserAgent();
537 NWebHelper::Instance().SetAppCustomUserAgent("web_test");
538 NWebHelper::Instance().SetUserAgentForHosts("web_test", hosts);
539 NWebHelper::Instance().PauseAllTimers();
540 NWebHelper::Instance().ResumeAllTimers();
541 NWebHelper::Instance().SetWebDestroyMode(WebDestroyMode::NORMAL_MODE);
542 NWebHelper::Instance().SetWebDebuggingAccess(true);
543 NWebHelper::Instance().SetWebDebuggingAccessAndPort(true, 80);
544 NWebHelper::Instance().SaveSchemeVector("web_test", 8080);
545 result = NWebHelper::Instance().HasLoadWebEngine();
546 EXPECT_TRUE(result);
547 result = NWebHelper::Instance().RegisterCustomSchemes();
548 EXPECT_FALSE(result);
549 }
550
551 /**
552 * @tc.name: NWebHelper_GetPerfConfig_001
553 * @tc.desc: GetPerfConfig.
554 * @tc.type: FUNC
555 * @tc.require:
556 */
557 HWTEST_F(NwebHelperTest, NWebHelper_GetPerfConfig_001, TestSize.Level1)
558 {
559 EXPECT_TRUE(NWebAdapterHelper::Instance().GetPerfConfig("test").empty());
560 NWebConfigHelper::Instance().ltpoConfig_["test"] = {OHOS::NWeb::FrameRateSetting{0, 0, 0}};
561 EXPECT_FALSE(NWebAdapterHelper::Instance().GetPerfConfig("test").empty());
562 NWebConfigHelper::Instance().ltpoConfig_.clear();
563 }
564
565 /**
566 * @tc.name: NWebHelper_ParseNWebLTPOConfig_001
567 * @tc.desc: ParseNWebLTPOConfig.
568 * @tc.type: FUNC
569 * @tc.require:
570 */
571 HWTEST_F(NwebHelperTest, NWebHelper_ParseNWebLTPOConfig_001, TestSize.Level1)
572 {
573 EXPECT_TRUE(NWebConfigHelper::Instance().ltpoConfig_.empty());
574 std::shared_ptr<NWebEngineInitArgsImpl> initArgs = std::make_shared<NWebEngineInitArgsImpl>();
575 NWebAdapterHelper::Instance().ParseConfig(initArgs);
576 EXPECT_TRUE(NWebConfigHelper::Instance().ltpoConfig_.empty());
577 }
578
579 /**
580 * @tc.name: NWebHelper_SetHostIP_001
581 * @tc.desc: SetHostIP.
582 * @tc.type: FUNC
583 * @tc.require:
584 */
585 HWTEST_F(NwebHelperTest, NWebHelper_SetHostIP_001, TestSize.Level1)
586 {
587 std::string hostName = "hello";
588 std::string address = "world";
589 int32_t aliveTime = 0;
590
591 NWebHelper::Instance().nwebEngine_ = nullptr;
592 NWebHelper::Instance().SetHostIP(hostName, address, aliveTime);
593 EXPECT_EQ(NWebHelper::Instance().nwebEngine_, nullptr);
594
595 auto nwebEngineMock = std::make_shared<MockNWebEngine>();
596 NWebHelper::Instance().nwebEngine_ = nwebEngineMock;
597 NWebHelper::Instance().SetHostIP(hostName, address, aliveTime);
598 EXPECT_NE(NWebHelper::Instance().nwebEngine_, nullptr);
599
600 NWebHelper::Instance().nwebEngine_ = nullptr;
601 }
602
603 /**
604 * @tc.name: NWebHelper_ClearHostIP_001
605 * @tc.desc: ClearHostIP.
606 * @tc.type: FUNC
607 * @tc.require:
608 */
609 HWTEST_F(NwebHelperTest, NWebHelper_ClearHostIP_001, TestSize.Level1)
610 {
611 int32_t nweb_id = 1;
612 auto nwebHelper = NWebHelper::Instance().GetNWeb(nweb_id);
613 EXPECT_EQ(nwebHelper, nullptr);
614
615 std::string hostName = "name";
616 NWebHelper::Instance().nwebEngine_ = nullptr;
617 NWebHelper::Instance().ClearHostIP(hostName);
618 EXPECT_EQ(NWebHelper::Instance().nwebEngine_, nullptr);
619
620 auto nwebengineMock = std::make_shared<MockNWebEngine>();
621 NWebHelper::Instance().nwebEngine_ = nwebengineMock;
622 NWebHelper::Instance().ClearHostIP(hostName);
623 EXPECT_NE(NWebHelper::Instance().nwebEngine_, nullptr);
624
625 NWebHelper::Instance().nwebEngine_ = nullptr;
626 }
627
628 /**
629 * @tc.name: NWebHelper_EnableWholeWebPageDrawing_001
630 * @tc.desc: EnableWholeWebPageDrawing.
631 * @tc.type: FUNC
632 * @tc.require:
633 */
634 HWTEST_F(NwebHelperTest, NWebHelper_EnableWholeWebPageDrawing_001, TestSize.Level1)
635 {
636 int32_t nweb_id = 1;
637 auto nwebHelper = NWebHelper::Instance().GetNWeb(nweb_id);
638 EXPECT_EQ(nwebHelper, nullptr);
639
640 auto nwebengineMock = std::make_shared<MockNWebEngine>();
641 NWebHelper::Instance().nwebEngine_ = nwebengineMock;
642 NWebHelper::Instance().EnableWholeWebPageDrawing();
643 EXPECT_NE(NWebHelper::Instance().nwebEngine_, nullptr);
644
645 NWebHelper::Instance().nwebEngine_ = nullptr;
646 }
647
648 /**
649 * @tc.name: NWebHelper_GetAdsBlockManager_001
650 * @tc.desc: GetAdsBlockManager.
651 * @tc.type: FUNC
652 * @tc.require:
653 */
654 HWTEST_F(NwebHelperTest, NWebHelper_GetAdsBlockManager_001, TestSize.Level1)
655 {
656 NWebHelper::Instance().nwebEngine_ = nullptr;
657 std::shared_ptr<NWebCreateInfoImpl> create_info = std::make_shared<NWebCreateInfoImpl>();
658 std::shared_ptr<NWeb> nweb = NWebHelper::Instance().CreateNWeb(create_info);
659 EXPECT_EQ(nweb, nullptr);
660 nweb = NWebHelper::Instance().GetNWeb(1);
661 EXPECT_EQ(nweb, nullptr);
662 auto manager = NWebHelper::Instance().GetAdsBlockManager();
663 EXPECT_NE(manager, nullptr);
664 }
665
666 /**
667 * @tc.name: NWebHelper_TrimMemoryByPressureLevel_001
668 * @tc.desc: TrimMemoryByPressureLevel.
669 * @tc.type: FUNC
670 * @tc.require:
671 */
672 HWTEST_F(NwebHelperTest, NWebHelper_TrimMemoryByPressureLevel_001, TestSize.Level1)
673 {
674 int32_t nweb_id = 1;
675 auto nwebHelper = NWebHelper::Instance().GetNWeb(nweb_id);
676 EXPECT_EQ(nwebHelper, nullptr);
677
678 int32_t memoryLevel = 1;
679 NWebHelper::Instance().nwebEngine_ = nullptr;
680 NWebHelper::Instance().TrimMemoryByPressureLevel(memoryLevel);
681 EXPECT_EQ(NWebHelper::Instance().nwebEngine_, nullptr);
682
683 auto nwebengineMock = std::make_shared<MockNWebEngine>();
684 NWebHelper::Instance().nwebEngine_ = nwebengineMock;
685 NWebHelper::Instance().TrimMemoryByPressureLevel(memoryLevel);
686 EXPECT_NE(NWebHelper::Instance().nwebEngine_, nullptr);
687
688 NWebHelper::Instance().nwebEngine_ = nullptr;
689 }
690
691 /**
692 * @tc.name: NWebHelper_ParseNWebLTPOApp_001
693 * @tc.desc: ParseNWebLTPOApp.
694 * @tc.type: FUNC
695 * @tc.require:
696 */
697 HWTEST_F(NwebHelperTest, NWebHelper_ParseNWebLTPOApp_001, TestSize.Level1)
698 {
699 EXPECT_TRUE(NWebConfigHelper::Instance().ltpoAllowedApps_.empty());
700 EXPECT_FALSE(NWebConfigHelper::Instance().IsLTPODynamicApp(""));
701 std::shared_ptr<NWebEngineInitArgsImpl> initArgs = std::make_shared<NWebEngineInitArgsImpl>();
702 NWebAdapterHelper::Instance().ParseConfig(initArgs);
703 EXPECT_TRUE(NWebConfigHelper::Instance().ltpoAllowedApps_.empty());
704 EXPECT_FALSE(NWebConfigHelper::Instance().IsLTPODynamicApp(""));
705 EXPECT_FALSE(NWebAdapterHelper::Instance().IsLTPODynamicApp(""));
706
707 NWebConfigHelper::Instance().ltpoStrategy_ = LTPO_STRATEGY;
708 NWebAdapterHelper::Instance().ParseConfig(initArgs);
709 EXPECT_EQ(NWebConfigHelper::Instance().GetLTPOStrategy(), LTPO_STRATEGY);
710 EXPECT_EQ(NWebAdapterHelper::Instance().GetLTPOStrategy(), LTPO_STRATEGY);
711 }
712
713 /**
714 * @tc.name: NWebHelper_GetWebEngine_001
715 * @tc.desc: GetWebEngine.
716 * @tc.type: FUNC
717 * @tc.require:
718 */
719 HWTEST_F(NwebHelperTest, NWebHelper_GetWebEngine_001, TestSize.Level1)
720 {
721 NWebHelper::Instance().nwebEngine_ = nullptr;
722 NWebHelper::Instance().bundlePath_ = "";
723 g_applicationContext.reset();
724 bool result = NWebHelper::Instance().GetWebEngine(true);
725 EXPECT_FALSE(result);
726 ApplicationContextMock *contextMock = new ApplicationContextMock();
727 ASSERT_NE(contextMock, nullptr);
728 g_applicationContext.reset(contextMock);
729 result = NWebHelper::Instance().GetWebEngine(true);
730 EXPECT_FALSE(result);
731 }
732
733 /**
734 * @tc.name: NWebHelper_RemoveAllCache
735 * @tc.desc: RemoveAllCache.
736 * @tc.type: FUNC
737 * @tc.require:
738 */
739 HWTEST_F(NwebHelperTest, NWebHelper_RemoveAllCache_001, TestSize.Level1)
740 {
741 bool result = NWebAdapterHelper::Instance().Init(false);
742 EXPECT_TRUE(result);
743 NWebHelper::Instance().LoadWebEngine(true, false);
744 bool ret = NWebHelper::Instance().GetWebEngine(true);
745 EXPECT_TRUE(ret);
746
747 NWebHelper::Instance().RemoveAllCache(true);
748 }
749
750 } // namespace OHOS::NWeb
751 }
752