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