1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <cstdint>
17 #include <gtest/gtest.h>
18 #include <string>
19 #include <vector>
20
21 #include "arkweb_utils.h"
22 #include "parameters.h"
23 #include "system_properties_adapter_impl.h"
24
25 using namespace testing::ext;
26
27 namespace OHOS::ArkWeb {
28 #if defined(webview_arm64)
29 const std::string ARK_WEB_CORE_HAP_LIB_PATH =
30 "/data/storage/el1/bundle/arkwebcore/libs/arm64";
31 const std::string ARK_WEB_CORE_LEGACY_HAP_LIB_PATH =
32 "/data/storage/el1/bundle/arkwebcorelegacy/libs/arm64";
33 const std::string ARK_WEB_CORE_PATH_FOR_MOCK = "libs/arm64";
34 const std::string ARK_WEB_CORE_PATH_FOR_BUNDLE = "arkwebcore/libs/arm64";
35 const std::string ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE = "arkwebcorelegacy/libs/arm64";
36 #elif defined(webview_x86_64)
37 const std::string ARK_WEB_CORE_HAP_LIB_PATH =
38 "/data/storage/el1/bundle/arkwebcore/libs/x86_64";
39 const std::string ARK_WEB_CORE_LEGACY_HAP_LIB_PATH =
40 "/data/storage/el1/bundle/arkwebcorelegacy/libs/x86_64";
41 const std::string ARK_WEB_CORE_PATH_FOR_MOCK = "libs/x86_64";
42 const std::string ARK_WEB_CORE_PATH_FOR_BUNDLE = "arkwebcore/libs/x86_64";
43 const std::string ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE = "arkwebcorelegacy/libs/x86_64";
44 #else
45 const std::string ARK_WEB_CORE_HAP_LIB_PATH =
46 "/data/storage/el1/bundle/arkwebcore/libs/arm";
47 const std::string ARK_WEB_CORE_LEGACY_HAP_LIB_PATH =
48 "/data/storage/el1/bundle/arkwebcorelegacy/libs/arm";
49 const std::string ARK_WEB_CORE_PATH_FOR_MOCK = "libs/arm";
50 const std::string ARK_WEB_CORE_PATH_FOR_BUNDLE = "arkwebcore/libs/arm";
51 const std::string ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE = "arkwebcorelegacy/libs/arm";
52 #endif
53
54 #if defined(IS_ASAN)
55 #if defined(webview_arm64)
56 const std::string ARK_WEB_CORE_ASAN_PATH_FOR_BUNDLE = "arkwebcore_asan/libs/arm64";
57 const std::string WEBVIEW_RELATIVE_SANDBOX_PATH_FOR_LIBRARY =
58 "data/storage/el1/bundle/arkwebcore_asan/libs/arm64/libarkweb_engine.so";
59 #elif defined(webview_x86_64)
60 const std::string ARK_WEB_CORE_ASAN_PATH_FOR_BUNDLE = "arkwebcore_asan/libs/x86_64";
61 #else
62 const std::string ARK_WEB_CORE_ASAN_PATH_FOR_BUNDLE = "arkwebcore_asan/libs/arm";
63 #endif
64 #endif
65
66 const std::string PRECONFIG_LEGACY_HAP_PATH = "/system/app/ArkWebCoreLegacy/ArkWebCoreLegacy.hap";
67 const std::string PRECONFIG_EVERGREEN_HAP_PATH =
68 "/system/app/ArkWebCore/ArkWebCore.hap";
69 const std::string SANDBOX_LEGACY_HAP_PATH = "/data/storage/el1/bundle/arkwebcorelegacy/entry.hap";
70 const std::string SANDBOX_EVERGREEN_HAP_PATH = "/data/storage/el1/bundle/arkwebcore/entry.hap";
71
72 const std::string JSON_CONFIG_PATH =
73 "/data/service/el1/public/update/param_service/install/system/etc/ArkWebSafeBrowsing/generic/ArkWebCoreCfg.json";
74
TEST(arkweb_utils_test,setActiveWebEngineVersion001)75 TEST(arkweb_utils_test, setActiveWebEngineVersion001) {
76 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
77
78 EXPECT_EQ(getAppWebEngineVersion(), ArkWebEngineVersion::SYSTEM_DEFAULT);
79 }
80
TEST(arkweb_utils_test,setActiveWebEngineVersion002)81 TEST(arkweb_utils_test, setActiveWebEngineVersion002) {
82 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
83
84 EXPECT_EQ(getAppWebEngineVersion(), ArkWebEngineVersion::M114);
85 }
86
TEST(arkweb_utils_test,setActiveWebEngineVersion003)87 TEST(arkweb_utils_test, setActiveWebEngineVersion003) {
88 setActiveWebEngineVersion(ArkWebEngineVersion::M132);
89
90 EXPECT_EQ(getAppWebEngineVersion(), ArkWebEngineVersion::M132);
91 }
92
TEST(arkweb_utils_test,setActiveWebEngineVersion004)93 TEST(arkweb_utils_test, setActiveWebEngineVersion004) {
94 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
95 setActiveWebEngineVersion(static_cast<ArkWebEngineVersion>(3));
96
97 EXPECT_EQ(getAppWebEngineVersion(), ArkWebEngineVersion::SYSTEM_DEFAULT);
98 }
99
TEST(arkweb_utils_test,getActiveWebEngineVersion001)100 TEST(arkweb_utils_test, getActiveWebEngineVersion001) {
101 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
102 OHOS::system::SetParameter("web.engine.enforce", std::to_string(1));
103
104 auto res = getActiveWebEngineVersion();
105 EXPECT_EQ(res, ArkWebEngineVersion::M132);
106 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
107 }
108
TEST(arkweb_utils_test,getActiveWebEngineVersion002)109 TEST(arkweb_utils_test, getActiveWebEngineVersion002) {
110 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
111 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
112 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
113
114 auto res = getActiveWebEngineVersion();
115 EXPECT_EQ(res, ArkWebEngineVersion::M132);
116 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
117 }
118
TEST(arkweb_utils_test,getActiveWebEngineVersion003)119 TEST(arkweb_utils_test, getActiveWebEngineVersion003) {
120 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
121 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
122 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
123
124 auto res = getActiveWebEngineVersion();
125 EXPECT_EQ(res, ArkWebEngineVersion::M114);
126 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
127 }
128
TEST(arkweb_utils_test,getActiveWebEngineType001)129 TEST(arkweb_utils_test, getActiveWebEngineType001) {
130 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
131 OHOS::system::SetParameter("web.engine.enforce", std::to_string(2));
132
133 auto res = getActiveWebEngineType();
134 EXPECT_EQ(res, ArkWebEngineType::EVERGREEN);
135 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
136 }
137
TEST(arkweb_utils_test,getActiveWebEngineType002)138 TEST(arkweb_utils_test, getActiveWebEngineType002) {
139 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
140 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
141 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
142
143 auto res = getActiveWebEngineType();
144 EXPECT_EQ(res, ArkWebEngineType::EVERGREEN);
145 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
146 }
147
TEST(arkweb_utils_test,getActiveWebEngineType003)148 TEST(arkweb_utils_test, getActiveWebEngineType003) {
149 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
150 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
151 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
152
153 auto res = getActiveWebEngineType();
154 EXPECT_EQ(res, ArkWebEngineType::LEGACY);
155 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
156 }
157
TEST(arkweb_utils_test,GetArkwebLibPath001)158 TEST(arkweb_utils_test, GetArkwebLibPath001) {
159 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
160 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
161 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
162
163 auto res = GetArkwebLibPath();
164 EXPECT_EQ(res, ARK_WEB_CORE_LEGACY_HAP_LIB_PATH);
165 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
166 }
167
TEST(arkweb_utils_test,GetArkwebLibPath002)168 TEST(arkweb_utils_test, GetArkwebLibPath002) {
169 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
170 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
171 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
172
173 auto res = GetArkwebLibPath();
174 EXPECT_EQ(res, ARK_WEB_CORE_HAP_LIB_PATH);
175 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
176 }
177
TEST(arkweb_utils_test,GetArkwebNameSpace001)178 TEST(arkweb_utils_test, GetArkwebNameSpace001) {
179 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
180 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
181 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
182
183 auto res = GetArkwebNameSpace();
184 EXPECT_EQ(res, "nweb_ns_legacy");
185 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
186 }
187
TEST(arkweb_utils_test,GetArkwebNameSpace002)188 TEST(arkweb_utils_test, GetArkwebNameSpace002) {
189 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
190 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
191 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
192
193 auto res = GetArkwebNameSpace();
194 EXPECT_EQ(res, "nweb_ns");
195 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
196 }
197
TEST(arkweb_utils_test,GetArkwebRelativePathForBundle001)198 TEST(arkweb_utils_test, GetArkwebRelativePathForBundle001) {
199 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
200 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
201 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
202
203 auto res = GetArkwebRelativePathForBundle();
204 #if defined(IS_ASAN)
205 EXPECT_EQ(res, ARK_WEB_CORE_ASAN_PATH_FOR_BUNDLE);
206 #else
207 EXPECT_EQ(res, ARK_WEB_CORE_LEGACY_PATH_FOR_BUNDLE);
208 #endif
209 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
210 }
211
TEST(arkweb_utils_test,GetArkwebRelativePathForBundle002)212 TEST(arkweb_utils_test, GetArkwebRelativePathForBundle002) {
213 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
214 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
215 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
216
217 auto res = GetArkwebRelativePathForBundle();
218 #if defined(IS_ASAN)
219 EXPECT_EQ(res, ARK_WEB_CORE_ASAN_PATH_FOR_BUNDLE);
220 #else
221 EXPECT_EQ(res, ARK_WEB_CORE_PATH_FOR_BUNDLE);
222 #endif
223 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
224 }
225
TEST(arkweb_utils_test,GetArkwebInstallPath001)226 TEST(arkweb_utils_test, GetArkwebInstallPath001) {
227 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
228 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
229 setActiveWebEngineVersion(ArkWebEngineVersion::M114);
230
231 auto aclPath = GetArkwebInstallPath();
232 bool res = (aclPath == SANDBOX_LEGACY_HAP_PATH || aclPath == PRECONFIG_LEGACY_HAP_PATH);
233 // rk is default
234 std::string deviceType = OHOS::system::GetDeviceType();
235 if (deviceType == "default") {
236 EXPECT_FALSE(res);
237 } else {
238 EXPECT_TRUE(res);
239 }
240
241 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
242 }
243
TEST(arkweb_utils_test,GetArkwebInstallPath002)244 TEST(arkweb_utils_test, GetArkwebInstallPath002) {
245 int webEngineEnforce = OHOS::system::GetIntParameter("web.engine.enforce", 0);
246 OHOS::system::SetParameter("web.engine.enforce", std::to_string(0));
247 setActiveWebEngineVersion(ArkWebEngineVersion::SYSTEM_DEFAULT);
248
249 auto aclPath = GetArkwebInstallPath();
250 bool res = (aclPath == SANDBOX_EVERGREEN_HAP_PATH || aclPath == PRECONFIG_EVERGREEN_HAP_PATH);
251 // rk is default
252 std::string deviceType = OHOS::system::GetDeviceType();
253 if (deviceType == "default") {
254 EXPECT_FALSE(res);
255 } else {
256 EXPECT_TRUE(res);
257 }
258
259 OHOS::system::SetParameter("web.engine.enforce", std::to_string(webEngineEnforce));
260 }
261 } // namespace OHOS::NWeb