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