• 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 "webview_javascript_execute_callback.h"
17 #include "webview_log.h"
18 
19 using namespace OHOS::NWeb;
20 
21 namespace OHOS::Webview {
22 
ConvertToJsType(NWebValue::Type type)23 int32_t WebJsMessageExtImpl::ConvertToJsType(NWebValue::Type type)
24 {
25     JsMessageType jsMessageType = JsMessageType::NOTSUPPORT;
26     switch (type) {
27         case NWebValue::Type::STRING:
28             jsMessageType = JsMessageType::STRING;
29             break;
30         case NWebValue::Type::INTEGER:
31         case NWebValue::Type::DOUBLE:
32             jsMessageType = JsMessageType::NUMBER;
33             break;
34         case NWebValue::Type::BOOLEAN:
35             jsMessageType = JsMessageType::BOOLEAN;
36             break;
37         case NWebValue::Type::BINARY:
38             jsMessageType = JsMessageType::ARRAYBUFFER;
39             break;
40         case NWebValue::Type::STRINGARRAY:
41         case NWebValue::Type::BOOLEANARRAY:
42         case NWebValue::Type::DOUBLEARRAY:
43         case NWebValue::Type::INT64ARRAY:
44             jsMessageType = JsMessageType::ARRAY;
45             break;
46         default:
47             jsMessageType = JsMessageType::NOTSUPPORT;
48             break;
49     }
50     return static_cast<int32_t>(jsMessageType);
51 }
52 
GetType()53 int32_t WebJsMessageExtImpl::GetType()
54 {
55     if (value_) {
56         return ConvertToJsType(value_->GetType());
57     }
58     return static_cast<int32_t>(JsMessageType::NOTSUPPORT);
59 }
60 
GetString()61 std::string WebJsMessageExtImpl::GetString()
62 {
63     if (value_) {
64         return value_->GetString();
65     }
66     return "";
67 }
68 
GetNumber()69 double WebJsMessageExtImpl::GetNumber()
70 {
71     if (value_) {
72         return value_->GetDouble();
73     }
74     return 0;
75 }
76 
GetBoolean()77 bool WebJsMessageExtImpl::GetBoolean()
78 {
79     if (value_) {
80         return value_->GetBoolean();
81     }
82     return false;
83 }
84 
OnReceiveValue(std::shared_ptr<NWebMessage> result)85 void WebviewJavaScriptExecuteCallback::OnReceiveValue(std::shared_ptr<NWebMessage> result)
86 {
87     WEBVIEWLOGI("WebviewJavaScriptExecuteCallback::OnReceiveValue start");
88     RetDataCString ret = { .code = NWebError::INVALID_RESOURCE, .data = nullptr };
89     if (result == nullptr) {
90         callbackRef_(ret);
91         return;
92     }
93     if (result->GetType() == NWebValue::Type::STRING && result->GetString().empty()) {
94         callbackRef_(ret);
95         return;
96     }
97     ret.code = NWebError::NO_ERROR;
98     ret.data = MallocCString(result->GetString());
99     if (ret.data == nullptr) {
100         ret.code = NWebError::NEW_OOM;
101     }
102     callbackRef_(ret);
103 }
104 
OnReceiveValue(std::shared_ptr<NWebMessage> result)105 void WebviewJavaScriptExtExecuteCallback::OnReceiveValue(std::shared_ptr<NWebMessage> result)
106 {
107     WEBVIEWLOGI("WebviewJavaScriptExtExecuteCallback::OnReceiveValue start");
108     RetDataI64 ret = { .code = NWebError::INVALID_RESOURCE, .data = 0 };
109     if (result == nullptr) {
110         callbackRef_(ret);
111         return;
112     }
113     WebJsMessageExtImpl *webJsMessageExtImpl = OHOS::FFI::FFIData::Create<WebJsMessageExtImpl>(result);
114     if (webJsMessageExtImpl == nullptr) {
115         WEBVIEWLOGE("new WebJsMessageExtImpl failed.");
116         callbackRef_(ret);
117         return;
118     }
119     ret.code = NWebError::NO_ERROR;
120     ret.data = webJsMessageExtImpl->GetID();
121     callbackRef_(ret);
122 }
123 
124 } // namespace OHOS::Webview
125