1 /*
2  * Copyright (c) 2023-2023 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 #ifndef OHOS_JS_EXTENSION_WINDOW_H
17 #define OHOS_JS_EXTENSION_WINDOW_H
18 
19 #include "extension_window.h"
20 #include "extension_window_impl.h"
21 #include "js_extension_window_register_manager.h"
22 #include "native_engine/native_engine.h"
23 #include "native_engine/native_reference.h"
24 #include "native_engine/native_value.h"
25 #include "session_info.h"
26 
27 namespace OHOS {
28 namespace Rosen {
29 napi_valuetype GetType(napi_env env, napi_value value);
30 class JsExtensionWindow {
31 public:
32     explicit JsExtensionWindow(const std::shared_ptr<Rosen::ExtensionWindow> extensionWindow, int32_t hostWindowId);
33     JsExtensionWindow(const std::shared_ptr<Rosen::ExtensionWindow> extensionWindow,
34         sptr<AAFwk::SessionInfo> sessionInfo);
35     ~JsExtensionWindow();
36     static napi_value CreateJsExtensionWindow(napi_env env, sptr<Rosen::Window> window, int32_t hostWindowId);
37     static napi_value CreateJsExtensionWindowObject(napi_env env, sptr<Rosen::Window> window,
38     sptr<AAFwk::SessionInfo> sessionInfo);
39     static void Finalizer(napi_env env, void* data, void* hint);
40     static napi_value GetWindowAvoidArea(napi_env env, napi_callback_info info);
41     static napi_value RegisterExtensionWindowCallback(napi_env env, napi_callback_info info);
42     static napi_value UnRegisterExtensionWindowCallback(napi_env env, napi_callback_info info);
43     static napi_value HideNonSecureWindows(napi_env env, napi_callback_info info);
44     static napi_value LoadContent(napi_env env, napi_callback_info info);
45     static napi_value LoadContentByName(napi_env env, napi_callback_info info);
46     static napi_value ShowWindow(napi_env env, napi_callback_info info);
47     static napi_value IsWindowShowingSync(napi_env env, napi_callback_info info);
48     static napi_value SetUIContent(napi_env env, napi_callback_info info);
49     static napi_value DestroyWindow(napi_env env, napi_callback_info info);
50     static napi_value SetWindowBackgroundColorSync(napi_env env, napi_callback_info info);
51     static napi_value GetWindowPropertiesSync(napi_env env, napi_callback_info info);
52     static napi_value MoveWindowTo(napi_env env, napi_callback_info info);
53     static napi_value ResizeWindow(napi_env env, napi_callback_info info);
54     static napi_value SetSpecificSystemBarEnabled(napi_env env, napi_callback_info info);
55     static napi_value SetPreferredOrientation(napi_env env, napi_callback_info info);
56     static napi_value GetPreferredOrientation(napi_env env, napi_callback_info info);
57     static napi_value GetUIContext(napi_env env, napi_callback_info info);
58     static napi_value SetWindowBrightness(napi_env env, napi_callback_info info);
59     static napi_value SetWindowKeepScreenOn(napi_env env, napi_callback_info info);
60     static napi_value CreateSubWindowWithOptions(napi_env env, napi_callback_info info);
61     static napi_value SetWaterMarkFlag(napi_env env, napi_callback_info info);
62     static napi_value HidePrivacyContentForHost(napi_env env, napi_callback_info info);
63 
64 private:
65     napi_value OnGetWindowAvoidArea(napi_env env, napi_callback_info info);
66     napi_value OnRegisterRectChangeCallback(napi_env env, size_t argc, napi_value* argv,
67         const sptr<Window>& windowImpl);
68     napi_value OnRegisterExtensionWindowCallback(napi_env env, napi_callback_info info);
69     napi_value OnUnRegisterExtensionWindowCallback(napi_env env, napi_callback_info info);
70     napi_value OnHideNonSecureWindows(napi_env env, napi_callback_info info);
71     napi_value OnLoadContent(napi_env env, napi_callback_info info, bool isLoadedByName);
72     napi_value OnShowWindow(napi_env env, napi_callback_info info);
73     napi_value OnIsWindowShowingSync(napi_env env, napi_callback_info info);
74     napi_value OnSetUIContent(napi_env env, napi_callback_info info);
75     napi_value OnDestroyWindow(napi_env env, napi_callback_info info);
76     napi_value OnSetWindowBackgroundColorSync(napi_env env, napi_callback_info info);
77     napi_value OnGetWindowPropertiesSync(napi_env env, napi_callback_info info);
78     napi_value OnMoveWindowTo(napi_env env, napi_callback_info info);
79     napi_value OnResizeWindow(napi_env env, napi_callback_info info);
80     napi_value OnSetSpecificSystemBarEnabled(napi_env env, napi_callback_info info);
81     napi_value OnSetPreferredOrientation(napi_env env, napi_callback_info info);
82     napi_value OnGetPreferredOrientation(napi_env env, napi_callback_info info);
83     napi_value OnGetUIContext(napi_env env, napi_callback_info info);
84     napi_value OnSetWindowBrightness(napi_env env, napi_callback_info info);
85     napi_value OnSetWindowKeepScreenOn(napi_env env, napi_callback_info info);
86     napi_value OnSetWaterMarkFlag(napi_env env, napi_callback_info info);
87     napi_value OnHidePrivacyContentForHost(napi_env env, napi_callback_info info);
88 
89     napi_value OnCreateSubWindowWithOptions(napi_env env, napi_callback_info info);
90 
91     static napi_value GetProperties(napi_env env, napi_callback_info info);
92 
93     std::shared_ptr<Rosen::ExtensionWindow> extensionWindow_;
94     int32_t hostWindowId_ = 0;
95     sptr<AAFwk::SessionInfo> sessionInfo_ = nullptr;
96     std::unique_ptr<JsExtensionWindowRegisterManager> extensionRegisterManager_ = nullptr;
97     static inline const std::string RECT_CHANGE = "rectChange";
98 };
99 }  // namespace Rosen
100 }  // namespace OHOS
101 #endif  // OHOS_JS_EXTENSION_WINDOW_H
102