1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_web_bridge.h"
16
17 #include "base/log/log.h"
18 #include "base/utils/string_utils.h"
19 #include "base/utils/utils.h"
20 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21 #include "bridge/declarative_frontend/jsview/js_web.h"
22 #include "core/components_ng/pattern/web/web_model_ng.h"
23
24 namespace OHOS::Ace::NG {
25 constexpr int32_t CALL_ARG_0 = 0;
26 constexpr int32_t CALL_ARG_1 = 1;
27
SetJavaScriptAccess(ArkUIRuntimeCallInfo * runtimeCallInfo)28 ArkUINativeModuleValue WebBridge::SetJavaScriptAccess(ArkUIRuntimeCallInfo* runtimeCallInfo)
29 {
30 EcmaVM* vm = runtimeCallInfo->GetVM();
31 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
32 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
33 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
34 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
35 if (secondArg->IsBoolean()) {
36 bool enable = secondArg->ToBoolean(vm)->Value();
37 GetArkUINodeModifiers()->getWebModifier()->setJavaScriptAccess(nativeNode, enable);
38 } else {
39 GetArkUINodeModifiers()->getWebModifier()->resetJavaScriptAccess(nativeNode);
40 }
41 return panda::JSValueRef::Undefined(vm);
42 }
43
ResetJavaScriptAccess(ArkUIRuntimeCallInfo * runtimeCallInfo)44 ArkUINativeModuleValue WebBridge::ResetJavaScriptAccess(ArkUIRuntimeCallInfo* runtimeCallInfo)
45 {
46 EcmaVM* vm = runtimeCallInfo->GetVM();
47 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
48 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
49 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
50 GetArkUINodeModifiers()->getWebModifier()->resetJavaScriptAccess(nativeNode);
51 return panda::JSValueRef::Undefined(vm);
52 }
53
SetFileAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)54 ArkUINativeModuleValue WebBridge::SetFileAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
55 {
56 EcmaVM* vm = runtimeCallInfo->GetVM();
57 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
58 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
59 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
60 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
61 if (secondArg->IsBoolean()) {
62 bool enable = secondArg->ToBoolean(vm)->Value();
63 GetArkUINodeModifiers()->getWebModifier()->setFileAccessEnabled(nativeNode, enable);
64 } else {
65 GetArkUINodeModifiers()->getWebModifier()->resetFileAccessEnabled(nativeNode);
66 }
67 return panda::JSValueRef::Undefined(vm);
68 }
69
ResetFileAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)70 ArkUINativeModuleValue WebBridge::ResetFileAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
71 {
72 EcmaVM* vm = runtimeCallInfo->GetVM();
73 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
74 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
75 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
76 GetArkUINodeModifiers()->getWebModifier()->resetFileAccessEnabled(nativeNode);
77 return panda::JSValueRef::Undefined(vm);
78 }
79
SetDomStorageAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)80 ArkUINativeModuleValue WebBridge::SetDomStorageAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
81 {
82 EcmaVM* vm = runtimeCallInfo->GetVM();
83 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
84 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
85 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
86 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
87 if (secondArg->IsBoolean()) {
88 bool enable = secondArg->ToBoolean(vm)->Value();
89 GetArkUINodeModifiers()->getWebModifier()->setDomStorageAccessEnabled(nativeNode, enable);
90 } else {
91 GetArkUINodeModifiers()->getWebModifier()->resetDomStorageAccessEnabled(nativeNode);
92 }
93 return panda::JSValueRef::Undefined(vm);
94 }
95
ResetDomStorageAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)96 ArkUINativeModuleValue WebBridge::ResetDomStorageAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
97 {
98 EcmaVM* vm = runtimeCallInfo->GetVM();
99 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
100 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
101 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
102 GetArkUINodeModifiers()->getWebModifier()->resetDomStorageAccessEnabled(nativeNode);
103 return panda::JSValueRef::Undefined(vm);
104 }
105
SetMixedMode(ArkUIRuntimeCallInfo * runtimeCallInfo)106 ArkUINativeModuleValue WebBridge::SetMixedMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
107 {
108 EcmaVM* vm = runtimeCallInfo->GetVM();
109 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
110 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
111 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
112 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
113 int mode = secondArg->Int32Value(vm);
114 GetArkUINodeModifiers()->getWebModifier()->setMixedMode(nativeNode, mode);
115 return panda::JSValueRef::Undefined(vm);
116 }
117
ResetMixedMode(ArkUIRuntimeCallInfo * runtimeCallInfo)118 ArkUINativeModuleValue WebBridge::ResetMixedMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
119 {
120 EcmaVM* vm = runtimeCallInfo->GetVM();
121 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
122 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
123 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
124 GetArkUINodeModifiers()->getWebModifier()->resetMixedMode(nativeNode);
125 return panda::JSValueRef::Undefined(vm);
126 }
127
SetZoomAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)128 ArkUINativeModuleValue WebBridge::SetZoomAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
129 {
130 EcmaVM* vm = runtimeCallInfo->GetVM();
131 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
132 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
133 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
134 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
135 if (secondArg->IsBoolean()) {
136 bool enable = secondArg->ToBoolean(vm)->Value();
137 GetArkUINodeModifiers()->getWebModifier()->setZoomAccessEnabled(nativeNode, enable);
138 } else {
139 GetArkUINodeModifiers()->getWebModifier()->resetZoomAccessEnabled(nativeNode);
140 }
141 return panda::JSValueRef::Undefined(vm);
142 }
143
ResetZoomAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)144 ArkUINativeModuleValue WebBridge::ResetZoomAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
145 {
146 EcmaVM* vm = runtimeCallInfo->GetVM();
147 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
148 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
149 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
150 GetArkUINodeModifiers()->getWebModifier()->resetZoomAccessEnabled(nativeNode);
151 return panda::JSValueRef::Undefined(vm);
152 }
153
SetCacheMode(ArkUIRuntimeCallInfo * runtimeCallInfo)154 ArkUINativeModuleValue WebBridge::SetCacheMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
155 {
156 EcmaVM* vm = runtimeCallInfo->GetVM();
157 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
158 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
159 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
160 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
161 int mode = secondArg->Int32Value(vm);
162 GetArkUINodeModifiers()->getWebModifier()->setCacheMode(nativeNode, mode);
163 return panda::JSValueRef::Undefined(vm);
164 }
165
ResetCacheMode(ArkUIRuntimeCallInfo * runtimeCallInfo)166 ArkUINativeModuleValue WebBridge::ResetCacheMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
167 {
168 EcmaVM* vm = runtimeCallInfo->GetVM();
169 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
170 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
171 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
172 GetArkUINodeModifiers()->getWebModifier()->resetCacheMode(nativeNode);
173 return panda::JSValueRef::Undefined(vm);
174 }
175
SetDarkMode(ArkUIRuntimeCallInfo * runtimeCallInfo)176 ArkUINativeModuleValue WebBridge::SetDarkMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
177 {
178 EcmaVM* vm = runtimeCallInfo->GetVM();
179 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
180 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
181 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
182 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
183 int mode = secondArg->Int32Value(vm);
184 GetArkUINodeModifiers()->getWebModifier()->setDarkMode(nativeNode, mode);
185 return panda::JSValueRef::Undefined(vm);
186 }
187
ResetDarkMode(ArkUIRuntimeCallInfo * runtimeCallInfo)188 ArkUINativeModuleValue WebBridge::ResetDarkMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
189 {
190 EcmaVM* vm = runtimeCallInfo->GetVM();
191 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
192 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
193 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
194 GetArkUINodeModifiers()->getWebModifier()->resetDarkMode(nativeNode);
195 return panda::JSValueRef::Undefined(vm);
196 }
197
SetMultiWindowAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)198 ArkUINativeModuleValue WebBridge::SetMultiWindowAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
199 {
200 EcmaVM* vm = runtimeCallInfo->GetVM();
201 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
202 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
203 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
204 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
205 if (secondArg->IsBoolean()) {
206 bool enable = secondArg->ToBoolean(vm)->Value();
207 GetArkUINodeModifiers()->getWebModifier()->setMultiWindowAccessEnabled(nativeNode, enable);
208 } else {
209 GetArkUINodeModifiers()->getWebModifier()->resetMultiWindowAccessEnabled(nativeNode);
210 }
211 return panda::JSValueRef::Undefined(vm);
212 }
213
ResetMultiWindowAccessEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)214 ArkUINativeModuleValue WebBridge::ResetMultiWindowAccessEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
215 {
216 EcmaVM* vm = runtimeCallInfo->GetVM();
217 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
218 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
219 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
220 GetArkUINodeModifiers()->getWebModifier()->resetMultiWindowAccessEnabled(nativeNode);
221 return panda::JSValueRef::Undefined(vm);
222 }
223
SetAllowWindowOpenMethod(ArkUIRuntimeCallInfo * runtimeCallInfo)224 ArkUINativeModuleValue WebBridge::SetAllowWindowOpenMethod(ArkUIRuntimeCallInfo* runtimeCallInfo)
225 {
226 EcmaVM* vm = runtimeCallInfo->GetVM();
227 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
228 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
229 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
230 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
231 if (secondArg->IsBoolean()) {
232 bool enable = secondArg->ToBoolean(vm)->Value();
233 GetArkUINodeModifiers()->getWebModifier()->setAllowWindowOpenMethod(nativeNode, enable);
234 } else {
235 GetArkUINodeModifiers()->getWebModifier()->resetAllowWindowOpenMethod(nativeNode);
236 }
237 return panda::JSValueRef::Undefined(vm);
238 }
239
ResetAllowWindowOpenMethod(ArkUIRuntimeCallInfo * runtimeCallInfo)240 ArkUINativeModuleValue WebBridge::ResetAllowWindowOpenMethod(ArkUIRuntimeCallInfo* runtimeCallInfo)
241 {
242 EcmaVM* vm = runtimeCallInfo->GetVM();
243 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
244 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
245 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
246 GetArkUINodeModifiers()->getWebModifier()->resetAllowWindowOpenMethod(nativeNode);
247 return panda::JSValueRef::Undefined(vm);
248 }
249
250 } // namespace OHOS::Ace::NG