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