• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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