1 /*
2 * Copyright (c) 2022-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_ability_manager_utils.h"
17
18 #include <cstdint>
19
20 #include "ability_state.h"
21 #include "hilog_tag_wrapper.h"
22 #include "js_runtime.h"
23 #include "js_runtime_utils.h"
24 #include "napi_common_want.h"
25 #include "napi_remote_object.h"
26
27 namespace OHOS {
28 namespace AbilityRuntime {
CreateJSToken(napi_env env,const sptr<IRemoteObject> target)29 napi_value CreateJSToken(napi_env env, const sptr<IRemoteObject> target)
30 {
31 napi_value tokenClass = nullptr;
32 auto constructorcb = [](napi_env env, napi_callback_info info) -> napi_value {
33 napi_value thisVar = nullptr;
34 napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
35 return thisVar;
36 };
37 napi_define_class(
38 env, "TokenClass", NAPI_AUTO_LENGTH, constructorcb, nullptr, 0, nullptr, &tokenClass);
39 napi_value jsToken = nullptr;
40 napi_new_instance(env, tokenClass, 0, nullptr, &jsToken);
41 auto finalizecb = [](napi_env env, void *data, void *hint) {};
42 napi_wrap(env, jsToken, static_cast<void *>(target.GetRefPtr()), finalizecb, nullptr, nullptr);
43 return jsToken;
44 }
45
CreateJsAbilityRunningInfoArray(napi_env env,const std::vector<AAFwk::AbilityRunningInfo> & infos)46 napi_value CreateJsAbilityRunningInfoArray(napi_env env, const std::vector<AAFwk::AbilityRunningInfo> &infos)
47 {
48 napi_value arrayValue = nullptr;
49 napi_create_array_with_length(env, infos.size(), &arrayValue);
50 uint32_t index = 0;
51 for (const auto &runningInfo : infos) {
52 napi_set_element(env, arrayValue, index++, CreateJsAbilityRunningInfo(env, runningInfo));
53 }
54 return arrayValue;
55 }
56
CreateJsElementName(napi_env env,const AppExecFwk::ElementName & elementName)57 napi_value CreateJsElementName(napi_env env, const AppExecFwk::ElementName &elementName)
58 {
59 return OHOS::AppExecFwk::WrapElementName(env, elementName);
60 }
61
CreateJsExtensionRunningInfoArray(napi_env env,const std::vector<AAFwk::ExtensionRunningInfo> & infos)62 napi_value CreateJsExtensionRunningInfoArray(napi_env env, const std::vector<AAFwk::ExtensionRunningInfo> &infos)
63 {
64 napi_value arrayValue = nullptr;
65 napi_create_array_with_length(env, infos.size(), &arrayValue);
66 uint32_t index = 0;
67 for (const auto &runningInfo : infos) {
68 napi_set_element(env, arrayValue, index++, CreateJsExtensionRunningInfo(env, runningInfo));
69 }
70 return arrayValue;
71 }
72
CreateJsAbilityRunningInfo(napi_env env,const AAFwk::AbilityRunningInfo & info)73 napi_value CreateJsAbilityRunningInfo(napi_env env, const AAFwk::AbilityRunningInfo &info)
74 {
75 napi_value objValue = nullptr;
76 napi_create_object(env, &objValue);
77
78 napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(env, info.ability);
79 napi_set_named_property(env, objValue, "ability", napiElementName);
80 napi_set_named_property(env, objValue, "pid", CreateJsValue(env, info.pid));
81 napi_set_named_property(env, objValue, "uid", CreateJsValue(env, info.uid));
82 napi_set_named_property(env, objValue, "processName", CreateJsValue(env, info.processName));
83 napi_set_named_property(env, objValue, "startTime", CreateJsValue(env, info.startTime));
84 napi_set_named_property(env, objValue, "abilityState", CreateJsValue(env, info.abilityState));
85 return objValue;
86 }
87
CreateJsExtensionRunningInfo(napi_env env,const AAFwk::ExtensionRunningInfo & info)88 napi_value CreateJsExtensionRunningInfo(napi_env env, const AAFwk::ExtensionRunningInfo &info)
89 {
90 napi_value objValue = nullptr;
91 napi_create_object(env, &objValue);
92
93 napi_value napiElementName = OHOS::AppExecFwk::WrapElementName(env, info.extension);
94 napi_set_named_property(env, objValue, "extension", napiElementName);
95 napi_set_named_property(env, objValue, "pid", CreateJsValue(env, info.pid));
96 napi_set_named_property(env, objValue, "uid", CreateJsValue(env, info.uid));
97 napi_set_named_property(env, objValue, "type", CreateJsValue(env, info.type));
98 napi_set_named_property(env, objValue, "processName", CreateJsValue(env, info.processName));
99 napi_set_named_property(env, objValue, "startTime", CreateJsValue(env, info.startTime));
100 napi_set_named_property(env, objValue, "clientPackage", CreateNativeArray(env, info.clientPackage));
101 return objValue;
102 }
103
AbilityStateInit(napi_env env)104 napi_value AbilityStateInit(napi_env env)
105 {
106 TAG_LOGD(AAFwkTag::ABILITYMGR, "called");
107 napi_value objValue = nullptr;
108 napi_create_object(env, &objValue);
109
110 napi_set_named_property(env, objValue, "INITIAL", CreateJsValue(env, AAFwk::AbilityState::INITIAL));
111 napi_set_named_property(env, objValue, "FOCUS", CreateJsValue(env, AAFwk::AbilityState::ACTIVE));
112 napi_set_named_property(env, objValue, "FOREGROUND", CreateJsValue(env, AAFwk::AbilityState::FOREGROUND));
113 napi_set_named_property(env, objValue, "BACKGROUND", CreateJsValue(env, AAFwk::AbilityState::BACKGROUND));
114 napi_set_named_property(env, objValue, "FOREGROUNDING", CreateJsValue(env, AAFwk::AbilityState::FOREGROUNDING));
115 napi_set_named_property(env, objValue, "BACKGROUNDING", CreateJsValue(env, AAFwk::AbilityState::BACKGROUNDING));
116 return objValue;
117 }
118
UserStatusInit(napi_env env)119 napi_value UserStatusInit(napi_env env)
120 {
121 TAG_LOGD(AAFwkTag::ABILITYMGR, "called");
122 napi_value objValue = nullptr;
123 napi_create_object(env, &objValue);
124
125 napi_set_named_property(
126 env, objValue, "ASSERT_TERMINATE", CreateJsValue(env, AAFwk::UserStatus::ASSERT_TERMINATE));
127 napi_set_named_property(env, objValue, "ASSERT_CONTINUE", CreateJsValue(env, AAFwk::UserStatus::ASSERT_CONTINUE));
128 napi_set_named_property(env, objValue, "ASSERT_RETRY", CreateJsValue(env, AAFwk::UserStatus::ASSERT_RETRY));
129 return objValue;
130 }
131
CreateJsAbilityStateData(napi_env env,const AbilityStateData & abilityStateData)132 napi_value CreateJsAbilityStateData(napi_env env, const AbilityStateData &abilityStateData)
133 {
134 TAG_LOGD(AAFwkTag::ABILITYMGR, "called");
135 napi_value object = nullptr;
136 napi_create_object(env, &object);
137 if (object == nullptr) {
138 TAG_LOGE(AAFwkTag::ABILITYMGR, "null ObjValue");
139 return nullptr;
140 }
141 napi_set_named_property(env, object, "bundleName", CreateJsValue(env, abilityStateData.bundleName));
142 napi_set_named_property(env, object, "moduleName", CreateJsValue(env, abilityStateData.moduleName));
143 napi_set_named_property(env, object, "abilityName", CreateJsValue(env, abilityStateData.abilityName));
144 napi_set_named_property(env, object, "pid", CreateJsValue(env, abilityStateData.pid));
145 napi_set_named_property(env, object, "uid", CreateJsValue(env, abilityStateData.uid));
146 napi_set_named_property(env, object, "state", CreateJsValue(env, abilityStateData.abilityState));
147 napi_set_named_property(env, object, "abilityType", CreateJsValue(env, abilityStateData.abilityType));
148 napi_set_named_property(env, object, "isAtomicService", CreateJsValue(env, abilityStateData.isAtomicService));
149 if (abilityStateData.appCloneIndex != -1) {
150 napi_set_named_property(env, object, "appCloneIndex", CreateJsValue(env, abilityStateData.appCloneIndex));
151 }
152 return object;
153 }
154
CreateJsAbilityStateDataArray(napi_env env,const std::vector<AppExecFwk::AbilityStateData> & abilityStateDatas)155 napi_value CreateJsAbilityStateDataArray(
156 napi_env env, const std::vector<AppExecFwk::AbilityStateData> &abilityStateDatas)
157 {
158 napi_value arrayValue = nullptr;
159 napi_create_array_with_length(env, abilityStateDatas.size(), &arrayValue);
160 uint32_t index = 0;
161 for (const auto &abilityStateData : abilityStateDatas) {
162 napi_set_element(env, arrayValue, index++, CreateJsAbilityStateData(env, abilityStateData));
163 }
164 return arrayValue;
165 }
166 } // namespace AbilityRuntime
167 } // namespace OHOS
168