1 /*
2 * Copyright (c) 2024 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_scheme_handler_response_ffi.h"
17
18 #include "nweb_helper.h"
19 #include "nweb_init_params.h"
20 #include "web_errors.h"
21 #include "web_scheme_handler_response_impl.h"
22 #include "webview_controller_impl.h"
23 #include "webview_log.h"
24 #include "webview_utils.h"
25
26 using namespace OHOS::FFI;
27 using namespace OHOS::NWeb;
28
29 namespace OHOS {
30 namespace Webview {
31 extern "C" {
32 // WebSchemeHandlerResponse
FfiWebSchemeHandlerResponseConstructor()33 int64_t FfiWebSchemeHandlerResponseConstructor()
34 {
35 auto nativeWebSchemeHandlerResponse = FFIData::Create<WebSchemeHandlerResponseImpl>();
36 if (nativeWebSchemeHandlerResponse == nullptr) {
37 WEBVIEWLOGE("new Web Scheme Handler Response failed");
38 return -1;
39 }
40 return nativeWebSchemeHandlerResponse->GetID();
41 }
42
FfiWebSchemeHandlerResponseGetUrl(int64_t id)43 RetDataCString FfiWebSchemeHandlerResponseGetUrl(int64_t id)
44 {
45 RetDataCString ret = { .code = NWebError::INIT_ERROR, .data = nullptr };
46 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
47 if (nativeWebSchemeHandlerResponse == nullptr) {
48 return ret;
49 }
50 char* url = nativeWebSchemeHandlerResponse->GetUrl();
51 ret.code = NWebError::NO_ERROR;
52 ret.data = MallocCString(url);
53 OH_ArkWeb_ReleaseString(url);
54 return ret;
55 }
56
FfiWebSchemeHandlerResponseGetStatusText(int64_t id)57 RetDataCString FfiWebSchemeHandlerResponseGetStatusText(int64_t id)
58 {
59 RetDataCString ret = { .code = NWebError::INIT_ERROR, .data = nullptr };
60 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
61 if (nativeWebSchemeHandlerResponse == nullptr) {
62 return ret;
63 }
64 char* statusText = nativeWebSchemeHandlerResponse->GetStatusText();
65 ret.code = NWebError::NO_ERROR;
66 ret.data = MallocCString(statusText);
67 OH_ArkWeb_ReleaseString(statusText);
68 return ret;
69 }
70
FfiWebSchemeHandlerResponseGetMimeType(int64_t id)71 RetDataCString FfiWebSchemeHandlerResponseGetMimeType(int64_t id)
72 {
73 RetDataCString ret = { .code = NWebError::INIT_ERROR, .data = nullptr };
74 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
75 if (nativeWebSchemeHandlerResponse == nullptr) {
76 return ret;
77 }
78 char* mimeType = nativeWebSchemeHandlerResponse->GetMimeType();
79 ret.code = NWebError::NO_ERROR;
80 ret.data = MallocCString(mimeType);
81 OH_ArkWeb_ReleaseString(mimeType);
82 return ret;
83 }
84
FfiWebSchemeHandlerResponseGetEncoding(int64_t id)85 RetDataCString FfiWebSchemeHandlerResponseGetEncoding(int64_t id)
86 {
87 RetDataCString ret = { .code = NWebError::INIT_ERROR, .data = nullptr };
88 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
89 if (nativeWebSchemeHandlerResponse == nullptr) {
90 return ret;
91 }
92 char* encoding = nativeWebSchemeHandlerResponse->GetEncoding();
93 ret.code = NWebError::NO_ERROR;
94 ret.data = MallocCString(encoding);
95 OH_ArkWeb_ReleaseString(encoding);
96 return ret;
97 }
98
FfiWebSchemeHandlerResponseGetHeaderByName(int64_t id,const char * name)99 RetDataCString FfiWebSchemeHandlerResponseGetHeaderByName(int64_t id, const char* name)
100 {
101 std::string cname = name;
102 RetDataCString ret = { .code = NWebError::INIT_ERROR, .data = nullptr };
103 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
104 if (nativeWebSchemeHandlerResponse == nullptr) {
105 return ret;
106 }
107 char* header = nativeWebSchemeHandlerResponse->GetHeaderByName(cname.c_str());
108 ret.code = NWebError::NO_ERROR;
109 ret.data = MallocCString(header);
110 OH_ArkWeb_ReleaseString(header);
111 return ret;
112 }
113
FfiWebSchemeHandlerResponseGetNetErrorCode(int64_t id,int32_t * errCode)114 int32_t FfiWebSchemeHandlerResponseGetNetErrorCode(int64_t id, int32_t* errCode)
115 {
116 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
117 if (nativeWebSchemeHandlerResponse == nullptr) {
118 *errCode = NWebError::INIT_ERROR;
119 return -1;
120 }
121 int32_t errorCode = nativeWebSchemeHandlerResponse->GetErrorCode();
122 *errCode = NWebError::NO_ERROR;
123 return errorCode;
124 }
125
FfiWebSchemeHandlerResponseGetStatus(int64_t id,int32_t * errCode)126 int32_t FfiWebSchemeHandlerResponseGetStatus(int64_t id, int32_t* errCode)
127 {
128 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
129 if (nativeWebSchemeHandlerResponse == nullptr) {
130 *errCode = NWebError::INIT_ERROR;
131 return -1;
132 }
133 int32_t status = nativeWebSchemeHandlerResponse->GetStatus();
134 *errCode = NWebError::NO_ERROR;
135 return status;
136 }
137
FfiWebSchemeHandlerResponseSetStatus(int64_t id,int32_t status)138 int32_t FfiWebSchemeHandlerResponseSetStatus(int64_t id, int32_t status)
139 {
140 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
141 if (nativeWebSchemeHandlerResponse == nullptr) {
142 return NWebError::INIT_ERROR;
143 }
144 if (!status) {
145 return NWebError::PARAM_CHECK_ERROR;
146 }
147 return nativeWebSchemeHandlerResponse->SetStatus(status);
148 }
149
FfiWebSchemeHandlerResponseSetStatusText(int64_t id,const char * statusText)150 int32_t FfiWebSchemeHandlerResponseSetStatusText(int64_t id, const char* statusText)
151 {
152 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
153 std::string cstatusText = statusText;
154 if (nativeWebSchemeHandlerResponse == nullptr) {
155 return NWebError::INIT_ERROR;
156 }
157 if (cstatusText.length() == 0) {
158 return NWebError::PARAM_CHECK_ERROR;
159 }
160 return nativeWebSchemeHandlerResponse->SetStatusText(cstatusText.c_str());
161 }
162
FfiWebSchemeHandlerResponseSetUrl(int64_t id,const char * url)163 int32_t FfiWebSchemeHandlerResponseSetUrl(int64_t id, const char* url)
164 {
165 std::string curl = url;
166 if (curl.length() == 0) {
167 return NWebError::PARAM_CHECK_ERROR;
168 }
169 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
170 if (nativeWebSchemeHandlerResponse == nullptr) {
171 return NWebError::INIT_ERROR;
172 }
173 return nativeWebSchemeHandlerResponse->SetUrl(curl.c_str());
174 }
175
FfiWebSchemeHandlerResponseSetMimeType(int64_t id,const char * mimeType)176 int32_t FfiWebSchemeHandlerResponseSetMimeType(int64_t id, const char* mimeType)
177 {
178 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
179 std::string cmimeType = mimeType;
180 if (nativeWebSchemeHandlerResponse == nullptr) {
181 return NWebError::INIT_ERROR;
182 }
183 if (cmimeType.length() == 0) {
184 return NWebError::PARAM_CHECK_ERROR;
185 }
186 return nativeWebSchemeHandlerResponse->SetMimeType(cmimeType.c_str());
187 }
188
FfiWebSchemeHandlerResponseSetEncoding(int64_t id,const char * encoding)189 int32_t FfiWebSchemeHandlerResponseSetEncoding(int64_t id, const char* encoding)
190 {
191 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
192 std::string cencoding = encoding;
193 if (nativeWebSchemeHandlerResponse == nullptr) {
194 return NWebError::INIT_ERROR;
195 }
196 if (cencoding.length() == 0) {
197 return NWebError::PARAM_CHECK_ERROR;
198 }
199 return nativeWebSchemeHandlerResponse->SetEncoding(cencoding.c_str());
200 }
201
FfiWebSchemeHandlerResponseSetHeaderByName(int64_t id,const char * name,const char * value,bool overwrite)202 int32_t FfiWebSchemeHandlerResponseSetHeaderByName(int64_t id, const char* name, const char* value, bool overwrite)
203 {
204 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
205 std::string cname = name;
206 std::string cvalue = value;
207 if (nativeWebSchemeHandlerResponse == nullptr) {
208 return NWebError::INIT_ERROR;
209 }
210 if (cname.length() == 0 || cvalue.length() == 0) {
211 return NWebError::PARAM_CHECK_ERROR;
212 }
213 return nativeWebSchemeHandlerResponse->SetHeaderByName(cname.c_str(), cvalue.c_str(), overwrite);
214 }
215
FfiWebSchemeHandlerResponseSetErrorCode(int64_t id,int32_t code)216 int32_t FfiWebSchemeHandlerResponseSetErrorCode(int64_t id, int32_t code)
217 {
218 auto nativeWebSchemeHandlerResponse = FFIData::GetData<WebSchemeHandlerResponseImpl>(id);
219 if (nativeWebSchemeHandlerResponse == nullptr) {
220 return NWebError::INIT_ERROR;
221 }
222 return nativeWebSchemeHandlerResponse->SetErrorCode(code);
223 }
224 }
225 } // namespace Webview
226 } // namespace OHOS