1 /*
2 * Copyright (c) 2021-2023 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 "form_errors.h"
17 #include "appexecfwk_errors.h"
18 #include "form_mgr_errors.h"
19
20 namespace OHOS {
21 namespace AppExecFwk {
22 namespace {
23 const std::map<int32_t, int32_t> ERROR_CODE_MAP_EXTERNAL = {
24 { ERR_OK, ERR_OK },
25 { ERR_APPEXECFWK_FORM_COMMON_CODE, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
26 { ERR_APPEXECFWK_FORM_PERMISSION_DENY, ERR_FORM_EXTERNAL_PERMISSION_DENIED },
27 { ERR_APPEXECFWK_FORM_PERMISSION_DENY_BUNDLE, ERR_FORM_EXTERNAL_PERMISSION_DENIED },
28 { ERR_APPEXECFWK_FORM_PERMISSION_DENY_SYS, ERR_FORM_EXTERNAL_NOT_SYSTEM_APP },
29 { ERR_APPEXECFWK_FORM_GET_INFO_FAILED, ERR_FORM_EXTERNAL_GET_INFO_FAILED },
30 { ERR_APPEXECFWK_FORM_GET_BUNDLE_FAILED, ERR_FORM_EXTERNAL_GET_INFO_FAILED },
31 { ERR_APPEXECFWK_FORM_INVALID_PARAM, ERR_FORM_EXTERNAL_PARAM_INVALID },
32 { ERR_APPEXECFWK_FORM_INVALID_FORM_ID, ERR_FORM_EXTERNAL_PARAM_INVALID },
33 { ERR_APPEXECFWK_FORM_FORM_ID_NUM_ERR, ERR_FORM_EXTERNAL_PARAM_INVALID },
34 { ERR_APPEXECFWK_FORM_FORM_ARRAY_ERR, ERR_FORM_EXTERNAL_PARAM_INVALID },
35 { ERR_APPEXECFWK_FORM_RELEASE_FLG_ERR, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
36 { ERR_APPEXECFWK_FORM_REFRESH_TIME_NUM_ERR, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
37 { ERR_APPEXECFWK_FORM_INVALID_BUNDLENAME, ERR_FORM_EXTERNAL_PARAM_INVALID },
38 { ERR_APPEXECFWK_FORM_INVALID_MODULENAME, ERR_FORM_EXTERNAL_PARAM_INVALID },
39 { ERR_APPEXECFWK_FORM_INVALID_PROVIDER_DATA, ERR_FORM_EXTERNAL_PARAM_INVALID },
40 { ERR_APPEXECFWK_FORM_INVALID_REFRESH_TIME, ERR_FORM_EXTERNAL_PARAM_INVALID },
41 { ERR_APPEXECFWK_FORM_FORM_ID_ARRAY_ERR, ERR_FORM_EXTERNAL_PARAM_INVALID },
42 { ERR_APPEXECFWK_FORM_SERVER_STATUS_ERR, ERR_FORM_EXTERNAL_SERVICE_CONNECTION_ERROR },
43 { ERR_APPEXECFWK_FORM_CFG_NOT_MATCH_ID, ERR_FORM_EXTERNAL_FORM_ID_NOT_EXIST },
44 { ERR_APPEXECFWK_FORM_NOT_EXIST_ID, ERR_FORM_EXTERNAL_FORM_ID_NOT_EXIST },
45 { ERR_APPEXECFWK_FORM_PROVIDER_DATA_EMPTY, ERR_FORM_EXTERNAL_PARAM_INVALID },
46 { ERR_APPEXECFWK_FORM_BIND_PROVIDER_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
47 { ERR_APPEXECFWK_FORM_MAX_SYSTEM_FORMS, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
48 { ERR_APPEXECFWK_FORM_EXCEED_INSTANCES_PER_FORM, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
49 { ERR_APPEXECFWK_FORM_OPERATION_NOT_SELF, ERR_FORM_EXTERNAL_OPERATION_FORM_NOT_SELF },
50 { ERR_APPEXECFWK_FORM_PROVIDER_DEL_FAIL, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
51 { ERR_APPEXECFWK_FORM_MAX_FORMS_PER_CLIENT, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
52 { ERR_APPEXECFWK_FORM_MAX_SYSTEM_TEMP_FORMS, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
53 { ERR_APPEXECFWK_FORM_NO_SUCH_MODULE, ERR_FORM_EXTERNAL_PARAM_INVALID },
54 { ERR_APPEXECFWK_FORM_NO_SUCH_ABILITY, ERR_FORM_EXTERNAL_PARAM_INVALID },
55 { ERR_APPEXECFWK_FORM_NO_SUCH_DIMENSION, ERR_FORM_EXTERNAL_PARAM_INVALID },
56 { ERR_APPEXECFWK_FORM_FA_NOT_INSTALLED, ERR_FORM_EXTERNAL_ABILITY_NOT_INSTALLED },
57 { ERR_APPEXECFWK_FORM_MAX_REQUEST, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
58 { ERR_APPEXECFWK_FORM_MAX_REFRESH, ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND },
59 { ERR_APPEXECFWK_FORM_GET_BMS_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
60 { ERR_APPEXECFWK_FORM_GET_HOST_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
61 { ERR_APPEXECFWK_FORM_GET_FMS_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
62 { ERR_APPEXECFWK_FORM_SEND_FMS_MSG, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
63 { ERR_APPEXECFWK_FORM_FORM_DUPLICATE_ADDED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
64 { ERR_APPEXECFWK_FORM_IN_RECOVER, ERR_FORM_EXTERNAL_SERVICE_CONNECTION_ERROR },
65 { ERR_APPEXECFWK_FORM_DISTRIBUTED_SCHEDULE_FAILED, ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR },
66 { ERR_APPEXECFWK_FORM_GET_SYSMGR_FAILED, ERR_FORM_EXTERNAL_IPC_ERROR },
67 { ERR_APPEXECFWK_FORM_CONNECT_FORM_RENDER_FAILED, ERR_FORM_EXTERNAL_CONNECT_RENDER_FAILED },
68 { ERR_APPEXECFWK_FORM_RENDER_SERVICE_DIED, ERR_FORM_EXTERNAL_RENDER_DIED },
69 { ERR_APPEXECFWK_FORM_NOT_TRUST, ERR_FORM_EXTERNAL_FORM_NOT_TRUST },
70 { ERR_APPEXECFWK_FORM_ADD_FORM_TIME_OUT, ERR_FORM_EXTERNAL_ADD_FORM_TIME_OUT},
71 { ERR_APPEXECFWK_FORM_STATUS_TIMIE_OUT, ERR_FORM_EXTERNAL_FORM_STATUS_TIMIE_OUT },
72 { ERR_APPEXECFWK_FORM_SET_OPERATION_FAILED, ERR_FORM_EXTERNAL_SET_OPERATION_FAILED },
73 { ERR_APPEXECFWK_FORM_LIVE_OP_UNSUPPORTED, ERR_FORM_EXTERNAL_LIVE_OP_UNSUPPORTED },
74 { ERR_APPEXECFWK_SYSTEMCAP_ERROR, ERR_FORM_EXTERNAL_SYSTEMCAP_ERROR },
75 { ERR_APPEXECFWK_FORM_DIMENSION_ERROR, ERR_FORM_EXTERNAL_FORM_DIMENSION_ERROR},
76 };
77
78 const std::map<int32_t, std::string> ERR_MSG_MAP_EXTERNAL = {
79 { ERR_OK, "success" },
80 { ERR_FORM_EXTERNAL_PERMISSION_DENIED, "Permissions denied." },
81 { ERR_FORM_EXTERNAL_PARAM_INVALID, "Parameter error. Possible causes: "
82 "1.Mandatory parameters are left unspecified; 2.Incorrect parameter types; 3.Parameter verification failed." },
83 { ERR_FORM_EXTERNAL_SYSTEMCAP_ERROR, "Capability not supported. "
84 "Failed to call ${functionName} due to limited device capabilities." },
85 { ERR_FORM_EXTERNAL_KERNEL_ERROR, "A generic kernel error occurred." },
86 { ERR_FORM_EXTERNAL_KERNEL_MALLOC_ERROR, "Failed to alloc." },
87 { ERR_FORM_EXTERNAL_IPC_ERROR, "IPC connection error." },
88 { ERR_FORM_EXTERNAL_SERVICE_CONNECTION_ERROR, "Service connection error." },
89 { ERR_FORM_EXTERNAL_GET_INFO_FAILED, "Failed to obtain the configuration information." },
90 { ERR_FORM_EXTERNAL_NOT_SYSTEM_APP, "The application is not a system application." },
91 { ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR, "An internal functional error occurred." },
92 { ERR_FORM_EXTERNAL_FORM_NUM_EXCEEDS_UPPER_BOUND, "The number of forms exceeds the maximum allowed." },
93 { ERR_FORM_EXTERNAL_FORM_ID_NOT_EXIST, "The ID of the form to be operated does not exist" },
94 { ERR_FORM_EXTERNAL_OPERATION_FORM_NOT_SELF, "The form cannot be operated by the current application." },
95 { ERR_FORM_EXTERNAL_ABILITY_NOT_INSTALLED, "The ability is not installed" },
96 { ERR_FORM_EXTERNAL_CONNECT_RENDER_FAILED, "Failed to connect to FormRenderService." },
97 { ERR_FORM_EXTERNAL_RENDER_DIED, "FormRenderService is dead, please reconnect." },
98 { ERR_FORM_EXTERNAL_FORM_NOT_TRUST, "Form is not trust." },
99 { ERR_FORM_EXTERNAL_ADD_FORM_TIME_OUT, "Waiting for the form addition to the desktop timed out." },
100 { ERR_FORM_EXTERNAL_FORM_STATUS_TIMIE_OUT, "form status timeout, try reAddForm." },
101 { ERR_FORM_EXTERNAL_SET_OPERATION_FAILED, "Failed to set the live form background image." },
102 { ERR_FORM_EXTERNAL_LIVE_OP_UNSUPPORTED, "The form can not support this operation, Please check whether "
103 "the configuration information of sceneAnimationParams in your form_config is correct." },
104 { ERR_FORM_EXTERNAL_FORM_DIMENSION_ERROR, "The dimension parameter is incorrect." },
105 };
106
107 const std::map<int32_t, std::string> ERR_MSG_MAP_INTERNAL = {
108 { ERR_APPEXECFWK_FORM_INVALID_PARAM, "" },
109 { ERR_APPEXECFWK_FORM_INVALID_FORM_ID, "The formId is invalid." },
110 };
111 }
FormErrors()112 FormErrors::FormErrors()
113 {
114 InitErrorMessageMap();
115 }
~FormErrors()116 FormErrors::~FormErrors()
117 {
118 }
119
120 /**
121 * @brief Get the error message content.
122 *
123 * @param errCode Error code.
124 * @return Message content.
125 */
GetErrorMessage(int errCode)126 std::string FormErrors::GetErrorMessage(int errCode)
127 {
128 if (errorMessageMap_.find(errCode) != errorMessageMap_.end()) {
129 return errorMessageMap_[errCode];
130 } else {
131 return errorMessageMap_[ERR_APPEXECFWK_FORM_COMMON_CODE];
132 }
133 }
134
QueryExternalErrorCode(int32_t internalErrorCode)135 int32_t FormErrors::QueryExternalErrorCode(int32_t internalErrorCode)
136 {
137 auto iter = ERROR_CODE_MAP_EXTERNAL.find(internalErrorCode);
138 if (iter != ERROR_CODE_MAP_EXTERNAL.end()) {
139 return iter->second;
140 }
141 return ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR;
142 }
143
QueryExternalErrorMessage(int32_t internalErrorCode,int32_t externalErrorCode)144 std::string FormErrors::QueryExternalErrorMessage(int32_t internalErrorCode, int32_t externalErrorCode)
145 {
146 std::string errorMessage = GetErrorMsgByExternalErrorCode(externalErrorCode);
147
148 auto iterInternal = ERR_MSG_MAP_INTERNAL.find(internalErrorCode);
149 if (iterInternal == ERR_MSG_MAP_INTERNAL.end() || iterInternal->second.empty()) {
150 return errorMessage;
151 }
152 errorMessage += " " + iterInternal->second;
153 return errorMessage;
154 }
155
GetErrorMsgByExternalErrorCode(int32_t externalErrorCode)156 std::string FormErrors::GetErrorMsgByExternalErrorCode(int32_t externalErrorCode)
157 {
158 auto iter = ERR_MSG_MAP_EXTERNAL.find(externalErrorCode);
159 std::string errorMessage;
160 if (iter != ERR_MSG_MAP_EXTERNAL.end()) {
161 errorMessage = iter->second;
162 } else {
163 errorMessage = ERR_MSG_MAP_EXTERNAL.at(ERR_FORM_EXTERNAL_FUNCTIONAL_ERROR);
164 }
165 return errorMessage;
166 }
167
168 /**
169 * @brief Init error message map object.
170 *
171 */
InitErrorMessageMap()172 void FormErrors::InitErrorMessageMap()
173 {
174 errorMessageMap_ = { // error + message
175 {
176 ERR_APPEXECFWK_FORM_COMMON_CODE, "some internal server error occurs.",
177 },
178 {
179 ERR_APPEXECFWK_FORM_PERMISSION_DENY,
180 "check permission deny, need to request ohos.permission.REQUIRE_FORM"
181 " or ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS.",
182 },
183 {
184 ERR_APPEXECFWK_FORM_PERMISSION_DENY_BUNDLE,
185 "check permission deny, need to request ohos.permission.GET_BUNDLE_INFO_PRIVILEGED.",
186 },
187 {
188 ERR_APPEXECFWK_FORM_PERMISSION_DENY_SYS,
189 "check permission deny, need system permission.",
190 },
191 {
192 ERR_APPEXECFWK_FORM_GET_INFO_FAILED, "can't get form info by the formName.",
193 },
194 {
195 ERR_APPEXECFWK_FORM_GET_BUNDLE_FAILED, "the requested bundle name does not exist.",
196 },
197 {
198 ERR_APPEXECFWK_FORM_INVALID_PARAM, "invalid params received on operating form.",
199 },
200 {
201 ERR_APPEXECFWK_FORM_INVALID_FORM_ID, "formId must be a string.",
202 },
203 {
204 ERR_APPEXECFWK_FORM_FORM_ID_NUM_ERR, "formId must be a numeric string.",
205 },
206 {
207 ERR_APPEXECFWK_FORM_FORM_ARRAY_ERR, "formIds must be a array.",
208 },
209 {
210 ERR_APPEXECFWK_FORM_RELEASE_FLG_ERR, "release cache flag must be a boolean.",
211 },
212 {
213 ERR_APPEXECFWK_FORM_REFRESH_TIME_NUM_ERR, "refresh time must be a number.",
214 },
215 {
216 ERR_APPEXECFWK_FORM_FORM_ID_ARRAY_ERR, "formId array is empty.",
217 },
218 {
219 ERR_APPEXECFWK_FORM_INVALID_BUNDLENAME, "bundleName is not available.",
220 },
221 {
222 ERR_APPEXECFWK_FORM_INVALID_MODULENAME, "moduleName is not available.",
223 },
224 {
225 ERR_APPEXECFWK_FORM_INVALID_PROVIDER_DATA, "moduleName is not available.",
226 },
227 {
228 ERR_APPEXECFWK_FORM_INVALID_REFRESH_TIME, "refresh time is not available.",
229 },
230 {
231 ERR_APPEXECFWK_FORM_SERVER_STATUS_ERR, "form server error.",
232 },
233 {
234 ERR_APPEXECFWK_FORM_CFG_NOT_MATCH_ID, "the form id and form config are not matched.",
235 },
236 {
237 ERR_APPEXECFWK_FORM_NOT_EXIST_ID, "the requested form id is not existed on fms.",
238 },
239 {
240 ERR_APPEXECFWK_FORM_BIND_PROVIDER_FAILED, "fms bind provider failed.",
241 },
242 {
243 ERR_APPEXECFWK_FORM_MAX_SYSTEM_FORMS, "exceed max forms in system",
244 },
245 {
246 ERR_APPEXECFWK_FORM_EXCEED_INSTANCES_PER_FORM, "exceed max instances per form, limit is 32.",
247 },
248 {
249 ERR_APPEXECFWK_FORM_OPERATION_NOT_SELF,
250 "the form to be operated is not self-owned or has been deleted already.",
251 },
252 {
253 ERR_APPEXECFWK_FORM_PROVIDER_DEL_FAIL, "fms notify provider to delete failed.",
254 },
255 {
256 ERR_APPEXECFWK_FORM_MAX_FORMS_PER_CLIENT, "exceed max forms per client",
257 },
258 {
259 ERR_APPEXECFWK_FORM_MAX_SYSTEM_TEMP_FORMS, "exceed max temp forms in system",
260 },
261 {
262 ERR_APPEXECFWK_FORM_NO_SUCH_MODULE, "the module not exist in the bundle.",
263 },
264 {
265 ERR_APPEXECFWK_FORM_NO_SUCH_ABILITY, "the ability not exist in the module.",
266 },
267 {
268 ERR_APPEXECFWK_FORM_NO_SUCH_DIMENSION, "the dimension not exist in the form.",
269 },
270 {
271 ERR_APPEXECFWK_FORM_FA_NOT_INSTALLED, "the ability not installed,need install first.",
272 },
273 {
274 ERR_APPEXECFWK_FORM_MAX_REQUEST, "too many request,try again later.",
275 },
276 {
277 ERR_APPEXECFWK_FORM_MAX_REFRESH, "already refresh 50 times.",
278 },
279 {
280 ERR_APPEXECFWK_FORM_GET_BMS_FAILED, "get bms rpc failed.",
281 },
282 {
283 ERR_APPEXECFWK_FORM_GET_FMS_FAILED, "get fms rpc failed.",
284 },
285 {
286 ERR_APPEXECFWK_FORM_SEND_FMS_MSG, "send request to fms failed.",
287 },
288 {
289 ERR_APPEXECFWK_FORM_FORM_DUPLICATE_ADDED, "form do not support acquire same id twice.",
290 },
291 {
292 ERR_APPEXECFWK_FORM_IN_RECOVER, "form is in recover status, can't do action on form.",
293 },
294 {
295 ERR_APPEXECFWK_FORM_GET_SYSMGR_FAILED, "get system manager failed.",
296 },
297 {
298 ERR_APPEXECFWK_PARCEL_ERROR, "read parcelable info failed.",
299 },
300 {
301 ERR_APPEXECFWK_FORM_CONNECT_FORM_RENDER_FAILED, "Connect FormRenderService failed.",
302 },
303 {
304 ERR_APPEXECFWK_FORM_RENDER_SERVICE_DIED, "FormRenderService is dead.",
305 },
306 {
307 ERR_APPEXECFWK_FORM_STATUS_TIMIE_OUT, "form status timeout, try reAddForm.",
308 },
309 {
310 ERR_APPEXECFWK_FORM_SET_OPERATION_FAILED, "Failed to set the live form background image.",
311 },
312 };
313 }
314 } // namespace AppExecFwk
315 } // namespace OHOS
316