1 /* 2 * Copyright (c) 2023-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 #ifndef INTERFACES_KITS_BUNDLE_MANAGER_INCLUDE_BUNDLE_MANAGER_ADDON_H 17 #define INTERFACES_KITS_BUNDLE_MANAGER_INCLUDE_BUNDLE_MANAGER_ADDON_H 18 19 #include "bundle_manager_proxy.h" 20 #include "edm_errors.h" 21 #include "napi/native_api.h" 22 #include "napi/native_common.h" 23 #include "napi/native_node_api.h" 24 #include "napi_edm_common.h" 25 #include "napi_edm_error.h" 26 #include "want.h" 27 #include "edm_bundle_info.h" 28 #include "func_code.h" 29 30 namespace OHOS { 31 namespace EDM { 32 struct AsyncBundlesCallbackInfo : AsyncCallbackInfo { 33 OHOS::AppExecFwk::ElementName elementName; 34 std::vector<std::string> bundles; 35 int32_t userId = 0; 36 int32_t policyType = 0; 37 }; 38 39 struct AsyncUninstallCallbackInfo : AsyncCallbackInfo { 40 OHOS::AppExecFwk::ElementName elementName; 41 std::string bundleName; 42 int32_t userId = 0; 43 bool isKeepData = false; 44 }; 45 46 struct AsyncBundleInfoCallbackInfo : AsyncCallbackInfo { 47 OHOS::AppExecFwk::ElementName elementName; 48 int32_t userId = 0; 49 std::vector<EdmBundleInfo> bundleInfos; 50 }; 51 52 #ifdef BUNDLE_FRAMEWORK_EDM_ENABLE 53 struct AsyncInstallCallbackInfo : AsyncCallbackInfo { 54 OHOS::AppExecFwk::ElementName elementName; 55 std::vector<std::string> hapFilePaths; 56 OHOS::AppExecFwk::InstallParam installParam; 57 }; 58 #endif 59 60 class BundleManagerAddon { 61 public: 62 BundleManagerAddon(); 63 ~BundleManagerAddon() = default; 64 65 static napi_value Init(napi_env env, napi_value exports); 66 67 static napi_value AddAllowedInstallBundles(napi_env env, napi_callback_info info); 68 static napi_value RemoveAllowedInstallBundles(napi_env env, napi_callback_info info); 69 static napi_value GetAllowedInstallBundles(napi_env env, napi_callback_info info); 70 static napi_value AddDisallowedInstallBundles(napi_env env, napi_callback_info info); 71 static napi_value RemoveDisallowedInstallBundles(napi_env env, napi_callback_info info); 72 static napi_value GetDisallowedInstallBundles(napi_env env, napi_callback_info info); 73 static napi_value AddDisallowedUninstallBundles(napi_env env, napi_callback_info info); 74 static napi_value RemoveDisallowedUninstallBundles(napi_env env, napi_callback_info info); 75 static napi_value GetDisallowedUninstallBundles(napi_env env, napi_callback_info info); 76 static napi_value Uninstall(napi_env env, napi_callback_info info); 77 static napi_value Install(napi_env env, napi_callback_info info); 78 static napi_value AddAllowedInstallBundlesSync(napi_env env, napi_callback_info info); 79 static napi_value RemoveAllowedInstallBundlesSync(napi_env env, napi_callback_info info); 80 static napi_value GetAllowedInstallBundlesSync(napi_env env, napi_callback_info info); 81 static napi_value AddDisallowedInstallBundlesSync(napi_env env, napi_callback_info info); 82 static napi_value RemoveDisallowedInstallBundlesSync(napi_env env, napi_callback_info info); 83 static napi_value GetDisallowedInstallBundlesSync(napi_env env, napi_callback_info info); 84 static napi_value AddDisallowedUninstallBundlesSync(napi_env env, napi_callback_info info); 85 static napi_value RemoveDisallowedUninstallBundlesSync(napi_env env, napi_callback_info info); 86 static napi_value GetDisallowedUninstallBundlesSync(napi_env env, napi_callback_info info); 87 static napi_value GetInstalledBundleList(napi_env env, napi_callback_info info); 88 static napi_value AddInstallationAllowedAppDistributionTypes(napi_env env, napi_callback_info info); 89 static napi_value RemoveInstallationAllowedAppDistributionTypes(napi_env env, napi_callback_info info); 90 static napi_value AddOrRemoveInstallationAllowedAppDistributionTypes(napi_env env, napi_callback_info info, 91 FuncOperateType operateType); 92 static napi_value GetInstallationAllowedAppDistributionTypes(napi_env env, napi_callback_info info); 93 94 private: 95 static napi_value AddOrRemoveInstallBundles(napi_env env, napi_callback_info info, const std::string &workName, 96 napi_async_execute_callback execute); 97 static napi_value GetAllowedOrDisallowedInstallBundles(napi_env env, napi_callback_info info, 98 const std::string &workName, napi_async_execute_callback execute); 99 100 static void NativeAddBundlesByPolicyType(napi_env env, void *data); 101 static void NativeRemoveBundlesByPolicyType(napi_env env, void *data); 102 static void NativeGetBundlesByPolicyType(napi_env env, void *data); 103 static void InitCallbackInfoPolicyType(const std::string &workName, AsyncBundlesCallbackInfo *callback); 104 static void NativeUninstall(napi_env env, void *data); 105 static void NativeUninstallCallbackComplete(napi_env env, napi_status status, void *data); 106 static void NativeInstall(napi_env env, void *data); 107 static void NativeGetInstalledBundleList(napi_env env, void *data); 108 static void NativeGetInstalledBundleListComplete(napi_env env, napi_status status, void *data); 109 static bool CheckAddInstallBundlesParamType(napi_env env, size_t argc, napi_value *argv, bool &hasCallback, 110 bool &hasUserId); 111 static bool CheckAndParseUninstallParamType(napi_env env, size_t argc, napi_value *argv, 112 AsyncUninstallCallbackInfo *asyncCallbackInfo); 113 static void CreateAppDistributionTypeObject(napi_env env, napi_value value); 114 #ifdef BUNDLE_FRAMEWORK_EDM_ENABLE 115 static bool CheckAndParseInstallParamType(napi_env env, size_t argc, napi_value *argv, 116 AsyncInstallCallbackInfo *asyncCallbackInfo); 117 static bool jsObjectToInstallParam(napi_env env, napi_value object, OHOS::AppExecFwk::InstallParam &installParam); 118 static bool ParseParameters(napi_env env, napi_value object, std::map<std::string, std::string> ¶meters); 119 static void ConvertVectorBundleToJs(napi_env env, const std::vector<EdmBundleInfo> &bundleVector, 120 napi_value &result); 121 static void ConvertResource(napi_env env, const EdmResource &resource, napi_value objResource); 122 static void ConvertApplicationInfo(napi_env env, napi_value objAppInfo, const EdmApplicationInfo &appInfo); 123 static void ConvertSignatureInfo(napi_env env, const EdmSignatureInfo &signatureInfo, napi_value value); 124 static void ConvertBundleInfo(napi_env env, const EdmBundleInfo &bundleInfo, napi_value objBundleInfo); 125 #endif 126 static napi_value AddOrRemoveInstallBundlesSync(napi_env env, napi_callback_info info, const std::string &workName, 127 bool isAdd); 128 static void InitPolicyType(const std::string &workName, int32_t &policyType); 129 static napi_value GetAllowedOrDisallowedInstallBundlesSync(napi_env env, napi_callback_info info, 130 const std::string &workName); 131 }; 132 } // namespace EDM 133 } // namespace OHOS 134 135 #endif // INTERFACES_KITS_BUNDLE_MANAGER_INCLUDE_BUNDLE_MANAGER_ADDON_H 136