10826e83eSopenharmony_ci/* 20826e83eSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 30826e83eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 40826e83eSopenharmony_ci * you may not use this file except in compliance with the License. 50826e83eSopenharmony_ci * You may obtain a copy of the License at 60826e83eSopenharmony_ci * 70826e83eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 80826e83eSopenharmony_ci * 90826e83eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 100826e83eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 110826e83eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120826e83eSopenharmony_ci * See the License for the specific language governing permissions and 130826e83eSopenharmony_ci * limitations under the License. 140826e83eSopenharmony_ci */ 150826e83eSopenharmony_ci 160826e83eSopenharmony_ci#include "webview_controller.h" 170826e83eSopenharmony_ci 180826e83eSopenharmony_ci#include <memory> 190826e83eSopenharmony_ci#include <unordered_map> 200826e83eSopenharmony_ci#include <securec.h> 210826e83eSopenharmony_ci#include <regex> 220826e83eSopenharmony_ci 230826e83eSopenharmony_ci#include "application_context.h" 240826e83eSopenharmony_ci#include "business_error.h" 250826e83eSopenharmony_ci#include "napi_parse_utils.h" 260826e83eSopenharmony_ci#include "ohos_resource_adapter_impl.h" 270826e83eSopenharmony_ci 280826e83eSopenharmony_ci#include "native_arkweb_utils.h" 290826e83eSopenharmony_ci#include "native_interface_arkweb.h" 300826e83eSopenharmony_ci#include "native_media_player_impl.h" 310826e83eSopenharmony_ci 320826e83eSopenharmony_ci#include "nweb_log.h" 330826e83eSopenharmony_ci#include "nweb_store_web_archive_callback.h" 340826e83eSopenharmony_ci#include "web_errors.h" 350826e83eSopenharmony_ci#include "webview_createpdf_execute_callback.h" 360826e83eSopenharmony_ci#include "webview_hasimage_callback.h" 370826e83eSopenharmony_ci#include "webview_javascript_execute_callback.h" 380826e83eSopenharmony_ci#include "webview_javascript_result_callback.h" 390826e83eSopenharmony_ci 400826e83eSopenharmony_ci#include "nweb_precompile_callback.h" 410826e83eSopenharmony_ci#include "nweb_cache_options_impl.h" 420826e83eSopenharmony_ci 430826e83eSopenharmony_ci#include "bundle_mgr_proxy.h" 440826e83eSopenharmony_ci#include "if_system_ability_manager.h" 450826e83eSopenharmony_ci#include "iservice_registry.h" 460826e83eSopenharmony_ci#include "parameters.h" 470826e83eSopenharmony_ci#include "system_ability_definition.h" 480826e83eSopenharmony_ci 490826e83eSopenharmony_cinamespace { 500826e83eSopenharmony_ciconstexpr int32_t PARAMZERO = 0; 510826e83eSopenharmony_ciconstexpr int32_t PARAMONE = 1; 520826e83eSopenharmony_ciconstexpr int32_t RESULT_COUNT = 2; 530826e83eSopenharmony_ciconst std::string BUNDLE_NAME_PREFIX = "bundleName:"; 540826e83eSopenharmony_ciconst std::string MODULE_NAME_PREFIX = "moduleName:"; 550826e83eSopenharmony_ci} // namespace 560826e83eSopenharmony_ci 570826e83eSopenharmony_cinamespace OHOS { 580826e83eSopenharmony_cinamespace NWeb { 590826e83eSopenharmony_cinamespace { 600826e83eSopenharmony_ciconstexpr uint32_t URL_MAXIMUM = 2048; 610826e83eSopenharmony_cibool GetAppBundleNameAndModuleName(std::string& bundleName, std::string& moduleName) 620826e83eSopenharmony_ci{ 630826e83eSopenharmony_ci static std::string applicationBundleName; 640826e83eSopenharmony_ci static std::string applicationModuleName; 650826e83eSopenharmony_ci if (!applicationBundleName.empty() && !applicationModuleName.empty()) { 660826e83eSopenharmony_ci bundleName = applicationBundleName; 670826e83eSopenharmony_ci moduleName = applicationModuleName; 680826e83eSopenharmony_ci return true; 690826e83eSopenharmony_ci } 700826e83eSopenharmony_ci std::shared_ptr<AbilityRuntime::ApplicationContext> context = 710826e83eSopenharmony_ci AbilityRuntime::ApplicationContext::GetApplicationContext(); 720826e83eSopenharmony_ci if (!context) { 730826e83eSopenharmony_ci WVLOG_E("Failed to get application context."); 740826e83eSopenharmony_ci return false; 750826e83eSopenharmony_ci } 760826e83eSopenharmony_ci auto resourceManager = context->GetResourceManager(); 770826e83eSopenharmony_ci if (!resourceManager) { 780826e83eSopenharmony_ci WVLOG_E("Failed to get resource manager."); 790826e83eSopenharmony_ci return false; 800826e83eSopenharmony_ci } 810826e83eSopenharmony_ci applicationBundleName = resourceManager->bundleInfo.first; 820826e83eSopenharmony_ci applicationModuleName = resourceManager->bundleInfo.second; 830826e83eSopenharmony_ci bundleName = applicationBundleName; 840826e83eSopenharmony_ci moduleName = applicationModuleName; 850826e83eSopenharmony_ci WVLOG_D("application bundleName: %{public}s, moduleName: %{public}s", bundleName.c_str(), moduleName.c_str()); 860826e83eSopenharmony_ci return true; 870826e83eSopenharmony_ci} 880826e83eSopenharmony_ci} 890826e83eSopenharmony_ciusing namespace NWebError; 900826e83eSopenharmony_cistd::mutex g_objectMtx; 910826e83eSopenharmony_cistd::unordered_map<int32_t, WebviewController*> g_webview_controller_map; 920826e83eSopenharmony_cistd::string WebviewController::customeSchemeCmdLine_ = ""; 930826e83eSopenharmony_cibool WebviewController::existNweb_ = false; 940826e83eSopenharmony_cibool WebviewController::webDebuggingAccess_ = OHOS::system::GetBoolParameter("web.debug.devtools", false); 950826e83eSopenharmony_cistd::set<std::string> WebviewController::webTagSet_; 960826e83eSopenharmony_ciint32_t WebviewController::webTagStrId_ = 0; 970826e83eSopenharmony_ci 980826e83eSopenharmony_ciWebviewController::WebviewController(int32_t nwebId) : nwebId_(nwebId) 990826e83eSopenharmony_ci{ 1000826e83eSopenharmony_ci if (IsInit()) { 1010826e83eSopenharmony_ci std::unique_lock<std::mutex> lk(g_objectMtx); 1020826e83eSopenharmony_ci g_webview_controller_map.emplace(nwebId, this); 1030826e83eSopenharmony_ci } 1040826e83eSopenharmony_ci} 1050826e83eSopenharmony_ci 1060826e83eSopenharmony_ciWebviewController::WebviewController(const std::string& webTag) : webTag_(webTag) 1070826e83eSopenharmony_ci{ 1080826e83eSopenharmony_ci NWebHelper::Instance().SetWebTag(-1, webTag_.c_str()); 1090826e83eSopenharmony_ci} 1100826e83eSopenharmony_ci 1110826e83eSopenharmony_ciWebviewController::~WebviewController() 1120826e83eSopenharmony_ci{ 1130826e83eSopenharmony_ci std::unique_lock<std::mutex> lk(g_objectMtx); 1140826e83eSopenharmony_ci g_webview_controller_map.erase(nwebId_); 1150826e83eSopenharmony_ci} 1160826e83eSopenharmony_ci 1170826e83eSopenharmony_civoid WebviewController::SetWebId(int32_t nwebId) 1180826e83eSopenharmony_ci{ 1190826e83eSopenharmony_ci nwebId_ = nwebId; 1200826e83eSopenharmony_ci std::unique_lock<std::mutex> lk(g_objectMtx); 1210826e83eSopenharmony_ci g_webview_controller_map.emplace(nwebId, this); 1220826e83eSopenharmony_ci 1230826e83eSopenharmony_ci if (webTag_.empty()) { 1240826e83eSopenharmony_ci WVLOG_I("native webtag is empty, don't care because it's not a native instance"); 1250826e83eSopenharmony_ci return; 1260826e83eSopenharmony_ci } 1270826e83eSopenharmony_ci 1280826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 1290826e83eSopenharmony_ci if (nweb_ptr) { 1300826e83eSopenharmony_ci OH_NativeArkWeb_BindWebTagToWebInstance(webTag_.c_str(), nweb_ptr); 1310826e83eSopenharmony_ci NWebHelper::Instance().SetWebTag(nwebId_, webTag_.c_str()); 1320826e83eSopenharmony_ci } 1330826e83eSopenharmony_ci SetNWebJavaScriptResultCallBack(); 1340826e83eSopenharmony_ci NativeArkWeb_OnValidCallback validCallback = OH_NativeArkWeb_GetJavaScriptProxyValidCallback(webTag_.c_str()); 1350826e83eSopenharmony_ci if (validCallback) { 1360826e83eSopenharmony_ci WVLOG_I("native validCallback start to call"); 1370826e83eSopenharmony_ci (*validCallback)(webTag_.c_str()); 1380826e83eSopenharmony_ci } else { 1390826e83eSopenharmony_ci WVLOG_W("native validCallback is null, callback nothing"); 1400826e83eSopenharmony_ci } 1410826e83eSopenharmony_ci} 1420826e83eSopenharmony_ci 1430826e83eSopenharmony_ciWebviewController* WebviewController::FromID(int32_t nwebId) 1440826e83eSopenharmony_ci{ 1450826e83eSopenharmony_ci std::unique_lock<std::mutex> lk(g_objectMtx); 1460826e83eSopenharmony_ci if (auto it = g_webview_controller_map.find(nwebId); it != g_webview_controller_map.end()) { 1470826e83eSopenharmony_ci auto control = it->second; 1480826e83eSopenharmony_ci return control; 1490826e83eSopenharmony_ci } 1500826e83eSopenharmony_ci return nullptr; 1510826e83eSopenharmony_ci} 1520826e83eSopenharmony_ci 1530826e83eSopenharmony_civoid WebviewController::InnerCompleteWindowNew(int32_t parentNwebId) 1540826e83eSopenharmony_ci{ 1550826e83eSopenharmony_ci WVLOG_D("WebviewController::InnerCompleteWindowNew parentNwebId == " 1560826e83eSopenharmony_ci "%{public}d ", 1570826e83eSopenharmony_ci parentNwebId); 1580826e83eSopenharmony_ci if (parentNwebId < 0) { 1590826e83eSopenharmony_ci WVLOG_E("WebviewController::InnerCompleteWindowNew parentNwebId == %{public}d " 1600826e83eSopenharmony_ci "error", 1610826e83eSopenharmony_ci parentNwebId); 1620826e83eSopenharmony_ci return; 1630826e83eSopenharmony_ci } 1640826e83eSopenharmony_ci auto parentControl = FromID(parentNwebId); 1650826e83eSopenharmony_ci if (!parentControl || !(parentControl->javaScriptResultCb_)) { 1660826e83eSopenharmony_ci WVLOG_E("WebviewController::InnerCompleteWindowNew parentControl or " 1670826e83eSopenharmony_ci "javaScriptResultCb_ is null"); 1680826e83eSopenharmony_ci return; 1690826e83eSopenharmony_ci } 1700826e83eSopenharmony_ci 1710826e83eSopenharmony_ci auto parNamedObjs = parentControl->javaScriptResultCb_->GetNamedObjects(); 1720826e83eSopenharmony_ci 1730826e83eSopenharmony_ci auto currentControl = FromID(nwebId_); 1740826e83eSopenharmony_ci if (!currentControl || !(currentControl->javaScriptResultCb_)) { 1750826e83eSopenharmony_ci WVLOG_E("WebviewController::InnerCompleteWindowNew currentControl or " 1760826e83eSopenharmony_ci "javaScriptResultCb_ is null"); 1770826e83eSopenharmony_ci return; 1780826e83eSopenharmony_ci } 1790826e83eSopenharmony_ci 1800826e83eSopenharmony_ci std::unique_lock<std::mutex> lock(webMtx_); 1810826e83eSopenharmony_ci { 1820826e83eSopenharmony_ci auto curNamedObjs = currentControl->javaScriptResultCb_->GetNamedObjects(); 1830826e83eSopenharmony_ci SetNWebJavaScriptResultCallBack(); 1840826e83eSopenharmony_ci for (auto it = parNamedObjs.begin(); it != parNamedObjs.end(); it++) { 1850826e83eSopenharmony_ci if (curNamedObjs.find(it->first) != curNamedObjs.end()) { 1860826e83eSopenharmony_ci continue; 1870826e83eSopenharmony_ci } 1880826e83eSopenharmony_ci if (it->second && IsInit()) { 1890826e83eSopenharmony_ci RegisterJavaScriptProxyParam param; 1900826e83eSopenharmony_ci param.env = it->second->GetEnv(); 1910826e83eSopenharmony_ci param.obj = it->second->GetValue(); 1920826e83eSopenharmony_ci param.objName = it->first; 1930826e83eSopenharmony_ci param.syncMethodList = it->second->GetSyncMethodNames(); 1940826e83eSopenharmony_ci param.asyncMethodList = it->second->GetAsyncMethodNames(); 1950826e83eSopenharmony_ci param.permission = it->second->GetPermission(); 1960826e83eSopenharmony_ci RegisterJavaScriptProxy(param); 1970826e83eSopenharmony_ci } 1980826e83eSopenharmony_ci } 1990826e83eSopenharmony_ci } 2000826e83eSopenharmony_ci} 2010826e83eSopenharmony_ci 2020826e83eSopenharmony_cibool WebviewController::IsInit() const 2030826e83eSopenharmony_ci{ 2040826e83eSopenharmony_ci return NWebHelper::Instance().GetNWeb(nwebId_) ? true : false; 2050826e83eSopenharmony_ci} 2060826e83eSopenharmony_ci 2070826e83eSopenharmony_cibool WebviewController::AccessForward() const 2080826e83eSopenharmony_ci{ 2090826e83eSopenharmony_ci bool access = false; 2100826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2110826e83eSopenharmony_ci if (nweb_ptr) { 2120826e83eSopenharmony_ci access = nweb_ptr->IsNavigateForwardAllowed(); 2130826e83eSopenharmony_ci } else { 2140826e83eSopenharmony_ci WVLOG_E("WebviewController::AccessForward nweb_ptr is null"); 2150826e83eSopenharmony_ci } 2160826e83eSopenharmony_ci return access; 2170826e83eSopenharmony_ci} 2180826e83eSopenharmony_ci 2190826e83eSopenharmony_cibool WebviewController::AccessBackward() const 2200826e83eSopenharmony_ci{ 2210826e83eSopenharmony_ci bool access = false; 2220826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2230826e83eSopenharmony_ci if (nweb_ptr) { 2240826e83eSopenharmony_ci access = nweb_ptr->IsNavigatebackwardAllowed(); 2250826e83eSopenharmony_ci } 2260826e83eSopenharmony_ci return access; 2270826e83eSopenharmony_ci} 2280826e83eSopenharmony_ci 2290826e83eSopenharmony_cibool WebviewController::AccessStep(int32_t step) const 2300826e83eSopenharmony_ci{ 2310826e83eSopenharmony_ci bool access = false; 2320826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2330826e83eSopenharmony_ci if (nweb_ptr) { 2340826e83eSopenharmony_ci access = nweb_ptr->CanNavigateBackOrForward(step); 2350826e83eSopenharmony_ci } 2360826e83eSopenharmony_ci return access; 2370826e83eSopenharmony_ci} 2380826e83eSopenharmony_ci 2390826e83eSopenharmony_civoid WebviewController::ClearHistory() 2400826e83eSopenharmony_ci{ 2410826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2420826e83eSopenharmony_ci if (nweb_ptr) { 2430826e83eSopenharmony_ci nweb_ptr->DeleteNavigateHistory(); 2440826e83eSopenharmony_ci } 2450826e83eSopenharmony_ci} 2460826e83eSopenharmony_ci 2470826e83eSopenharmony_civoid WebviewController::Forward() 2480826e83eSopenharmony_ci{ 2490826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2500826e83eSopenharmony_ci if (nweb_ptr) { 2510826e83eSopenharmony_ci nweb_ptr->NavigateForward(); 2520826e83eSopenharmony_ci } 2530826e83eSopenharmony_ci} 2540826e83eSopenharmony_ci 2550826e83eSopenharmony_civoid WebviewController::Backward() 2560826e83eSopenharmony_ci{ 2570826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2580826e83eSopenharmony_ci if (nweb_ptr) { 2590826e83eSopenharmony_ci nweb_ptr->NavigateBack(); 2600826e83eSopenharmony_ci } 2610826e83eSopenharmony_ci} 2620826e83eSopenharmony_ci 2630826e83eSopenharmony_civoid WebviewController::OnActive() 2640826e83eSopenharmony_ci{ 2650826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2660826e83eSopenharmony_ci if (nweb_ptr) { 2670826e83eSopenharmony_ci nweb_ptr->OnContinue(); 2680826e83eSopenharmony_ci } 2690826e83eSopenharmony_ci} 2700826e83eSopenharmony_ci 2710826e83eSopenharmony_civoid WebviewController::OnInactive() 2720826e83eSopenharmony_ci{ 2730826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2740826e83eSopenharmony_ci if (nweb_ptr) { 2750826e83eSopenharmony_ci nweb_ptr->OnPause(); 2760826e83eSopenharmony_ci } 2770826e83eSopenharmony_ci} 2780826e83eSopenharmony_ci 2790826e83eSopenharmony_civoid WebviewController::Refresh() 2800826e83eSopenharmony_ci{ 2810826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2820826e83eSopenharmony_ci if (nweb_ptr) { 2830826e83eSopenharmony_ci nweb_ptr->Reload(); 2840826e83eSopenharmony_ci } 2850826e83eSopenharmony_ci} 2860826e83eSopenharmony_ci 2870826e83eSopenharmony_ciErrCode WebviewController::ZoomIn() 2880826e83eSopenharmony_ci{ 2890826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 2900826e83eSopenharmony_ci if (!nweb_ptr) { 2910826e83eSopenharmony_ci return INIT_ERROR; 2920826e83eSopenharmony_ci } 2930826e83eSopenharmony_ci ErrCode result = NWebError::NO_ERROR; 2940826e83eSopenharmony_ci result = nweb_ptr->ZoomIn(); 2950826e83eSopenharmony_ci 2960826e83eSopenharmony_ci return result; 2970826e83eSopenharmony_ci} 2980826e83eSopenharmony_ci 2990826e83eSopenharmony_ciErrCode WebviewController::ZoomOut() 3000826e83eSopenharmony_ci{ 3010826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3020826e83eSopenharmony_ci if (!nweb_ptr) { 3030826e83eSopenharmony_ci return INIT_ERROR; 3040826e83eSopenharmony_ci } 3050826e83eSopenharmony_ci ErrCode result = NWebError::NO_ERROR; 3060826e83eSopenharmony_ci result = nweb_ptr->ZoomOut(); 3070826e83eSopenharmony_ci 3080826e83eSopenharmony_ci return result; 3090826e83eSopenharmony_ci} 3100826e83eSopenharmony_ci 3110826e83eSopenharmony_ciint32_t WebviewController::GetWebId() const 3120826e83eSopenharmony_ci{ 3130826e83eSopenharmony_ci int32_t webId = -1; 3140826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3150826e83eSopenharmony_ci if (nweb_ptr) { 3160826e83eSopenharmony_ci webId = static_cast<int32_t>(nweb_ptr->GetWebId()); 3170826e83eSopenharmony_ci } 3180826e83eSopenharmony_ci return webId; 3190826e83eSopenharmony_ci} 3200826e83eSopenharmony_ci 3210826e83eSopenharmony_cistd::string WebviewController::GetUserAgent() 3220826e83eSopenharmony_ci{ 3230826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3240826e83eSopenharmony_ci if (!nweb_ptr) { 3250826e83eSopenharmony_ci return ""; 3260826e83eSopenharmony_ci } 3270826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 3280826e83eSopenharmony_ci if (!setting) { 3290826e83eSopenharmony_ci return ""; 3300826e83eSopenharmony_ci } 3310826e83eSopenharmony_ci return setting->DefaultUserAgent(); 3320826e83eSopenharmony_ci} 3330826e83eSopenharmony_ci 3340826e83eSopenharmony_cistd::string WebviewController::GetCustomUserAgent() const 3350826e83eSopenharmony_ci{ 3360826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3370826e83eSopenharmony_ci if (!nweb_ptr) { 3380826e83eSopenharmony_ci return ""; 3390826e83eSopenharmony_ci } 3400826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 3410826e83eSopenharmony_ci if (!setting) { 3420826e83eSopenharmony_ci return ""; 3430826e83eSopenharmony_ci } 3440826e83eSopenharmony_ci return setting->UserAgent(); 3450826e83eSopenharmony_ci} 3460826e83eSopenharmony_ci 3470826e83eSopenharmony_ciErrCode WebviewController::SetCustomUserAgent(const std::string& userAgent) 3480826e83eSopenharmony_ci{ 3490826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3500826e83eSopenharmony_ci if (!nweb_ptr) { 3510826e83eSopenharmony_ci return NWebError::INIT_ERROR; 3520826e83eSopenharmony_ci } 3530826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 3540826e83eSopenharmony_ci if (!setting) { 3550826e83eSopenharmony_ci return NWebError::INIT_ERROR; 3560826e83eSopenharmony_ci } 3570826e83eSopenharmony_ci setting->PutUserAgent(userAgent); 3580826e83eSopenharmony_ci return NWebError::NO_ERROR; 3590826e83eSopenharmony_ci} 3600826e83eSopenharmony_ci 3610826e83eSopenharmony_cistd::string WebviewController::GetTitle() 3620826e83eSopenharmony_ci{ 3630826e83eSopenharmony_ci std::string title = ""; 3640826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3650826e83eSopenharmony_ci if (nweb_ptr) { 3660826e83eSopenharmony_ci title = nweb_ptr->Title(); 3670826e83eSopenharmony_ci } 3680826e83eSopenharmony_ci return title; 3690826e83eSopenharmony_ci} 3700826e83eSopenharmony_ci 3710826e83eSopenharmony_ciint32_t WebviewController::GetPageHeight() 3720826e83eSopenharmony_ci{ 3730826e83eSopenharmony_ci int32_t pageHeight = 0; 3740826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3750826e83eSopenharmony_ci if (nweb_ptr) { 3760826e83eSopenharmony_ci pageHeight = nweb_ptr->ContentHeight(); 3770826e83eSopenharmony_ci } 3780826e83eSopenharmony_ci return pageHeight; 3790826e83eSopenharmony_ci} 3800826e83eSopenharmony_ci 3810826e83eSopenharmony_ciErrCode WebviewController::BackOrForward(int32_t step) 3820826e83eSopenharmony_ci{ 3830826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3840826e83eSopenharmony_ci if (!nweb_ptr) { 3850826e83eSopenharmony_ci return INIT_ERROR; 3860826e83eSopenharmony_ci } 3870826e83eSopenharmony_ci 3880826e83eSopenharmony_ci nweb_ptr->NavigateBackOrForward(step); 3890826e83eSopenharmony_ci return NWebError::NO_ERROR; 3900826e83eSopenharmony_ci} 3910826e83eSopenharmony_ci 3920826e83eSopenharmony_civoid WebviewController::StoreWebArchiveCallback(const std::string &baseName, bool autoName, napi_env env, 3930826e83eSopenharmony_ci napi_ref jsCallback) 3940826e83eSopenharmony_ci{ 3950826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 3960826e83eSopenharmony_ci if (!nweb_ptr) { 3970826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 3980826e83eSopenharmony_ci setResult[PARAMZERO] = BusinessError::CreateError(env, NWebError::INIT_ERROR); 3990826e83eSopenharmony_ci napi_get_null(env, &setResult[PARAMONE]); 4000826e83eSopenharmony_ci 4010826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO], setResult[PARAMONE]}; 4020826e83eSopenharmony_ci napi_value callback = nullptr; 4030826e83eSopenharmony_ci napi_get_reference_value(env, jsCallback, &callback); 4040826e83eSopenharmony_ci napi_value callbackResult = nullptr; 4050826e83eSopenharmony_ci napi_call_function(env, nullptr, callback, RESULT_COUNT, args, &callbackResult); 4060826e83eSopenharmony_ci napi_delete_reference(env, jsCallback); 4070826e83eSopenharmony_ci return; 4080826e83eSopenharmony_ci } 4090826e83eSopenharmony_ci 4100826e83eSopenharmony_ci if (jsCallback == nullptr) { 4110826e83eSopenharmony_ci return; 4120826e83eSopenharmony_ci } 4130826e83eSopenharmony_ci 4140826e83eSopenharmony_ci auto callbackImpl = std::make_shared<OHOS::NWeb::NWebStoreWebArchiveCallback>(); 4150826e83eSopenharmony_ci callbackImpl->SetCallBack([env, jCallback = std::move(jsCallback)](std::string result) { 4160826e83eSopenharmony_ci if (!env) { 4170826e83eSopenharmony_ci return; 4180826e83eSopenharmony_ci } 4190826e83eSopenharmony_ci napi_handle_scope scope = nullptr; 4200826e83eSopenharmony_ci napi_open_handle_scope(env, &scope); 4210826e83eSopenharmony_ci if (scope == nullptr) { 4220826e83eSopenharmony_ci return; 4230826e83eSopenharmony_ci } 4240826e83eSopenharmony_ci 4250826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 4260826e83eSopenharmony_ci if (result.empty()) { 4270826e83eSopenharmony_ci setResult[PARAMZERO] = BusinessError::CreateError(env, NWebError::INVALID_RESOURCE); 4280826e83eSopenharmony_ci napi_get_null(env, &setResult[PARAMONE]); 4290826e83eSopenharmony_ci } else { 4300826e83eSopenharmony_ci napi_get_undefined(env, &setResult[PARAMZERO]); 4310826e83eSopenharmony_ci napi_create_string_utf8(env, result.c_str(), NAPI_AUTO_LENGTH, &setResult[PARAMONE]); 4320826e83eSopenharmony_ci } 4330826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO], setResult[PARAMONE]}; 4340826e83eSopenharmony_ci napi_value callback = nullptr; 4350826e83eSopenharmony_ci napi_get_reference_value(env, jCallback, &callback); 4360826e83eSopenharmony_ci napi_value callbackResult = nullptr; 4370826e83eSopenharmony_ci napi_call_function(env, nullptr, callback, RESULT_COUNT, args, &callbackResult); 4380826e83eSopenharmony_ci 4390826e83eSopenharmony_ci napi_delete_reference(env, jCallback); 4400826e83eSopenharmony_ci napi_close_handle_scope(env, scope); 4410826e83eSopenharmony_ci }); 4420826e83eSopenharmony_ci nweb_ptr->StoreWebArchive(baseName, autoName, callbackImpl); 4430826e83eSopenharmony_ci return; 4440826e83eSopenharmony_ci} 4450826e83eSopenharmony_ci 4460826e83eSopenharmony_civoid WebviewController::StoreWebArchivePromise(const std::string &baseName, bool autoName, napi_env env, 4470826e83eSopenharmony_ci napi_deferred deferred) 4480826e83eSopenharmony_ci{ 4490826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 4500826e83eSopenharmony_ci if (!nweb_ptr) { 4510826e83eSopenharmony_ci napi_value jsResult = nullptr; 4520826e83eSopenharmony_ci jsResult = NWebError::BusinessError::CreateError(env, NWebError::INIT_ERROR); 4530826e83eSopenharmony_ci napi_reject_deferred(env, deferred, jsResult); 4540826e83eSopenharmony_ci return; 4550826e83eSopenharmony_ci } 4560826e83eSopenharmony_ci 4570826e83eSopenharmony_ci if (deferred == nullptr) { 4580826e83eSopenharmony_ci return; 4590826e83eSopenharmony_ci } 4600826e83eSopenharmony_ci 4610826e83eSopenharmony_ci auto callbackImpl = std::make_shared<OHOS::NWeb::NWebStoreWebArchiveCallback>(); 4620826e83eSopenharmony_ci callbackImpl->SetCallBack([env, deferred](std::string result) { 4630826e83eSopenharmony_ci if (!env) { 4640826e83eSopenharmony_ci return; 4650826e83eSopenharmony_ci } 4660826e83eSopenharmony_ci napi_handle_scope scope = nullptr; 4670826e83eSopenharmony_ci napi_open_handle_scope(env, &scope); 4680826e83eSopenharmony_ci if (scope == nullptr) { 4690826e83eSopenharmony_ci return; 4700826e83eSopenharmony_ci } 4710826e83eSopenharmony_ci 4720826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 4730826e83eSopenharmony_ci setResult[PARAMZERO] = NWebError::BusinessError::CreateError(env, NWebError::INVALID_RESOURCE); 4740826e83eSopenharmony_ci napi_create_string_utf8(env, result.c_str(), NAPI_AUTO_LENGTH, &setResult[PARAMONE]); 4750826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO], setResult[PARAMONE]}; 4760826e83eSopenharmony_ci if (!result.empty()) { 4770826e83eSopenharmony_ci napi_resolve_deferred(env, deferred, args[PARAMONE]); 4780826e83eSopenharmony_ci } else { 4790826e83eSopenharmony_ci napi_reject_deferred(env, deferred, args[PARAMZERO]); 4800826e83eSopenharmony_ci } 4810826e83eSopenharmony_ci napi_close_handle_scope(env, scope); 4820826e83eSopenharmony_ci }); 4830826e83eSopenharmony_ci nweb_ptr->StoreWebArchive(baseName, autoName, callbackImpl); 4840826e83eSopenharmony_ci return; 4850826e83eSopenharmony_ci} 4860826e83eSopenharmony_ci 4870826e83eSopenharmony_cistd::vector<std::string> WebviewController::CreateWebMessagePorts() 4880826e83eSopenharmony_ci{ 4890826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 4900826e83eSopenharmony_ci if (!nweb_ptr) { 4910826e83eSopenharmony_ci std::vector<std::string> empty; 4920826e83eSopenharmony_ci return empty; 4930826e83eSopenharmony_ci } 4940826e83eSopenharmony_ci 4950826e83eSopenharmony_ci return nweb_ptr->CreateWebMessagePorts(); 4960826e83eSopenharmony_ci} 4970826e83eSopenharmony_ci 4980826e83eSopenharmony_ciErrCode WebviewController::PostWebMessage(std::string& message, std::vector<std::string>& ports, std::string& targetUrl) 4990826e83eSopenharmony_ci{ 5000826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 5010826e83eSopenharmony_ci if (!nweb_ptr) { 5020826e83eSopenharmony_ci return INIT_ERROR; 5030826e83eSopenharmony_ci } 5040826e83eSopenharmony_ci 5050826e83eSopenharmony_ci nweb_ptr->PostWebMessage(message, ports, targetUrl); 5060826e83eSopenharmony_ci return NWebError::NO_ERROR; 5070826e83eSopenharmony_ci} 5080826e83eSopenharmony_ci 5090826e83eSopenharmony_ciWebMessagePort::WebMessagePort(int32_t nwebId, std::string& port, bool isExtentionType) 5100826e83eSopenharmony_ci : nwebId_(nwebId), portHandle_(port), isExtentionType_(isExtentionType) 5110826e83eSopenharmony_ci{} 5120826e83eSopenharmony_ci 5130826e83eSopenharmony_ciErrCode WebMessagePort::ClosePort() 5140826e83eSopenharmony_ci{ 5150826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 5160826e83eSopenharmony_ci if (!nweb_ptr) { 5170826e83eSopenharmony_ci return INIT_ERROR; 5180826e83eSopenharmony_ci } 5190826e83eSopenharmony_ci 5200826e83eSopenharmony_ci nweb_ptr->ClosePort(portHandle_); 5210826e83eSopenharmony_ci portHandle_.clear(); 5220826e83eSopenharmony_ci return NWebError::NO_ERROR; 5230826e83eSopenharmony_ci} 5240826e83eSopenharmony_ci 5250826e83eSopenharmony_ciErrCode WebMessagePort::PostPortMessage(std::shared_ptr<NWebMessage> data) 5260826e83eSopenharmony_ci{ 5270826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 5280826e83eSopenharmony_ci if (!nweb_ptr) { 5290826e83eSopenharmony_ci return INIT_ERROR; 5300826e83eSopenharmony_ci } 5310826e83eSopenharmony_ci 5320826e83eSopenharmony_ci if (portHandle_.empty()) { 5330826e83eSopenharmony_ci WVLOG_E("can't post message, message port already closed"); 5340826e83eSopenharmony_ci return CAN_NOT_POST_MESSAGE; 5350826e83eSopenharmony_ci } 5360826e83eSopenharmony_ci nweb_ptr->PostPortMessage(portHandle_, data); 5370826e83eSopenharmony_ci return NWebError::NO_ERROR; 5380826e83eSopenharmony_ci} 5390826e83eSopenharmony_ci 5400826e83eSopenharmony_ciErrCode WebMessagePort::SetPortMessageCallback( 5410826e83eSopenharmony_ci std::shared_ptr<NWebMessageValueCallback> callback) 5420826e83eSopenharmony_ci{ 5430826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 5440826e83eSopenharmony_ci if (!nweb_ptr) { 5450826e83eSopenharmony_ci return INIT_ERROR; 5460826e83eSopenharmony_ci } 5470826e83eSopenharmony_ci 5480826e83eSopenharmony_ci if (portHandle_.empty()) { 5490826e83eSopenharmony_ci WVLOG_E("can't register message port callback event, message port already closed"); 5500826e83eSopenharmony_ci return CAN_NOT_REGISTER_MESSAGE_EVENT; 5510826e83eSopenharmony_ci } 5520826e83eSopenharmony_ci nweb_ptr->SetPortMessageCallback(portHandle_, callback); 5530826e83eSopenharmony_ci return NWebError::NO_ERROR; 5540826e83eSopenharmony_ci} 5550826e83eSopenharmony_ci 5560826e83eSopenharmony_cistd::string WebMessagePort::GetPortHandle() const 5570826e83eSopenharmony_ci{ 5580826e83eSopenharmony_ci return portHandle_; 5590826e83eSopenharmony_ci} 5600826e83eSopenharmony_ci 5610826e83eSopenharmony_cistd::shared_ptr<HitTestResult> WebviewController::GetHitTestValue() 5620826e83eSopenharmony_ci{ 5630826e83eSopenharmony_ci std::shared_ptr<HitTestResult> nwebResult; 5640826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 5650826e83eSopenharmony_ci if (nweb_ptr) { 5660826e83eSopenharmony_ci nwebResult = nweb_ptr->GetHitTestResult(); 5670826e83eSopenharmony_ci if (nwebResult) { 5680826e83eSopenharmony_ci nwebResult->SetType(ConverToWebHitTestType(nwebResult->GetType())); 5690826e83eSopenharmony_ci } 5700826e83eSopenharmony_ci } 5710826e83eSopenharmony_ci return nwebResult; 5720826e83eSopenharmony_ci} 5730826e83eSopenharmony_ci 5740826e83eSopenharmony_civoid WebviewController::RequestFocus() 5750826e83eSopenharmony_ci{ 5760826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 5770826e83eSopenharmony_ci if (nweb_ptr) { 5780826e83eSopenharmony_ci nweb_ptr->OnFocus(); 5790826e83eSopenharmony_ci } 5800826e83eSopenharmony_ci} 5810826e83eSopenharmony_ci 5820826e83eSopenharmony_cistd::string WebviewController::GenerateWebTag() 5830826e83eSopenharmony_ci{ 5840826e83eSopenharmony_ci std::string webTag = "arkweb:" + std::to_string(WebviewController::webTagStrId_); 5850826e83eSopenharmony_ci while (WebviewController::webTagSet_.find(webTag) != WebviewController::webTagSet_.end()) { 5860826e83eSopenharmony_ci WebviewController::webTagStrId_++; 5870826e83eSopenharmony_ci webTag = "arkweb:" + std::to_string(WebviewController::webTagStrId_); 5880826e83eSopenharmony_ci } 5890826e83eSopenharmony_ci return webTag; 5900826e83eSopenharmony_ci} 5910826e83eSopenharmony_ci 5920826e83eSopenharmony_cibool WebviewController::GetRawFileUrl(const std::string &fileName, 5930826e83eSopenharmony_ci const std::string& bundleName, const std::string& moduleName, std::string &result) const 5940826e83eSopenharmony_ci{ 5950826e83eSopenharmony_ci if (fileName.empty()) { 5960826e83eSopenharmony_ci WVLOG_E("File name is empty."); 5970826e83eSopenharmony_ci return false; 5980826e83eSopenharmony_ci } 5990826e83eSopenharmony_ci if (hapPath_.empty()) { 6000826e83eSopenharmony_ci std::shared_ptr<AbilityRuntime::ApplicationContext> context = 6010826e83eSopenharmony_ci AbilityRuntime::ApplicationContext::GetApplicationContext(); 6020826e83eSopenharmony_ci std::string packagePath = "file:///" + context->GetBundleCodeDir() + "/"; 6030826e83eSopenharmony_ci std::string contextBundleName = context->GetBundleName() + "/"; 6040826e83eSopenharmony_ci std::shared_ptr<AppExecFwk::ApplicationInfo> appInfo = context->GetApplicationInfo(); 6050826e83eSopenharmony_ci std::string entryDir = appInfo->entryDir; 6060826e83eSopenharmony_ci bool isStage = entryDir.find("entry") == std::string::npos ? false : true; 6070826e83eSopenharmony_ci result = isStage ? packagePath + "entry/resources/rawfile/" + fileName : 6080826e83eSopenharmony_ci packagePath + contextBundleName + "assets/entry/resources/rawfile/" + fileName; 6090826e83eSopenharmony_ci } else { 6100826e83eSopenharmony_ci std::string appBundleName; 6110826e83eSopenharmony_ci std::string appModuleName; 6120826e83eSopenharmony_ci result = "resource://RAWFILE/"; 6130826e83eSopenharmony_ci if (!bundleName.empty() && !moduleName.empty() && 6140826e83eSopenharmony_ci GetAppBundleNameAndModuleName(appBundleName, appModuleName)) { 6150826e83eSopenharmony_ci if (appBundleName != bundleName || appModuleName != moduleName) { 6160826e83eSopenharmony_ci result += BUNDLE_NAME_PREFIX + bundleName + "/" + MODULE_NAME_PREFIX + moduleName + "/"; 6170826e83eSopenharmony_ci } 6180826e83eSopenharmony_ci } 6190826e83eSopenharmony_ci result += fileName; 6200826e83eSopenharmony_ci } 6210826e83eSopenharmony_ci WVLOG_D("The parsed url is: ***"); 6220826e83eSopenharmony_ci return true; 6230826e83eSopenharmony_ci} 6240826e83eSopenharmony_ci 6250826e83eSopenharmony_cibool WebviewController::ParseUrl(napi_env env, napi_value urlObj, std::string& result) const 6260826e83eSopenharmony_ci{ 6270826e83eSopenharmony_ci napi_valuetype valueType = napi_null; 6280826e83eSopenharmony_ci napi_typeof(env, urlObj, &valueType); 6290826e83eSopenharmony_ci if ((valueType != napi_object) && (valueType != napi_string)) { 6300826e83eSopenharmony_ci WVLOG_E("Unable to parse url object."); 6310826e83eSopenharmony_ci return false; 6320826e83eSopenharmony_ci } 6330826e83eSopenharmony_ci if (valueType == napi_string) { 6340826e83eSopenharmony_ci NapiParseUtils::ParseString(env, urlObj, result); 6350826e83eSopenharmony_ci WVLOG_D("The parsed url is: ***"); 6360826e83eSopenharmony_ci return true; 6370826e83eSopenharmony_ci } 6380826e83eSopenharmony_ci napi_value type = nullptr; 6390826e83eSopenharmony_ci napi_valuetype typeVlueType = napi_null; 6400826e83eSopenharmony_ci napi_get_named_property(env, urlObj, "type", &type); 6410826e83eSopenharmony_ci napi_typeof(env, type, &typeVlueType); 6420826e83eSopenharmony_ci if (typeVlueType == napi_number) { 6430826e83eSopenharmony_ci int32_t typeInteger; 6440826e83eSopenharmony_ci NapiParseUtils::ParseInt32(env, type, typeInteger); 6450826e83eSopenharmony_ci if (typeInteger == static_cast<int>(ResourceType::RAWFILE)) { 6460826e83eSopenharmony_ci return ParseRawFileUrl(env, urlObj, result); 6470826e83eSopenharmony_ci } else if (typeInteger == static_cast<int>(ResourceType::STRING)) { 6480826e83eSopenharmony_ci if (!GetResourceUrl(env, urlObj, result)) { 6490826e83eSopenharmony_ci WVLOG_E("Unable to parse string from url object."); 6500826e83eSopenharmony_ci return false; 6510826e83eSopenharmony_ci } 6520826e83eSopenharmony_ci return true; 6530826e83eSopenharmony_ci } 6540826e83eSopenharmony_ci WVLOG_E("The type parsed from url object is not RAWFILE."); 6550826e83eSopenharmony_ci return false; 6560826e83eSopenharmony_ci } 6570826e83eSopenharmony_ci WVLOG_E("Unable to parse type from url object."); 6580826e83eSopenharmony_ci return false; 6590826e83eSopenharmony_ci} 6600826e83eSopenharmony_ci 6610826e83eSopenharmony_cibool WebviewController::ParseRawFileUrl(napi_env env, napi_value urlObj, std::string& result) const 6620826e83eSopenharmony_ci{ 6630826e83eSopenharmony_ci napi_value paraArray = nullptr; 6640826e83eSopenharmony_ci napi_get_named_property(env, urlObj, "params", ¶Array); 6650826e83eSopenharmony_ci bool isArray = false; 6660826e83eSopenharmony_ci napi_is_array(env, paraArray, &isArray); 6670826e83eSopenharmony_ci if (!isArray) { 6680826e83eSopenharmony_ci WVLOG_E("Unable to parse parameter array from url object."); 6690826e83eSopenharmony_ci return false; 6700826e83eSopenharmony_ci } 6710826e83eSopenharmony_ci napi_value fileNameObj; 6720826e83eSopenharmony_ci napi_value bundleNameObj; 6730826e83eSopenharmony_ci napi_value moduleNameObj; 6740826e83eSopenharmony_ci std::string fileName; 6750826e83eSopenharmony_ci std::string bundleName; 6760826e83eSopenharmony_ci std::string moduleName; 6770826e83eSopenharmony_ci napi_get_element(env, paraArray, 0, &fileNameObj); 6780826e83eSopenharmony_ci napi_get_named_property(env, urlObj, "bundleName", &bundleNameObj); 6790826e83eSopenharmony_ci napi_get_named_property(env, urlObj, "moduleName", &moduleNameObj); 6800826e83eSopenharmony_ci NapiParseUtils::ParseString(env, fileNameObj, fileName); 6810826e83eSopenharmony_ci NapiParseUtils::ParseString(env, bundleNameObj, bundleName); 6820826e83eSopenharmony_ci NapiParseUtils::ParseString(env, moduleNameObj, moduleName); 6830826e83eSopenharmony_ci return GetRawFileUrl(fileName, bundleName, moduleName, result); 6840826e83eSopenharmony_ci} 6850826e83eSopenharmony_ci 6860826e83eSopenharmony_cibool WebviewController::GetResourceUrl(napi_env env, napi_value urlObj, std::string& result) const 6870826e83eSopenharmony_ci{ 6880826e83eSopenharmony_ci napi_value resIdObj = nullptr; 6890826e83eSopenharmony_ci napi_value bundleNameObj = nullptr; 6900826e83eSopenharmony_ci napi_value moduleNameObj = nullptr; 6910826e83eSopenharmony_ci 6920826e83eSopenharmony_ci int32_t resId; 6930826e83eSopenharmony_ci std::string bundleName; 6940826e83eSopenharmony_ci std::string moduleName; 6950826e83eSopenharmony_ci 6960826e83eSopenharmony_ci if ((napi_get_named_property(env, urlObj, "id", &resIdObj) != napi_ok) || 6970826e83eSopenharmony_ci (napi_get_named_property(env, urlObj, "bundleName", &bundleNameObj) != napi_ok) || 6980826e83eSopenharmony_ci (napi_get_named_property(env, urlObj, "moduleName", &moduleNameObj) != napi_ok)) { 6990826e83eSopenharmony_ci return false; 7000826e83eSopenharmony_ci } 7010826e83eSopenharmony_ci 7020826e83eSopenharmony_ci if (!NapiParseUtils::ParseInt32(env, resIdObj, resId) || 7030826e83eSopenharmony_ci !NapiParseUtils::ParseString(env, bundleNameObj, bundleName) || 7040826e83eSopenharmony_ci !NapiParseUtils::ParseString(env, moduleNameObj, moduleName)) { 7050826e83eSopenharmony_ci return false; 7060826e83eSopenharmony_ci } 7070826e83eSopenharmony_ci 7080826e83eSopenharmony_ci if (OhosResourceAdapterImpl::GetResourceString(bundleName, moduleName, resId, result)) { 7090826e83eSopenharmony_ci return true; 7100826e83eSopenharmony_ci } 7110826e83eSopenharmony_ci return false; 7120826e83eSopenharmony_ci} 7130826e83eSopenharmony_ci 7140826e83eSopenharmony_ciErrCode WebviewController::PostUrl(std::string& url, std::vector<char>& postData) 7150826e83eSopenharmony_ci{ 7160826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 7170826e83eSopenharmony_ci if (!nweb_ptr) { 7180826e83eSopenharmony_ci return INIT_ERROR; 7190826e83eSopenharmony_ci } 7200826e83eSopenharmony_ci return nweb_ptr->PostUrl(url, postData); 7210826e83eSopenharmony_ci} 7220826e83eSopenharmony_ci 7230826e83eSopenharmony_ciErrCode WebviewController::LoadUrl(std::string url) 7240826e83eSopenharmony_ci{ 7250826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 7260826e83eSopenharmony_ci if (!nweb_ptr) { 7270826e83eSopenharmony_ci return INIT_ERROR; 7280826e83eSopenharmony_ci } 7290826e83eSopenharmony_ci return nweb_ptr->Load(url); 7300826e83eSopenharmony_ci} 7310826e83eSopenharmony_ci 7320826e83eSopenharmony_ciErrCode WebviewController::LoadUrl(std::string url, std::map<std::string, std::string> httpHeaders) 7330826e83eSopenharmony_ci{ 7340826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 7350826e83eSopenharmony_ci if (!nweb_ptr) { 7360826e83eSopenharmony_ci return INIT_ERROR; 7370826e83eSopenharmony_ci } 7380826e83eSopenharmony_ci return nweb_ptr->Load(url, httpHeaders); 7390826e83eSopenharmony_ci} 7400826e83eSopenharmony_ci 7410826e83eSopenharmony_ciErrCode WebviewController::LoadData(std::string data, std::string mimeType, std::string encoding, 7420826e83eSopenharmony_ci std::string baseUrl, std::string historyUrl) 7430826e83eSopenharmony_ci{ 7440826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 7450826e83eSopenharmony_ci if (!nweb_ptr) { 7460826e83eSopenharmony_ci return INIT_ERROR; 7470826e83eSopenharmony_ci } 7480826e83eSopenharmony_ci if (baseUrl.empty() && historyUrl.empty()) { 7490826e83eSopenharmony_ci return nweb_ptr->LoadWithData(data, mimeType, encoding); 7500826e83eSopenharmony_ci } 7510826e83eSopenharmony_ci return nweb_ptr->LoadWithDataAndBaseUrl(baseUrl, data, mimeType, encoding, historyUrl); 7520826e83eSopenharmony_ci} 7530826e83eSopenharmony_ci 7540826e83eSopenharmony_ciint WebviewController::ConverToWebHitTestType(int hitType) 7550826e83eSopenharmony_ci{ 7560826e83eSopenharmony_ci WebHitTestType webHitType; 7570826e83eSopenharmony_ci switch (hitType) { 7580826e83eSopenharmony_ci case HitTestResult::UNKNOWN_TYPE: 7590826e83eSopenharmony_ci webHitType = WebHitTestType::UNKNOWN; 7600826e83eSopenharmony_ci break; 7610826e83eSopenharmony_ci case HitTestResult::ANCHOR_TYPE: 7620826e83eSopenharmony_ci webHitType = WebHitTestType::HTTP; 7630826e83eSopenharmony_ci break; 7640826e83eSopenharmony_ci case HitTestResult::PHONE_TYPE: 7650826e83eSopenharmony_ci webHitType = WebHitTestType::PHONE; 7660826e83eSopenharmony_ci break; 7670826e83eSopenharmony_ci case HitTestResult::GEO_TYPE: 7680826e83eSopenharmony_ci webHitType = WebHitTestType::MAP; 7690826e83eSopenharmony_ci break; 7700826e83eSopenharmony_ci case HitTestResult::EMAIL_TYPE: 7710826e83eSopenharmony_ci webHitType = WebHitTestType::EMAIL; 7720826e83eSopenharmony_ci break; 7730826e83eSopenharmony_ci case HitTestResult::IMAGE_TYPE: 7740826e83eSopenharmony_ci webHitType = WebHitTestType::IMG; 7750826e83eSopenharmony_ci break; 7760826e83eSopenharmony_ci case HitTestResult::IMAGE_ANCHOR_TYPE: 7770826e83eSopenharmony_ci webHitType = WebHitTestType::HTTP_IMG; 7780826e83eSopenharmony_ci break; 7790826e83eSopenharmony_ci case HitTestResult::SRC_ANCHOR_TYPE: 7800826e83eSopenharmony_ci webHitType = WebHitTestType::HTTP; 7810826e83eSopenharmony_ci break; 7820826e83eSopenharmony_ci case HitTestResult::SRC_IMAGE_ANCHOR_TYPE: 7830826e83eSopenharmony_ci webHitType = WebHitTestType::HTTP_IMG; 7840826e83eSopenharmony_ci break; 7850826e83eSopenharmony_ci case HitTestResult::EDIT_TEXT_TYPE: 7860826e83eSopenharmony_ci webHitType = WebHitTestType::EDIT; 7870826e83eSopenharmony_ci break; 7880826e83eSopenharmony_ci default: 7890826e83eSopenharmony_ci webHitType = WebHitTestType::UNKNOWN; 7900826e83eSopenharmony_ci break; 7910826e83eSopenharmony_ci } 7920826e83eSopenharmony_ci return static_cast<int>(webHitType); 7930826e83eSopenharmony_ci} 7940826e83eSopenharmony_ci 7950826e83eSopenharmony_ciint WebviewController::GetHitTest() 7960826e83eSopenharmony_ci{ 7970826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 7980826e83eSopenharmony_ci if (nweb_ptr) { 7990826e83eSopenharmony_ci std::shared_ptr<HitTestResult> nwebResult = nweb_ptr->GetHitTestResult(); 8000826e83eSopenharmony_ci if (nwebResult) { 8010826e83eSopenharmony_ci return ConverToWebHitTestType(nwebResult->GetType()); 8020826e83eSopenharmony_ci } else { 8030826e83eSopenharmony_ci return ConverToWebHitTestType(HitTestResult::UNKNOWN_TYPE); 8040826e83eSopenharmony_ci } 8050826e83eSopenharmony_ci } 8060826e83eSopenharmony_ci return static_cast<int>(WebHitTestType::UNKNOWN); 8070826e83eSopenharmony_ci} 8080826e83eSopenharmony_ci 8090826e83eSopenharmony_ci 8100826e83eSopenharmony_civoid WebviewController::ClearMatches() 8110826e83eSopenharmony_ci{ 8120826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8130826e83eSopenharmony_ci if (nweb_ptr) { 8140826e83eSopenharmony_ci nweb_ptr->ClearMatches(); 8150826e83eSopenharmony_ci } 8160826e83eSopenharmony_ci} 8170826e83eSopenharmony_ci 8180826e83eSopenharmony_civoid WebviewController::SearchNext(bool forward) 8190826e83eSopenharmony_ci{ 8200826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8210826e83eSopenharmony_ci if (nweb_ptr) { 8220826e83eSopenharmony_ci nweb_ptr->FindNext(forward); 8230826e83eSopenharmony_ci } 8240826e83eSopenharmony_ci} 8250826e83eSopenharmony_ci 8260826e83eSopenharmony_civoid WebviewController::EnableSafeBrowsing(bool enable) 8270826e83eSopenharmony_ci{ 8280826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8290826e83eSopenharmony_ci if (nweb_ptr) { 8300826e83eSopenharmony_ci nweb_ptr->EnableSafeBrowsing(enable); 8310826e83eSopenharmony_ci } 8320826e83eSopenharmony_ci} 8330826e83eSopenharmony_ci 8340826e83eSopenharmony_cibool WebviewController::IsSafeBrowsingEnabled() const 8350826e83eSopenharmony_ci{ 8360826e83eSopenharmony_ci bool isSafeBrowsingEnabled = false; 8370826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8380826e83eSopenharmony_ci if (nweb_ptr) { 8390826e83eSopenharmony_ci isSafeBrowsingEnabled = nweb_ptr->IsSafeBrowsingEnabled(); 8400826e83eSopenharmony_ci } 8410826e83eSopenharmony_ci return isSafeBrowsingEnabled; 8420826e83eSopenharmony_ci} 8430826e83eSopenharmony_ci 8440826e83eSopenharmony_civoid WebviewController::SearchAllAsync(const std::string& searchString) 8450826e83eSopenharmony_ci{ 8460826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8470826e83eSopenharmony_ci if (nweb_ptr) { 8480826e83eSopenharmony_ci nweb_ptr->FindAllAsync(searchString); 8490826e83eSopenharmony_ci } 8500826e83eSopenharmony_ci} 8510826e83eSopenharmony_ci 8520826e83eSopenharmony_civoid WebviewController::ClearSslCache() 8530826e83eSopenharmony_ci{ 8540826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8550826e83eSopenharmony_ci if (nweb_ptr) { 8560826e83eSopenharmony_ci nweb_ptr->ClearSslCache(); 8570826e83eSopenharmony_ci } 8580826e83eSopenharmony_ci} 8590826e83eSopenharmony_ci 8600826e83eSopenharmony_civoid WebviewController::ClearClientAuthenticationCache() 8610826e83eSopenharmony_ci{ 8620826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8630826e83eSopenharmony_ci if (nweb_ptr) { 8640826e83eSopenharmony_ci nweb_ptr->ClearClientAuthenticationCache(); 8650826e83eSopenharmony_ci } 8660826e83eSopenharmony_ci} 8670826e83eSopenharmony_ci 8680826e83eSopenharmony_civoid WebviewController::Stop() 8690826e83eSopenharmony_ci{ 8700826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8710826e83eSopenharmony_ci if (nweb_ptr) { 8720826e83eSopenharmony_ci nweb_ptr->Stop(); 8730826e83eSopenharmony_ci } 8740826e83eSopenharmony_ci} 8750826e83eSopenharmony_ci 8760826e83eSopenharmony_ciErrCode WebviewController::Zoom(float factor) 8770826e83eSopenharmony_ci{ 8780826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8790826e83eSopenharmony_ci if (!nweb_ptr) { 8800826e83eSopenharmony_ci return INIT_ERROR; 8810826e83eSopenharmony_ci } 8820826e83eSopenharmony_ci ErrCode result = NWebError::NO_ERROR; 8830826e83eSopenharmony_ci result = nweb_ptr->Zoom(factor); 8840826e83eSopenharmony_ci 8850826e83eSopenharmony_ci return result; 8860826e83eSopenharmony_ci} 8870826e83eSopenharmony_ci 8880826e83eSopenharmony_ciErrCode WebviewController::DeleteJavaScriptRegister(const std::string& objName, 8890826e83eSopenharmony_ci const std::vector<std::string>& methodList) 8900826e83eSopenharmony_ci{ 8910826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 8920826e83eSopenharmony_ci if (nweb_ptr) { 8930826e83eSopenharmony_ci nweb_ptr->UnregisterArkJSfunction(objName, methodList); 8940826e83eSopenharmony_ci } 8950826e83eSopenharmony_ci 8960826e83eSopenharmony_ci if (javaScriptResultCb_) { 8970826e83eSopenharmony_ci bool ret = javaScriptResultCb_->DeleteJavaScriptRegister(objName); 8980826e83eSopenharmony_ci if (!ret) { 8990826e83eSopenharmony_ci return CANNOT_DEL_JAVA_SCRIPT_PROXY; 9000826e83eSopenharmony_ci } 9010826e83eSopenharmony_ci } 9020826e83eSopenharmony_ci 9030826e83eSopenharmony_ci return NWebError::NO_ERROR; 9040826e83eSopenharmony_ci} 9050826e83eSopenharmony_ci 9060826e83eSopenharmony_civoid WebviewController::SetNWebJavaScriptResultCallBack() 9070826e83eSopenharmony_ci{ 9080826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 9090826e83eSopenharmony_ci if (!nweb_ptr) { 9100826e83eSopenharmony_ci return; 9110826e83eSopenharmony_ci } 9120826e83eSopenharmony_ci 9130826e83eSopenharmony_ci if (javaScriptResultCb_ && (javaScriptResultCb_->GetNWebId() == nwebId_)) { 9140826e83eSopenharmony_ci return; 9150826e83eSopenharmony_ci } 9160826e83eSopenharmony_ci 9170826e83eSopenharmony_ci javaScriptResultCb_ = std::make_shared<WebviewJavaScriptResultCallBack>(nwebId_); 9180826e83eSopenharmony_ci nweb_ptr->SetNWebJavaScriptResultCallBack(javaScriptResultCb_); 9190826e83eSopenharmony_ci} 9200826e83eSopenharmony_ci 9210826e83eSopenharmony_civoid WebviewController::RegisterJavaScriptProxy(RegisterJavaScriptProxyParam& param) 9220826e83eSopenharmony_ci{ 9230826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 9240826e83eSopenharmony_ci if (!nweb_ptr) { 9250826e83eSopenharmony_ci WVLOG_E("WebviewController::RegisterJavaScriptProxy nweb_ptr is null"); 9260826e83eSopenharmony_ci return; 9270826e83eSopenharmony_ci } 9280826e83eSopenharmony_ci JavaScriptOb::ObjectID objId = 9290826e83eSopenharmony_ci static_cast<JavaScriptOb::ObjectID>(JavaScriptOb::JavaScriptObjIdErrorCode::WEBCONTROLLERERROR); 9300826e83eSopenharmony_ci 9310826e83eSopenharmony_ci if (!javaScriptResultCb_) { 9320826e83eSopenharmony_ci WVLOG_E("WebviewController::RegisterJavaScriptProxy javaScriptResultCb_ is " 9330826e83eSopenharmony_ci "null"); 9340826e83eSopenharmony_ci return; 9350826e83eSopenharmony_ci } 9360826e83eSopenharmony_ci 9370826e83eSopenharmony_ci if (param.syncMethodList.empty() && param.asyncMethodList.empty()) { 9380826e83eSopenharmony_ci WVLOG_E("WebviewController::RegisterJavaScriptProxy all methodList are " 9390826e83eSopenharmony_ci "empty"); 9400826e83eSopenharmony_ci return; 9410826e83eSopenharmony_ci } 9420826e83eSopenharmony_ci 9430826e83eSopenharmony_ci std::vector<std::string> allMethodList; 9440826e83eSopenharmony_ci std::merge(param.syncMethodList.begin(), param.syncMethodList.end(), 9450826e83eSopenharmony_ci param.asyncMethodList.begin(), param.asyncMethodList.end(), 9460826e83eSopenharmony_ci std::back_inserter(allMethodList)); 9470826e83eSopenharmony_ci 9480826e83eSopenharmony_ci RegisterJavaScriptProxyParam param_tmp; 9490826e83eSopenharmony_ci param_tmp.env = param.env; 9500826e83eSopenharmony_ci param_tmp.obj = param.obj; 9510826e83eSopenharmony_ci param_tmp.objName = param.objName; 9520826e83eSopenharmony_ci param_tmp.syncMethodList = allMethodList; 9530826e83eSopenharmony_ci param_tmp.asyncMethodList = param.asyncMethodList; 9540826e83eSopenharmony_ci param_tmp.permission = param.permission; 9550826e83eSopenharmony_ci objId = javaScriptResultCb_->RegisterJavaScriptProxy(param_tmp); 9560826e83eSopenharmony_ci 9570826e83eSopenharmony_ci nweb_ptr->RegisterArkJSfunction(param_tmp.objName, param_tmp.syncMethodList, 9580826e83eSopenharmony_ci std::vector<std::string>(), objId, param_tmp.permission); 9590826e83eSopenharmony_ci} 9600826e83eSopenharmony_ci 9610826e83eSopenharmony_civoid WebviewController::RunJavaScriptCallback( 9620826e83eSopenharmony_ci const std::string& script, napi_env env, napi_ref jsCallback, bool extention) 9630826e83eSopenharmony_ci{ 9640826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 9650826e83eSopenharmony_ci if (!nweb_ptr) { 9660826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 9670826e83eSopenharmony_ci setResult[PARAMZERO] = BusinessError::CreateError(env, NWebError::INIT_ERROR); 9680826e83eSopenharmony_ci napi_get_null(env, &setResult[PARAMONE]); 9690826e83eSopenharmony_ci 9700826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO], setResult[PARAMONE]}; 9710826e83eSopenharmony_ci napi_value callback = nullptr; 9720826e83eSopenharmony_ci napi_get_reference_value(env, jsCallback, &callback); 9730826e83eSopenharmony_ci napi_value callbackResult = nullptr; 9740826e83eSopenharmony_ci napi_call_function(env, nullptr, callback, RESULT_COUNT, args, &callbackResult); 9750826e83eSopenharmony_ci napi_delete_reference(env, jsCallback); 9760826e83eSopenharmony_ci return; 9770826e83eSopenharmony_ci } 9780826e83eSopenharmony_ci 9790826e83eSopenharmony_ci if (jsCallback == nullptr) { 9800826e83eSopenharmony_ci return; 9810826e83eSopenharmony_ci } 9820826e83eSopenharmony_ci 9830826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewJavaScriptExecuteCallback>(env, jsCallback, nullptr, extention); 9840826e83eSopenharmony_ci nweb_ptr->ExecuteJavaScript(script, callbackImpl, extention); 9850826e83eSopenharmony_ci} 9860826e83eSopenharmony_ci 9870826e83eSopenharmony_civoid WebviewController::RunJavaScriptPromise(const std::string &script, napi_env env, 9880826e83eSopenharmony_ci napi_deferred deferred, bool extention) 9890826e83eSopenharmony_ci{ 9900826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 9910826e83eSopenharmony_ci if (!nweb_ptr) { 9920826e83eSopenharmony_ci napi_value jsResult = nullptr; 9930826e83eSopenharmony_ci jsResult = NWebError::BusinessError::CreateError(env, NWebError::INIT_ERROR); 9940826e83eSopenharmony_ci napi_reject_deferred(env, deferred, jsResult); 9950826e83eSopenharmony_ci return; 9960826e83eSopenharmony_ci } 9970826e83eSopenharmony_ci 9980826e83eSopenharmony_ci if (deferred == nullptr) { 9990826e83eSopenharmony_ci return; 10000826e83eSopenharmony_ci } 10010826e83eSopenharmony_ci 10020826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewJavaScriptExecuteCallback>(env, nullptr, deferred, extention); 10030826e83eSopenharmony_ci nweb_ptr->ExecuteJavaScript(script, callbackImpl, extention); 10040826e83eSopenharmony_ci} 10050826e83eSopenharmony_ci 10060826e83eSopenharmony_civoid WebviewController::RunJavaScriptCallbackExt( 10070826e83eSopenharmony_ci const int fd, const size_t scriptLength, napi_env env, napi_ref jsCallback, bool extention) 10080826e83eSopenharmony_ci{ 10090826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 10100826e83eSopenharmony_ci if (!nweb_ptr) { 10110826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 10120826e83eSopenharmony_ci setResult[PARAMZERO] = BusinessError::CreateError(env, NWebError::INIT_ERROR); 10130826e83eSopenharmony_ci napi_get_null(env, &setResult[PARAMONE]); 10140826e83eSopenharmony_ci 10150826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO], setResult[PARAMONE]}; 10160826e83eSopenharmony_ci napi_value callback = nullptr; 10170826e83eSopenharmony_ci napi_get_reference_value(env, jsCallback, &callback); 10180826e83eSopenharmony_ci napi_value callbackResult = nullptr; 10190826e83eSopenharmony_ci napi_call_function(env, nullptr, callback, RESULT_COUNT, args, &callbackResult); 10200826e83eSopenharmony_ci napi_delete_reference(env, jsCallback); 10210826e83eSopenharmony_ci close(fd); 10220826e83eSopenharmony_ci return; 10230826e83eSopenharmony_ci } 10240826e83eSopenharmony_ci 10250826e83eSopenharmony_ci if (jsCallback == nullptr) { 10260826e83eSopenharmony_ci close(fd); 10270826e83eSopenharmony_ci return; 10280826e83eSopenharmony_ci } 10290826e83eSopenharmony_ci 10300826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewJavaScriptExecuteCallback>(env, jsCallback, nullptr, extention); 10310826e83eSopenharmony_ci nweb_ptr->ExecuteJavaScriptExt(fd, scriptLength, callbackImpl, extention); 10320826e83eSopenharmony_ci} 10330826e83eSopenharmony_ci 10340826e83eSopenharmony_civoid WebviewController::RunJavaScriptPromiseExt( 10350826e83eSopenharmony_ci const int fd, const size_t scriptLength, napi_env env, napi_deferred deferred, bool extention) 10360826e83eSopenharmony_ci{ 10370826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 10380826e83eSopenharmony_ci if (!nweb_ptr) { 10390826e83eSopenharmony_ci napi_value jsResult = nullptr; 10400826e83eSopenharmony_ci jsResult = NWebError::BusinessError::CreateError(env, NWebError::INIT_ERROR); 10410826e83eSopenharmony_ci napi_reject_deferred(env, deferred, jsResult); 10420826e83eSopenharmony_ci close(fd); 10430826e83eSopenharmony_ci return; 10440826e83eSopenharmony_ci } 10450826e83eSopenharmony_ci 10460826e83eSopenharmony_ci if (deferred == nullptr) { 10470826e83eSopenharmony_ci close(fd); 10480826e83eSopenharmony_ci return; 10490826e83eSopenharmony_ci } 10500826e83eSopenharmony_ci 10510826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewJavaScriptExecuteCallback>(env, nullptr, deferred, extention); 10520826e83eSopenharmony_ci nweb_ptr->ExecuteJavaScriptExt(fd, scriptLength, callbackImpl, extention); 10530826e83eSopenharmony_ci} 10540826e83eSopenharmony_ci 10550826e83eSopenharmony_civoid WebviewController::CreatePDFCallbackExt( 10560826e83eSopenharmony_ci napi_env env, std::shared_ptr<NWebPDFConfigArgs> pdfConfig, napi_ref pdfCallback) 10570826e83eSopenharmony_ci{ 10580826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 10590826e83eSopenharmony_ci if (!nweb_ptr) { 10600826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = { 0 }; 10610826e83eSopenharmony_ci setResult[PARAMZERO] = BusinessError::CreateError(env, NWebError::INIT_ERROR); 10620826e83eSopenharmony_ci napi_get_null(env, &setResult[PARAMONE]); 10630826e83eSopenharmony_ci 10640826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = { setResult[PARAMZERO], setResult[PARAMONE] }; 10650826e83eSopenharmony_ci napi_value callback = nullptr; 10660826e83eSopenharmony_ci napi_get_reference_value(env, pdfCallback, &callback); 10670826e83eSopenharmony_ci napi_value callbackResult = nullptr; 10680826e83eSopenharmony_ci napi_call_function(env, nullptr, callback, RESULT_COUNT, args, &callbackResult); 10690826e83eSopenharmony_ci napi_delete_reference(env, pdfCallback); 10700826e83eSopenharmony_ci return; 10710826e83eSopenharmony_ci } 10720826e83eSopenharmony_ci if (pdfCallback == nullptr) { 10730826e83eSopenharmony_ci return; 10740826e83eSopenharmony_ci } 10750826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewCreatePDFExecuteCallback>(env, pdfCallback, nullptr); 10760826e83eSopenharmony_ci nweb_ptr->ExecuteCreatePDFExt(pdfConfig, callbackImpl); 10770826e83eSopenharmony_ci} 10780826e83eSopenharmony_ci 10790826e83eSopenharmony_civoid WebviewController::CreatePDFPromiseExt( 10800826e83eSopenharmony_ci napi_env env, std::shared_ptr<NWebPDFConfigArgs> pdfConfig, napi_deferred deferred) 10810826e83eSopenharmony_ci{ 10820826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 10830826e83eSopenharmony_ci if (!nweb_ptr) { 10840826e83eSopenharmony_ci napi_value pdfResult = nullptr; 10850826e83eSopenharmony_ci pdfResult = NWebError::BusinessError::CreateError(env, NWebError::INIT_ERROR); 10860826e83eSopenharmony_ci napi_reject_deferred(env, deferred, pdfResult); 10870826e83eSopenharmony_ci return; 10880826e83eSopenharmony_ci } 10890826e83eSopenharmony_ci if (deferred == nullptr) { 10900826e83eSopenharmony_ci return; 10910826e83eSopenharmony_ci } 10920826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewCreatePDFExecuteCallback>(env, nullptr, deferred); 10930826e83eSopenharmony_ci nweb_ptr->ExecuteCreatePDFExt(pdfConfig, callbackImpl); 10940826e83eSopenharmony_ci} 10950826e83eSopenharmony_ci 10960826e83eSopenharmony_cistd::string WebviewController::GetUrl() 10970826e83eSopenharmony_ci{ 10980826e83eSopenharmony_ci std::string url = ""; 10990826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11000826e83eSopenharmony_ci if (nweb_ptr) { 11010826e83eSopenharmony_ci url = nweb_ptr->GetUrl(); 11020826e83eSopenharmony_ci } 11030826e83eSopenharmony_ci return url; 11040826e83eSopenharmony_ci} 11050826e83eSopenharmony_ci 11060826e83eSopenharmony_cistd::string WebviewController::GetOriginalUrl() 11070826e83eSopenharmony_ci{ 11080826e83eSopenharmony_ci std::string url = ""; 11090826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11100826e83eSopenharmony_ci if (nweb_ptr) { 11110826e83eSopenharmony_ci url = nweb_ptr->GetOriginalUrl(); 11120826e83eSopenharmony_ci } 11130826e83eSopenharmony_ci return url; 11140826e83eSopenharmony_ci} 11150826e83eSopenharmony_ci 11160826e83eSopenharmony_cibool WebviewController::TerminateRenderProcess() const 11170826e83eSopenharmony_ci{ 11180826e83eSopenharmony_ci bool ret = false; 11190826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11200826e83eSopenharmony_ci if (nweb_ptr) { 11210826e83eSopenharmony_ci ret = nweb_ptr->TerminateRenderProcess(); 11220826e83eSopenharmony_ci } 11230826e83eSopenharmony_ci return ret; 11240826e83eSopenharmony_ci} 11250826e83eSopenharmony_ci 11260826e83eSopenharmony_civoid WebviewController::PutNetworkAvailable(bool available) 11270826e83eSopenharmony_ci{ 11280826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11290826e83eSopenharmony_ci if (nweb_ptr) { 11300826e83eSopenharmony_ci nweb_ptr->PutNetworkAvailable(available); 11310826e83eSopenharmony_ci } 11320826e83eSopenharmony_ci} 11330826e83eSopenharmony_ci 11340826e83eSopenharmony_ciErrCode WebviewController::HasImagesCallback(napi_env env, napi_ref jsCallback) 11350826e83eSopenharmony_ci{ 11360826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11370826e83eSopenharmony_ci if (!nweb_ptr) { 11380826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 11390826e83eSopenharmony_ci setResult[PARAMZERO] = BusinessError::CreateError(env, NWebError::INIT_ERROR); 11400826e83eSopenharmony_ci napi_get_null(env, &setResult[PARAMONE]); 11410826e83eSopenharmony_ci 11420826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO], setResult[PARAMONE]}; 11430826e83eSopenharmony_ci napi_value callback = nullptr; 11440826e83eSopenharmony_ci napi_get_reference_value(env, jsCallback, &callback); 11450826e83eSopenharmony_ci napi_value callbackResult = nullptr; 11460826e83eSopenharmony_ci napi_call_function(env, nullptr, callback, RESULT_COUNT, args, &callbackResult); 11470826e83eSopenharmony_ci napi_delete_reference(env, jsCallback); 11480826e83eSopenharmony_ci return NWebError::INIT_ERROR; 11490826e83eSopenharmony_ci } 11500826e83eSopenharmony_ci 11510826e83eSopenharmony_ci if (jsCallback == nullptr) { 11520826e83eSopenharmony_ci return NWebError::PARAM_CHECK_ERROR; 11530826e83eSopenharmony_ci } 11540826e83eSopenharmony_ci 11550826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewHasImageCallback>(env, jsCallback, nullptr); 11560826e83eSopenharmony_ci nweb_ptr->HasImages(callbackImpl); 11570826e83eSopenharmony_ci return NWebError::NO_ERROR; 11580826e83eSopenharmony_ci} 11590826e83eSopenharmony_ci 11600826e83eSopenharmony_ciErrCode WebviewController::HasImagesPromise(napi_env env, napi_deferred deferred) 11610826e83eSopenharmony_ci{ 11620826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11630826e83eSopenharmony_ci if (!nweb_ptr) { 11640826e83eSopenharmony_ci napi_value jsResult = nullptr; 11650826e83eSopenharmony_ci jsResult = NWebError::BusinessError::CreateError(env, NWebError::INIT_ERROR); 11660826e83eSopenharmony_ci napi_reject_deferred(env, deferred, jsResult); 11670826e83eSopenharmony_ci return NWebError::INIT_ERROR; 11680826e83eSopenharmony_ci } 11690826e83eSopenharmony_ci 11700826e83eSopenharmony_ci if (deferred == nullptr) { 11710826e83eSopenharmony_ci return NWebError::PARAM_CHECK_ERROR; 11720826e83eSopenharmony_ci } 11730826e83eSopenharmony_ci 11740826e83eSopenharmony_ci auto callbackImpl = std::make_shared<WebviewHasImageCallback>(env, nullptr, deferred); 11750826e83eSopenharmony_ci nweb_ptr->HasImages(callbackImpl); 11760826e83eSopenharmony_ci return NWebError::NO_ERROR; 11770826e83eSopenharmony_ci} 11780826e83eSopenharmony_ci 11790826e83eSopenharmony_civoid WebviewController::RemoveCache(bool includeDiskFiles) 11800826e83eSopenharmony_ci{ 11810826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11820826e83eSopenharmony_ci if (nweb_ptr) { 11830826e83eSopenharmony_ci nweb_ptr->RemoveCache(includeDiskFiles); 11840826e83eSopenharmony_ci } 11850826e83eSopenharmony_ci} 11860826e83eSopenharmony_ci 11870826e83eSopenharmony_cistd::shared_ptr<NWebHistoryList> WebviewController::GetHistoryList() 11880826e83eSopenharmony_ci{ 11890826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 11900826e83eSopenharmony_ci if (!nweb_ptr) { 11910826e83eSopenharmony_ci return nullptr; 11920826e83eSopenharmony_ci } 11930826e83eSopenharmony_ci return nweb_ptr->GetHistoryList(); 11940826e83eSopenharmony_ci} 11950826e83eSopenharmony_ci 11960826e83eSopenharmony_cistd::shared_ptr<NWebHistoryItem> WebHistoryList::GetItem(int32_t index) 11970826e83eSopenharmony_ci{ 11980826e83eSopenharmony_ci if (!sptrHistoryList_) { 11990826e83eSopenharmony_ci return nullptr; 12000826e83eSopenharmony_ci } 12010826e83eSopenharmony_ci return sptrHistoryList_->GetItem(index); 12020826e83eSopenharmony_ci} 12030826e83eSopenharmony_ci 12040826e83eSopenharmony_ciint32_t WebHistoryList::GetListSize() 12050826e83eSopenharmony_ci{ 12060826e83eSopenharmony_ci int32_t listSize = 0; 12070826e83eSopenharmony_ci 12080826e83eSopenharmony_ci if (!sptrHistoryList_) { 12090826e83eSopenharmony_ci return listSize; 12100826e83eSopenharmony_ci } 12110826e83eSopenharmony_ci listSize = sptrHistoryList_->GetListSize(); 12120826e83eSopenharmony_ci return listSize; 12130826e83eSopenharmony_ci} 12140826e83eSopenharmony_ci 12150826e83eSopenharmony_cibool WebviewController::GetFavicon( 12160826e83eSopenharmony_ci const void **data, size_t &width, size_t &height, ImageColorType &colorType, ImageAlphaType &alphaType) const 12170826e83eSopenharmony_ci{ 12180826e83eSopenharmony_ci bool isGetFavicon = false; 12190826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12200826e83eSopenharmony_ci if (nweb_ptr) { 12210826e83eSopenharmony_ci isGetFavicon = nweb_ptr->GetFavicon(data, width, height, colorType, alphaType); 12220826e83eSopenharmony_ci } 12230826e83eSopenharmony_ci return isGetFavicon; 12240826e83eSopenharmony_ci} 12250826e83eSopenharmony_ci 12260826e83eSopenharmony_cistd::vector<uint8_t> WebviewController::SerializeWebState() 12270826e83eSopenharmony_ci{ 12280826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12290826e83eSopenharmony_ci if (nweb_ptr) { 12300826e83eSopenharmony_ci return nweb_ptr->SerializeWebState(); 12310826e83eSopenharmony_ci } 12320826e83eSopenharmony_ci std::vector<uint8_t> empty; 12330826e83eSopenharmony_ci return empty; 12340826e83eSopenharmony_ci} 12350826e83eSopenharmony_ci 12360826e83eSopenharmony_cibool WebviewController::RestoreWebState(const std::vector<uint8_t> &state) const 12370826e83eSopenharmony_ci{ 12380826e83eSopenharmony_ci bool isRestored = false; 12390826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12400826e83eSopenharmony_ci if (nweb_ptr) { 12410826e83eSopenharmony_ci isRestored = nweb_ptr->RestoreWebState(state); 12420826e83eSopenharmony_ci } 12430826e83eSopenharmony_ci return isRestored; 12440826e83eSopenharmony_ci} 12450826e83eSopenharmony_ci 12460826e83eSopenharmony_civoid WebviewController::ScrollPageDown(bool bottom) 12470826e83eSopenharmony_ci{ 12480826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12490826e83eSopenharmony_ci if (nweb_ptr) { 12500826e83eSopenharmony_ci nweb_ptr->PageDown(bottom); 12510826e83eSopenharmony_ci } 12520826e83eSopenharmony_ci return; 12530826e83eSopenharmony_ci} 12540826e83eSopenharmony_ci 12550826e83eSopenharmony_civoid WebviewController::ScrollPageUp(bool top) 12560826e83eSopenharmony_ci{ 12570826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12580826e83eSopenharmony_ci if (nweb_ptr) { 12590826e83eSopenharmony_ci nweb_ptr->PageUp(top); 12600826e83eSopenharmony_ci } 12610826e83eSopenharmony_ci return; 12620826e83eSopenharmony_ci} 12630826e83eSopenharmony_ci 12640826e83eSopenharmony_civoid WebviewController::ScrollTo(float x, float y) 12650826e83eSopenharmony_ci{ 12660826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12670826e83eSopenharmony_ci if (nweb_ptr) { 12680826e83eSopenharmony_ci nweb_ptr->ScrollTo(x, y); 12690826e83eSopenharmony_ci } 12700826e83eSopenharmony_ci return; 12710826e83eSopenharmony_ci} 12720826e83eSopenharmony_ci 12730826e83eSopenharmony_civoid WebviewController::ScrollBy(float deltaX, float deltaY) 12740826e83eSopenharmony_ci{ 12750826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12760826e83eSopenharmony_ci if (nweb_ptr) { 12770826e83eSopenharmony_ci nweb_ptr->ScrollBy(deltaX, deltaY); 12780826e83eSopenharmony_ci } 12790826e83eSopenharmony_ci return; 12800826e83eSopenharmony_ci} 12810826e83eSopenharmony_ci 12820826e83eSopenharmony_civoid WebviewController::SlideScroll(float vx, float vy) 12830826e83eSopenharmony_ci{ 12840826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12850826e83eSopenharmony_ci if (nweb_ptr) { 12860826e83eSopenharmony_ci nweb_ptr->SlideScroll(vx, vy); 12870826e83eSopenharmony_ci } 12880826e83eSopenharmony_ci return; 12890826e83eSopenharmony_ci} 12900826e83eSopenharmony_ci 12910826e83eSopenharmony_civoid WebviewController::SetScrollable(bool enable) 12920826e83eSopenharmony_ci{ 12930826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 12940826e83eSopenharmony_ci if (!nweb_ptr) { 12950826e83eSopenharmony_ci return; 12960826e83eSopenharmony_ci } 12970826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 12980826e83eSopenharmony_ci if (!setting) { 12990826e83eSopenharmony_ci return; 13000826e83eSopenharmony_ci } 13010826e83eSopenharmony_ci return setting->SetScrollable(enable); 13020826e83eSopenharmony_ci} 13030826e83eSopenharmony_ci 13040826e83eSopenharmony_cibool WebviewController::GetScrollable() const 13050826e83eSopenharmony_ci{ 13060826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13070826e83eSopenharmony_ci if (!nweb_ptr) { 13080826e83eSopenharmony_ci return true; 13090826e83eSopenharmony_ci } 13100826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 13110826e83eSopenharmony_ci if (!setting) { 13120826e83eSopenharmony_ci return true; 13130826e83eSopenharmony_ci } 13140826e83eSopenharmony_ci return setting->GetScrollable(); 13150826e83eSopenharmony_ci} 13160826e83eSopenharmony_ci 13170826e83eSopenharmony_civoid WebviewController::InnerSetHapPath(const std::string &hapPath) 13180826e83eSopenharmony_ci{ 13190826e83eSopenharmony_ci hapPath_ = hapPath; 13200826e83eSopenharmony_ci} 13210826e83eSopenharmony_ci 13220826e83eSopenharmony_cibool WebviewController::GetCertChainDerData(std::vector<std::string> &certChainDerData) const 13230826e83eSopenharmony_ci{ 13240826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13250826e83eSopenharmony_ci if (!nweb_ptr) { 13260826e83eSopenharmony_ci WVLOG_E("GetCertChainDerData failed, nweb ptr is null"); 13270826e83eSopenharmony_ci return false; 13280826e83eSopenharmony_ci } 13290826e83eSopenharmony_ci 13300826e83eSopenharmony_ci return nweb_ptr->GetCertChainDerData(certChainDerData, true); 13310826e83eSopenharmony_ci} 13320826e83eSopenharmony_ci 13330826e83eSopenharmony_ciErrCode WebviewController::SetAudioMuted(bool muted) 13340826e83eSopenharmony_ci{ 13350826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13360826e83eSopenharmony_ci if (!nweb_ptr) { 13370826e83eSopenharmony_ci return NWebError::INIT_ERROR; 13380826e83eSopenharmony_ci } 13390826e83eSopenharmony_ci 13400826e83eSopenharmony_ci nweb_ptr->SetAudioMuted(muted); 13410826e83eSopenharmony_ci return NWebError::NO_ERROR; 13420826e83eSopenharmony_ci} 13430826e83eSopenharmony_ci 13440826e83eSopenharmony_ciErrCode WebviewController::PrefetchPage(std::string& url, std::map<std::string, std::string> additionalHttpHeaders) 13450826e83eSopenharmony_ci{ 13460826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13470826e83eSopenharmony_ci if (!nweb_ptr) { 13480826e83eSopenharmony_ci return NWebError::INIT_ERROR; 13490826e83eSopenharmony_ci } 13500826e83eSopenharmony_ci 13510826e83eSopenharmony_ci nweb_ptr->PrefetchPage(url, additionalHttpHeaders); 13520826e83eSopenharmony_ci return NWebError::NO_ERROR; 13530826e83eSopenharmony_ci} 13540826e83eSopenharmony_ci 13550826e83eSopenharmony_civoid WebPrintDocument::OnStartLayoutWrite(const std::string& jobId, const PrintAttributesAdapter& oldAttrs, 13560826e83eSopenharmony_ci const PrintAttributesAdapter& newAttrs, uint32_t fd, std::function<void(std::string, uint32_t)> writeResultCallback) 13570826e83eSopenharmony_ci{ 13580826e83eSopenharmony_ci if (printDocAdapter_) { 13590826e83eSopenharmony_ci std::shared_ptr<PrintWriteResultCallbackAdapter> callback = 13600826e83eSopenharmony_ci std::make_shared<WebPrintWriteResultCallbackAdapter>(writeResultCallback); 13610826e83eSopenharmony_ci printDocAdapter_->OnStartLayoutWrite(jobId, oldAttrs, newAttrs, fd, callback); 13620826e83eSopenharmony_ci } 13630826e83eSopenharmony_ci} 13640826e83eSopenharmony_ci 13650826e83eSopenharmony_civoid WebPrintDocument::OnJobStateChanged(const std::string& jobId, uint32_t state) 13660826e83eSopenharmony_ci{ 13670826e83eSopenharmony_ci if (printDocAdapter_) { 13680826e83eSopenharmony_ci printDocAdapter_->OnJobStateChanged(jobId, state); 13690826e83eSopenharmony_ci } 13700826e83eSopenharmony_ci} 13710826e83eSopenharmony_ci 13720826e83eSopenharmony_civoid* WebviewController::CreateWebPrintDocumentAdapter(const std::string& jobName) 13730826e83eSopenharmony_ci{ 13740826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13750826e83eSopenharmony_ci if (!nweb_ptr) { 13760826e83eSopenharmony_ci return nullptr; 13770826e83eSopenharmony_ci } 13780826e83eSopenharmony_ci return nweb_ptr->CreateWebPrintDocumentAdapter(jobName); 13790826e83eSopenharmony_ci} 13800826e83eSopenharmony_ci 13810826e83eSopenharmony_civoid WebviewController::CloseAllMediaPresentations() 13820826e83eSopenharmony_ci{ 13830826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13840826e83eSopenharmony_ci if (nweb_ptr) { 13850826e83eSopenharmony_ci nweb_ptr->CloseAllMediaPresentations(); 13860826e83eSopenharmony_ci } 13870826e83eSopenharmony_ci} 13880826e83eSopenharmony_ci 13890826e83eSopenharmony_civoid WebviewController::StopAllMedia() 13900826e83eSopenharmony_ci{ 13910826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 13920826e83eSopenharmony_ci if (nweb_ptr) { 13930826e83eSopenharmony_ci nweb_ptr->StopAllMedia(); 13940826e83eSopenharmony_ci } 13950826e83eSopenharmony_ci} 13960826e83eSopenharmony_ci 13970826e83eSopenharmony_civoid WebviewController::ResumeAllMedia() 13980826e83eSopenharmony_ci{ 13990826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14000826e83eSopenharmony_ci if (nweb_ptr) { 14010826e83eSopenharmony_ci nweb_ptr->ResumeAllMedia(); 14020826e83eSopenharmony_ci } 14030826e83eSopenharmony_ci} 14040826e83eSopenharmony_ci 14050826e83eSopenharmony_civoid WebviewController::PauseAllMedia() 14060826e83eSopenharmony_ci{ 14070826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14080826e83eSopenharmony_ci if (nweb_ptr) { 14090826e83eSopenharmony_ci nweb_ptr->PauseAllMedia(); 14100826e83eSopenharmony_ci } 14110826e83eSopenharmony_ci} 14120826e83eSopenharmony_ci 14130826e83eSopenharmony_ciint WebviewController::GetMediaPlaybackState() 14140826e83eSopenharmony_ci{ 14150826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14160826e83eSopenharmony_ci if (!nweb_ptr) { 14170826e83eSopenharmony_ci return static_cast<int>(MediaPlaybackState::NONE); 14180826e83eSopenharmony_ci } 14190826e83eSopenharmony_ci return nweb_ptr->GetMediaPlaybackState(); 14200826e83eSopenharmony_ci} 14210826e83eSopenharmony_ci 14220826e83eSopenharmony_ciint WebviewController::GetSecurityLevel() 14230826e83eSopenharmony_ci{ 14240826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14250826e83eSopenharmony_ci if (!nweb_ptr) { 14260826e83eSopenharmony_ci return static_cast<int>(SecurityLevel::NONE); 14270826e83eSopenharmony_ci } 14280826e83eSopenharmony_ci 14290826e83eSopenharmony_ci int nwebSecurityLevel = nweb_ptr->GetSecurityLevel(); 14300826e83eSopenharmony_ci SecurityLevel securityLevel; 14310826e83eSopenharmony_ci switch (nwebSecurityLevel) { 14320826e83eSopenharmony_ci case static_cast<int>(CoreSecurityLevel::NONE): 14330826e83eSopenharmony_ci securityLevel = SecurityLevel::NONE; 14340826e83eSopenharmony_ci break; 14350826e83eSopenharmony_ci case static_cast<int>(CoreSecurityLevel::SECURE): 14360826e83eSopenharmony_ci securityLevel = SecurityLevel::SECURE; 14370826e83eSopenharmony_ci break; 14380826e83eSopenharmony_ci case static_cast<int>(CoreSecurityLevel::WARNING): 14390826e83eSopenharmony_ci securityLevel = SecurityLevel::WARNING; 14400826e83eSopenharmony_ci break; 14410826e83eSopenharmony_ci case static_cast<int>(CoreSecurityLevel::DANGEROUS): 14420826e83eSopenharmony_ci securityLevel = SecurityLevel::DANGEROUS; 14430826e83eSopenharmony_ci break; 14440826e83eSopenharmony_ci default: 14450826e83eSopenharmony_ci securityLevel = SecurityLevel::NONE; 14460826e83eSopenharmony_ci break; 14470826e83eSopenharmony_ci } 14480826e83eSopenharmony_ci 14490826e83eSopenharmony_ci return static_cast<int>(securityLevel); 14500826e83eSopenharmony_ci} 14510826e83eSopenharmony_ci 14520826e83eSopenharmony_cibool WebviewController::IsIncognitoMode() const 14530826e83eSopenharmony_ci{ 14540826e83eSopenharmony_ci bool incognitoMode = false; 14550826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14560826e83eSopenharmony_ci if (nweb_ptr) { 14570826e83eSopenharmony_ci incognitoMode = nweb_ptr->IsIncognitoMode(); 14580826e83eSopenharmony_ci } 14590826e83eSopenharmony_ci return incognitoMode; 14600826e83eSopenharmony_ci} 14610826e83eSopenharmony_ci 14620826e83eSopenharmony_civoid WebviewController::SetPrintBackground(bool enable) 14630826e83eSopenharmony_ci{ 14640826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14650826e83eSopenharmony_ci if (nweb_ptr) { 14660826e83eSopenharmony_ci nweb_ptr->SetPrintBackground(enable); 14670826e83eSopenharmony_ci } 14680826e83eSopenharmony_ci} 14690826e83eSopenharmony_ci 14700826e83eSopenharmony_cibool WebviewController::GetPrintBackground() const 14710826e83eSopenharmony_ci{ 14720826e83eSopenharmony_ci bool printBackgroundEnabled = false; 14730826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14740826e83eSopenharmony_ci if (nweb_ptr) { 14750826e83eSopenharmony_ci printBackgroundEnabled = nweb_ptr->GetPrintBackground(); 14760826e83eSopenharmony_ci } 14770826e83eSopenharmony_ci 14780826e83eSopenharmony_ci return printBackgroundEnabled; 14790826e83eSopenharmony_ci} 14800826e83eSopenharmony_ci 14810826e83eSopenharmony_civoid WebviewController::EnableIntelligentTrackingPrevention(bool enable) 14820826e83eSopenharmony_ci{ 14830826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14840826e83eSopenharmony_ci if (nweb_ptr) { 14850826e83eSopenharmony_ci nweb_ptr->EnableIntelligentTrackingPrevention(enable); 14860826e83eSopenharmony_ci } 14870826e83eSopenharmony_ci} 14880826e83eSopenharmony_ci 14890826e83eSopenharmony_cibool WebviewController::IsIntelligentTrackingPreventionEnabled() const 14900826e83eSopenharmony_ci{ 14910826e83eSopenharmony_ci bool enabled = false; 14920826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 14930826e83eSopenharmony_ci if (nweb_ptr) { 14940826e83eSopenharmony_ci enabled = nweb_ptr->IsIntelligentTrackingPreventionEnabled(); 14950826e83eSopenharmony_ci } 14960826e83eSopenharmony_ci return enabled; 14970826e83eSopenharmony_ci} 14980826e83eSopenharmony_ci 14990826e83eSopenharmony_civoid WebPrintWriteResultCallbackAdapter::WriteResultCallback(std::string jobId, uint32_t code) 15000826e83eSopenharmony_ci{ 15010826e83eSopenharmony_ci cb_(jobId, code); 15020826e83eSopenharmony_ci} 15030826e83eSopenharmony_ci 15040826e83eSopenharmony_cibool WebviewController::SetWebSchemeHandler(const char* scheme, WebSchemeHandler* handler) const 15050826e83eSopenharmony_ci{ 15060826e83eSopenharmony_ci if (!handler || !scheme) { 15070826e83eSopenharmony_ci WVLOG_E("WebviewController::SetWebSchemeHandler handler or scheme is nullptr"); 15080826e83eSopenharmony_ci return false; 15090826e83eSopenharmony_ci } 15100826e83eSopenharmony_ci ArkWeb_SchemeHandler* schemeHandler = 15110826e83eSopenharmony_ci const_cast<ArkWeb_SchemeHandler*>(WebSchemeHandler::GetArkWebSchemeHandler(handler)); 15120826e83eSopenharmony_ci return OH_ArkWeb_SetSchemeHandler(scheme, webTag_.c_str(), schemeHandler); 15130826e83eSopenharmony_ci} 15140826e83eSopenharmony_ci 15150826e83eSopenharmony_ciint32_t WebviewController::ClearWebSchemeHandler() 15160826e83eSopenharmony_ci{ 15170826e83eSopenharmony_ci return OH_ArkWeb_ClearSchemeHandlers(webTag_.c_str()); 15180826e83eSopenharmony_ci} 15190826e83eSopenharmony_ci 15200826e83eSopenharmony_cibool WebviewController::SetWebServiveWorkerSchemeHandler( 15210826e83eSopenharmony_ci const char* scheme, WebSchemeHandler* handler) 15220826e83eSopenharmony_ci{ 15230826e83eSopenharmony_ci ArkWeb_SchemeHandler* schemeHandler = 15240826e83eSopenharmony_ci const_cast<ArkWeb_SchemeHandler*>(WebSchemeHandler::GetArkWebSchemeHandler(handler)); 15250826e83eSopenharmony_ci return OH_ArkWebServiceWorker_SetSchemeHandler(scheme, schemeHandler); 15260826e83eSopenharmony_ci} 15270826e83eSopenharmony_ci 15280826e83eSopenharmony_ciint32_t WebviewController::ClearWebServiceWorkerSchemeHandler() 15290826e83eSopenharmony_ci{ 15300826e83eSopenharmony_ci return OH_ArkWebServiceWorker_ClearSchemeHandlers(); 15310826e83eSopenharmony_ci} 15320826e83eSopenharmony_ci 15330826e83eSopenharmony_ciErrCode WebviewController::StartCamera() 15340826e83eSopenharmony_ci{ 15350826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 15360826e83eSopenharmony_ci if (!nweb_ptr) { 15370826e83eSopenharmony_ci return NWebError::INIT_ERROR; 15380826e83eSopenharmony_ci } 15390826e83eSopenharmony_ci 15400826e83eSopenharmony_ci nweb_ptr->StartCamera(); 15410826e83eSopenharmony_ci return NWebError::NO_ERROR; 15420826e83eSopenharmony_ci} 15430826e83eSopenharmony_ci 15440826e83eSopenharmony_ciErrCode WebviewController::StopCamera() 15450826e83eSopenharmony_ci{ 15460826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 15470826e83eSopenharmony_ci if (!nweb_ptr) { 15480826e83eSopenharmony_ci return NWebError::INIT_ERROR; 15490826e83eSopenharmony_ci } 15500826e83eSopenharmony_ci 15510826e83eSopenharmony_ci nweb_ptr->StopCamera(); 15520826e83eSopenharmony_ci return NWebError::NO_ERROR; 15530826e83eSopenharmony_ci} 15540826e83eSopenharmony_ci 15550826e83eSopenharmony_ciErrCode WebviewController::CloseCamera() 15560826e83eSopenharmony_ci{ 15570826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 15580826e83eSopenharmony_ci if (!nweb_ptr) { 15590826e83eSopenharmony_ci return NWebError::INIT_ERROR; 15600826e83eSopenharmony_ci } 15610826e83eSopenharmony_ci 15620826e83eSopenharmony_ci nweb_ptr->CloseCamera(); 15630826e83eSopenharmony_ci return NWebError::NO_ERROR; 15640826e83eSopenharmony_ci} 15650826e83eSopenharmony_ci 15660826e83eSopenharmony_cistd::string WebviewController::GetLastJavascriptProxyCallingFrameUrl() 15670826e83eSopenharmony_ci{ 15680826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 15690826e83eSopenharmony_ci if (!nweb_ptr) { 15700826e83eSopenharmony_ci return ""; 15710826e83eSopenharmony_ci } 15720826e83eSopenharmony_ci 15730826e83eSopenharmony_ci return nweb_ptr->GetLastJavascriptProxyCallingFrameUrl(); 15740826e83eSopenharmony_ci} 15750826e83eSopenharmony_ci 15760826e83eSopenharmony_civoid WebviewController::OnCreateNativeMediaPlayer(napi_env env, napi_ref callback) 15770826e83eSopenharmony_ci{ 15780826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 15790826e83eSopenharmony_ci if (!nweb_ptr) { 15800826e83eSopenharmony_ci return; 15810826e83eSopenharmony_ci } 15820826e83eSopenharmony_ci 15830826e83eSopenharmony_ci auto callbackImpl = std::make_shared<NWebCreateNativeMediaPlayerCallbackImpl>(nwebId_, env, callback); 15840826e83eSopenharmony_ci nweb_ptr->OnCreateNativeMediaPlayer(callbackImpl); 15850826e83eSopenharmony_ci} 15860826e83eSopenharmony_ci 15870826e83eSopenharmony_cibool WebviewController::ParseScriptContent(napi_env env, napi_value value, std::string &script) 15880826e83eSopenharmony_ci{ 15890826e83eSopenharmony_ci napi_valuetype valueType; 15900826e83eSopenharmony_ci napi_typeof(env, value, &valueType); 15910826e83eSopenharmony_ci if (valueType == napi_string) { 15920826e83eSopenharmony_ci std::string str; 15930826e83eSopenharmony_ci if (!NapiParseUtils::ParseString(env, value, str)) { 15940826e83eSopenharmony_ci WVLOG_E("PrecompileJavaScript: parse script text to string failed."); 15950826e83eSopenharmony_ci return false; 15960826e83eSopenharmony_ci } 15970826e83eSopenharmony_ci 15980826e83eSopenharmony_ci script = str; 15990826e83eSopenharmony_ci return true; 16000826e83eSopenharmony_ci } 16010826e83eSopenharmony_ci 16020826e83eSopenharmony_ci std::vector<uint8_t> vec = ParseUint8Array(env, value); 16030826e83eSopenharmony_ci if (!vec.size()) { 16040826e83eSopenharmony_ci WVLOG_E("PrecompileJavaScript: parse script text to Uint8Array failed."); 16050826e83eSopenharmony_ci return false; 16060826e83eSopenharmony_ci } 16070826e83eSopenharmony_ci 16080826e83eSopenharmony_ci std::string str(vec.begin(), vec.end()); 16090826e83eSopenharmony_ci script = str; 16100826e83eSopenharmony_ci return true; 16110826e83eSopenharmony_ci} 16120826e83eSopenharmony_ci 16130826e83eSopenharmony_cistd::shared_ptr<CacheOptions> WebviewController::ParseCacheOptions(napi_env env, napi_value value) { 16140826e83eSopenharmony_ci std::map<std::string, std::string> responseHeaders; 16150826e83eSopenharmony_ci auto defaultCacheOptions = std::make_shared<NWebCacheOptionsImpl>(responseHeaders); 16160826e83eSopenharmony_ci 16170826e83eSopenharmony_ci napi_value responseHeadersValue = nullptr; 16180826e83eSopenharmony_ci if (napi_get_named_property(env, value, "responseHeaders", &responseHeadersValue) != napi_ok) { 16190826e83eSopenharmony_ci WVLOG_D("PrecompileJavaScript: cannot get 'responseHeaders' of CacheOptions."); 16200826e83eSopenharmony_ci return defaultCacheOptions; 16210826e83eSopenharmony_ci } 16220826e83eSopenharmony_ci 16230826e83eSopenharmony_ci if (!ParseResponseHeaders(env, responseHeadersValue, responseHeaders)) { 16240826e83eSopenharmony_ci WVLOG_D("PrecompileJavaScript: parse 'responseHeaders' of CacheOptions failed. use default options"); 16250826e83eSopenharmony_ci return defaultCacheOptions; 16260826e83eSopenharmony_ci } 16270826e83eSopenharmony_ci 16280826e83eSopenharmony_ci return std::make_shared<NWebCacheOptionsImpl>(responseHeaders); 16290826e83eSopenharmony_ci} 16300826e83eSopenharmony_ci 16310826e83eSopenharmony_civoid WebviewController::PrecompileJavaScriptPromise( 16320826e83eSopenharmony_ci napi_env env, napi_deferred deferred, 16330826e83eSopenharmony_ci const std::string &url, const std::string &script, std::shared_ptr<CacheOptions> cacheOptions) 16340826e83eSopenharmony_ci{ 16350826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 16360826e83eSopenharmony_ci if (!nweb_ptr || !deferred) { 16370826e83eSopenharmony_ci return; 16380826e83eSopenharmony_ci } 16390826e83eSopenharmony_ci 16400826e83eSopenharmony_ci auto callbackImpl = std::make_shared<OHOS::NWeb::NWebPrecompileCallback>(); 16410826e83eSopenharmony_ci callbackImpl->SetCallback([env, deferred](int64_t result) { 16420826e83eSopenharmony_ci if (!env) { 16430826e83eSopenharmony_ci return; 16440826e83eSopenharmony_ci } 16450826e83eSopenharmony_ci 16460826e83eSopenharmony_ci napi_handle_scope scope = nullptr; 16470826e83eSopenharmony_ci napi_open_handle_scope(env, &scope); 16480826e83eSopenharmony_ci if (scope == nullptr) { 16490826e83eSopenharmony_ci return; 16500826e83eSopenharmony_ci } 16510826e83eSopenharmony_ci 16520826e83eSopenharmony_ci napi_value setResult[RESULT_COUNT] = {0}; 16530826e83eSopenharmony_ci napi_create_int64(env, result, &setResult[PARAMZERO]); 16540826e83eSopenharmony_ci napi_value args[RESULT_COUNT] = {setResult[PARAMZERO]}; 16550826e83eSopenharmony_ci if (result == static_cast<int64_t>(PrecompileError::OK)) { 16560826e83eSopenharmony_ci napi_resolve_deferred(env, deferred, args[PARAMZERO]); 16570826e83eSopenharmony_ci } else { 16580826e83eSopenharmony_ci napi_reject_deferred(env, deferred, args[PARAMZERO]); 16590826e83eSopenharmony_ci } 16600826e83eSopenharmony_ci 16610826e83eSopenharmony_ci napi_close_handle_scope(env, scope); 16620826e83eSopenharmony_ci }); 16630826e83eSopenharmony_ci 16640826e83eSopenharmony_ci nweb_ptr->PrecompileJavaScript(url, script, cacheOptions, callbackImpl); 16650826e83eSopenharmony_ci} 16660826e83eSopenharmony_ci 16670826e83eSopenharmony_cibool WebviewController::ParseResponseHeaders(napi_env env, 16680826e83eSopenharmony_ci napi_value value, 16690826e83eSopenharmony_ci std::map<std::string, std::string> &responseHeaders) const 16700826e83eSopenharmony_ci{ 16710826e83eSopenharmony_ci bool isArray = false; 16720826e83eSopenharmony_ci napi_is_array(env, value, &isArray); 16730826e83eSopenharmony_ci if (!isArray) { 16740826e83eSopenharmony_ci WVLOG_E("Response headers is not array."); 16750826e83eSopenharmony_ci return false; 16760826e83eSopenharmony_ci } 16770826e83eSopenharmony_ci 16780826e83eSopenharmony_ci uint32_t length = INTEGER_ZERO; 16790826e83eSopenharmony_ci napi_get_array_length(env, value, &length); 16800826e83eSopenharmony_ci for (uint32_t i = 0; i < length; i++) { 16810826e83eSopenharmony_ci std::string keyString; 16820826e83eSopenharmony_ci std::string valueString; 16830826e83eSopenharmony_ci napi_value header = nullptr; 16840826e83eSopenharmony_ci napi_value keyObj = nullptr; 16850826e83eSopenharmony_ci napi_value valueObj = nullptr; 16860826e83eSopenharmony_ci napi_get_element(env, value, i, &header); 16870826e83eSopenharmony_ci 16880826e83eSopenharmony_ci if (napi_get_named_property(env, header, "headerKey", &keyObj) != napi_ok || 16890826e83eSopenharmony_ci !NapiParseUtils::ParseString(env, keyObj, keyString)) { 16900826e83eSopenharmony_ci continue; 16910826e83eSopenharmony_ci } 16920826e83eSopenharmony_ci 16930826e83eSopenharmony_ci if (napi_get_named_property(env, header, "headerValue", &valueObj) != napi_ok || 16940826e83eSopenharmony_ci !NapiParseUtils::ParseString(env, valueObj, valueString)) { 16950826e83eSopenharmony_ci continue; 16960826e83eSopenharmony_ci } 16970826e83eSopenharmony_ci 16980826e83eSopenharmony_ci responseHeaders[keyString] = valueString; 16990826e83eSopenharmony_ci } 17000826e83eSopenharmony_ci 17010826e83eSopenharmony_ci return true; 17020826e83eSopenharmony_ci} 17030826e83eSopenharmony_ci 17040826e83eSopenharmony_ciParseURLResult WebviewController::ParseURLList(napi_env env, napi_value value, std::vector<std::string>& urlList) 17050826e83eSopenharmony_ci{ 17060826e83eSopenharmony_ci if (!NapiParseUtils::ParseStringArray(env, value, urlList)) { 17070826e83eSopenharmony_ci return ParseURLResult::FAILED; 17080826e83eSopenharmony_ci } 17090826e83eSopenharmony_ci 17100826e83eSopenharmony_ci for (auto url : urlList) { 17110826e83eSopenharmony_ci if (!CheckURL(url)) { 17120826e83eSopenharmony_ci return ParseURLResult::INVALID_URL; 17130826e83eSopenharmony_ci } 17140826e83eSopenharmony_ci } 17150826e83eSopenharmony_ci 17160826e83eSopenharmony_ci return ParseURLResult::OK; 17170826e83eSopenharmony_ci} 17180826e83eSopenharmony_ci 17190826e83eSopenharmony_cibool WebviewController::CheckURL(std::string& url) const 17200826e83eSopenharmony_ci{ 17210826e83eSopenharmony_ci if (url.size() > URL_MAXIMUM) { 17220826e83eSopenharmony_ci WVLOG_E("The URL exceeds the maximum length of %{public}d. URL: %{private}s", URL_MAXIMUM, url.c_str()); 17230826e83eSopenharmony_ci return false; 17240826e83eSopenharmony_ci } 17250826e83eSopenharmony_ci 17260826e83eSopenharmony_ci if (!regex_match(url, std::regex("^http(s)?:\\/\\/.+", std::regex_constants::icase))) { 17270826e83eSopenharmony_ci WVLOG_E("The Parse URL error. URL: %{private}s", url.c_str()); 17280826e83eSopenharmony_ci return false; 17290826e83eSopenharmony_ci } 17300826e83eSopenharmony_ci 17310826e83eSopenharmony_ci return true; 17320826e83eSopenharmony_ci} 17330826e83eSopenharmony_ci 17340826e83eSopenharmony_cistd::vector<uint8_t> WebviewController::ParseUint8Array(napi_env env, napi_value value) 17350826e83eSopenharmony_ci{ 17360826e83eSopenharmony_ci napi_typedarray_type typedArrayType; 17370826e83eSopenharmony_ci size_t length = 0; 17380826e83eSopenharmony_ci napi_value buffer = nullptr; 17390826e83eSopenharmony_ci size_t offset = 0; 17400826e83eSopenharmony_ci napi_get_typedarray_info(env, value, &typedArrayType, &length, nullptr, &buffer, &offset); 17410826e83eSopenharmony_ci if (typedArrayType != napi_uint8_array) { 17420826e83eSopenharmony_ci WVLOG_E("Param is not Unit8Array."); 17430826e83eSopenharmony_ci return std::vector<uint8_t>(); 17440826e83eSopenharmony_ci } 17450826e83eSopenharmony_ci 17460826e83eSopenharmony_ci uint8_t *data = nullptr; 17470826e83eSopenharmony_ci size_t total = 0; 17480826e83eSopenharmony_ci napi_get_arraybuffer_info(env, buffer, reinterpret_cast<void **>(&data), &total); 17490826e83eSopenharmony_ci length = std::min<size_t>(length, total - offset); 17500826e83eSopenharmony_ci std::vector<uint8_t> vec(length); 17510826e83eSopenharmony_ci int retCode = memcpy_s(vec.data(), vec.size(), &data[offset], length); 17520826e83eSopenharmony_ci if (retCode != 0) { 17530826e83eSopenharmony_ci WVLOG_E("Parse Uint8Array failed."); 17540826e83eSopenharmony_ci return std::vector<uint8_t>(); 17550826e83eSopenharmony_ci } 17560826e83eSopenharmony_ci 17570826e83eSopenharmony_ci return vec; 17580826e83eSopenharmony_ci} 17590826e83eSopenharmony_ci 17600826e83eSopenharmony_civoid WebviewController::InjectOfflineResource(const std::vector<std::string>& urlList, 17610826e83eSopenharmony_ci const std::vector<uint8_t>& resource, 17620826e83eSopenharmony_ci const std::map<std::string, std::string>& response_headers, 17630826e83eSopenharmony_ci const uint32_t type) 17640826e83eSopenharmony_ci{ 17650826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 17660826e83eSopenharmony_ci if (!nweb_ptr) { 17670826e83eSopenharmony_ci return; 17680826e83eSopenharmony_ci } 17690826e83eSopenharmony_ci 17700826e83eSopenharmony_ci std::string originUrl = urlList[0]; 17710826e83eSopenharmony_ci if (urlList.size() == 1) { 17720826e83eSopenharmony_ci nweb_ptr->InjectOfflineResource(originUrl, originUrl, resource, response_headers, type); 17730826e83eSopenharmony_ci return; 17740826e83eSopenharmony_ci } 17750826e83eSopenharmony_ci 17760826e83eSopenharmony_ci for (size_t i = 1 ; i < urlList.size() ; i++) { 17770826e83eSopenharmony_ci nweb_ptr->InjectOfflineResource(urlList[i], originUrl, resource, response_headers, type); 17780826e83eSopenharmony_ci } 17790826e83eSopenharmony_ci} 17800826e83eSopenharmony_ci 17810826e83eSopenharmony_civoid WebviewController::EnableAdsBlock(bool enable) 17820826e83eSopenharmony_ci{ 17830826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 17840826e83eSopenharmony_ci if (nweb_ptr) { 17850826e83eSopenharmony_ci nweb_ptr->EnableAdsBlock(enable); 17860826e83eSopenharmony_ci } 17870826e83eSopenharmony_ci} 17880826e83eSopenharmony_ci 17890826e83eSopenharmony_cibool WebviewController::IsAdsBlockEnabled() const 17900826e83eSopenharmony_ci{ 17910826e83eSopenharmony_ci bool enabled = false; 17920826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 17930826e83eSopenharmony_ci if (nweb_ptr) { 17940826e83eSopenharmony_ci enabled = nweb_ptr->IsAdsBlockEnabled(); 17950826e83eSopenharmony_ci } 17960826e83eSopenharmony_ci return enabled; 17970826e83eSopenharmony_ci} 17980826e83eSopenharmony_ci 17990826e83eSopenharmony_cibool WebviewController::IsAdsBlockEnabledForCurPage() const 18000826e83eSopenharmony_ci{ 18010826e83eSopenharmony_ci bool enabled = false; 18020826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 18030826e83eSopenharmony_ci if (nweb_ptr) { 18040826e83eSopenharmony_ci enabled = nweb_ptr->IsAdsBlockEnabledForCurPage(); 18050826e83eSopenharmony_ci } 18060826e83eSopenharmony_ci return enabled; 18070826e83eSopenharmony_ci} 18080826e83eSopenharmony_ci 18090826e83eSopenharmony_cistd::string WebviewController::GetSurfaceId() 18100826e83eSopenharmony_ci{ 18110826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 18120826e83eSopenharmony_ci if (!nweb_ptr) { 18130826e83eSopenharmony_ci return ""; 18140826e83eSopenharmony_ci } 18150826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 18160826e83eSopenharmony_ci if (!setting) { 18170826e83eSopenharmony_ci return ""; 18180826e83eSopenharmony_ci } 18190826e83eSopenharmony_ci return setting->GetSurfaceId(); 18200826e83eSopenharmony_ci} 18210826e83eSopenharmony_ci 18220826e83eSopenharmony_civoid WebviewController::UpdateInstanceId(int32_t newId) 18230826e83eSopenharmony_ci{ 18240826e83eSopenharmony_ci if (javaScriptResultCb_) { 18250826e83eSopenharmony_ci javaScriptResultCb_->UpdateInstanceId(newId); 18260826e83eSopenharmony_ci } 18270826e83eSopenharmony_ci} 18280826e83eSopenharmony_ci 18290826e83eSopenharmony_ciErrCode WebviewController::SetUrlTrustList(const std::string& urlTrustList, std::string& detailErrMsg) 18300826e83eSopenharmony_ci{ 18310826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 18320826e83eSopenharmony_ci if (!nweb_ptr) { 18330826e83eSopenharmony_ci return NWebError::INIT_ERROR; 18340826e83eSopenharmony_ci } 18350826e83eSopenharmony_ci 18360826e83eSopenharmony_ci int ret = NWebError::NO_ERROR; 18370826e83eSopenharmony_ci switch (nweb_ptr->SetUrlTrustListWithErrMsg(urlTrustList, detailErrMsg)) { 18380826e83eSopenharmony_ci case static_cast<int>(UrlListSetResult::INIT_ERROR): 18390826e83eSopenharmony_ci ret = NWebError::INIT_ERROR; 18400826e83eSopenharmony_ci break; 18410826e83eSopenharmony_ci case static_cast<int>(UrlListSetResult::PARAM_ERROR): 18420826e83eSopenharmony_ci ret = NWebError::PARAM_CHECK_ERROR; 18430826e83eSopenharmony_ci break; 18440826e83eSopenharmony_ci case static_cast<int>(UrlListSetResult::SET_OK): 18450826e83eSopenharmony_ci ret = NWebError::NO_ERROR; 18460826e83eSopenharmony_ci break; 18470826e83eSopenharmony_ci default: 18480826e83eSopenharmony_ci ret = NWebError::PARAM_CHECK_ERROR; 18490826e83eSopenharmony_ci break; 18500826e83eSopenharmony_ci } 18510826e83eSopenharmony_ci return ret; 18520826e83eSopenharmony_ci} 18530826e83eSopenharmony_cibool WebviewController::ParseJsLengthResourceToInt( 18540826e83eSopenharmony_ci napi_env env, napi_value jsLength, PixelUnit &type, int32_t &result) const 18550826e83eSopenharmony_ci{ 18560826e83eSopenharmony_ci napi_value resIdObj = nullptr; 18570826e83eSopenharmony_ci int32_t resId; 18580826e83eSopenharmony_ci 18590826e83eSopenharmony_ci if ((napi_get_named_property(env, jsLength, "id", &resIdObj) != napi_ok)) { 18600826e83eSopenharmony_ci return false; 18610826e83eSopenharmony_ci } 18620826e83eSopenharmony_ci 18630826e83eSopenharmony_ci if (!NapiParseUtils::ParseInt32(env, resIdObj, resId)) { 18640826e83eSopenharmony_ci return false; 18650826e83eSopenharmony_ci } 18660826e83eSopenharmony_ci 18670826e83eSopenharmony_ci std::shared_ptr<AbilityRuntime::ApplicationContext> context = 18680826e83eSopenharmony_ci AbilityRuntime::ApplicationContext::GetApplicationContext(); 18690826e83eSopenharmony_ci if (!context) { 18700826e83eSopenharmony_ci WVLOG_E("WebPageSnapshot Failed to get application context."); 18710826e83eSopenharmony_ci return false; 18720826e83eSopenharmony_ci } 18730826e83eSopenharmony_ci auto resourceManager = context->GetResourceManager(); 18740826e83eSopenharmony_ci if (!resourceManager) { 18750826e83eSopenharmony_ci WVLOG_E("WebPageSnapshot Failed to get resource manager."); 18760826e83eSopenharmony_ci return false; 18770826e83eSopenharmony_ci } 18780826e83eSopenharmony_ci 18790826e83eSopenharmony_ci napi_value jsResourceType = nullptr; 18800826e83eSopenharmony_ci napi_valuetype resourceType = napi_null; 18810826e83eSopenharmony_ci napi_get_named_property(env, jsLength, "type", &jsResourceType); 18820826e83eSopenharmony_ci napi_typeof(env, jsResourceType, &resourceType); 18830826e83eSopenharmony_ci if (resourceType == napi_number) { 18840826e83eSopenharmony_ci int32_t resourceTypeNum; 18850826e83eSopenharmony_ci NapiParseUtils::ParseInt32(env, jsResourceType, resourceTypeNum); 18860826e83eSopenharmony_ci switch (resourceTypeNum) { 18870826e83eSopenharmony_ci case static_cast<int>(ResourceType::INTEGER): 18880826e83eSopenharmony_ci if (resourceManager->GetIntegerById(resId, result) == Global::Resource::SUCCESS) { 18890826e83eSopenharmony_ci type = PixelUnit::VP; 18900826e83eSopenharmony_ci return true; 18910826e83eSopenharmony_ci } 18920826e83eSopenharmony_ci break; 18930826e83eSopenharmony_ci case static_cast<int>(ResourceType::STRING): 18940826e83eSopenharmony_ci std::string resourceString; 18950826e83eSopenharmony_ci if (resourceManager->GetStringById(resId, resourceString) == Global::Resource::SUCCESS) { 18960826e83eSopenharmony_ci return NapiParseUtils::ParseJsLengthStringToInt(resourceString, type, result); 18970826e83eSopenharmony_ci } 18980826e83eSopenharmony_ci break; 18990826e83eSopenharmony_ci } 19000826e83eSopenharmony_ci WVLOG_E("WebPageSnapshot resource type not support"); 19010826e83eSopenharmony_ci return false; 19020826e83eSopenharmony_ci } 19030826e83eSopenharmony_ci WVLOG_E("WebPageSnapshot resource type error"); 19040826e83eSopenharmony_ci return false; 19050826e83eSopenharmony_ci} 19060826e83eSopenharmony_ci 19070826e83eSopenharmony_cibool WebviewController::ParseJsLengthToInt( 19080826e83eSopenharmony_ci napi_env env, napi_value jsLength, PixelUnit &type, int32_t &result) const 19090826e83eSopenharmony_ci{ 19100826e83eSopenharmony_ci napi_valuetype jsType = napi_null; 19110826e83eSopenharmony_ci napi_typeof(env, jsLength, &jsType); 19120826e83eSopenharmony_ci if ((jsType != napi_object) && (jsType != napi_string) && (jsType != napi_number)) { 19130826e83eSopenharmony_ci WVLOG_E("WebPageSnapshot Unable to parse js length object."); 19140826e83eSopenharmony_ci return false; 19150826e83eSopenharmony_ci } 19160826e83eSopenharmony_ci 19170826e83eSopenharmony_ci if (jsType == napi_number) { 19180826e83eSopenharmony_ci NapiParseUtils::ParseInt32(env, jsLength, result); 19190826e83eSopenharmony_ci type = PixelUnit::VP; 19200826e83eSopenharmony_ci return true; 19210826e83eSopenharmony_ci } 19220826e83eSopenharmony_ci 19230826e83eSopenharmony_ci if (jsType == napi_string) { 19240826e83eSopenharmony_ci std::string nativeString; 19250826e83eSopenharmony_ci NapiParseUtils::ParseString(env, jsLength, nativeString); 19260826e83eSopenharmony_ci if (!NapiParseUtils::ParseJsLengthStringToInt(nativeString, type, result)) { 19270826e83eSopenharmony_ci return false; 19280826e83eSopenharmony_ci } 19290826e83eSopenharmony_ci return true; 19300826e83eSopenharmony_ci } 19310826e83eSopenharmony_ci 19320826e83eSopenharmony_ci if (jsType == napi_object) { 19330826e83eSopenharmony_ci return ParseJsLengthResourceToInt(env, jsLength, type, result); 19340826e83eSopenharmony_ci } 19350826e83eSopenharmony_ci return false; 19360826e83eSopenharmony_ci} 19370826e83eSopenharmony_ci 19380826e83eSopenharmony_ciErrCode WebviewController::WebPageSnapshot( 19390826e83eSopenharmony_ci const char *id, PixelUnit type, int32_t width, int32_t height, const WebSnapshotCallback callback) 19400826e83eSopenharmony_ci{ 19410826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 19420826e83eSopenharmony_ci if (!nweb_ptr) { 19430826e83eSopenharmony_ci return INIT_ERROR; 19440826e83eSopenharmony_ci } 19450826e83eSopenharmony_ci 19460826e83eSopenharmony_ci bool init = nweb_ptr->WebPageSnapshot(id, type, width, height, std::move(callback)); 19470826e83eSopenharmony_ci if (!init) { 19480826e83eSopenharmony_ci return INIT_ERROR; 19490826e83eSopenharmony_ci } 19500826e83eSopenharmony_ci 19510826e83eSopenharmony_ci return NWebError::NO_ERROR; 19520826e83eSopenharmony_ci} 19530826e83eSopenharmony_ci 19540826e83eSopenharmony_cibool WebviewController::GetHapModuleInfo() 19550826e83eSopenharmony_ci{ 19560826e83eSopenharmony_ci sptr<ISystemAbilityManager> systemAbilityManager = 19570826e83eSopenharmony_ci SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 19580826e83eSopenharmony_ci if (systemAbilityManager == nullptr) { 19590826e83eSopenharmony_ci WVLOG_E("get SystemAbilityManager failed"); 19600826e83eSopenharmony_ci return false; 19610826e83eSopenharmony_ci } 19620826e83eSopenharmony_ci sptr<IRemoteObject> remoteObject = 19630826e83eSopenharmony_ci systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); 19640826e83eSopenharmony_ci if (remoteObject == nullptr) { 19650826e83eSopenharmony_ci WVLOG_E("get Bundle Manager failed"); 19660826e83eSopenharmony_ci return false; 19670826e83eSopenharmony_ci } 19680826e83eSopenharmony_ci auto bundleMgr = iface_cast<AppExecFwk::IBundleMgr>(remoteObject); 19690826e83eSopenharmony_ci if (bundleMgr == nullptr) { 19700826e83eSopenharmony_ci WVLOG_E("get Bundle Manager failed"); 19710826e83eSopenharmony_ci return false; 19720826e83eSopenharmony_ci } 19730826e83eSopenharmony_ci AppExecFwk::BundleInfo bundleInfo; 19740826e83eSopenharmony_ci if (bundleMgr->GetBundleInfoForSelf( 19750826e83eSopenharmony_ci static_cast<int32_t>(AppExecFwk::GetBundleInfoFlag::GET_BUNDLE_INFO_WITH_HAP_MODULE), 19760826e83eSopenharmony_ci bundleInfo) != 0) { 19770826e83eSopenharmony_ci WVLOG_E("get bundle info failed"); 19780826e83eSopenharmony_ci return false; 19790826e83eSopenharmony_ci } 19800826e83eSopenharmony_ci moduleName_ = bundleInfo.moduleNames; 19810826e83eSopenharmony_ci return true; 19820826e83eSopenharmony_ci} 19830826e83eSopenharmony_ci 19840826e83eSopenharmony_civoid WebviewController::SetPathAllowingUniversalAccess( 19850826e83eSopenharmony_ci const std::vector<std::string>& pathList, std::string& errorPath) 19860826e83eSopenharmony_ci{ 19870826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 19880826e83eSopenharmony_ci if (!nweb_ptr) { 19890826e83eSopenharmony_ci return; 19900826e83eSopenharmony_ci } 19910826e83eSopenharmony_ci if (moduleName_.empty()) { 19920826e83eSopenharmony_ci WVLOG_I("need to get module name for path"); 19930826e83eSopenharmony_ci if (!GetHapModuleInfo()) { 19940826e83eSopenharmony_ci WVLOG_E("GetHapModuleInfo failed"); 19950826e83eSopenharmony_ci moduleName_.clear(); 19960826e83eSopenharmony_ci return; 19970826e83eSopenharmony_ci } 19980826e83eSopenharmony_ci } 19990826e83eSopenharmony_ci nweb_ptr->SetPathAllowingUniversalAccess(pathList, moduleName_, errorPath); 20000826e83eSopenharmony_ci} 20010826e83eSopenharmony_ci 20020826e83eSopenharmony_civoid WebviewController::ScrollToWithAnime(float x, float y, int32_t duration) 20030826e83eSopenharmony_ci{ 20040826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 20050826e83eSopenharmony_ci if (nweb_ptr) { 20060826e83eSopenharmony_ci nweb_ptr->ScrollToWithAnime(x, y, duration); 20070826e83eSopenharmony_ci } 20080826e83eSopenharmony_ci return; 20090826e83eSopenharmony_ci} 20100826e83eSopenharmony_ci 20110826e83eSopenharmony_civoid WebviewController::ScrollByWithAnime(float deltaX, float deltaY, int32_t duration) 20120826e83eSopenharmony_ci{ 20130826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 20140826e83eSopenharmony_ci if (nweb_ptr) { 20150826e83eSopenharmony_ci nweb_ptr->ScrollByWithAnime(deltaX, deltaY, duration); 20160826e83eSopenharmony_ci } 20170826e83eSopenharmony_ci return; 20180826e83eSopenharmony_ci} 20190826e83eSopenharmony_ci 20200826e83eSopenharmony_civoid WebviewController::SetBackForwardCacheOptions(int32_t size, int32_t timeToLive) 20210826e83eSopenharmony_ci{ 20220826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 20230826e83eSopenharmony_ci if (!nweb_ptr) { 20240826e83eSopenharmony_ci return; 20250826e83eSopenharmony_ci } 20260826e83eSopenharmony_ci 20270826e83eSopenharmony_ci nweb_ptr->SetBackForwardCacheOptions(size, timeToLive); 20280826e83eSopenharmony_ci} 20290826e83eSopenharmony_ci 20300826e83eSopenharmony_civoid WebviewController::GetScrollOffset(float* offset_x, float* offset_y) 20310826e83eSopenharmony_ci{ 20320826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 20330826e83eSopenharmony_ci if (nweb_ptr) { 20340826e83eSopenharmony_ci nweb_ptr->GetScrollOffset(offset_x, offset_y); 20350826e83eSopenharmony_ci } 20360826e83eSopenharmony_ci} 20370826e83eSopenharmony_ci 20380826e83eSopenharmony_cibool WebviewController::ScrollByWithResult(float deltaX, float deltaY) const 20390826e83eSopenharmony_ci{ 20400826e83eSopenharmony_ci bool enabled = false; 20410826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 20420826e83eSopenharmony_ci if (nweb_ptr) { 20430826e83eSopenharmony_ci enabled = nweb_ptr->ScrollByWithResult(deltaX, deltaY); 20440826e83eSopenharmony_ci } 20450826e83eSopenharmony_ci return enabled; 20460826e83eSopenharmony_ci} 20470826e83eSopenharmony_ci 20480826e83eSopenharmony_civoid WebviewController::SetScrollable(bool enable, int32_t scrollType) 20490826e83eSopenharmony_ci{ 20500826e83eSopenharmony_ci auto nweb_ptr = NWebHelper::Instance().GetNWeb(nwebId_); 20510826e83eSopenharmony_ci if (!nweb_ptr) { 20520826e83eSopenharmony_ci return; 20530826e83eSopenharmony_ci } 20540826e83eSopenharmony_ci std::shared_ptr<OHOS::NWeb::NWebPreference> setting = nweb_ptr->GetPreference(); 20550826e83eSopenharmony_ci if (!setting) { 20560826e83eSopenharmony_ci return; 20570826e83eSopenharmony_ci } 20580826e83eSopenharmony_ci return setting->SetScrollable(enable, scrollType); 20590826e83eSopenharmony_ci} 20600826e83eSopenharmony_ci 20610826e83eSopenharmony_civoid WebMessageExt::SetType(int type) 20620826e83eSopenharmony_ci{ 20630826e83eSopenharmony_ci type_ = type; 20640826e83eSopenharmony_ci WebMessageType jsType = static_cast<WebMessageType>(type); 20650826e83eSopenharmony_ci NWebValue::Type nwebType = NWebValue::Type::NONE; 20660826e83eSopenharmony_ci switch (jsType) { 20670826e83eSopenharmony_ci case WebMessageType::STRING: { 20680826e83eSopenharmony_ci nwebType = NWebValue::Type::STRING; 20690826e83eSopenharmony_ci break; 20700826e83eSopenharmony_ci } 20710826e83eSopenharmony_ci case WebMessageType::NUMBER: { 20720826e83eSopenharmony_ci nwebType = NWebValue::Type::DOUBLE; 20730826e83eSopenharmony_ci break; 20740826e83eSopenharmony_ci } 20750826e83eSopenharmony_ci case WebMessageType::BOOLEAN: { 20760826e83eSopenharmony_ci nwebType = NWebValue::Type::BOOLEAN; 20770826e83eSopenharmony_ci break; 20780826e83eSopenharmony_ci } 20790826e83eSopenharmony_ci case WebMessageType::ARRAYBUFFER: { 20800826e83eSopenharmony_ci nwebType = NWebValue::Type::BINARY; 20810826e83eSopenharmony_ci break; 20820826e83eSopenharmony_ci } 20830826e83eSopenharmony_ci case WebMessageType::ARRAY: { 20840826e83eSopenharmony_ci nwebType = NWebValue::Type::STRINGARRAY; 20850826e83eSopenharmony_ci break; 20860826e83eSopenharmony_ci } 20870826e83eSopenharmony_ci case WebMessageType::ERROR: { 20880826e83eSopenharmony_ci nwebType = NWebValue::Type::ERROR; 20890826e83eSopenharmony_ci break; 20900826e83eSopenharmony_ci } 20910826e83eSopenharmony_ci default: { 20920826e83eSopenharmony_ci nwebType = NWebValue::Type::NONE; 20930826e83eSopenharmony_ci break; 20940826e83eSopenharmony_ci } 20950826e83eSopenharmony_ci } 20960826e83eSopenharmony_ci if (data_) { 20970826e83eSopenharmony_ci data_->SetType(nwebType); 20980826e83eSopenharmony_ci } 20990826e83eSopenharmony_ci} 21000826e83eSopenharmony_ci 21010826e83eSopenharmony_ciint WebMessageExt::ConvertNwebType2JsType(NWebValue::Type type) 21020826e83eSopenharmony_ci{ 21030826e83eSopenharmony_ci WebMessageType jsType = WebMessageType::NOTSUPPORT; 21040826e83eSopenharmony_ci switch (type) { 21050826e83eSopenharmony_ci case NWebValue::Type::STRING: { 21060826e83eSopenharmony_ci jsType = WebMessageType::STRING; 21070826e83eSopenharmony_ci break; 21080826e83eSopenharmony_ci } 21090826e83eSopenharmony_ci case NWebValue::Type::DOUBLE: 21100826e83eSopenharmony_ci case NWebValue::Type::INTEGER: { 21110826e83eSopenharmony_ci jsType = WebMessageType::NUMBER; 21120826e83eSopenharmony_ci break; 21130826e83eSopenharmony_ci } 21140826e83eSopenharmony_ci case NWebValue::Type::BOOLEAN: { 21150826e83eSopenharmony_ci jsType = WebMessageType::BOOLEAN; 21160826e83eSopenharmony_ci break; 21170826e83eSopenharmony_ci } 21180826e83eSopenharmony_ci case NWebValue::Type::STRINGARRAY: 21190826e83eSopenharmony_ci case NWebValue::Type::DOUBLEARRAY: 21200826e83eSopenharmony_ci case NWebValue::Type::INT64ARRAY: 21210826e83eSopenharmony_ci case NWebValue::Type::BOOLEANARRAY: { 21220826e83eSopenharmony_ci jsType = WebMessageType::ARRAY; 21230826e83eSopenharmony_ci break; 21240826e83eSopenharmony_ci } 21250826e83eSopenharmony_ci case NWebValue::Type::BINARY: { 21260826e83eSopenharmony_ci jsType = WebMessageType::ARRAYBUFFER; 21270826e83eSopenharmony_ci break; 21280826e83eSopenharmony_ci } 21290826e83eSopenharmony_ci case NWebValue::Type::ERROR: { 21300826e83eSopenharmony_ci jsType = WebMessageType::ERROR; 21310826e83eSopenharmony_ci break; 21320826e83eSopenharmony_ci } 21330826e83eSopenharmony_ci default: { 21340826e83eSopenharmony_ci jsType = WebMessageType::NOTSUPPORT; 21350826e83eSopenharmony_ci break; 21360826e83eSopenharmony_ci } 21370826e83eSopenharmony_ci } 21380826e83eSopenharmony_ci return static_cast<int>(jsType); 21390826e83eSopenharmony_ci} 21400826e83eSopenharmony_ci 21410826e83eSopenharmony_ci} // namespace NWeb 21420826e83eSopenharmony_ci} // namespace OHOS 2143