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)23int32_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()53int32_t WebJsMessageExtImpl::GetType() 54 { 55 if (value_) { 56 return ConvertToJsType(value_->GetType()); 57 } 58 return static_cast<int32_t>(JsMessageType::NOTSUPPORT); 59 } 60 GetString()61std::string WebJsMessageExtImpl::GetString() 62 { 63 if (value_) { 64 return value_->GetString(); 65 } 66 return ""; 67 } 68 GetNumber()69double WebJsMessageExtImpl::GetNumber() 70 { 71 if (value_) { 72 return value_->GetDouble(); 73 } 74 return 0; 75 } 76 GetBoolean()77bool WebJsMessageExtImpl::GetBoolean() 78 { 79 if (value_) { 80 return value_->GetBoolean(); 81 } 82 return false; 83 } 84 OnReceiveValue(std::shared_ptr<NWebMessage> result)85void 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)105void 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