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