• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "js_extension_window_config.h"
17 #include <string>
18 #include "js_window_utils.h"
19 #include "window_manager_hilog.h"
20 
21 namespace OHOS {
22 namespace Rosen {
23 using namespace AbilityRuntime;
24 namespace {
25 constexpr char EXTENSION_WINDOW_CONFIG_NAME[] = "__extension_window_config_ptr__";
26 constexpr size_t ARGC_ZERO = 0;
27 constexpr size_t ARGC_ONE = 1;
28 
NapiGetUndefined(napi_env env)29 napi_value NapiGetUndefined(napi_env env)
30 {
31     napi_value result = nullptr;
32     napi_get_undefined(env, &result);
33     return result;
34 }
35 
BindNativePropertys(napi_env env,napi_value object,const char * name,napi_callback getter,napi_callback setter)36 void BindNativePropertys(napi_env env, napi_value object, const char* name, napi_callback getter,
37     napi_callback setter)
38 {
39     napi_property_descriptor properties[ARGC_ONE];
40     properties[ARGC_ZERO].utf8name = name;
41     properties[ARGC_ZERO].name = nullptr;
42     properties[ARGC_ZERO].method = nullptr;
43     properties[ARGC_ZERO].getter = getter;
44     properties[ARGC_ZERO].setter = setter;
45     properties[ARGC_ZERO].value = nullptr;
46     properties[ARGC_ZERO].attributes = napi_default;
47     properties[ARGC_ZERO].data = nullptr;
48     napi_define_properties(env, object, ARGC_ONE, properties);
49 }
50 } // namespace
51 
JsExtensionWindowConfig(const std::shared_ptr<ExtensionWindowConfig> & extensionWindowConfig)52 JsExtensionWindowConfig::JsExtensionWindowConfig(const std::shared_ptr<ExtensionWindowConfig>& extensionWindowConfig)
53     : extensionWindowConfig_(extensionWindowConfig)
54 {
55 }
56 
57 JsExtensionWindowConfig::~JsExtensionWindowConfig() = default;
58 
Finalizer(napi_env env,void * data,void * hint)59 void JsExtensionWindowConfig::Finalizer(napi_env env, void* data, void* hint)
60 {
61     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
62     std::unique_ptr<JsExtensionWindowConfig>(static_cast<JsExtensionWindowConfig *>(data));
63 }
64 
CreateJsExtensionWindowConfig(napi_env env,const std::shared_ptr<ExtensionWindowConfig> & extensionWindowConfig)65 napi_value CreateJsExtensionWindowConfig(napi_env env,
66     const std::shared_ptr<ExtensionWindowConfig>& extensionWindowConfig)
67 {
68     napi_value objValue = nullptr;
69     napi_create_object(env, &objValue);
70     if (objValue == nullptr) {
71         TLOGE(WmsLogTag::WMS_UIEXT, "objValue is null.");
72         return NapiGetUndefined(env);
73     }
74     std::unique_ptr<JsExtensionWindowConfig> jsExtensionWindowConfig =
75         std::make_unique<JsExtensionWindowConfig>(extensionWindowConfig);
76     SetNamedNativePointer(env, objValue, EXTENSION_WINDOW_CONFIG_NAME, jsExtensionWindowConfig.release(),
77         JsExtensionWindowConfig::Finalizer);
78     BindNativePropertys(env, objValue, "windowName", JsExtensionWindowConfig::GetWindowName,
79         JsExtensionWindowConfig::SetWindowName);
80     BindNativePropertys(env, objValue, "windowAttribute", JsExtensionWindowConfig::GetWindowAttribute,
81         JsExtensionWindowConfig::SetWindowAttribute);
82     BindNativePropertys(env, objValue, "windowRect", JsExtensionWindowConfig::GetWindowRect,
83         JsExtensionWindowConfig::SetWindowRect);
84     BindNativePropertys(env, objValue, "subWindowOptions", JsExtensionWindowConfig::GetSubWindowOptions,
85         JsExtensionWindowConfig::SetSubWindowOptions);
86     BindNativePropertys(env, objValue, "systemWindowOptions", JsExtensionWindowConfig::GetSystemWindowOptions,
87         JsExtensionWindowConfig::SetSystemWindowOptions);
88     return objValue;
89 }
90 
GetWindowName(napi_env env,napi_callback_info info)91 napi_value JsExtensionWindowConfig::GetWindowName(napi_env env, napi_callback_info info)
92 {
93     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
94     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowName,
95         EXTENSION_WINDOW_CONFIG_NAME);
96 }
97 
OnGetWindowName(napi_env env,NapiCallbackInfo & info)98 napi_value JsExtensionWindowConfig::OnGetWindowName(napi_env env, NapiCallbackInfo& info)
99 {
100     return CreateJsValue(env, extensionWindowConfig_->windowName);
101 }
102 
GetWindowAttribute(napi_env env,napi_callback_info info)103 napi_value JsExtensionWindowConfig::GetWindowAttribute(napi_env env, napi_callback_info info)
104 {
105     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
106     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowAttribute,
107         EXTENSION_WINDOW_CONFIG_NAME);
108 }
109 
OnGetWindowAttribute(napi_env env,NapiCallbackInfo & info)110 napi_value JsExtensionWindowConfig::OnGetWindowAttribute(napi_env env, NapiCallbackInfo& info)
111 {
112     return CreateJsValue(env, static_cast<int32_t>(extensionWindowConfig_->windowAttribute));
113 }
114 
GetWindowRect(napi_env env,napi_callback_info info)115 napi_value JsExtensionWindowConfig::GetWindowRect(napi_env env, napi_callback_info info)
116 {
117     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
118     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowRect,
119         EXTENSION_WINDOW_CONFIG_NAME);
120 }
121 
OnGetWindowRect(napi_env env,NapiCallbackInfo & info)122 napi_value JsExtensionWindowConfig::OnGetWindowRect(napi_env env, NapiCallbackInfo& info)
123 {
124     napi_value objValue = nullptr;
125     napi_create_object(env, &objValue);
126     if (objValue == nullptr) {
127         TLOGE(WmsLogTag::WMS_UIEXT, "objValue is null.");
128         return NapiGetUndefined(env);
129     }
130     std::unique_ptr<JsExtensionWindowConfig> jsExtensionWindowConfig =
131         std::make_unique<JsExtensionWindowConfig>(extensionWindowConfig_);
132     SetNamedNativePointer(env, objValue, EXTENSION_WINDOW_CONFIG_NAME, jsExtensionWindowConfig.release(),
133         JsExtensionWindowConfig::Finalizer);
134     BindNativePropertys(env, objValue, "left", JsExtensionWindowConfig::GetWindowRectLeft,
135         JsExtensionWindowConfig::SetWindowRectLeft);
136     BindNativePropertys(env, objValue, "top", JsExtensionWindowConfig::GetWindowRectTop,
137         JsExtensionWindowConfig::SetWindowRectTop);
138     BindNativePropertys(env, objValue, "width", JsExtensionWindowConfig::GetWindowRectWidth,
139         JsExtensionWindowConfig::SetWindowRectWidth);
140     BindNativePropertys(env, objValue, "height", JsExtensionWindowConfig::GetWindowRectHeight,
141         JsExtensionWindowConfig::SetWindowRectHeight);
142     return objValue;
143 }
144 
GetWindowRectLeft(napi_env env,napi_callback_info info)145 napi_value JsExtensionWindowConfig::GetWindowRectLeft(napi_env env, napi_callback_info info)
146 {
147     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
148     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowRectLeft,
149         EXTENSION_WINDOW_CONFIG_NAME);
150 }
151 
OnGetWindowRectLeft(napi_env env,NapiCallbackInfo & info)152 napi_value JsExtensionWindowConfig::OnGetWindowRectLeft(napi_env env, NapiCallbackInfo& info)
153 {
154     return CreateJsValue(env, extensionWindowConfig_->windowRect.posX_);
155 }
156 
GetWindowRectTop(napi_env env,napi_callback_info info)157 napi_value JsExtensionWindowConfig::GetWindowRectTop(napi_env env, napi_callback_info info)
158 {
159     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
160     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowRectTop,
161         EXTENSION_WINDOW_CONFIG_NAME);
162 }
163 
OnGetWindowRectTop(napi_env env,NapiCallbackInfo & info)164 napi_value JsExtensionWindowConfig::OnGetWindowRectTop(napi_env env, NapiCallbackInfo& info)
165 {
166     return CreateJsValue(env, extensionWindowConfig_->windowRect.posY_);
167 }
168 
GetWindowRectWidth(napi_env env,napi_callback_info info)169 napi_value JsExtensionWindowConfig::GetWindowRectWidth(napi_env env, napi_callback_info info)
170 {
171     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
172     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowRectWidth,
173         EXTENSION_WINDOW_CONFIG_NAME);
174 }
175 
OnGetWindowRectWidth(napi_env env,NapiCallbackInfo & info)176 napi_value JsExtensionWindowConfig::OnGetWindowRectWidth(napi_env env, NapiCallbackInfo& info)
177 {
178     return CreateJsValue(env, extensionWindowConfig_->windowRect.width_);
179 }
180 
GetWindowRectHeight(napi_env env,napi_callback_info info)181 napi_value JsExtensionWindowConfig::GetWindowRectHeight(napi_env env, napi_callback_info info)
182 {
183     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
184     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetWindowRectHeight,
185         EXTENSION_WINDOW_CONFIG_NAME);
186 }
187 
OnGetWindowRectHeight(napi_env env,NapiCallbackInfo & info)188 napi_value JsExtensionWindowConfig::OnGetWindowRectHeight(napi_env env, NapiCallbackInfo& info)
189 {
190     return CreateJsValue(env, extensionWindowConfig_->windowRect.height_);
191 }
192 
GetSubWindowOptions(napi_env env,napi_callback_info info)193 napi_value JsExtensionWindowConfig::GetSubWindowOptions(napi_env env, napi_callback_info info)
194 {
195     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
196     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSubWindowOptions,
197         EXTENSION_WINDOW_CONFIG_NAME);
198 }
199 
OnGetSubWindowOptions(napi_env env,NapiCallbackInfo & info)200 napi_value JsExtensionWindowConfig::OnGetSubWindowOptions(napi_env env, NapiCallbackInfo& info)
201 {
202     napi_value objValue = nullptr;
203     napi_create_object(env, &objValue);
204     if (objValue == nullptr) {
205         TLOGE(WmsLogTag::WMS_UIEXT, "objValue is null.");
206         return NapiGetUndefined(env);
207     }
208     std::unique_ptr<JsExtensionWindowConfig> jsExtensionWindowConfig =
209         std::make_unique<JsExtensionWindowConfig>(extensionWindowConfig_);
210     SetNamedNativePointer(env, objValue, EXTENSION_WINDOW_CONFIG_NAME, jsExtensionWindowConfig.release(),
211         JsExtensionWindowConfig::Finalizer);
212     BindNativePropertys(env, objValue, "title", JsExtensionWindowConfig::GetSubWindowOptionsTitle,
213         JsExtensionWindowConfig::SetSubWindowOptionsTitle);
214     BindNativePropertys(env, objValue, "decorEnabled", JsExtensionWindowConfig::GetSubWindowOptionsDecorEnabled,
215         JsExtensionWindowConfig::SetSubWindowOptionsDecorEnabled);
216     BindNativePropertys(env, objValue, "isModal", JsExtensionWindowConfig::GetSubWindowOptionsIsModal,
217         JsExtensionWindowConfig::SetSubWindowOptionsIsModal);
218     BindNativePropertys(env, objValue, "isTopmost", JsExtensionWindowConfig::GetSubWindowOptionsIsTopmost,
219         JsExtensionWindowConfig::SetSubWindowOptionsIsTopmost);
220     return objValue;
221 }
222 
GetSubWindowOptionsTitle(napi_env env,napi_callback_info info)223 napi_value JsExtensionWindowConfig::GetSubWindowOptionsTitle(napi_env env, napi_callback_info info)
224 {
225     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
226     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSubWindowOptionsTitle,
227         EXTENSION_WINDOW_CONFIG_NAME);
228 }
229 
OnGetSubWindowOptionsTitle(napi_env env,NapiCallbackInfo & info)230 napi_value JsExtensionWindowConfig::OnGetSubWindowOptionsTitle(napi_env env, NapiCallbackInfo& info)
231 {
232     return CreateJsValue(env, extensionWindowConfig_->subWindowOptions.title);
233 }
234 
GetSubWindowOptionsDecorEnabled(napi_env env,napi_callback_info info)235 napi_value JsExtensionWindowConfig::GetSubWindowOptionsDecorEnabled(napi_env env, napi_callback_info info)
236 {
237     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
238     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSubWindowOptionsDecorEnabled,
239         EXTENSION_WINDOW_CONFIG_NAME);
240 }
241 
OnGetSubWindowOptionsDecorEnabled(napi_env env,NapiCallbackInfo & info)242 napi_value JsExtensionWindowConfig::OnGetSubWindowOptionsDecorEnabled(napi_env env, NapiCallbackInfo& info)
243 {
244     return CreateJsValue(env, extensionWindowConfig_->subWindowOptions.decorEnabled);
245 }
246 
GetSubWindowOptionsIsModal(napi_env env,napi_callback_info info)247 napi_value JsExtensionWindowConfig::GetSubWindowOptionsIsModal(napi_env env, napi_callback_info info)
248 {
249     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
250     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSubWindowOptionsIsModal,
251         EXTENSION_WINDOW_CONFIG_NAME);
252 }
253 
OnGetSubWindowOptionsIsModal(napi_env env,NapiCallbackInfo & info)254 napi_value JsExtensionWindowConfig::OnGetSubWindowOptionsIsModal(napi_env env, NapiCallbackInfo& info)
255 {
256     return CreateJsValue(env, extensionWindowConfig_->subWindowOptions.isModal);
257 }
258 
GetSubWindowOptionsIsTopmost(napi_env env,napi_callback_info info)259 napi_value JsExtensionWindowConfig::GetSubWindowOptionsIsTopmost(napi_env env, napi_callback_info info)
260 {
261     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
262     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSubWindowOptionsIsTopmost,
263         EXTENSION_WINDOW_CONFIG_NAME);
264 }
265 
OnGetSubWindowOptionsIsTopmost(napi_env env,NapiCallbackInfo & info)266 napi_value JsExtensionWindowConfig::OnGetSubWindowOptionsIsTopmost(napi_env env, NapiCallbackInfo& info)
267 {
268     return CreateJsValue(env, extensionWindowConfig_->subWindowOptions.isTopmost);
269 }
270 
GetSystemWindowOptions(napi_env env,napi_callback_info info)271 napi_value JsExtensionWindowConfig::GetSystemWindowOptions(napi_env env, napi_callback_info info)
272 {
273     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
274     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSystemWindowOptions,
275         EXTENSION_WINDOW_CONFIG_NAME);
276 }
277 
OnGetSystemWindowOptions(napi_env env,NapiCallbackInfo & info)278 napi_value JsExtensionWindowConfig::OnGetSystemWindowOptions(napi_env env, NapiCallbackInfo& info)
279 {
280     napi_value objValue = nullptr;
281     napi_create_object(env, &objValue);
282     if (objValue == nullptr) {
283         TLOGE(WmsLogTag::WMS_UIEXT, "objValue is null.");
284         return NapiGetUndefined(env);
285     }
286     std::unique_ptr<JsExtensionWindowConfig> jsExtensionWindowConfig =
287         std::make_unique<JsExtensionWindowConfig>(extensionWindowConfig_);
288     SetNamedNativePointer(env, objValue, EXTENSION_WINDOW_CONFIG_NAME, jsExtensionWindowConfig.release(),
289         JsExtensionWindowConfig::Finalizer);
290     BindNativePropertys(env, objValue, "windowType", JsExtensionWindowConfig::GetSystemWindowOptionsWindowType,
291         JsExtensionWindowConfig::SetSystemWindowOptionsWindowType);
292     return objValue;
293 }
294 
GetSystemWindowOptionsWindowType(napi_env env,napi_callback_info info)295 napi_value JsExtensionWindowConfig::GetSystemWindowOptionsWindowType(napi_env env, napi_callback_info info)
296 {
297     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
298     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnGetSystemWindowOptionsWindowType,
299         EXTENSION_WINDOW_CONFIG_NAME);
300 }
301 
OnGetSystemWindowOptionsWindowType(napi_env env,NapiCallbackInfo & info)302 napi_value JsExtensionWindowConfig::OnGetSystemWindowOptionsWindowType(napi_env env, NapiCallbackInfo& info)
303 {
304     return CreateJsValue(env, extensionWindowConfig_->systemWindowOptions.windowType);
305 }
306 
SetWindowName(napi_env env,napi_callback_info info)307 napi_value JsExtensionWindowConfig::SetWindowName(napi_env env, napi_callback_info info)
308 {
309     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
310     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowName,
311         EXTENSION_WINDOW_CONFIG_NAME);
312 }
313 
OnSetWindowName(napi_env env,NapiCallbackInfo & info)314 napi_value JsExtensionWindowConfig::OnSetWindowName(napi_env env, NapiCallbackInfo& info)
315 {
316     if (info.argc < ARGC_ONE) {
317         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
318         return NapiGetUndefined(env);
319     }
320     napi_value result = info.argv[ARGC_ZERO];
321     std::string windowName;
322     if (!ConvertFromJsValue(env, result, windowName)) {
323         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert windowName");
324         return NapiGetUndefined(env);
325     }
326     extensionWindowConfig_->windowName = windowName;
327     return result;
328 }
329 
SetWindowAttribute(napi_env env,napi_callback_info info)330 napi_value JsExtensionWindowConfig::SetWindowAttribute(napi_env env, napi_callback_info info)
331 {
332     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
333     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowAttribute,
334         EXTENSION_WINDOW_CONFIG_NAME);
335 }
336 
OnSetWindowAttribute(napi_env env,NapiCallbackInfo & info)337 napi_value JsExtensionWindowConfig::OnSetWindowAttribute(napi_env env, NapiCallbackInfo& info)
338 {
339     if (info.argc < ARGC_ONE) {
340         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
341         return NapiGetUndefined(env);
342     }
343     napi_value result = info.argv[ARGC_ZERO];
344     int32_t value = 0;
345     if (!ConvertFromJsValue(env, result, value)) {
346         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert windowAttribute");
347         return NapiGetUndefined(env);
348     }
349     extensionWindowConfig_->windowAttribute = ExtensionWindowAttribute(value);
350     return result;
351 }
352 
SetWindowRect(napi_env env,napi_callback_info info)353 napi_value JsExtensionWindowConfig::SetWindowRect(napi_env env, napi_callback_info info)
354 {
355     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
356     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowRect,
357         EXTENSION_WINDOW_CONFIG_NAME);
358 }
359 
OnSetWindowRect(napi_env env,NapiCallbackInfo & info)360 napi_value JsExtensionWindowConfig::OnSetWindowRect(napi_env env, NapiCallbackInfo& info)
361 {
362     if (info.argc < ARGC_ONE) {
363         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
364         return NapiGetUndefined(env);
365     }
366     napi_value result = info.argv[ARGC_ZERO];
367     int32_t res = 0;
368     if (!ParseJsValue(result, env, "left", res)) {
369         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert left");
370         return NapiGetUndefined(env);
371     }
372     extensionWindowConfig_->windowRect.posX_ = res;
373     if (!ParseJsValue(result, env, "top", res)) {
374         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert top");
375         return NapiGetUndefined(env);
376     }
377     extensionWindowConfig_->windowRect.posY_ = res;
378     uint32_t ures = 0;
379     if (!ParseJsValue(result, env, "width", ures)) {
380         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert width");
381         return NapiGetUndefined(env);
382     }
383     extensionWindowConfig_->windowRect.width_ = ures;
384     if (!ParseJsValue(result, env, "height", ures)) {
385         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert height");
386         return NapiGetUndefined(env);
387     }
388     extensionWindowConfig_->windowRect.height_ = ures;
389     return result;
390 }
391 
SetWindowRectLeft(napi_env env,napi_callback_info info)392 napi_value JsExtensionWindowConfig::SetWindowRectLeft(napi_env env, napi_callback_info info)
393 {
394     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
395     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowRectLeft,
396         EXTENSION_WINDOW_CONFIG_NAME);
397 }
398 
OnSetWindowRectLeft(napi_env env,NapiCallbackInfo & info)399 napi_value JsExtensionWindowConfig::OnSetWindowRectLeft(napi_env env, NapiCallbackInfo& info)
400 {
401     if (info.argc < ARGC_ONE) {
402         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
403         return NapiGetUndefined(env);
404     }
405     napi_value result = info.argv[ARGC_ZERO];
406     int32_t left = 0;
407     if (!ConvertFromJsValue(env, result, left)) {
408         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert left");
409         return NapiGetUndefined(env);
410     }
411     extensionWindowConfig_->windowRect.posX_ = left;
412     return result;
413 }
414 
SetWindowRectTop(napi_env env,napi_callback_info info)415 napi_value JsExtensionWindowConfig::SetWindowRectTop(napi_env env, napi_callback_info info)
416 {
417     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
418     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowRectTop,
419         EXTENSION_WINDOW_CONFIG_NAME);
420 }
421 
OnSetWindowRectTop(napi_env env,NapiCallbackInfo & info)422 napi_value JsExtensionWindowConfig::OnSetWindowRectTop(napi_env env, NapiCallbackInfo& info)
423 {
424     if (info.argc < ARGC_ONE) {
425         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
426         return NapiGetUndefined(env);
427     }
428     napi_value result = info.argv[ARGC_ZERO];
429     int32_t top = 0;
430     if (!ConvertFromJsValue(env, result, top)) {
431         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert top");
432         return NapiGetUndefined(env);
433     }
434     extensionWindowConfig_->windowRect.posY_ = top;
435     return result;
436 }
437 
SetWindowRectWidth(napi_env env,napi_callback_info info)438 napi_value JsExtensionWindowConfig::SetWindowRectWidth(napi_env env, napi_callback_info info)
439 {
440     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
441     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowRectWidth,
442         EXTENSION_WINDOW_CONFIG_NAME);
443 }
444 
OnSetWindowRectWidth(napi_env env,NapiCallbackInfo & info)445 napi_value JsExtensionWindowConfig::OnSetWindowRectWidth(napi_env env, NapiCallbackInfo& info)
446 {
447     if (info.argc < ARGC_ONE) {
448         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
449         return NapiGetUndefined(env);
450     }
451     napi_value result = info.argv[ARGC_ZERO];
452     uint32_t width = 0;
453     if (!ConvertFromJsValue(env, result, width)) {
454         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert width");
455         return NapiGetUndefined(env);
456     }
457     extensionWindowConfig_->windowRect.width_ = width;
458     return result;
459 }
460 
SetWindowRectHeight(napi_env env,napi_callback_info info)461 napi_value JsExtensionWindowConfig::SetWindowRectHeight(napi_env env, napi_callback_info info)
462 {
463     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
464     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetWindowRectHeight,
465         EXTENSION_WINDOW_CONFIG_NAME);
466 }
467 
OnSetWindowRectHeight(napi_env env,NapiCallbackInfo & info)468 napi_value JsExtensionWindowConfig::OnSetWindowRectHeight(napi_env env, NapiCallbackInfo& info)
469 {
470     if (info.argc < ARGC_ONE) {
471         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
472         return NapiGetUndefined(env);
473     }
474     napi_value result = info.argv[ARGC_ZERO];
475     uint32_t height = 0;
476     if (!ConvertFromJsValue(env, result, height)) {
477         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert height");
478         return NapiGetUndefined(env);
479     }
480     extensionWindowConfig_->windowRect.height_ = height;
481     return result;
482 }
483 
SetSubWindowOptions(napi_env env,napi_callback_info info)484 napi_value JsExtensionWindowConfig::SetSubWindowOptions(napi_env env, napi_callback_info info)
485 {
486     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
487     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSubWindowOptions,
488         EXTENSION_WINDOW_CONFIG_NAME);
489 }
490 
OnSetSubWindowOptions(napi_env env,NapiCallbackInfo & info)491 napi_value JsExtensionWindowConfig::OnSetSubWindowOptions(napi_env env, NapiCallbackInfo& info)
492 {
493     if (info.argc < ARGC_ONE) {
494         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
495         return NapiGetUndefined(env);
496     }
497     napi_value result = info.argv[ARGC_ZERO];
498     std::string title;
499     if (!ParseJsValue(result, env, "title", title)) {
500         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert title");
501         return NapiGetUndefined(env);
502     }
503     extensionWindowConfig_->subWindowOptions.title = title;
504 
505     bool decorEnabled = false;
506     if (!ParseJsValue(result, env, "decorEnabled", decorEnabled)) {
507         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert decorEnabled");
508         return NapiGetUndefined(env);
509     }
510     extensionWindowConfig_->subWindowOptions.decorEnabled = decorEnabled;
511 
512     bool isModal = false;
513     if (!ParseJsValue(result, env, "isModal", isModal)) {
514         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert isModal");
515         return NapiGetUndefined(env);
516     }
517     extensionWindowConfig_->subWindowOptions.isModal = isModal;
518 
519     bool isTopmost = false;
520     if (!ParseJsValue(result, env, "isTopmost", isTopmost)) {
521         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert isTopmost");
522         return NapiGetUndefined(env);
523     }
524     extensionWindowConfig_->subWindowOptions.isTopmost = isTopmost;
525     return result;
526 }
527 
SetSubWindowOptionsTitle(napi_env env,napi_callback_info info)528 napi_value JsExtensionWindowConfig::SetSubWindowOptionsTitle(napi_env env, napi_callback_info info)
529 {
530     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
531     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSubWindowOptionsTitle,
532         EXTENSION_WINDOW_CONFIG_NAME);
533 }
534 
OnSetSubWindowOptionsTitle(napi_env env,NapiCallbackInfo & info)535 napi_value JsExtensionWindowConfig::OnSetSubWindowOptionsTitle(napi_env env, NapiCallbackInfo& info)
536 {
537     if (info.argc < ARGC_ONE) {
538         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
539         return NapiGetUndefined(env);
540     }
541     napi_value result = info.argv[ARGC_ZERO];
542     std::string title;
543     if (!ConvertFromJsValue(env, result, title)) {
544         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert title");
545         return NapiGetUndefined(env);
546     }
547     extensionWindowConfig_->subWindowOptions.title = title;
548     return result;
549 }
550 
551 
SetSubWindowOptionsDecorEnabled(napi_env env,napi_callback_info info)552 napi_value JsExtensionWindowConfig::SetSubWindowOptionsDecorEnabled(napi_env env, napi_callback_info info)
553 {
554     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
555     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSubWindowOptionsDecorEnabled,
556         EXTENSION_WINDOW_CONFIG_NAME);
557 }
558 
OnSetSubWindowOptionsDecorEnabled(napi_env env,NapiCallbackInfo & info)559 napi_value JsExtensionWindowConfig::OnSetSubWindowOptionsDecorEnabled(napi_env env, NapiCallbackInfo& info)
560 {
561     if (info.argc < ARGC_ONE) {
562         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
563         return NapiGetUndefined(env);
564     }
565     napi_value result = info.argv[ARGC_ZERO];
566     bool decorEnabled = false;
567     if (!ConvertFromJsValue(env, result, decorEnabled)) {
568         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert decorEnabled");
569         return NapiGetUndefined(env);
570     }
571     extensionWindowConfig_->subWindowOptions.decorEnabled = decorEnabled;
572     return result;
573 }
574 
SetSubWindowOptionsIsModal(napi_env env,napi_callback_info info)575 napi_value JsExtensionWindowConfig::SetSubWindowOptionsIsModal(napi_env env, napi_callback_info info)
576 {
577     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
578     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSubWindowOptionsIsModal,
579         EXTENSION_WINDOW_CONFIG_NAME);
580 }
581 
OnSetSubWindowOptionsIsModal(napi_env env,NapiCallbackInfo & info)582 napi_value JsExtensionWindowConfig::OnSetSubWindowOptionsIsModal(napi_env env, NapiCallbackInfo& info)
583 {
584     if (info.argc < ARGC_ONE) {
585         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
586         return NapiGetUndefined(env);
587     }
588     napi_value result = info.argv[ARGC_ZERO];
589     bool isModal = false;
590     if (!ConvertFromJsValue(env, result, isModal)) {
591         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert isModal");
592         return NapiGetUndefined(env);
593     }
594     extensionWindowConfig_->subWindowOptions.isModal = isModal;
595     return result;
596 }
597 
SetSubWindowOptionsIsTopmost(napi_env env,napi_callback_info info)598 napi_value JsExtensionWindowConfig::SetSubWindowOptionsIsTopmost(napi_env env, napi_callback_info info)
599 {
600     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
601     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSubWindowOptionsIsTopmost,
602         EXTENSION_WINDOW_CONFIG_NAME);
603 }
604 
OnSetSubWindowOptionsIsTopmost(napi_env env,NapiCallbackInfo & info)605 napi_value JsExtensionWindowConfig::OnSetSubWindowOptionsIsTopmost(napi_env env, NapiCallbackInfo& info)
606 {
607     if (info.argc < ARGC_ONE) {
608         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
609         return NapiGetUndefined(env);
610     }
611     napi_value result = info.argv[ARGC_ZERO];
612     bool isTopmost = false;
613     if (!ConvertFromJsValue(env, result, isTopmost)) {
614         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert isTopmost");
615         return NapiGetUndefined(env);
616     }
617     extensionWindowConfig_->subWindowOptions.isTopmost = isTopmost;
618     return result;
619 }
620 
SetSystemWindowOptions(napi_env env,napi_callback_info info)621 napi_value JsExtensionWindowConfig::SetSystemWindowOptions(napi_env env, napi_callback_info info)
622 {
623     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
624     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSystemWindowOptions,
625         EXTENSION_WINDOW_CONFIG_NAME);
626 }
627 
OnSetSystemWindowOptions(napi_env env,NapiCallbackInfo & info)628 napi_value JsExtensionWindowConfig::OnSetSystemWindowOptions(napi_env env, NapiCallbackInfo& info)
629 {
630     if (info.argc < ARGC_ONE) {
631         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
632         return NapiGetUndefined(env);
633     }
634     napi_value result = info.argv[ARGC_ZERO];
635     int32_t windowType = 0;
636     if (!ParseJsValue(result, env, "windowType", windowType)) {
637         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert windowType");
638         return NapiGetUndefined(env);
639     }
640     extensionWindowConfig_->systemWindowOptions.windowType = windowType;
641     return result;
642 }
643 
SetSystemWindowOptionsWindowType(napi_env env,napi_callback_info info)644 napi_value JsExtensionWindowConfig::SetSystemWindowOptionsWindowType(napi_env env, napi_callback_info info)
645 {
646     TLOGD(WmsLogTag::WMS_UIEXT, "[NAPI]");
647     GET_NAPI_INFO_WITH_NAME_AND_CALL(env, info, JsExtensionWindowConfig, OnSetSystemWindowOptionsWindowType,
648         EXTENSION_WINDOW_CONFIG_NAME);
649 }
650 
OnSetSystemWindowOptionsWindowType(napi_env env,NapiCallbackInfo & info)651 napi_value JsExtensionWindowConfig::OnSetSystemWindowOptionsWindowType(napi_env env, NapiCallbackInfo& info)
652 {
653     if (info.argc < ARGC_ONE) {
654         TLOGE(WmsLogTag::WMS_UIEXT, "info argc less then one.");
655         return NapiGetUndefined(env);
656     }
657     napi_value result = info.argv[ARGC_ZERO];
658     int32_t windowType = 0;
659     if (!ConvertFromJsValue(env, result, windowType)) {
660         TLOGE(WmsLogTag::WMS_UIEXT, "failed to convert windowType");
661         return NapiGetUndefined(env);
662     }
663     extensionWindowConfig_->systemWindowOptions.windowType = windowType;
664     return result;
665 }
666 } // namespace Rosen
667 } // namespace OHOS