• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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