From 323bbf52a187cdaeb2144bc6484758eeb7d20aff Mon Sep 17 00:00:00 2001 From: liuxiao_310 Date: Wed, 16 Jul 2025 23:11:01 +0800 Subject: [PATCH] web transfer to PermissionReques, controllerHandler, WebKeyboardController Signed-off-by: liuxiao_310 --- .../src/ani/arkts/ArkUIAniModule.ts | 6 + .../arkui-ohos/src/ani/native/module.cpp | 30 +++++ .../src/ani/native/web/web_module_methods.cpp | 125 ++++++++++++++++++ .../src/ani/native/web/web_module_methods.h | 8 ++ .../src/handwritten/component/web.ts | 63 ++++++++- .../declarative_frontend/jsview/js_web.cpp | 17 ++- .../core/components/web/web_transfer_api.h | 3 + frameworks/core/interfaces/ani/ani_api.h | 6 + .../native/ani/web_ani_modifier.cpp | 85 ++++++++++++ 9 files changed, 339 insertions(+), 4 deletions(-) diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts index 21c6f9e9e5a..6a07d5e6bd8 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts @@ -66,12 +66,18 @@ export class ArkUIAniModule { native static _TransferFileSelectorParamToStatic(ptr: KPointer, value: Object | undefined | null) : boolean native static _TransferWebContextMenuResultToStatic(ptr: KPointer, value: Object | undefined | null) : boolean native static _TransferWebContextMenuParamToStatic(ptr: KPointer, value: Object | undefined | null) : boolean + native static _TransferPermissionRequestToStatic(ptr: KPointer, value: Object | undefined | null): boolean + native static _TransferControllerHandlerToStatic(ptr: KPointer, value: Object | undefined | null): boolean + native static _TransferWebKeyboardControllerToStatic(ptr: KPointer, value: Object | undefined | null): boolean native static _TransferJsResultToDynamic(ptr: KPointer) : Object | undefined | null native static _TransferFileSelectorResultToDynamic(ptr: KPointer) : Object | undefined | null native static _TransferFileSelectorParamToDynamic(ptr: KPointer) : Object | undefined | null native static _TransferWebContextMenuResultToDynamic(ptr: KPointer) : Object | undefined | null native static _TransferWebContextMenuParamToDynamic(ptr: KPointer) : Object | undefined | null + native static _TransferPermissionRequestToDynamic(ptr: KPointer) : Object | undefined | null + native static _TransferControllerHandlerToDynamic(ptr: KPointer) : Object | undefined | null + native static _TransferWebKeyboardControllerToDynamic(ptr: KPointer) : Object | undefined | null // for Drag native static _DragEvent_Set_Data(ptr: KLong, data : unifiedDataChannel.UnifiedData) : void diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp index b061c9f2bf8..603d56a954b 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp @@ -487,6 +487,36 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) nullptr, reinterpret_cast(OHOS::Ace::Ani::OnLayoutInnerLayout) }, + ani_native_function { + "_TransferPermissionRequestToStatic", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::TransferPermissionRequestToStatic) + }, + ani_native_function { + "_TransferControllerHandlerToStatic", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::TransferControllerHandlerToStatic) + }, + ani_native_function { + "_TransferWebKeyboardControllerToStatic", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::TransferWebKeyboardControllerToStatic) + }, + ani_native_function { + "_TransferPermissionRequestToDynamic", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::TransferPermissionRequestToDynamic) + }, + ani_native_function { + "_TransferControllerHandlerToDynamic", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::TransferControllerHandlerToDynamic) + }, + ani_native_function { + "_TransferWebKeyboardControllerToDynamic", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::TransferWebKeyboardControllerToDynamic) + }, }; auto bindRst = env->Class_BindNativeMethods(cls, methods.data(), methods.size()); diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.cpp index ef1f8f2e840..24af85b364f 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.cpp @@ -382,4 +382,129 @@ ani_object TransferWebContextMenuParamToDynamic(ani_env* env, ani_class aniClass } return reinterpret_cast(result); } + +ani_boolean TransferPermissionRequestToStatic(ani_env* env, ani_class aniClass, ani_long node, ani_object input) +{ + ani_object esValue = ESValueWrap(env, input); + if (!esValue) { + HILOGE("TransferPermissionRequestToStatic ESValueWrap failed"); + return ANI_FALSE; + } + void *nativePtr = nullptr; + if (!arkts_esvalue_unwrap(env, esValue, &nativePtr) || nativePtr == nullptr) { + HILOGE("TransferPermissionRequestToStatic arkts_esvalue_unwrap failed"); + return ANI_FALSE; + } + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getWebAniModifier() || !env) { + return ANI_FALSE; + } + return modifier->getWebAniModifier()->transferPermissionRequestToStatic(reinterpret_cast(node), nativePtr); +} + +ani_boolean TransferControllerHandlerToStatic(ani_env* env, ani_class aniClass, ani_long node, ani_object input) +{ + ani_object esValue = ESValueWrap(env, input); + if (!esValue) { + HILOGE("TransferControllerHandlerToStatic ESValueWrap failed"); + return ANI_FALSE; + } + void *nativePtr = nullptr; + if (!arkts_esvalue_unwrap(env, esValue, &nativePtr) || nativePtr == nullptr) { + HILOGE("TransferControllerHandlerToStatic arkts_esvalue_unwrap failed"); + return ANI_FALSE; + } + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getWebAniModifier() || !env) { + return ANI_FALSE; + } + return modifier->getWebAniModifier()->transferControllerHandlerToStatic(reinterpret_cast(node), nativePtr); +} + +ani_boolean TransferWebKeyboardControllerToStatic(ani_env* env, ani_class aniClass, ani_long node, ani_object input) +{ + ani_object esValue = ESValueWrap(env, input); + if (!esValue) { + HILOGE("arkweb_test TransferWebKeyboardControllerToStatic ESValueWrap failed"); + return ANI_FALSE; + } + void *nativePtr = nullptr; + if (!arkts_esvalue_unwrap(env, esValue, &nativePtr) || nativePtr == nullptr) { + HILOGE("arkweb_test TransferWebKeyboardControllerToStatic arkts_esvalue_unwrap failed"); + return ANI_FALSE; + } + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getWebAniModifier() || !env) { + return ANI_FALSE; + } + return modifier->getWebAniModifier()->transferWebKeyboardControllerToStatic( + reinterpret_cast(node), nativePtr); +} + +ani_object TransferControllerHandlerToDynamic(ani_env* env, ani_class aniClass, ani_long node) +{ + CHECK_NULL_RETURN(env, nullptr); + ani_ref undefinedRef; + env->GetUndefined(&undefinedRef); + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getWebAniModifier()) { + return reinterpret_cast(undefinedRef); + } + ani_ref result = nullptr; + { + napi_env jsenv {}; + bool success = arkts_napi_scope_open(env, &jsenv); + CHECK_NULL_RETURN(success, reinterpret_cast(undefinedRef)); + napi_value dynamic = + modifier->getWebAniModifier()->transferControllerHandlerToDynamic(jsenv, reinterpret_cast(node)); + CHECK_NULL_RETURN(dynamic, reinterpret_cast(undefinedRef)); + success = arkts_napi_scope_close_n(jsenv, 1, &dynamic, &result); + CHECK_NULL_RETURN(success, reinterpret_cast(undefinedRef)); + } + return reinterpret_cast(result); +} +ani_object TransferPermissionRequestToDynamic(ani_env* env, ani_class aniClass, ani_long node) +{ + CHECK_NULL_RETURN(env, nullptr); + ani_ref undefinedRef; + env->GetUndefined(&undefinedRef); + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getWebAniModifier()) { + return reinterpret_cast(undefinedRef); + } + ani_ref result = nullptr; + { + napi_env jsenv {}; + bool success = arkts_napi_scope_open(env, &jsenv); + CHECK_NULL_RETURN(success, reinterpret_cast(undefinedRef)); + napi_value dynamic = + modifier->getWebAniModifier()->transferPermissionRequestToDynamic(jsenv, reinterpret_cast(node)); + CHECK_NULL_RETURN(dynamic, reinterpret_cast(undefinedRef)); + success = arkts_napi_scope_close_n(jsenv, 1, &dynamic, &result); + CHECK_NULL_RETURN(success, reinterpret_cast(undefinedRef)); + } + return reinterpret_cast(result); +} +ani_object TransferWebKeyboardControllerToDynamic(ani_env* env, ani_class aniClass, ani_long node) +{ + CHECK_NULL_RETURN(env, nullptr); + ani_ref undefinedRef; + env->GetUndefined(&undefinedRef); + const auto* modifier = GetNodeAniModifier(); + if (!modifier || !modifier->getWebAniModifier()) { + return reinterpret_cast(undefinedRef); + } + ani_ref result = nullptr; + { + napi_env jsenv {}; + bool success = arkts_napi_scope_open(env, &jsenv); + CHECK_NULL_RETURN(success, reinterpret_cast(undefinedRef)); + napi_value dynamic = + modifier->getWebAniModifier()->transferWebKeyboardControllerToDynamic(jsenv, reinterpret_cast(node)); + CHECK_NULL_RETURN(dynamic, reinterpret_cast(undefinedRef)); + success = arkts_napi_scope_close_n(jsenv, 1, &dynamic, &result); + CHECK_NULL_RETURN(success, reinterpret_cast(undefinedRef)); + } + return reinterpret_cast(result); +} } // namespace OHOS::Ace::Ani diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.h b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.h index 49507d83eb5..34c6e9fc22e 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.h +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/web/web_module_methods.h @@ -33,6 +33,14 @@ ani_object TransferFileSelectorResultToDynamic(ani_env* env, ani_class aniClass, ani_object TransferFileSelectorParamToDynamic(ani_env* env, ani_class aniClass, ani_long node); ani_object TransferWebContextMenuResultToDynamic(ani_env* env, ani_class aniClass, ani_long node); ani_object TransferWebContextMenuParamToDynamic(ani_env* env, ani_class aniClass, ani_long node); + +ani_boolean TransferPermissionRequestToStatic(ani_env* env, ani_class aniClass, ani_long node, ani_object input); +ani_boolean TransferControllerHandlerToStatic(ani_env* env, ani_class aniClass, ani_long node, ani_object input); +ani_boolean TransferWebKeyboardControllerToStatic(ani_env* env, ani_class aniClass, ani_long node, ani_object input); + +ani_object TransferPermissionRequestToDynamic(ani_env* env, ani_class aniClass, ani_long node); +ani_object TransferControllerHandlerToDynamic(ani_env* env, ani_class aniClass, ani_long node); +ani_object TransferWebKeyboardControllerToDynamic(ani_env* env, ani_class aniClass, ani_long node); } // namespace OHOS::Ace::Ani #endif // KOALA_PROJECTS_ARKOALA_ARKTS_ARKUI_OHOS_WEB_MODULE_METHODS_H \ No newline at end of file diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/component/web.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/component/web.ts index 2dc6acdf856..b4d61e98447 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/component/web.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/component/web.ts @@ -16,7 +16,7 @@ import { TypeChecker } from "#components" import { ArkUIAniModule } from "arkui.ani" import { registerNativeModuleLibraryName } from '@koalaui/interop' - +import { InteropNativeModule } from "@koalaui/interop"; function registerAllNativeModuleLibraryName() { registerNativeModuleLibraryName('InteropNativeModule', 'ArkoalaNative_ark.z') registerNativeModuleLibraryName('ArkUINativeModule', 'ArkoalaNative_ark.z') @@ -119,4 +119,65 @@ export class ArkWebTransfer { const value_casted = value as WebContextMenuResult return ArkUIAniModule._TransferWebContextMenuResultToDynamic(value_casted.peer!.ptr) } + + public static transferPermissionRequestStatic(value: Object | undefined | null): Object { + registerAllNativeModuleLibraryName() + InteropNativeModule._NativeLog("transferPermissionRequestStatic start ") + if (value === undefined || value === null) { + throw new Error('dynamic object is null or undefined') + } + let result: PermissionRequest = new PermissionRequest() + if (!ArkUIAniModule._TransferPermissionRequestToStatic(result.peer!.ptr, value)) { + throw new Error('transfer failed') + } + return result as Object + } + + public static transferPermissionRequestDynamic(value: Object): Object | undefined | null { + if (!TypeChecker.isPermissionRequest(value)) { + throw new Error('static object type mismatch') + } + const value_casted = value as PermissionRequest + return ArkUIAniModule._TransferPermissionRequestToDynamic(value_casted.peer!.ptr) + } + + public static transferWebKeyboardControllerStatic(value: Object | undefined | null): Object { + registerAllNativeModuleLibraryName() + if (value === undefined || value === null) { + throw new Error('dynamic object is null or undefined') + } + let result: WebKeyboardController = new WebKeyboardController() + if (!ArkUIAniModule._TransferWebKeyboardControllerToStatic(result.peer!.ptr, value)) { + throw new Error('transfer failed') + } + return result as Object + } + + public static transferWebKeyboardControllerDynamic(value: Object): Object | undefined | null { + if (!TypeChecker.isWebKeyboardController(value)) { + throw new Error('static object type mismatch') + } + const value_casted = value as WebKeyboardController + return ArkUIAniModule._TransferWebKeyboardControllerToDynamic(value_casted.peer!.ptr) + } + + public static transferControllerHandlerStatic(value: Object | undefined | null): Object { + registerAllNativeModuleLibraryName() + if (value === undefined || value === null) { + throw new Error('dynamic object is null or undefined') + } + let result: ControllerHandler = new ControllerHandler() + if (!ArkUIAniModule._TransferControllerHandlerToStatic(result.peer!.ptr, value)) { + throw new Error('transfer failed') + } + return result as Object + } + + public static transferControllerHandlerDynamic(value: Object): Object | undefined | null { + if (!TypeChecker.isControllerHandler(value)) { + throw new Error('static object type mismatch') + } + const value_casted = value as ControllerHandler + return ArkUIAniModule._TransferControllerHandlerToDynamic(value_casted.peer!.ptr) + } } diff --git a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp index 5e091d232cf..680f7eb5f7f 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp @@ -215,7 +215,7 @@ private: RefPtr fullScreenExitHandler_; }; -class JSWebKeyboardController : public Referenced { +class JSWebKeyboardController : public WebTransferBase> { public: static void JSBind(BindingTarget globalObj) { @@ -232,6 +232,7 @@ public: void SeWebKeyboardController(const RefPtr& controller) { webKeyboardController_ = controller; + transferValues_ = std::make_tuple(webKeyboardController_); } void InsertText(const JSCallbackInfo& args) @@ -658,7 +659,7 @@ private: RefPtr webGeolocation_; }; -class JSWebPermissionRequest : public Referenced { +class JSWebPermissionRequest : public WebTransferBase> { public: static void JSBind(BindingTarget globalObj) { @@ -674,6 +675,7 @@ public: void SetEvent(const WebPermissionRequestEvent& eventInfo) { webPermissionRequest_ = eventInfo.GetWebPermissionRequest(); + transferValues_ = std::make_tuple(webPermissionRequest_); } void Deny(const JSCallbackInfo& args) @@ -879,7 +881,7 @@ private: RefPtr eventResult_; }; -class JSWebWindowNewHandler : public Referenced { +class JSWebWindowNewHandler : public WebTransferBase> { public: struct ChildWindowInfo { int32_t parentWebId_ = -1; @@ -897,6 +899,7 @@ public: void SetEvent(const WebWindowNewEvent& eventInfo) { handler_ = eventInfo.GetWebWindowNewHandler(); + transferValues_ = std::make_tuple(handler_); } static JSRef PopController(int32_t id, int32_t* parentId = nullptr) @@ -4226,6 +4229,7 @@ JSRef PermissionRequestEventToJSValue(const WebPermissionRequestEvent& ev JSRef permissionObj = JSClass::NewInstance(); auto permissionEvent = Referenced::Claim(permissionObj->Unwrap()); permissionEvent->SetEvent(eventInfo); + WrapNapiValue(GetNapiEnv(), JSRef::Cast(permissionObj), static_cast(permissionEvent.GetRawPtr())); obj->SetPropertyObject("request", permissionObj); return JSRef::Cast(obj); } @@ -4519,6 +4523,7 @@ JSRef WindowNewEventToJSValue(const WebWindowNewEvent& eventInfo) JSRef handlerObj = JSClass::NewInstance(); auto handler = Referenced::Claim(handlerObj->Unwrap()); handler->SetEvent(eventInfo); + WrapNapiValue(GetNapiEnv(), JSRef::Cast(handlerObj), static_cast(handler.GetRawPtr())); obj->SetPropertyObject("handler", handlerObj); return JSRef::Cast(obj); } @@ -5967,6 +5972,8 @@ JSRef InterceptKeyboardEventToJSValue(const InterceptKeyboardEvent& event JSRef webKeyboardControllerObj = JSClass::NewInstance(); auto webKeyboardController = Referenced::Claim(webKeyboardControllerObj->Unwrap()); webKeyboardController->SeWebKeyboardController(eventInfo.GetCustomKeyboardHandler()); + WrapNapiValue(GetNapiEnv(), JSRef::Cast(webKeyboardControllerObj), + static_cast(webKeyboardController.GetRawPtr())); obj->SetPropertyObject("controller", webKeyboardControllerObj); JSRef objectTemplate = JSRef::New(); @@ -6207,4 +6214,8 @@ ARKWEB_CREATE_JS_OBJECT(FileSelectorResult, JSFileSelectorResult, SetResult, Fil ARKWEB_CREATE_JS_OBJECT(WebFileSelectorParam, JSFileSelectorParam, SetParam, FileSelectorEvent(value, nullptr)) ARKWEB_CREATE_JS_OBJECT(ContextMenuResult, JSContextMenuResult, SetResult, ContextMenuEvent(nullptr, value)) ARKWEB_CREATE_JS_OBJECT(WebContextMenuParam, JSContextMenuParam, SetParam, ContextMenuEvent(value, nullptr)) +ARKWEB_CREATE_JS_OBJECT(WebPermissionRequest, JSWebPermissionRequest, SetEvent, WebPermissionRequestEvent(value)) +ARKWEB_CREATE_JS_OBJECT(WebCustomKeyboardHandler, JSWebKeyboardController, SeWebKeyboardController, value) +ARKWEB_CREATE_JS_OBJECT( + WebWindowNewHandler, JSWebWindowNewHandler, SetEvent, WebWindowNewEvent(std::string(), false, false, value)) } // namespace OHOS::Ace::Framework diff --git a/frameworks/core/components/web/web_transfer_api.h b/frameworks/core/components/web/web_transfer_api.h index e3f5a256dee..bc954f0e89c 100644 --- a/frameworks/core/components/web/web_transfer_api.h +++ b/frameworks/core/components/web/web_transfer_api.h @@ -43,6 +43,9 @@ napi_value CreateJSFileSelectorResultObject(napi_env env, const RefPtr& value); napi_value CreateJSContextMenuResultObject(napi_env env, const RefPtr& value); napi_value CreateJSContextMenuParamObject(napi_env env, const RefPtr& value); +napi_value CreateJSWebWindowNewHandlerObject(napi_env env, const RefPtr& value); +napi_value CreateJSWebPermissionRequestObject(napi_env env, const RefPtr& value); +napi_value CreateJSWebKeyboardControllerObject(napi_env env, const RefPtr& value); } } // namespace OHOS::Ace diff --git a/frameworks/core/interfaces/ani/ani_api.h b/frameworks/core/interfaces/ani/ani_api.h index 8b638fbc950..4b590ce8c80 100644 --- a/frameworks/core/interfaces/ani/ani_api.h +++ b/frameworks/core/interfaces/ani/ani_api.h @@ -78,11 +78,17 @@ struct ArkUIAniWebModifier { bool (*transferFileSelectorParamToStatic)(void* peer, void* nativePtr); bool (*transferWebContextMenuResultToStatic)(void* peer, void* nativePtr); bool (*transferWebContextMenuParamToStatic)(void* peer, void* nativePtr); + bool (*transferPermissionRequestToStatic)(void* peer, void* nativePtr); + bool (*transferControllerHandlerToStatic)(void* peer, void* nativePtr); + bool (*transferWebKeyboardControllerToStatic)(void* peer, void* nativePtr); napi_value (*transferJsResultToDynamic)(napi_env env, void* peer); napi_value (*transferFileSelectorResultToDynamic)(napi_env env, void* peer); napi_value (*transferFileSelectorParamToDynamic)(napi_env env, void* peer); napi_value (*transferWebContextMenuResultToDynamic)(napi_env env, void* peer); napi_value (*transferWebContextMenuParamToDynamic)(napi_env env, void* peer); + napi_value (*transferControllerHandlerToDynamic)(napi_env env, void* peer); + napi_value (*transferPermissionRequestToDynamic)(napi_env env, void* peer); + napi_value (*transferWebKeyboardControllerToDynamic)(napi_env env, void* peer); }; struct ArkUIAniDragModifier { void (*setDragData)(ani_ref event, ani_ref data); diff --git a/frameworks/core/interfaces/native/ani/web_ani_modifier.cpp b/frameworks/core/interfaces/native/ani/web_ani_modifier.cpp index c251485b232..00eecd888d7 100644 --- a/frameworks/core/interfaces/native/ani/web_ani_modifier.cpp +++ b/frameworks/core/interfaces/native/ani/web_ani_modifier.cpp @@ -25,6 +25,9 @@ #include "core/interfaces/native/implementation/js_result_peer_impl.h" #include "core/interfaces/native/implementation/web_context_menu_param_peer_impl.h" #include "core/interfaces/native/implementation/web_context_menu_result_peer_impl.h" +#include "core/interfaces/native/implementation/permission_request_peer_impl.h" +#include "core/interfaces/native/implementation/controller_handler_peer_impl.h" +#include "core/interfaces/native/implementation/web_keyboard_controller_peer_impl.h" #include "core/components/web/web_transfer_api.h" #endif @@ -192,6 +195,82 @@ napi_value TransferWebContextMenuParamToDynamic(napi_env env, void* peer) #endif // WEB_SUPPORTED } +bool TransferPermissionRequestToStatic(void* peer, void* nativePtr) +{ +#ifdef WEB_SUPPORTED + auto* objectPeer = reinterpret_cast(peer); + CHECK_NULL_RETURN(objectPeer, false); + auto* transfer = reinterpret_cast>*>(nativePtr); + CHECK_NULL_RETURN(transfer, false); + objectPeer->handler = transfer->get<0>(); + return true; +#else + return false; +#endif // WEB_SUPPORTED +} + +napi_value TransferPermissionRequestToDynamic(napi_env env, void* peer) +{ +#ifdef WEB_SUPPORTED + auto* objectPeer = reinterpret_cast(peer); + CHECK_NULL_RETURN(objectPeer, nullptr); + return OHOS::Ace::Framework::CreateJSWebPermissionRequestObject(env, objectPeer->handler); +#else + return nullptr; +#endif // WEB_SUPPORTED +} + +bool TransferControllerHandlerToStatic(void* peer, void* nativePtr) +{ +#ifdef WEB_SUPPORTED + auto* objectPeer = reinterpret_cast(peer); + CHECK_NULL_RETURN(objectPeer, false); + auto* transfer = reinterpret_cast>*>(nativePtr); + CHECK_NULL_RETURN(transfer, false); + objectPeer->handler = transfer->get<0>(); + return true; +#else + return false; +#endif // WEB_SUPPORTED +} + +napi_value TransferControllerHandlerToDynamic(napi_env env, void* peer) +{ +#ifdef WEB_SUPPORTED + auto* objectPeer = reinterpret_cast(peer); + CHECK_NULL_RETURN(objectPeer, nullptr); + return OHOS::Ace::Framework::CreateJSWebWindowNewHandlerObject(env, objectPeer->handler); +#else + return nullptr; +#endif // WEB_SUPPORTED +} + +bool TransferWebKeyboardControllerToStatic(void* peer, void* nativePtr) +{ +#ifdef WEB_SUPPORTED + auto* objectPeer = reinterpret_cast(peer); + CHECK_NULL_RETURN(objectPeer, false); + auto* transfer = reinterpret_cast>*>(nativePtr); + CHECK_NULL_RETURN(transfer, false); + objectPeer->handler = transfer->get<0>(); + return true; +#else + return false; +#endif // WEB_SUPPORTED +} + +napi_value TransferWebKeyboardControllerToDynamic(napi_env env, void* peer) +{ +#ifdef WEB_SUPPORTED + auto* objectPeer = reinterpret_cast(peer); + CHECK_NULL_RETURN(objectPeer, nullptr); + return OHOS::Ace::Framework::CreateJSWebKeyboardControllerObject(env, objectPeer->handler); +#else + return nullptr; +#endif // WEB_SUPPORTED +} + + const ArkUIAniWebModifier* GetWebAniModifier() { static const ArkUIAniWebModifier impl = { @@ -207,6 +286,12 @@ const ArkUIAniWebModifier* GetWebAniModifier() .transferFileSelectorParamToDynamic = OHOS::Ace::NG::TransferFileSelectorParamToDynamic, .transferWebContextMenuResultToDynamic = OHOS::Ace::NG::TransferWebContextMenuResultToDynamic, .transferWebContextMenuParamToDynamic = OHOS::Ace::NG::TransferWebContextMenuParamToDynamic, + .transferPermissionRequestToStatic = OHOS::Ace::NG::TransferPermissionRequestToStatic, + .transferPermissionRequestToDynamic = OHOS::Ace::NG::TransferPermissionRequestToDynamic, + .transferControllerHandlerToStatic = OHOS::Ace::NG::TransferControllerHandlerToStatic, + .transferControllerHandlerToDynamic = OHOS::Ace::NG::TransferControllerHandlerToDynamic, + .transferWebKeyboardControllerToStatic = OHOS::Ace::NG::TransferWebKeyboardControllerToStatic, + .transferWebKeyboardControllerToDynamic = OHOS::Ace::NG::TransferWebKeyboardControllerToDynamic, }; return &impl; } -- Gitee