• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 "ability_info.h"
17 
18 #include <errno.h>
19 #include <fcntl.h>
20 #include <string.h>
21 #include <unistd.h>
22 
23 #include "bundle_constants.h"
24 #include "json_util.h"
25 #include "nlohmann/json.hpp"
26 #include "parcel_macro.h"
27 #include "string_ex.h"
28 
29 namespace OHOS {
30 namespace AppExecFwk {
31 namespace {
32 const std::string JSON_KEY_PACKAGE = "package";
33 const std::string JSON_KEY_NAME = "name";
34 const std::string JSON_KEY_APPLICATION_NAME = "applicationName";
35 const std::string JSON_KEY_LABEL = "label";
36 const std::string JSON_KEY_DESCRIPTION = "description";
37 const std::string JSON_KEY_ICON_PATH = "iconPath";
38 const std::string JSON_KEY_THEME = "theme";
39 const std::string JSON_KEY_VISIBLE = "visible";
40 const std::string JSON_KEY_KIND = "kind";
41 const std::string JSON_KEY_TYPE = "type";
42 const std::string JSON_KEY_EXTENSION_ABILITY_TYPE = "extensionAbilityType";
43 const std::string JSON_KEY_ORIENTATION = "orientation";
44 const std::string JSON_KEY_LAUNCH_MODE = "launchMode";
45 const std::string JSON_KEY_CODE_PATH = "codePath";
46 const std::string JSON_KEY_RESOURCE_PATH = "resourcePath";
47 const std::string JSON_KEY_PERMISSIONS = "permissions";
48 const std::string JSON_KEY_PROCESS = "process";
49 const std::string JSON_KEY_DEVICE_TYPES = "deviceTypes";
50 const std::string JSON_KEY_DEVICE_CAPABILITIES = "deviceCapabilities";
51 const std::string JSON_KEY_URI = "uri";
52 const std::string JSON_KEY_IS_LAUNCHER_ABILITY = "isLauncherAbility";
53 const std::string JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE = "removeMissionAfterTerminate";
54 const std::string JSON_KEY_IS_NATIVE_ABILITY = "isNativeAbility";
55 const std::string JSON_KEY_ENABLED = "enabled";
56 const std::string JSON_KEY_SUPPORT_PIP_MODE = "supportPipMode";
57 const std::string JSON_KEY_TARGET_ABILITY = "targetAbility";
58 const std::string APPLICATION_INFO = "applicationInfo";
59 const std::string JSON_KEY_READ_PERMISSION = "readPermission";
60 const std::string JSON_KEY_WRITE_PERMISSION = "writePermission";
61 const std::string JSON_KEY_CONFIG_CHANGES = "configChanges";
62 const std::string JSON_KEY_FORM = "form";
63 const std::string JSON_KEY_FORM_ENTITY = "formEntity";
64 const std::string JSON_KEY_MIN_FORM_HEIGHT = "minFormHeight";
65 const std::string JSON_KEY_DEFAULT_FORM_HEIGHT = "defaultFormHeight";
66 const std::string JSON_KEY_MIN_FORM_WIDTH = "minFormWidth";
67 const std::string JSON_KEY_DEFAULT_FORM_WIDTH = "defaultFormWidth";
68 const std::string JSON_KEY_BACKGROUND_MODES = "backgroundModes";
69 const std::string JSON_KEY_CUSTOMIZE_DATA = "customizeData";
70 const std::string JSON_KEY_META_DATA = "metaData";
71 const std::string JSON_KEY_META_VALUE = "value";
72 const std::string JSON_KEY_META_EXTRA = "extra";
73 const std::string JSON_KEY_LABEL_ID = "labelId";
74 const std::string JSON_KEY_DESCRIPTION_ID = "descriptionId";
75 const std::string JSON_KEY_ICON_ID = "iconId";
76 const std::string JSON_KEY_FORM_ENABLED = "formEnabled";
77 const std::string JSON_KEY_SRC_PATH = "srcPath";
78 const std::string JSON_KEY_SRC_LANGUAGE = "srcLanguage";
79 const std::string JSON_KEY_START_WINDOW_ICON = "startWindowIcon";
80 const std::string JSON_KEY_START_WINDOW_ICON_ID = "startWindowIconId";
81 const std::string JSON_KEY_START_WINDOW_BACKGROUND = "startWindowBackground";
82 const std::string JSON_KEY_START_WINDOW_BACKGROUND_ID = "startWindowBackgroundId";
83 const std::string JSON_KEY_COMPILE_MODE = "compileMode";
84 const std::string META_DATA = "metadata";
85 const std::string META_DATA_NAME = "name";
86 const std::string META_DATA_VALUE = "value";
87 const std::string META_DATA_RESOURCE = "resource";
88 const std::string SRC_ENTRANCE = "srcEntrance";
89 const std::string IS_MODULE_JSON = "isModuleJson";
90 const std::string IS_STAGE_BASED_MODEL = "isStageBasedModel";
91 const std::string CONTINUABLE = "continuable";
92 const std::string PRIORITY = "priority";
93 const std::string JOSN_KEY_SUPPORT_WINDOW_MODE = "supportWindowMode";
94 const std::string JOSN_KEY_MAX_WINDOW_RATIO = "maxWindowRatio";
95 const std::string JOSN_KEY_MIN_WINDOW_RATIO = "minWindowRatio";
96 const std::string JOSN_KEY_MAX_WINDOW_WIDTH = "maxWindowWidth";
97 const std::string JOSN_KEY_MIN_WINDOW_WIDTH = "minWindowWidth";
98 const std::string JOSN_KEY_MAX_WINDOW_HEIGHT = "maxWindowHeight";
99 const std::string JOSN_KEY_MIN_WINDOW_HEIGHT = "minWindowHeight";
100 const std::string JOSN_KEY_UID = "uid";
101 const std::string JOSN_KEY_EXCLUDE_FROM_MISSIONS = "excludeFromMissions";
102 }  // namespace
103 
ReadFromParcel(Parcel & parcel)104 bool AbilityInfo::ReadFromParcel(Parcel &parcel)
105 {
106     name = Str16ToStr8(parcel.ReadString16());
107     label = Str16ToStr8(parcel.ReadString16());
108     description = Str16ToStr8(parcel.ReadString16());
109     iconPath = Str16ToStr8(parcel.ReadString16());
110     labelId = parcel.ReadInt32();
111     descriptionId = parcel.ReadInt32();
112     iconId = parcel.ReadInt32();
113     theme = Str16ToStr8(parcel.ReadString16());
114     visible = parcel.ReadBool();
115     kind = Str16ToStr8(parcel.ReadString16());
116     type = static_cast<AbilityType>(parcel.ReadInt32());
117     extensionAbilityType = static_cast<ExtensionAbilityType>(parcel.ReadInt32());
118     orientation = static_cast<DisplayOrientation>(parcel.ReadInt32());
119     launchMode = static_cast<LaunchMode>(parcel.ReadInt32());
120     srcPath = Str16ToStr8(parcel.ReadString16());
121     srcLanguage = Str16ToStr8(parcel.ReadString16());
122 
123     int32_t permissionsSize;
124     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, permissionsSize);
125     CONTAINER_SECURITY_VERIFY(parcel, permissionsSize, &permissions);
126     for (auto i = 0; i < permissionsSize; i++) {
127         permissions.emplace_back(Str16ToStr8(parcel.ReadString16()));
128     }
129 
130     process = Str16ToStr8(parcel.ReadString16());
131 
132     int32_t deviceTypesSize;
133     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypesSize);
134     CONTAINER_SECURITY_VERIFY(parcel, deviceTypesSize, &deviceTypes);
135     for (auto i = 0; i < deviceTypesSize; i++) {
136         deviceTypes.emplace_back(Str16ToStr8(parcel.ReadString16()));
137     }
138 
139     int32_t deviceCapabilitiesSize;
140     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceCapabilitiesSize);
141     CONTAINER_SECURITY_VERIFY(parcel, deviceCapabilitiesSize, &deviceCapabilities);
142     for (auto i = 0; i < deviceCapabilitiesSize; i++) {
143         deviceCapabilities.emplace_back(Str16ToStr8(parcel.ReadString16()));
144     }
145     uri = Str16ToStr8(parcel.ReadString16());
146     targetAbility = Str16ToStr8(parcel.ReadString16());
147 
148     std::unique_ptr<ApplicationInfo> appInfo(parcel.ReadParcelable<ApplicationInfo>());
149     if (!appInfo) {
150         APP_LOGE("ReadParcelable<ApplicationInfo> failed");
151         return false;
152     }
153     applicationInfo = *appInfo;
154 
155     isLauncherAbility = parcel.ReadBool();
156     isNativeAbility = parcel.ReadBool();
157     enabled = parcel.ReadBool();
158     supportPipMode = parcel.ReadBool();
159     formEnabled = parcel.ReadBool();
160     removeMissionAfterTerminate = parcel.ReadBool();
161 
162     readPermission = Str16ToStr8(parcel.ReadString16());
163     writePermission = Str16ToStr8(parcel.ReadString16());
164     int32_t configChangesSize;
165     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, configChangesSize);
166     CONTAINER_SECURITY_VERIFY(parcel, configChangesSize, &configChanges);
167     for (auto i = 0; i < configChangesSize; i++) {
168         configChanges.emplace_back(Str16ToStr8(parcel.ReadString16()));
169     }
170     formEntity = parcel.ReadUint32();
171     minFormHeight = parcel.ReadInt32();
172     defaultFormHeight = parcel.ReadInt32();
173     minFormWidth = parcel.ReadInt32();
174     defaultFormWidth = parcel.ReadInt32();
175     int32_t metaDataSize;
176     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metaDataSize);
177     CONTAINER_SECURITY_VERIFY(parcel, metaDataSize, &metaData.customizeData);
178     for (auto i = 0; i < metaDataSize; i++) {
179         std::unique_ptr<CustomizeData> customizeDataPtr(parcel.ReadParcelable<CustomizeData>());
180         if (!customizeDataPtr) {
181             APP_LOGE("ReadParcelable<Metadata> failed");
182             return false;
183         }
184         metaData.customizeData.emplace_back(*customizeDataPtr);
185     }
186     backgroundModes = parcel.ReadUint32();
187 
188     package = Str16ToStr8(parcel.ReadString16());
189     bundleName = Str16ToStr8(parcel.ReadString16());
190     moduleName = Str16ToStr8(parcel.ReadString16());
191     applicationName = Str16ToStr8(parcel.ReadString16());
192 
193     codePath = Str16ToStr8(parcel.ReadString16());
194     resourcePath = Str16ToStr8(parcel.ReadString16());
195     hapPath = Str16ToStr8(parcel.ReadString16());
196 
197     srcEntrance = Str16ToStr8(parcel.ReadString16());
198     int32_t metadataSize;
199     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadataSize);
200     CONTAINER_SECURITY_VERIFY(parcel, metadataSize, &metadata);
201     for (auto i = 0; i < metadataSize; i++) {
202         std::unique_ptr<Metadata> metadataPtr(parcel.ReadParcelable<Metadata>());
203         if (!metadataPtr) {
204             APP_LOGE("ReadParcelable<Metadata> failed");
205             return false;
206         }
207         metadata.emplace_back(*metadataPtr);
208     }
209     isModuleJson = parcel.ReadBool();
210     isStageBasedModel = parcel.ReadBool();
211     continuable = parcel.ReadBool();
212     priority = parcel.ReadInt32();
213 
214     startWindowIcon = Str16ToStr8(parcel.ReadString16());
215     startWindowIconId = parcel.ReadInt32();
216     startWindowBackground = Str16ToStr8(parcel.ReadString16());
217     startWindowBackgroundId = parcel.ReadInt32();
218 
219     originalBundleName = Str16ToStr8(parcel.ReadString16());
220     appName = Str16ToStr8(parcel.ReadString16());
221     privacyUrl = Str16ToStr8(parcel.ReadString16());
222     privacyName = Str16ToStr8(parcel.ReadString16());
223     downloadUrl = Str16ToStr8(parcel.ReadString16());
224     versionName = Str16ToStr8(parcel.ReadString16());
225     className = Str16ToStr8(parcel.ReadString16());
226     originalClassName = Str16ToStr8(parcel.ReadString16());
227     uriPermissionMode = Str16ToStr8(parcel.ReadString16());
228     uriPermissionPath = Str16ToStr8(parcel.ReadString16());
229     packageSize = parcel.ReadUint32();
230     multiUserShared = parcel.ReadBool();
231     grantPermission = parcel.ReadBool();
232     directLaunch = parcel.ReadBool();
233     subType = static_cast<AbilitySubType>(parcel.ReadInt32());
234     libPath = Str16ToStr8(parcel.ReadString16());
235     deviceId = Str16ToStr8(parcel.ReadString16());
236     compileMode = static_cast<CompileMode>(parcel.ReadInt32());
237 
238     int32_t windowModeSize = parcel.ReadInt32();
239     CONTAINER_SECURITY_VERIFY(parcel, windowModeSize, &windowModes);
240     for (auto index = 0; index < windowModeSize; ++index) {
241         windowModes.emplace_back(static_cast<SupportWindowMode>(parcel.ReadInt32()));
242     }
243     maxWindowRatio = parcel.ReadDouble();
244     minWindowRatio = parcel.ReadDouble();
245     maxWindowWidth = parcel.ReadUint32();
246     minWindowWidth = parcel.ReadUint32();
247     maxWindowHeight = parcel.ReadUint32();
248     minWindowHeight = parcel.ReadUint32();
249     uid = parcel.ReadInt32();
250     return true;
251 }
252 
Unmarshalling(Parcel & parcel)253 AbilityInfo *AbilityInfo::Unmarshalling(Parcel &parcel)
254 {
255     AbilityInfo *info = new (std::nothrow) AbilityInfo();
256     if (info && !info->ReadFromParcel(parcel)) {
257         APP_LOGW("read from parcel failed");
258         delete info;
259         info = nullptr;
260     }
261     return info;
262 }
263 
Marshalling(Parcel & parcel) const264 bool AbilityInfo::Marshalling(Parcel &parcel) const
265 {
266     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(name));
267     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(label));
268     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(description));
269     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(iconPath));
270     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, labelId);
271     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, descriptionId);
272     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, iconId);
273     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(theme));
274     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, visible);
275     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(kind));
276     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(type));
277     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(extensionAbilityType));
278     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(orientation));
279     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(launchMode));
280     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcPath));
281     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcLanguage));
282     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, permissions.size());
283     for (auto &permission : permissions) {
284         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(permission));
285     }
286 
287     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(process));
288     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceTypes.size());
289     for (auto &deviceType : deviceTypes) {
290         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceType));
291     }
292 
293     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, deviceCapabilities.size());
294     for (auto &deviceCapability : deviceCapabilities) {
295         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceCapability));
296     }
297     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uri));
298     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(targetAbility));
299     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &applicationInfo);
300     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isLauncherAbility);
301     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isNativeAbility);
302     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, enabled);
303     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, supportPipMode);
304     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, formEnabled);
305     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, removeMissionAfterTerminate);
306     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(readPermission));
307     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(writePermission));
308     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, configChanges.size());
309     for (auto &configChange : configChanges) {
310         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(configChange));
311     }
312     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, formEntity);
313     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, minFormHeight);
314     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, defaultFormHeight);
315     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, minFormWidth);
316     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, defaultFormWidth);
317     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metaData.customizeData.size());
318     for (auto &meta : metaData.customizeData) {
319         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &meta);
320     }
321     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, backgroundModes);
322 
323     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(package));
324     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(bundleName));
325     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(moduleName));
326     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(applicationName));
327     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(codePath));
328     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(resourcePath));
329     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(hapPath));
330 
331     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(srcEntrance));
332 
333     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, metadata.size());
334     for (auto &meta : metadata) {
335         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Parcelable, parcel, &meta);
336     }
337 
338     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isModuleJson);
339     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, isStageBasedModel);
340     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, continuable);
341     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, priority);
342 
343     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(startWindowIcon));
344     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, startWindowIconId);
345     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(startWindowBackground));
346     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, startWindowBackgroundId);
347 
348     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(originalBundleName));
349     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(appName));
350     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(privacyUrl));
351     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(privacyName));
352     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(downloadUrl));
353     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(versionName));
354     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(className));
355     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(originalClassName));
356     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uriPermissionMode));
357     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(uriPermissionPath));
358     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, packageSize);
359     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, multiUserShared);
360     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, grantPermission);
361     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Bool, parcel, directLaunch);
362     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(subType));
363     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(libPath));
364     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String16, parcel, Str8ToStr16(deviceId));
365     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(compileMode));
366 
367     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, windowModes.size());
368     for (auto &mode : windowModes) {
369         WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, static_cast<int32_t>(mode));
370     }
371     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Double, parcel, maxWindowRatio);
372     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Double, parcel, minWindowRatio);
373     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, maxWindowWidth);
374     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, minWindowWidth);
375     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, maxWindowHeight);
376     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, minWindowHeight);
377     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Int32, parcel, uid);
378     return true;
379 }
380 
Dump(std::string prefix,int fd)381 void AbilityInfo::Dump(std::string prefix, int fd)
382 {
383     APP_LOGI("called dump Abilityinfo");
384     if (fd < 0) {
385         APP_LOGE("dump Abilityinfo fd error");
386         return;
387     }
388     int flags = fcntl(fd, F_GETFL);
389     if (flags < 0) {
390         APP_LOGE("dump Abilityinfo fcntl error, errno : %{public}d", errno);
391         return;
392     }
393     uint uflags = static_cast<uint>(flags);
394     uflags &= O_ACCMODE;
395     if ((uflags == O_WRONLY) || (uflags == O_RDWR)) {
396         nlohmann::json jsonObject = *this;
397         std::string result;
398         result.append(prefix);
399         result.append(jsonObject.dump(Constants::DUMP_INDENT));
400         int ret = TEMP_FAILURE_RETRY(write(fd, result.c_str(), result.size()));
401         if (ret < 0) {
402             APP_LOGE("dump Abilityinfo write error, errno : %{public}d", errno);
403         }
404     }
405     return;
406 }
407 
to_json(nlohmann::json & jsonObject,const CustomizeData & customizeData)408 void to_json(nlohmann::json &jsonObject, const CustomizeData &customizeData)
409 {
410     jsonObject = nlohmann::json {
411         {JSON_KEY_NAME, customizeData.name},
412         {JSON_KEY_META_VALUE, customizeData.value},
413         {JSON_KEY_META_EXTRA, customizeData.extra}
414     };
415 }
416 
to_json(nlohmann::json & jsonObject,const MetaData & metaData)417 void to_json(nlohmann::json &jsonObject, const MetaData &metaData)
418 {
419     jsonObject = nlohmann::json {
420         {JSON_KEY_CUSTOMIZE_DATA, metaData.customizeData}
421     };
422 }
423 
to_json(nlohmann::json & jsonObject,const Metadata & metadata)424 void to_json(nlohmann::json &jsonObject, const Metadata &metadata)
425 {
426     jsonObject = nlohmann::json {
427         {META_DATA_NAME, metadata.name},
428         {META_DATA_VALUE, metadata.value},
429         {META_DATA_RESOURCE, metadata.resource}
430     };
431 }
432 
to_json(nlohmann::json & jsonObject,const AbilityInfo & abilityInfo)433 void to_json(nlohmann::json &jsonObject, const AbilityInfo &abilityInfo)
434 {
435     APP_LOGD("AbilityInfo to_json begin");
436     jsonObject = nlohmann::json {
437         {JSON_KEY_NAME, abilityInfo.name},
438         {JSON_KEY_LABEL, abilityInfo.label},
439         {JSON_KEY_DESCRIPTION, abilityInfo.description},
440         {JSON_KEY_ICON_PATH, abilityInfo.iconPath},
441         {JSON_KEY_LABEL_ID, abilityInfo.labelId},
442         {JSON_KEY_DESCRIPTION_ID, abilityInfo.descriptionId},
443         {JSON_KEY_ICON_ID, abilityInfo.iconId},
444         {JSON_KEY_THEME, abilityInfo.theme},
445         {JSON_KEY_VISIBLE, abilityInfo.visible},
446         {JSON_KEY_KIND, abilityInfo.kind},
447         {JSON_KEY_TYPE, abilityInfo.type},
448         {JSON_KEY_EXTENSION_ABILITY_TYPE, abilityInfo.extensionAbilityType},
449         {JSON_KEY_ORIENTATION, abilityInfo.orientation},
450         {JSON_KEY_LAUNCH_MODE, abilityInfo.launchMode},
451         {JSON_KEY_SRC_PATH, abilityInfo.srcPath},
452         {JSON_KEY_SRC_LANGUAGE, abilityInfo.srcLanguage},
453         {JSON_KEY_PERMISSIONS, abilityInfo.permissions},
454         {JSON_KEY_PROCESS, abilityInfo.process},
455         {JSON_KEY_DEVICE_TYPES, abilityInfo.deviceTypes},
456         {JSON_KEY_DEVICE_CAPABILITIES, abilityInfo.deviceCapabilities},
457         {JSON_KEY_URI, abilityInfo.uri},
458         {JSON_KEY_TARGET_ABILITY, abilityInfo.targetAbility},
459         {APPLICATION_INFO, abilityInfo.applicationInfo},
460         {JSON_KEY_IS_LAUNCHER_ABILITY, abilityInfo.isLauncherAbility},
461         {JSON_KEY_IS_NATIVE_ABILITY, abilityInfo.isNativeAbility},
462         {JSON_KEY_ENABLED, abilityInfo.enabled},
463         {JSON_KEY_SUPPORT_PIP_MODE, abilityInfo.supportPipMode},
464         {JSON_KEY_FORM_ENABLED, abilityInfo.formEnabled},
465         {JSON_KEY_READ_PERMISSION, abilityInfo.readPermission},
466         {JSON_KEY_WRITE_PERMISSION, abilityInfo.writePermission},
467         {JSON_KEY_CONFIG_CHANGES, abilityInfo.configChanges},
468         {JSON_KEY_FORM_ENTITY, abilityInfo.formEntity},
469         {JSON_KEY_MIN_FORM_HEIGHT, abilityInfo.minFormHeight},
470         {JSON_KEY_DEFAULT_FORM_HEIGHT, abilityInfo.defaultFormHeight},
471         {JSON_KEY_MIN_FORM_WIDTH, abilityInfo.minFormWidth},
472         {JSON_KEY_DEFAULT_FORM_WIDTH, abilityInfo.defaultFormWidth},
473         {JSON_KEY_META_DATA, abilityInfo.metaData},
474         {JSON_KEY_BACKGROUND_MODES, abilityInfo.backgroundModes},
475         {JSON_KEY_PACKAGE, abilityInfo.package},
476         {Constants::BUNDLE_NAME, abilityInfo.bundleName},
477         {Constants::MODULE_NAME, abilityInfo.moduleName},
478         {JSON_KEY_APPLICATION_NAME, abilityInfo.applicationName},
479         {JSON_KEY_CODE_PATH, abilityInfo.codePath},
480         {JSON_KEY_RESOURCE_PATH, abilityInfo.resourcePath},
481         {Constants::HAP_PATH, abilityInfo.hapPath},
482         {SRC_ENTRANCE, abilityInfo.srcEntrance},
483         {META_DATA, abilityInfo.metadata},
484         {IS_MODULE_JSON, abilityInfo.isModuleJson},
485         {IS_STAGE_BASED_MODEL, abilityInfo.isStageBasedModel},
486         {CONTINUABLE, abilityInfo.continuable},
487         {PRIORITY, abilityInfo.priority},
488         {JSON_KEY_START_WINDOW_ICON, abilityInfo.startWindowIcon},
489         {JSON_KEY_START_WINDOW_ICON_ID, abilityInfo.startWindowIconId},
490         {JSON_KEY_START_WINDOW_BACKGROUND, abilityInfo.startWindowBackground},
491         {JSON_KEY_START_WINDOW_BACKGROUND_ID, abilityInfo.startWindowBackgroundId},
492         {JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE, abilityInfo.removeMissionAfterTerminate},
493         {JSON_KEY_COMPILE_MODE, abilityInfo.compileMode},
494         {JOSN_KEY_SUPPORT_WINDOW_MODE, abilityInfo.windowModes},
495         {JOSN_KEY_MAX_WINDOW_WIDTH, abilityInfo.maxWindowWidth},
496         {JOSN_KEY_MIN_WINDOW_WIDTH, abilityInfo.minWindowWidth},
497         {JOSN_KEY_MAX_WINDOW_HEIGHT, abilityInfo.maxWindowHeight},
498         {JOSN_KEY_MIN_WINDOW_HEIGHT, abilityInfo.minWindowHeight},
499         {JOSN_KEY_UID, abilityInfo.uid},
500         {JOSN_KEY_EXCLUDE_FROM_MISSIONS, abilityInfo.excludeFromMissions}
501     };
502     if (abilityInfo.maxWindowRatio == 0) {
503         // maxWindowRatio in json string will be 0 instead of 0.0
504         jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = 0;
505     } else {
506         jsonObject[JOSN_KEY_MAX_WINDOW_RATIO] = abilityInfo.maxWindowRatio;
507     }
508 
509     if (abilityInfo.minWindowRatio == 0) {
510         jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = 0;
511     } else {
512         jsonObject[JOSN_KEY_MIN_WINDOW_RATIO] = abilityInfo.minWindowRatio;
513     }
514 }
515 
from_json(const nlohmann::json & jsonObject,CustomizeData & customizeData)516 void from_json(const nlohmann::json &jsonObject, CustomizeData &customizeData)
517 {
518     const auto &jsonObjectEnd = jsonObject.end();
519     int32_t parseResult = ERR_OK;
520     GetValueIfFindKey<std::string>(jsonObject,
521         jsonObjectEnd,
522         JSON_KEY_NAME,
523         customizeData.name,
524         JsonType::STRING,
525         false,
526         parseResult,
527         ArrayType::NOT_ARRAY);
528     GetValueIfFindKey<std::string>(jsonObject,
529         jsonObjectEnd,
530         JSON_KEY_META_VALUE,
531         customizeData.value,
532         JsonType::STRING,
533         false,
534         parseResult,
535         ArrayType::NOT_ARRAY);
536     GetValueIfFindKey<std::string>(jsonObject,
537         jsonObjectEnd,
538         JSON_KEY_META_EXTRA,
539         customizeData.extra,
540         JsonType::STRING,
541         false,
542         parseResult,
543         ArrayType::NOT_ARRAY);
544 }
545 
from_json(const nlohmann::json & jsonObject,MetaData & metaData)546 void from_json(const nlohmann::json &jsonObject, MetaData &metaData)
547 {
548     const auto &jsonObjectEnd = jsonObject.end();
549     int32_t parseResult = ERR_OK;
550     GetValueIfFindKey<std::vector<CustomizeData>>(jsonObject,
551         jsonObjectEnd,
552         JSON_KEY_CUSTOMIZE_DATA,
553         metaData.customizeData,
554         JsonType::ARRAY,
555         false,
556         parseResult,
557         ArrayType::OBJECT);
558 }
559 
from_json(const nlohmann::json & jsonObject,Metadata & metadata)560 void from_json(const nlohmann::json &jsonObject, Metadata &metadata)
561 {
562     const auto &jsonObjectEnd = jsonObject.end();
563     int32_t parseResult = ERR_OK;
564     GetValueIfFindKey<std::string>(jsonObject,
565         jsonObjectEnd,
566         META_DATA_NAME,
567         metadata.name,
568         JsonType::STRING,
569         false,
570         parseResult,
571         ArrayType::NOT_ARRAY);
572     GetValueIfFindKey<std::string>(jsonObject,
573         jsonObjectEnd,
574         META_DATA_VALUE,
575         metadata.value,
576         JsonType::STRING,
577         false,
578         parseResult,
579         ArrayType::NOT_ARRAY);
580     GetValueIfFindKey<std::string>(jsonObject,
581         jsonObjectEnd,
582         META_DATA_RESOURCE,
583         metadata.resource,
584         JsonType::STRING,
585         false,
586         parseResult,
587         ArrayType::NOT_ARRAY);
588     if (parseResult != ERR_OK) {
589         APP_LOGE("read Ability Metadata from database error, error code : %{public}d", parseResult);
590     }
591 }
592 
from_json(const nlohmann::json & jsonObject,AbilityInfo & abilityInfo)593 void from_json(const nlohmann::json &jsonObject, AbilityInfo &abilityInfo)
594 {
595     APP_LOGD("AbilityInfo from_json begin");
596     const auto &jsonObjectEnd = jsonObject.end();
597     int32_t parseResult = ERR_OK;
598     GetValueIfFindKey<std::string>(jsonObject,
599         jsonObjectEnd,
600         JSON_KEY_NAME,
601         abilityInfo.name,
602         JsonType::STRING,
603         false,
604         parseResult,
605         ArrayType::NOT_ARRAY);
606     GetValueIfFindKey<std::string>(jsonObject,
607         jsonObjectEnd,
608         JSON_KEY_LABEL,
609         abilityInfo.label,
610         JsonType::STRING,
611         false,
612         parseResult,
613         ArrayType::NOT_ARRAY);
614     GetValueIfFindKey<std::string>(jsonObject,
615         jsonObjectEnd,
616         JSON_KEY_DESCRIPTION,
617         abilityInfo.description,
618         JsonType::STRING,
619         false,
620         parseResult,
621         ArrayType::NOT_ARRAY);
622     GetValueIfFindKey<std::string>(jsonObject,
623         jsonObjectEnd,
624         JSON_KEY_ICON_PATH,
625         abilityInfo.iconPath,
626         JsonType::STRING,
627         false,
628         parseResult,
629         ArrayType::NOT_ARRAY);
630     GetValueIfFindKey<int32_t>(jsonObject,
631         jsonObjectEnd,
632         JSON_KEY_LABEL_ID,
633         abilityInfo.labelId,
634         JsonType::NUMBER,
635         false,
636         parseResult,
637         ArrayType::NOT_ARRAY);
638     GetValueIfFindKey<int32_t>(jsonObject,
639         jsonObjectEnd,
640         JSON_KEY_DESCRIPTION_ID,
641         abilityInfo.descriptionId,
642         JsonType::NUMBER,
643         false,
644         parseResult,
645         ArrayType::NOT_ARRAY);
646     GetValueIfFindKey<int32_t>(jsonObject,
647         jsonObjectEnd,
648         JSON_KEY_ICON_ID,
649         abilityInfo.iconId,
650         JsonType::NUMBER,
651         false,
652         parseResult,
653         ArrayType::NOT_ARRAY);
654     GetValueIfFindKey<std::string>(jsonObject,
655         jsonObjectEnd,
656         JSON_KEY_THEME,
657         abilityInfo.theme,
658         JsonType::STRING,
659         false,
660         parseResult,
661         ArrayType::NOT_ARRAY);
662     GetValueIfFindKey<bool>(jsonObject,
663         jsonObjectEnd,
664         JSON_KEY_VISIBLE,
665         abilityInfo.visible,
666         JsonType::BOOLEAN,
667         false,
668         parseResult,
669         ArrayType::NOT_ARRAY);
670     GetValueIfFindKey<std::string>(jsonObject,
671         jsonObjectEnd,
672         JSON_KEY_KIND,
673         abilityInfo.kind,
674         JsonType::STRING,
675         false,
676         parseResult,
677         ArrayType::NOT_ARRAY);
678     GetValueIfFindKey<AbilityType>(jsonObject,
679         jsonObjectEnd,
680         JSON_KEY_TYPE,
681         abilityInfo.type,
682         JsonType::NUMBER,
683         false,
684         parseResult,
685         ArrayType::NOT_ARRAY);
686     GetValueIfFindKey<ExtensionAbilityType>(jsonObject,
687         jsonObjectEnd,
688         JSON_KEY_EXTENSION_ABILITY_TYPE,
689         abilityInfo.extensionAbilityType,
690         JsonType::NUMBER,
691         false,
692         parseResult,
693         ArrayType::NOT_ARRAY);
694     GetValueIfFindKey<DisplayOrientation>(jsonObject,
695         jsonObjectEnd,
696         JSON_KEY_ORIENTATION,
697         abilityInfo.orientation,
698         JsonType::NUMBER,
699         false,
700         parseResult,
701         ArrayType::NOT_ARRAY);
702     GetValueIfFindKey<LaunchMode>(jsonObject,
703         jsonObjectEnd,
704         JSON_KEY_LAUNCH_MODE,
705         abilityInfo.launchMode,
706         JsonType::NUMBER,
707         false,
708         parseResult,
709         ArrayType::NOT_ARRAY);
710     GetValueIfFindKey<std::string>(jsonObject,
711         jsonObjectEnd,
712         JSON_KEY_SRC_PATH,
713         abilityInfo.srcPath,
714         JsonType::STRING,
715         false,
716         parseResult,
717         ArrayType::NOT_ARRAY);
718     GetValueIfFindKey<std::string>(jsonObject,
719         jsonObjectEnd,
720         JSON_KEY_SRC_LANGUAGE,
721         abilityInfo.srcLanguage,
722         JsonType::STRING,
723         false,
724         parseResult,
725         ArrayType::NOT_ARRAY);
726     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
727         jsonObjectEnd,
728         JSON_KEY_PERMISSIONS,
729         abilityInfo.permissions,
730         JsonType::ARRAY,
731         false,
732         parseResult,
733         ArrayType::STRING);
734     GetValueIfFindKey<std::string>(jsonObject,
735         jsonObjectEnd,
736         JSON_KEY_PROCESS,
737         abilityInfo.process,
738         JsonType::STRING,
739         false,
740         parseResult,
741         ArrayType::NOT_ARRAY);
742     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
743         jsonObjectEnd,
744         JSON_KEY_DEVICE_TYPES,
745         abilityInfo.deviceTypes,
746         JsonType::ARRAY,
747         false,
748         parseResult,
749         ArrayType::STRING);
750     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
751         jsonObjectEnd,
752         JSON_KEY_DEVICE_CAPABILITIES,
753         abilityInfo.deviceCapabilities,
754         JsonType::ARRAY,
755         false,
756         parseResult,
757         ArrayType::STRING);
758     GetValueIfFindKey<std::string>(jsonObject,
759         jsonObjectEnd,
760         JSON_KEY_URI,
761         abilityInfo.uri,
762         JsonType::STRING,
763         false,
764         parseResult,
765         ArrayType::NOT_ARRAY);
766     GetValueIfFindKey<std::string>(jsonObject,
767         jsonObjectEnd,
768         JSON_KEY_TARGET_ABILITY,
769         abilityInfo.targetAbility,
770         JsonType::STRING,
771         false,
772         parseResult,
773         ArrayType::NOT_ARRAY);
774     GetValueIfFindKey<ApplicationInfo>(jsonObject,
775         jsonObjectEnd,
776         APPLICATION_INFO,
777         abilityInfo.applicationInfo,
778         JsonType::OBJECT,
779         false,
780         parseResult,
781         ArrayType::NOT_ARRAY);
782     GetValueIfFindKey<bool>(jsonObject,
783         jsonObjectEnd,
784         JSON_KEY_IS_LAUNCHER_ABILITY,
785         abilityInfo.isLauncherAbility,
786         JsonType::BOOLEAN,
787         false,
788         parseResult,
789         ArrayType::NOT_ARRAY);
790     GetValueIfFindKey<bool>(jsonObject,
791         jsonObjectEnd,
792         JSON_KEY_IS_NATIVE_ABILITY,
793         abilityInfo.isNativeAbility,
794         JsonType::BOOLEAN,
795         false,
796         parseResult,
797         ArrayType::NOT_ARRAY);
798     GetValueIfFindKey<bool>(jsonObject,
799         jsonObjectEnd,
800         JSON_KEY_ENABLED,
801         abilityInfo.enabled,
802         JsonType::BOOLEAN,
803         false,
804         parseResult,
805         ArrayType::NOT_ARRAY);
806     GetValueIfFindKey<bool>(jsonObject,
807         jsonObjectEnd,
808         JSON_KEY_SUPPORT_PIP_MODE,
809         abilityInfo.supportPipMode,
810         JsonType::BOOLEAN,
811         false,
812         parseResult,
813         ArrayType::NOT_ARRAY);
814     GetValueIfFindKey<bool>(jsonObject,
815         jsonObjectEnd,
816         JSON_KEY_FORM_ENABLED,
817         abilityInfo.formEnabled,
818         JsonType::BOOLEAN,
819         false,
820         parseResult,
821         ArrayType::NOT_ARRAY);
822     GetValueIfFindKey<std::string>(jsonObject,
823         jsonObjectEnd,
824         JSON_KEY_READ_PERMISSION,
825         abilityInfo.readPermission,
826         JsonType::STRING,
827         false,
828         parseResult,
829         ArrayType::NOT_ARRAY);
830     GetValueIfFindKey<std::string>(jsonObject,
831         jsonObjectEnd,
832         JSON_KEY_WRITE_PERMISSION,
833         abilityInfo.writePermission,
834         JsonType::STRING,
835         false,
836         parseResult,
837         ArrayType::NOT_ARRAY);
838     GetValueIfFindKey<std::vector<std::string>>(jsonObject,
839         jsonObjectEnd,
840         JSON_KEY_CONFIG_CHANGES,
841         abilityInfo.configChanges,
842         JsonType::ARRAY,
843         false,
844         parseResult,
845         ArrayType::STRING);
846     GetValueIfFindKey<uint32_t>(jsonObject,
847         jsonObjectEnd,
848         JSON_KEY_FORM_ENTITY,
849         abilityInfo.formEntity,
850         JsonType::NUMBER,
851         false,
852         parseResult,
853         ArrayType::NOT_ARRAY);
854     GetValueIfFindKey<int32_t>(jsonObject,
855         jsonObjectEnd,
856         JSON_KEY_MIN_FORM_HEIGHT,
857         abilityInfo.minFormHeight,
858         JsonType::NUMBER,
859         false,
860         parseResult,
861         ArrayType::NOT_ARRAY);
862     GetValueIfFindKey<int32_t>(jsonObject,
863         jsonObjectEnd,
864         JSON_KEY_DEFAULT_FORM_HEIGHT,
865         abilityInfo.defaultFormHeight,
866         JsonType::NUMBER,
867         false,
868         parseResult,
869         ArrayType::NOT_ARRAY);
870     GetValueIfFindKey<int32_t>(jsonObject,
871         jsonObjectEnd,
872         JSON_KEY_MIN_FORM_WIDTH,
873         abilityInfo.minFormWidth,
874         JsonType::NUMBER,
875         false,
876         parseResult,
877         ArrayType::NOT_ARRAY);
878     GetValueIfFindKey<int32_t>(jsonObject,
879         jsonObjectEnd,
880         JSON_KEY_DEFAULT_FORM_WIDTH,
881         abilityInfo.defaultFormWidth,
882         JsonType::NUMBER,
883         false,
884         parseResult,
885         ArrayType::NOT_ARRAY);
886     GetValueIfFindKey<MetaData>(jsonObject,
887         jsonObjectEnd,
888         JSON_KEY_META_DATA,
889         abilityInfo.metaData,
890         JsonType::OBJECT,
891         false,
892         parseResult,
893         ArrayType::NOT_ARRAY);
894     GetValueIfFindKey<uint32_t>(jsonObject,
895         jsonObjectEnd,
896         JSON_KEY_BACKGROUND_MODES,
897         abilityInfo.backgroundModes,
898         JsonType::NUMBER,
899         false,
900         parseResult,
901         ArrayType::NOT_ARRAY);
902     GetValueIfFindKey<std::string>(jsonObject,
903         jsonObjectEnd,
904         JSON_KEY_PACKAGE,
905         abilityInfo.package,
906         JsonType::STRING,
907         false,
908         parseResult,
909         ArrayType::NOT_ARRAY);
910     GetValueIfFindKey<std::string>(jsonObject,
911         jsonObjectEnd,
912         Constants::BUNDLE_NAME,
913         abilityInfo.bundleName,
914         JsonType::STRING,
915         false,
916         parseResult,
917         ArrayType::NOT_ARRAY);
918     GetValueIfFindKey<std::string>(jsonObject,
919         jsonObjectEnd,
920         Constants::MODULE_NAME,
921         abilityInfo.moduleName,
922         JsonType::STRING,
923         false,
924         parseResult,
925         ArrayType::NOT_ARRAY);
926     GetValueIfFindKey<std::string>(jsonObject,
927         jsonObjectEnd,
928         JSON_KEY_APPLICATION_NAME,
929         abilityInfo.applicationName,
930         JsonType::STRING,
931         false,
932         parseResult,
933         ArrayType::NOT_ARRAY);
934     GetValueIfFindKey<std::string>(jsonObject,
935         jsonObjectEnd,
936         JSON_KEY_CODE_PATH,
937         abilityInfo.codePath,
938         JsonType::STRING,
939         false,
940         parseResult,
941         ArrayType::NOT_ARRAY);
942     GetValueIfFindKey<std::string>(jsonObject,
943         jsonObjectEnd,
944         JSON_KEY_RESOURCE_PATH,
945         abilityInfo.resourcePath,
946         JsonType::STRING,
947         false,
948         parseResult,
949         ArrayType::NOT_ARRAY);
950     GetValueIfFindKey<std::string>(jsonObject,
951         jsonObjectEnd,
952         Constants::HAP_PATH,
953         abilityInfo.hapPath,
954         JsonType::STRING,
955         false,
956         parseResult,
957         ArrayType::NOT_ARRAY);
958     GetValueIfFindKey<std::string>(jsonObject,
959         jsonObjectEnd,
960         SRC_ENTRANCE,
961         abilityInfo.srcEntrance,
962         JsonType::STRING,
963         false,
964         parseResult,
965         ArrayType::NOT_ARRAY);
966     GetValueIfFindKey<std::vector<Metadata>>(jsonObject,
967         jsonObjectEnd,
968         META_DATA,
969         abilityInfo.metadata,
970         JsonType::ARRAY,
971         false,
972         parseResult,
973         ArrayType::OBJECT);
974     GetValueIfFindKey<bool>(jsonObject,
975         jsonObjectEnd,
976         IS_MODULE_JSON,
977         abilityInfo.isModuleJson,
978         JsonType::BOOLEAN,
979         false,
980         parseResult,
981         ArrayType::NOT_ARRAY);
982     GetValueIfFindKey<bool>(jsonObject,
983         jsonObjectEnd,
984         IS_STAGE_BASED_MODEL,
985         abilityInfo.isStageBasedModel,
986         JsonType::BOOLEAN,
987         false,
988         parseResult,
989         ArrayType::NOT_ARRAY);
990     GetValueIfFindKey<bool>(jsonObject,
991         jsonObjectEnd,
992         CONTINUABLE,
993         abilityInfo.continuable,
994         JsonType::BOOLEAN,
995         false,
996         parseResult,
997         ArrayType::NOT_ARRAY);
998     GetValueIfFindKey<int32_t>(jsonObject,
999         jsonObjectEnd,
1000         PRIORITY,
1001         abilityInfo.priority,
1002         JsonType::NUMBER,
1003         false,
1004         parseResult,
1005         ArrayType::NOT_ARRAY);
1006     GetValueIfFindKey<std::string>(jsonObject,
1007         jsonObjectEnd,
1008         JSON_KEY_START_WINDOW_ICON,
1009         abilityInfo.startWindowIcon,
1010         JsonType::STRING,
1011         false,
1012         parseResult,
1013         ArrayType::NOT_ARRAY);
1014     GetValueIfFindKey<int32_t>(jsonObject,
1015         jsonObjectEnd,
1016         JSON_KEY_START_WINDOW_ICON_ID,
1017         abilityInfo.startWindowIconId,
1018         JsonType::NUMBER,
1019         false,
1020         parseResult,
1021         ArrayType::NOT_ARRAY);
1022     GetValueIfFindKey<std::string>(jsonObject,
1023         jsonObjectEnd,
1024         JSON_KEY_START_WINDOW_BACKGROUND,
1025         abilityInfo.startWindowBackground,
1026         JsonType::STRING,
1027         false,
1028         parseResult,
1029         ArrayType::NOT_ARRAY);
1030     GetValueIfFindKey<int32_t>(jsonObject,
1031         jsonObjectEnd,
1032         JSON_KEY_START_WINDOW_BACKGROUND_ID,
1033         abilityInfo.startWindowBackgroundId,
1034         JsonType::NUMBER,
1035         false,
1036         parseResult,
1037         ArrayType::NOT_ARRAY);
1038     GetValueIfFindKey<bool>(jsonObject,
1039         jsonObjectEnd,
1040         JSON_KEY_REMOVE_MISSION_AFTER_TERMINATE,
1041         abilityInfo.removeMissionAfterTerminate,
1042         JsonType::BOOLEAN,
1043         false,
1044         parseResult,
1045         ArrayType::NOT_ARRAY);
1046     GetValueIfFindKey<CompileMode>(jsonObject,
1047         jsonObjectEnd,
1048         JSON_KEY_COMPILE_MODE,
1049         abilityInfo.compileMode,
1050         JsonType::NUMBER,
1051         false,
1052         parseResult,
1053         ArrayType::NOT_ARRAY);
1054     GetValueIfFindKey<std::vector<SupportWindowMode>>(jsonObject,
1055         jsonObjectEnd,
1056         JOSN_KEY_SUPPORT_WINDOW_MODE,
1057         abilityInfo.windowModes,
1058         JsonType::ARRAY,
1059         false,
1060         parseResult,
1061         ArrayType::NUMBER);
1062     GetValueIfFindKey<double>(jsonObject,
1063         jsonObjectEnd,
1064         JOSN_KEY_MAX_WINDOW_RATIO,
1065         abilityInfo.maxWindowRatio,
1066         JsonType::NUMBER,
1067         false,
1068         parseResult,
1069         ArrayType::NOT_ARRAY);
1070     GetValueIfFindKey<double>(jsonObject,
1071         jsonObjectEnd,
1072         JOSN_KEY_MIN_WINDOW_RATIO,
1073         abilityInfo.minWindowRatio,
1074         JsonType::NUMBER,
1075         false,
1076         parseResult,
1077         ArrayType::NOT_ARRAY);
1078     GetValueIfFindKey<uint32_t>(jsonObject,
1079         jsonObjectEnd,
1080         JOSN_KEY_MAX_WINDOW_WIDTH,
1081         abilityInfo.maxWindowWidth,
1082         JsonType::NUMBER,
1083         false,
1084         parseResult,
1085         ArrayType::NOT_ARRAY);
1086     GetValueIfFindKey<uint32_t>(jsonObject,
1087         jsonObjectEnd,
1088         JOSN_KEY_MIN_WINDOW_WIDTH,
1089         abilityInfo.minWindowWidth,
1090         JsonType::NUMBER,
1091         false,
1092         parseResult,
1093         ArrayType::NOT_ARRAY);
1094     GetValueIfFindKey<uint32_t>(jsonObject,
1095         jsonObjectEnd,
1096         JOSN_KEY_MAX_WINDOW_HEIGHT,
1097         abilityInfo.maxWindowHeight,
1098         JsonType::NUMBER,
1099         false,
1100         parseResult,
1101         ArrayType::NOT_ARRAY);
1102     GetValueIfFindKey<uint32_t>(jsonObject,
1103         jsonObjectEnd,
1104         JOSN_KEY_MIN_WINDOW_HEIGHT,
1105         abilityInfo.minWindowHeight,
1106         JsonType::NUMBER,
1107         false,
1108         parseResult,
1109         ArrayType::NOT_ARRAY);
1110     GetValueIfFindKey<int32_t>(jsonObject,
1111         jsonObjectEnd,
1112         JOSN_KEY_UID,
1113         abilityInfo.uid,
1114         JsonType::NUMBER,
1115         false,
1116         parseResult,
1117         ArrayType::NOT_ARRAY);
1118     GetValueIfFindKey<bool>(jsonObject,
1119         jsonObjectEnd,
1120         JOSN_KEY_EXCLUDE_FROM_MISSIONS,
1121         abilityInfo.excludeFromMissions,
1122         JsonType::BOOLEAN,
1123         false,
1124         parseResult,
1125         ArrayType::NOT_ARRAY);
1126     if (parseResult != ERR_OK) {
1127         APP_LOGE("AbilityInfo from_json error, error code : %{public}d", parseResult);
1128     }
1129 }
1130 
ConvertToCompatiableAbilityInfo(CompatibleAbilityInfo & compatibleAbilityInfo) const1131 void AbilityInfo::ConvertToCompatiableAbilityInfo(CompatibleAbilityInfo& compatibleAbilityInfo) const
1132 {
1133     APP_LOGE("AbilityInfo::ConvertToCompatiableAbilityInfo called");
1134     compatibleAbilityInfo.package = package;
1135     compatibleAbilityInfo.name = name;
1136     compatibleAbilityInfo.label = label;
1137     compatibleAbilityInfo.description = description;
1138     compatibleAbilityInfo.iconPath = iconPath;
1139     compatibleAbilityInfo.uri = uri;
1140     compatibleAbilityInfo.moduleName = moduleName;
1141     compatibleAbilityInfo.process = process;
1142     compatibleAbilityInfo.targetAbility = targetAbility;
1143     compatibleAbilityInfo.appName = appName;
1144     compatibleAbilityInfo.privacyUrl = privacyUrl;
1145     compatibleAbilityInfo.privacyName = privacyName;
1146     compatibleAbilityInfo.downloadUrl = downloadUrl;
1147     compatibleAbilityInfo.versionName = versionName;
1148     compatibleAbilityInfo.backgroundModes = backgroundModes;
1149     compatibleAbilityInfo.packageSize = packageSize;
1150     compatibleAbilityInfo.visible = visible;
1151     compatibleAbilityInfo.formEnabled = formEnabled;
1152     compatibleAbilityInfo.multiUserShared = multiUserShared;
1153     compatibleAbilityInfo.type = type;
1154     compatibleAbilityInfo.subType = subType;
1155     compatibleAbilityInfo.orientation = orientation;
1156     compatibleAbilityInfo.launchMode = launchMode;
1157     compatibleAbilityInfo.permissions = permissions;
1158     compatibleAbilityInfo.deviceTypes = deviceTypes;
1159     compatibleAbilityInfo.deviceCapabilities = deviceCapabilities;
1160     compatibleAbilityInfo.supportPipMode = supportPipMode;
1161     compatibleAbilityInfo.grantPermission = grantPermission;
1162     compatibleAbilityInfo.readPermission = readPermission;
1163     compatibleAbilityInfo.writePermission = writePermission;
1164     compatibleAbilityInfo.uriPermissionMode = uriPermissionMode;
1165     compatibleAbilityInfo.uriPermissionPath = uriPermissionPath;
1166     compatibleAbilityInfo.directLaunch = directLaunch;
1167     compatibleAbilityInfo.bundleName = bundleName;
1168     compatibleAbilityInfo.className = className;
1169     compatibleAbilityInfo.originalClassName = originalClassName;
1170     compatibleAbilityInfo.deviceId = deviceId;
1171     CompatibleApplicationInfo convertedCompatibleApplicationInfo;
1172     applicationInfo.ConvertToCompatibleApplicationInfo(convertedCompatibleApplicationInfo);
1173     compatibleAbilityInfo.applicationInfo = convertedCompatibleApplicationInfo;
1174     compatibleAbilityInfo.formEntity = formEntity;
1175     compatibleAbilityInfo.minFormHeight = minFormHeight;
1176     compatibleAbilityInfo.defaultFormHeight = defaultFormHeight;
1177     compatibleAbilityInfo.minFormWidth = minFormWidth;
1178     compatibleAbilityInfo.defaultFormWidth = defaultFormWidth;
1179     compatibleAbilityInfo.iconId = iconId;
1180     compatibleAbilityInfo.labelId = labelId;
1181     compatibleAbilityInfo.descriptionId = descriptionId;
1182     compatibleAbilityInfo.enabled = enabled;
1183 }
1184 }  // namespace AppExecFwk
1185 }  // namespace OHOS
1186