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