1 /*
2 * Copyright (c) 2023-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 "extension_ability_info.h"
17
18 #include <fcntl.h>
19 #include <set>
20 #include <string>
21 #include <unistd.h>
22
23 #include "bundle_constants.h"
24 #include "common_json_converter.h"
25 #include "json_util.h"
26 #include "nlohmann/json.hpp"
27 #include "parcel_macro.h"
28 #include "string_ex.h"
29
30 namespace OHOS {
31 namespace AppExecFwk {
32 namespace {
33 const uint32_t ABILITY_CAPACITY = 204800; // 200K
34
35 const std::unordered_map<std::string, ExtensionAbilityType> EXTENSION_TYPE_MAP = {
36 { "form", ExtensionAbilityType::FORM },
37 { "workScheduler", ExtensionAbilityType::WORK_SCHEDULER },
38 { "inputMethod", ExtensionAbilityType::INPUTMETHOD },
39 { "service", ExtensionAbilityType::SERVICE },
40 { "accessibility", ExtensionAbilityType::ACCESSIBILITY },
41 { "fence", ExtensionAbilityType::FENCE },
42 { "dataShare", ExtensionAbilityType::DATASHARE },
43 { "fileShare", ExtensionAbilityType::FILESHARE },
44 { "staticSubscriber", ExtensionAbilityType::STATICSUBSCRIBER },
45 { "wallpaper", ExtensionAbilityType::WALLPAPER },
46 { "backup", ExtensionAbilityType::BACKUP },
47 { "distributed", ExtensionAbilityType::DISTRIBUTED },
48 { "appService", ExtensionAbilityType::APP_SERVICE },
49 { "selection", ExtensionAbilityType::SELECTION },
50 { "window", ExtensionAbilityType::WINDOW },
51 { "enterpriseAdmin", ExtensionAbilityType::ENTERPRISE_ADMIN },
52 { "fileAccess", ExtensionAbilityType::FILEACCESS_EXTENSION },
53 { "thumbnail", ExtensionAbilityType::THUMBNAIL },
54 { "preview", ExtensionAbilityType::PREVIEW },
55 { "print", ExtensionAbilityType::PRINT },
56 { "share", ExtensionAbilityType::SHARE },
57 { "push", ExtensionAbilityType::PUSH },
58 { "driver", ExtensionAbilityType::DRIVER },
59 { "action", ExtensionAbilityType::ACTION },
60 { "adsService", ExtensionAbilityType::ADS_SERVICE },
61 { "embeddedUI", ExtensionAbilityType::EMBEDDED_UI },
62 { "statusBarView", ExtensionAbilityType::STATUS_BAR_VIEW },
63 { "insightIntentUI", ExtensionAbilityType::INSIGHT_INTENT_UI },
64 { "autoFill/password", ExtensionAbilityType::AUTO_FILL_PASSWORD },
65 { "appAccountAuthorization", ExtensionAbilityType::APP_ACCOUNT_AUTHORIZATION },
66 { "ui", ExtensionAbilityType::UI },
67 { "remoteNotification", ExtensionAbilityType::REMOTE_NOTIFICATION },
68 { "remoteLocation", ExtensionAbilityType::REMOTE_LOCATION },
69 { "voip", ExtensionAbilityType::VOIP },
70 { "accountLogout", ExtensionAbilityType::ACCOUNTLOGOUT },
71 { "sysDialog/userAuth", ExtensionAbilityType::SYSDIALOG_USERAUTH },
72 { "sysDialog/common", ExtensionAbilityType::SYSDIALOG_COMMON },
73 { "sysPicker/mediaControl", ExtensionAbilityType::SYSPICKER_MEDIACONTROL },
74 { "sysDialog/atomicServicePanel", ExtensionAbilityType::SYSDIALOG_ATOMICSERVICEPANEL },
75 { "sysDialog/power", ExtensionAbilityType::SYSDIALOG_POWER },
76 { "sysPicker/share", ExtensionAbilityType::SYSPICKER_SHARE },
77 { "hms/account", ExtensionAbilityType::HMS_ACCOUNT },
78 { "ads", ExtensionAbilityType::ADS },
79 { "sysDialog/meetimeCall", ExtensionAbilityType::SYSDIALOG_MEETIMECALL },
80 { "sysDialog/meetimeContact", ExtensionAbilityType::SYSDIALOG_MEETIMECONTACT },
81 { "sysDialog/meetimeMessage", ExtensionAbilityType::SYSDIALOG_MEETIMEMESSAGE },
82 { "sysDialog/print", ExtensionAbilityType::SYSDIALOG_PRINT },
83 { "sysPicker/meetimeContact", ExtensionAbilityType::SYSPICKER_MEETIMECONTACT },
84 { "sysPicker/meetimeCallLog", ExtensionAbilityType::SYSPICKER_MEETIMECALLLOG },
85 { "sysPicker/photoPicker", ExtensionAbilityType::SYSPICKER_PHOTOPICKER },
86 { "sysPicker/navigation", ExtensionAbilityType::SYSPICKER_NAVIGATION },
87 { "sysPicker/appSelector", ExtensionAbilityType::SYSPICKER_APPSELECTOR },
88 { "sysPicker/camera", ExtensionAbilityType::SYSPICKER_CAMERA },
89 { "sysPicker/filePicker", ExtensionAbilityType::SYSPICKER_FILEPICKER },
90 { "sysPicker/audioPicker", ExtensionAbilityType::SYSPICKER_AUDIOPICKER },
91 { "sys/commonUI", ExtensionAbilityType::SYS_COMMON_UI },
92 { "vpn", ExtensionAbilityType::VPN },
93 { "autoFill/smart", ExtensionAbilityType::AUTO_FILL_SMART },
94 { "liveViewLockScreen", ExtensionAbilityType::LIVEVIEW_LOCKSCREEN },
95 { "photoEditor", ExtensionAbilityType::PHOTO_EDITOR },
96 { "callerInfoQuery", ExtensionAbilityType::CALLER_INFO_QUERY },
97 { "sysPicker/photoEditor", ExtensionAbilityType::SYSPICKER_PHOTOEDITOR },
98 { "sys/visualExtension", ExtensionAbilityType::SYS_VISUAL },
99 { "uiService", ExtensionAbilityType::UI_SERVICE },
100 { "recentPhoto", ExtensionAbilityType::RECENT_PHOTO },
101 { "assetAcceleration", ExtensionAbilityType::ASSET_ACCELERATION },
102 { "formEdit", ExtensionAbilityType::FORM_EDIT },
103 { "liveForm", ExtensionAbilityType::LIVE_FORM },
104 { "awc/webpage", ExtensionAbilityType::AWC_WEBPAGE },
105 { "awc/newsfeed", ExtensionAbilityType::AWC_NEWSFEED }
106 };
107
108 // the new extension type does not need to be added here
109 const std::set<std::string> NOT_NEED_CREATE_SANBOX_MODE = {
110 "form", "workScheduler", "service", "accessibility", "dataShare", "fileShare", "staticSubscriber", "wallpaper",
111 "backup", "window", "enterpriseAdmin", "fileAccess", "thumbnail", "preview", "print", "share", "push", "driver",
112 "action", "adsService", "embeddedUI", "insightIntentUI", "statusBarView", "autoFill/password",
113 "appAccountAuthorization", "ui", "remoteNotification", "remoteLocation", "voip", "accountLogout",
114 "sysDialog/userAuth", "sysDialog/common", "sysPicker/mediaControl", "sysDialog/atomicServicePanel",
115 "sysDialog/power", "sysPicker/share", "hms/account", "ads", "sysDialog/meetimeCall",
116 "sysDialog/meetimeContact", "sysDialog/meetimeMessage", "sysDialog/print", "sysPicker/meetimeContact",
117 "sysPicker/meetimeCallLog", "sysPicker/photoPicker", "sysPicker/camera", "sysPicker/navigation",
118 "sysPicker/appSelector", "sys/commonUI", "vpn", "autoFill/smart", "liveViewLockScreen"
119 };
120
121 const std::unordered_map<std::string, ExtensionProcessMode> EXTENSION_PROCESS_MODE_MAP = {
122 { "instance", ExtensionProcessMode::INSTANCE },
123 { "type", ExtensionProcessMode::TYPE },
124 { "bundle", ExtensionProcessMode::BUNDLE },
125 { "runWithMainProcess", ExtensionProcessMode::RUN_WITH_MAIN_PROCESS }
126 };
127
ReadSkillInfoFromParcel(Parcel & parcel,std::vector<SkillUriForAbilityAndExtension> & skillUri)128 bool ReadSkillInfoFromParcel(Parcel &parcel, std::vector<SkillUriForAbilityAndExtension> &skillUri)
129 {
130 int32_t skillUriSize = 0;
131 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, skillUriSize);
132 CONTAINER_SECURITY_VERIFY(parcel, skillUriSize, &skillUri);
133 for (auto i = 0; i < skillUriSize; i++) {
134 SkillUriForAbilityAndExtension stctUri;
135 stctUri.scheme = Str16ToStr8(parcel.ReadString16());
136 stctUri.host = Str16ToStr8(parcel.ReadString16());
137 stctUri.port = Str16ToStr8(parcel.ReadString16());
138 stctUri.path = Str16ToStr8(parcel.ReadString16());
139 stctUri.pathStartWith = Str16ToStr8(parcel.ReadString16());
140 stctUri.pathRegex = Str16ToStr8(parcel.ReadString16());
141 stctUri.type = Str16ToStr8(parcel.ReadString16());
142 stctUri.utd = Str16ToStr8(parcel.ReadString16());
143 stctUri.maxFileSupported = parcel.ReadInt32();
144 stctUri.linkFeature = Str16ToStr8(parcel.ReadString16());
145 stctUri.isMatch = parcel.ReadBool();
146 skillUri.emplace_back(stctUri);
147 }
148 return true;
149 }
150
ReadMetadataFromParcel(Parcel & parcel,std::vector<Metadata> & metadata)151 bool ReadMetadataFromParcel(Parcel &parcel, std::vector<Metadata> &metadata)
152 {
153 int32_t metadataSize = 0;
154 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadataSize);
155 CONTAINER_SECURITY_VERIFY(parcel, metadataSize, &metadata);
156 for (auto i = 0; i < metadataSize; i++) {
157 std::unique_ptr<Metadata> meta(parcel.ReadParcelable<Metadata>());
158 if (!meta) {
159 APP_LOGE("ReadParcelable<Metadata> failed");
160 return false;
161 }
162 metadata.emplace_back(*meta);
163 }
164 return true;
165 }
166 }; // namespace
167
ReadFromParcel(Parcel & parcel)168 bool ExtensionAbilityInfo::ReadFromParcel(Parcel &parcel)
169 {
170 bundleName = Str16ToStr8(parcel.ReadString16());
171 moduleName = Str16ToStr8(parcel.ReadString16());
172 name = Str16ToStr8(parcel.ReadString16());
173 srcEntrance = Str16ToStr8(parcel.ReadString16());
174 icon = Str16ToStr8(parcel.ReadString16());
175 iconId = parcel.ReadUint32();
176 label = Str16ToStr8(parcel.ReadString16());
177 labelId = parcel.ReadUint32();
178 description = Str16ToStr8(parcel.ReadString16());
179 descriptionId = parcel.ReadUint32();
180 priority = parcel.ReadInt32();
181 int32_t permissionsSize;
182 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, permissionsSize);
183 CONTAINER_SECURITY_VERIFY(parcel, permissionsSize, &permissions);
184 for (auto i = 0; i < permissionsSize; i++) {
185 permissions.emplace_back(Str16ToStr8(parcel.ReadString16()));
186 }
187 int32_t appIdentifierAllowListSize;
188 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, appIdentifierAllowListSize);
189 CONTAINER_SECURITY_VERIFY(parcel, appIdentifierAllowListSize, &appIdentifierAllowList);
190 for (auto i = 0; i < appIdentifierAllowListSize; i++) {
191 appIdentifierAllowList.emplace_back(Str16ToStr8(parcel.ReadString16()));
192 }
193 readPermission = Str16ToStr8(parcel.ReadString16());
194 writePermission = Str16ToStr8(parcel.ReadString16());
195 uri = Str16ToStr8(parcel.ReadString16());
196 type = static_cast<ExtensionAbilityType>(parcel.ReadInt32());
197 extensionTypeName = Str16ToStr8(parcel.ReadString16());
198 visible = parcel.ReadBool();
199 if (!ReadMetadataFromParcel(parcel, metadata)) {
200 APP_LOGE("Read meta data failed");
201 return false;
202 }
203
204 std::unique_ptr<ApplicationInfo> appInfo(parcel.ReadParcelable<ApplicationInfo>());
205 if (!appInfo) {
206 APP_LOGE("ReadParcelable<ApplicationInfo> failed");
207 return false;
208 }
209 applicationInfo = *appInfo;
210
211 resourcePath = Str16ToStr8(parcel.ReadString16());
212 hapPath = Str16ToStr8(parcel.ReadString16());
213 enabled = parcel.ReadBool();
214 process = Str16ToStr8(parcel.ReadString16());
215 compileMode = static_cast<CompileMode>(parcel.ReadInt32());
216 uid = parcel.ReadInt32();
217 appIndex = parcel.ReadInt32();
218 if (!ReadSkillInfoFromParcel(parcel, skillUri)) {
219 APP_LOGE("Read skill info failed");
220 return false;
221 }
222 extensionProcessMode = static_cast<ExtensionProcessMode>(parcel.ReadInt32());
223 int32_t skillsSize;
224 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, skillsSize);
225 CONTAINER_SECURITY_VERIFY(parcel, skillsSize, &skills);
226 for (auto i = 0; i < skillsSize; i++) {
227 std::unique_ptr<Skill> extensionSkillPtr(parcel.ReadParcelable<Skill>());
228 if (!extensionSkillPtr) {
229 APP_LOGE("ReadParcelable<SkillForExtension> failed");
230 return false;
231 }
232 skills.emplace_back(*extensionSkillPtr);
233 }
234
235 needCreateSandbox = parcel.ReadBool();
236 isolationProcess = parcel.ReadBool();
237 int32_t dataGroupIdsSize;
238 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, dataGroupIdsSize);
239 CONTAINER_SECURITY_VERIFY(parcel, dataGroupIdsSize, &dataGroupIds);
240 for (auto i = 0; i < dataGroupIdsSize; i++) {
241 dataGroupIds.emplace_back(Str16ToStr8(parcel.ReadString16()));
242 }
243 int32_t validDataGroupIdsSize;
244 READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, validDataGroupIdsSize);
245 CONTAINER_SECURITY_VERIFY(parcel, validDataGroupIdsSize, &validDataGroupIds);
246 for (auto i = 0; i < validDataGroupIdsSize; i++) {
247 dataGroupIds.emplace_back(Str16ToStr8(parcel.ReadString16()));
248 }
249 customProcess = Str16ToStr8(parcel.ReadString16());
250 arkTSMode = parcel.ReadString();
251 return true;
252 }
253
Unmarshalling(Parcel & parcel)254 ExtensionAbilityInfo *ExtensionAbilityInfo::Unmarshalling(Parcel &parcel)
255 {
256 ExtensionAbilityInfo *info = new (std::nothrow) ExtensionAbilityInfo();
257 if (info && !info->ReadFromParcel(parcel)) {
258 APP_LOGW("read from parcel failed");
259 delete info;
260 info = nullptr;
261 }
262 return info;
263 }
264
MarshallingSkillUri(Parcel & parcel,SkillUriForAbilityAndExtension uri) const265 bool ExtensionAbilityInfo::MarshallingSkillUri(Parcel &parcel, SkillUriForAbilityAndExtension uri) const
266 {
267 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.scheme));
268 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.host));
269 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.port));
270 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.path));
271 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.pathStartWith));
272 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.pathRegex));
273 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.type));
274 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.utd));
275 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, uri.maxFileSupported);
276 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri.linkFeature));
277 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, uri.isMatch);
278 return true;
279 }
280
Marshalling(Parcel & parcel) const281 bool ExtensionAbilityInfo::Marshalling(Parcel &parcel) const
282 {
283 CHECK_PARCEL_CAPACITY(parcel, ABILITY_CAPACITY);
284 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
285 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
286 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
287 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcEntrance));
288 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(icon));
289 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, iconId);
290 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(label));
291 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, labelId);
292 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
293 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, descriptionId);
294 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, priority);
295 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, permissions.size());
296 for (auto &permission : permissions) {
297 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(permission));
298 }
299 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, appIdentifierAllowList.size());
300 for (auto &appIdentifier : appIdentifierAllowList) {
301 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(appIdentifier));
302 }
303 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(readPermission));
304 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(writePermission));
305 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri));
306 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(type));
307 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(extensionTypeName));
308 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, visible);
309 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadata.size());
310 for (auto &mete : metadata) {
311 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &mete);
312 }
313 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &applicationInfo);
314 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(resourcePath));
315 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hapPath));
316 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, enabled);
317 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(process));
318 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(compileMode));
319 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, uid);
320 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, appIndex);
321 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, skillUri.size());
322 for (auto &uri : skillUri) {
323 MarshallingSkillUri(parcel, uri);
324 }
325 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(extensionProcessMode));
326 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, skills.size());
327 for (auto &skill : skills) {
328 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &skill);
329 }
330 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, needCreateSandbox);
331 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isolationProcess);
332 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, dataGroupIds.size());
333 for (auto &dataGroupId : dataGroupIds) {
334 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(dataGroupId));
335 }
336 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, validDataGroupIds.size());
337 for (auto &dataGroupId : validDataGroupIds) {
338 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(dataGroupId));
339 }
340 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(customProcess));
341 WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, arkTSMode);
342 return true;
343 }
344
to_json(nlohmann::json & jsonObject,const ExtensionAbilityInfo & extensionInfo)345 void to_json(nlohmann::json &jsonObject, const ExtensionAbilityInfo &extensionInfo)
346 {
347 APP_LOGD("ExtensionAbilityInfo to_json begin");
348 ExtensionToJson(jsonObject, extensionInfo);
349 }
350
from_json(const nlohmann::json & jsonObject,ExtensionAbilityInfo & extensionInfo)351 void from_json(const nlohmann::json &jsonObject, ExtensionAbilityInfo &extensionInfo)
352 {
353 APP_LOGD("ExtensionAbilityInfo from_json begin");
354 ExtensionFromJson(jsonObject, extensionInfo);
355 }
356
ConvertToExtensionAbilityType(const std::string & type)357 ExtensionAbilityType ConvertToExtensionAbilityType(const std::string &type)
358 {
359 if (EXTENSION_TYPE_MAP.find(type) != EXTENSION_TYPE_MAP.end()) {
360 return EXTENSION_TYPE_MAP.at(type);
361 }
362
363 return ExtensionAbilityType::UNSPECIFIED;
364 }
365
ConvertToExtensionTypeName(ExtensionAbilityType type)366 std::string ConvertToExtensionTypeName(ExtensionAbilityType type)
367 {
368 for (const auto &[key, val] : EXTENSION_TYPE_MAP) {
369 if (val == type) {
370 return key;
371 }
372 }
373
374 return "Unspecified";
375 }
376
ConvertToExtensionProcessMode(const std::string & extensionProcessMode)377 ExtensionProcessMode ConvertToExtensionProcessMode(const std::string &extensionProcessMode)
378 {
379 if (EXTENSION_PROCESS_MODE_MAP.find(extensionProcessMode) != EXTENSION_PROCESS_MODE_MAP.end()) {
380 return EXTENSION_PROCESS_MODE_MAP.at(extensionProcessMode);
381 }
382
383 return ExtensionProcessMode::UNDEFINED;
384 }
385
UpdateNeedCreateSandbox()386 void ExtensionAbilityInfo::UpdateNeedCreateSandbox()
387 {
388 needCreateSandbox = false;
389 }
390 } // namespace AppExecFwk
391 } // namespace OHOS
392