1 /*
2 * Copyright (c) 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 "web_errors.h"
17 #include <string>
18 #include <unordered_map>
19 #include <cstdarg>
20 #include "securec.h"
21
22 namespace {
23 // error message
24 const std::string PARAM_CHECK_ERROR_MSG = "Invalid input parameter";
25 const std::string INIT_ERROR_MSG = "Init error. The WebviewController must be associated with a Web component";
26 const std::string INVALID_URL_MSG = "Invalid url";
27 const std::string INVALID_RESOURCE_MSG = "Invalid resource path or file type";
28 const std::string FUNCTION_NOT_ENABLE_MSG = "Function not enabled.";
29 const std::string INVALID_COOKIE_VALUE_MSG = "Invalid cookie value";
30 const std::string CAN_NOT_REGISTER_MESSAGE_EVENT_MSG = "Fail to register a message event for the port.";
31 const std::string CANNOT_DEL_JAVA_SCRIPT_PROXY_MSG = "Failed to delete JavaScriptProxy because it does not exist.";
32 const std::string CAN_NOT_POST_MESSAGE_MSG = "Failed to post messages through the port.";
33 const std::string INVALID_ORIGIN_MSG = "Invalid origin";
34 const std::string NO_WEBSTORAGE_ORIGIN_MSG = "Invalid web storage origin";
35 const std::string INVALID_SOCKET_NUMBER_MSG = "The number of sockets to be preconnected is invalid.";
36 const std::string TYPE_NOT_MATCH_WITCH_VALUE_MSG = "The type and value of the message do not match.";
37 const std::string NEW_OOM_MSG = "Memory allocation failed.";
38 const std::string DOWNLOAD_NOT_PAUSED_MSG = "The download task is not paused.";
39 const std::string NO_VALID_CONTROLLER_FOR_DOWNLOAD_MSG = "No valid WebviewController is associated.";
40 const std::string NO_DOWNLOAD_DELEGATE_SET_MSG = "No WebDownloadDelegate has been set yet.";
41 const std::string DOWNLOAD_NOT_START_MSG = "The download task is not started yet.";
42 const std::string REGISTER_CUSTOM_SCHEME_FAILED_MSG = "Failed to register custom schemes.";
43 const std::string HTTP_BODY_STREAN_INIT_FAILED_MSG = "Failed to initialize the HTTP body stream.";
44 const std::string RESOURCE_HANDLER_INVALID_MSG = "The resource handler is invalid.";
45 }
46
47 namespace OHOS {
48 namespace ParamCheckErrorMsgTemplate {
49 const char* TYPE_ERROR = "BusinessError 401: Parameter error. The type of '%s' must be %s.";
50 const char* TYPE_ALL_STRING = "BusinessError 401: Parameter error. The type of params must be string.";
51 const char* TYPE_ALL_INT = "BusinessError 401: Parameter error. The type of params must be int.";
52 const char* PARAM_TYEPS_ERROR = "BusinessError 401: Parameter error. The type of params is error.";
53 const char* PARAM_NUMBERS_ERROR_ONE = "BusinessError 401: Parameter error. The number of params must be %s.";
54 const char* PARAM_NUMBERS_ERROR_TWO = "BusinessError 401: Parameter error. The number of params must be %s or %s.";
55 const char* PARAM_NUMBERS_ERROR_THREE =
56 "BusinessError 401: Parameter error. The number of params must be %s or %s or %s.";
57 const char* PARAM_NOT_NULL = "BusinessError 401: Parameter error. The type of '%s' can not be ignored.";
58 const char* PARAM_NOT_NULL_TWO =
59 "BusinessError 401: Parameter error. The type of '%s' and '%s' can not be ignored.";
60 const char* PARAM_TYPE_INVALID = "BusinessError 401: Parameter error. The type of '%s' is invalid.";
61 const char* PARAM_DETAIL_ERROR_MSG = "BusinessError 401: Parameter error. detail: %s.";
62 }
63 namespace NWebError {
64 std::unordered_map<ErrCode, std::string> g_errCodeMsgMap = {
65 {PARAM_CHECK_ERROR, PARAM_CHECK_ERROR_MSG},
66 {INIT_ERROR, INIT_ERROR_MSG},
67 {INVALID_URL, INVALID_URL_MSG},
68 {INVALID_RESOURCE, INVALID_RESOURCE_MSG},
69 {FUNCTION_NOT_ENABLE, FUNCTION_NOT_ENABLE_MSG},
70 {INVALID_COOKIE_VALUE, INVALID_COOKIE_VALUE_MSG},
71 {CAN_NOT_REGISTER_MESSAGE_EVENT, CAN_NOT_REGISTER_MESSAGE_EVENT_MSG},
72 {CANNOT_DEL_JAVA_SCRIPT_PROXY, CANNOT_DEL_JAVA_SCRIPT_PROXY_MSG},
73 {CAN_NOT_POST_MESSAGE, CAN_NOT_POST_MESSAGE_MSG},
74 {INVALID_ORIGIN, INVALID_ORIGIN_MSG},
75 {NO_WEBSTORAGE_ORIGIN, NO_WEBSTORAGE_ORIGIN_MSG},
76 {INVALID_SOCKET_NUMBER, INVALID_SOCKET_NUMBER_MSG},
77 {TYPE_NOT_MATCH_WITCH_VALUE, TYPE_NOT_MATCH_WITCH_VALUE_MSG},
78 {NEW_OOM, NEW_OOM_MSG},
79 {DOWNLOAD_NOT_PAUSED, DOWNLOAD_NOT_PAUSED_MSG},
80 {NO_VALID_CONTROLLER_FOR_DOWNLOAD, NO_VALID_CONTROLLER_FOR_DOWNLOAD_MSG},
81 {NO_DOWNLOAD_DELEGATE_SET, NO_DOWNLOAD_DELEGATE_SET_MSG},
82 {DOWNLOAD_NOT_START, DOWNLOAD_NOT_START_MSG},
83 {REGISTER_CUSTOM_SCHEME_FAILED, REGISTER_CUSTOM_SCHEME_FAILED_MSG},
84 {HTTP_BODY_STREAN_INIT_FAILED, HTTP_BODY_STREAN_INIT_FAILED_MSG},
85 {RESOURCE_HANDLER_INVALID, RESOURCE_HANDLER_INVALID_MSG},
86 };
87
GetErrMsgByErrCode(ErrCode code)88 std::string GetErrMsgByErrCode(ErrCode code)
89 {
90 return g_errCodeMsgMap[code];
91 }
FormatString(const char * errorMsgTemplate,...)92 std::string FormatString(const char *errorMsgTemplate, ...)
93 {
94 char sbuf[256];
95 va_list args;
96 va_start(args, errorMsgTemplate);
97 if (vsnprintf_s(sbuf, sizeof(sbuf), sizeof(sbuf) - 1, errorMsgTemplate, args) < 0) {
98 va_end(args);
99 return "";
100 }
101 va_end(args);
102 return sbuf;
103 }
104 } // namespace NWebError
105 } // namespace OHOS
106