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 #ifndef BUNDLE_FRAMEWORK_INTERFACES_KITS_JS_BUNDLE_MANAGER_BUNDLE_MANAGER_H 17 #define BUNDLE_FRAMEWORK_INTERFACES_KITS_JS_BUNDLE_MANAGER_BUNDLE_MANAGER_H 18 19 #include "ability_info.h" 20 #include "app_provision_info.h" 21 #include "base_cb_info.h" 22 #include "bundle_constants.h" 23 #include "bundle_info.h" 24 #include "bundle_mgr_interface.h" 25 #include "clean_cache_callback.h" 26 #include "common_event_manager.h" 27 #include "common_event_subscriber.h" 28 #include "common_event_support.h" 29 #include "dynamic_icon_info.h" 30 #include "napi/native_api.h" 31 #include "napi/native_common.h" 32 #include "napi/native_node_api.h" 33 #include "plugin/plugin_bundle_info.h" 34 #ifdef BUNDLE_FRAMEWORK_GET_ABILITY_ICON_ENABLED 35 #include "pixel_map.h" 36 #endif 37 #include "preinstalled_application_info.h" 38 #include "process_cache_callback_host.h" 39 #include "recoverable_application_info.h" 40 #include "shared/shared_bundle_info.h" 41 #include "want.h" 42 43 namespace OHOS { 44 namespace AppExecFwk { 45 class ClearCacheListener final : public EventFwk::CommonEventSubscriber { 46 public: 47 explicit ClearCacheListener(const EventFwk::CommonEventSubscribeInfo &subscribeInfo); 48 virtual ~ClearCacheListener() = default; 49 void OnReceiveEvent(const EventFwk::CommonEventData &data) override; 50 static void HandleCleanEnv(void *data); 51 }; 52 struct GetBundleArchiveInfoCallbackInfo : public BaseCallbackInfo { GetBundleArchiveInfoCallbackInfoGetBundleArchiveInfoCallbackInfo53 explicit GetBundleArchiveInfoCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 54 55 int32_t flags = 0; 56 std::string hapFilePath; 57 BundleInfo bundleInfo; 58 }; 59 struct GetBundleNameByUidCallbackInfo : public BaseCallbackInfo { GetBundleNameByUidCallbackInfoGetBundleNameByUidCallbackInfo60 explicit GetBundleNameByUidCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 61 62 int32_t uid = 0; 63 std::string bundleName; 64 }; 65 struct GetAppCloneIdentityCallbackInfo : public GetBundleNameByUidCallbackInfo { GetAppCloneIdentityCallbackInfoGetAppCloneIdentityCallbackInfo66 explicit GetAppCloneIdentityCallbackInfo(napi_env env) : GetBundleNameByUidCallbackInfo(env) {} 67 68 int32_t appIndex = 0; 69 }; 70 struct AbilityCallbackInfo : public BaseCallbackInfo { AbilityCallbackInfoAbilityCallbackInfo71 explicit AbilityCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 72 73 bool isSavedInCache = false; 74 int32_t flags = 0; 75 int32_t userId = Constants::UNSPECIFIED_USERID; 76 std::vector<AbilityInfo> abilityInfos; 77 OHOS::AAFwk::Want want; 78 }; 79 80 struct GetAbilityCallbackInfo : public BaseCallbackInfo { GetAbilityCallbackInfoGetAbilityCallbackInfo81 explicit GetAbilityCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 82 83 bool isSavedInCache = false; 84 uint32_t flags = 0; 85 std::vector<AbilityInfo> abilityInfos; 86 std::string uri; 87 }; 88 89 struct BatchAbilityCallbackInfo : public BaseCallbackInfo { BatchAbilityCallbackInfoBatchAbilityCallbackInfo90 explicit BatchAbilityCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 91 92 bool isSavedInCache = false; 93 int32_t flags = 0; 94 int32_t userId = Constants::UNSPECIFIED_USERID; 95 std::vector<AbilityInfo> abilityInfos; 96 std::vector<OHOS::AAFwk::Want> wants; 97 }; 98 99 struct ExtensionCallbackInfo : public BaseCallbackInfo { ExtensionCallbackInfoExtensionCallbackInfo100 explicit ExtensionCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 101 102 bool isSavedInCache = false; 103 int32_t extensionAbilityType = static_cast<int32_t>(ExtensionAbilityType::UNSPECIFIED); 104 int32_t flags = 0; 105 int32_t userId = Constants::UNSPECIFIED_USERID; 106 std::vector<ExtensionAbilityInfo> extensionInfos; 107 OHOS::AAFwk::Want want; 108 }; 109 110 struct CleanBundleCacheCallbackInfo : public BaseCallbackInfo { CleanBundleCacheCallbackInfoCleanBundleCacheCallbackInfo111 explicit CleanBundleCacheCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 112 std::string bundleName; 113 int32_t appIndex = 0; 114 OHOS::sptr<CleanCacheCallback> cleanCacheCallback; 115 }; 116 117 struct GetAllBundleCacheCallbackInfo : public BaseCallbackInfo { GetAllBundleCacheCallbackInfoGetAllBundleCacheCallbackInfo118 explicit GetAllBundleCacheCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 119 120 uint64_t cacheSize = 0; 121 OHOS::sptr<ProcessCacheCallbackHost> cacheCallback; 122 }; 123 124 struct CleanAllBundleCacheCallbackInfo : public BaseCallbackInfo { CleanAllBundleCacheCallbackInfoCleanAllBundleCacheCallbackInfo125 explicit CleanAllBundleCacheCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 126 127 OHOS::sptr<ProcessCacheCallbackHost> cacheCallback; 128 }; 129 130 struct AbilityIconCallbackInfo : public BaseCallbackInfo { AbilityIconCallbackInfoAbilityIconCallbackInfo131 explicit AbilityIconCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 132 std::string bundleName; 133 std::string moduleName; 134 std::string abilityName; 135 #ifdef BUNDLE_FRAMEWORK_GET_ABILITY_ICON_ENABLED 136 std::shared_ptr<Media::PixelMap> pixelMap = nullptr; 137 #endif 138 }; 139 140 struct AbilityLabelCallbackInfo : public BaseCallbackInfo { AbilityLabelCallbackInfoAbilityLabelCallbackInfo141 explicit AbilityLabelCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 142 std::string bundleName; 143 std::string moduleName; 144 std::string abilityName; 145 std::string abilityLabel; 146 }; 147 148 struct ApplicationEnableCallbackInfo : public BaseCallbackInfo { ApplicationEnableCallbackInfoApplicationEnableCallbackInfo149 explicit ApplicationEnableCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 150 bool isEnable = false; 151 int32_t appIndex = 0; 152 std::string bundleName; 153 }; 154 155 struct LaunchWantCallbackInfo : public BaseCallbackInfo { LaunchWantCallbackInfoLaunchWantCallbackInfo156 explicit LaunchWantCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 157 int32_t userId = Constants::UNSPECIFIED_USERID; 158 std::string bundleName; 159 OHOS::AAFwk::Want want; 160 }; 161 162 struct VerifyCallbackInfo : public BaseCallbackInfo { VerifyCallbackInfoVerifyCallbackInfo163 explicit VerifyCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 164 bool flag = false; 165 std::string deletePath; 166 std::vector<std::string> abcPaths; 167 }; 168 169 struct BundleOption { 170 int32_t userId = Constants::UNSPECIFIED_USERID; 171 int32_t appIndex = Constants::DEFAULT_APP_INDEX; 172 bool isDefault = true; 173 }; 174 175 struct DynamicIconCallbackInfo : public BaseCallbackInfo { DynamicIconCallbackInfoDynamicIconCallbackInfo176 explicit DynamicIconCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 177 std::string bundleName; 178 std::string moduleName; 179 std::vector<std::string> moduleNames; 180 BundleOption option; 181 }; 182 183 struct DynamicIconInfoCallbackInfo : public BaseCallbackInfo { DynamicIconInfoCallbackInfoDynamicIconInfoCallbackInfo184 explicit DynamicIconInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 185 int32_t userId = Constants::UNSPECIFIED_USERID; 186 std::string bundleName; 187 std::vector<DynamicIconInfo> dynamicIconInfos; 188 }; 189 190 enum AbilityProfileType : uint32_t { 191 ABILITY_PROFILE = 0, 192 EXTENSION_PROFILE, 193 UNKNOWN_PROFILE 194 }; 195 196 struct GetProfileCallbackInfo : public BaseCallbackInfo { GetProfileCallbackInfoGetProfileCallbackInfo197 explicit GetProfileCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 198 AbilityProfileType type = AbilityProfileType::UNKNOWN_PROFILE; 199 std::string moduleName; 200 std::string abilityName; 201 std::string metadataName; 202 std::vector<std::string> profileVec; 203 }; 204 205 struct AbilityEnableCallbackInfo : public BaseCallbackInfo { AbilityEnableCallbackInfoAbilityEnableCallbackInfo206 explicit AbilityEnableCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 207 bool isEnable = false; 208 int32_t appIndex = 0; 209 AbilityInfo abilityInfo; 210 }; 211 212 struct ApplicationInfoCallbackInfo : public BaseCallbackInfo { ApplicationInfoCallbackInfoApplicationInfoCallbackInfo213 explicit ApplicationInfoCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 214 215 int32_t flags = 0; 216 int32_t userId = Constants::UNSPECIFIED_USERID; 217 std::string bundleName; 218 ApplicationInfo appInfo; 219 }; 220 221 struct ApplicationInfosCallbackInfo : public BaseCallbackInfo { ApplicationInfosCallbackInfoApplicationInfosCallbackInfo222 explicit ApplicationInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 223 224 int32_t flags = 0; 225 int32_t userId = Constants::UNSPECIFIED_USERID; 226 std::vector<ApplicationInfo> appInfos; 227 }; 228 229 struct AsyncPermissionDefineCallbackInfo : public BaseCallbackInfo { AsyncPermissionDefineCallbackInfoAsyncPermissionDefineCallbackInfo230 explicit AsyncPermissionDefineCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 231 std::string permissionName; 232 OHOS::AppExecFwk::PermissionDef permissionDef; 233 }; 234 235 struct MigrateDataCallbackInfo : public BaseCallbackInfo { MigrateDataCallbackInfoMigrateDataCallbackInfo236 explicit MigrateDataCallbackInfo(napi_env napiEnv) : BaseCallbackInfo(napiEnv) {} 237 std::vector<std::string> sourcePaths; 238 std::string destinationPath; 239 }; 240 241 struct Query { 242 std::string bundleName_; 243 std::string interfaceType_; 244 int32_t flags_ = 0; 245 int32_t userId_ = Constants::UNSPECIFIED_USERID; 246 napi_env env_; QueryQuery247 Query(const std::string &bundleName, const std::string &interfaceType, int32_t flags, int32_t userId, napi_env env) 248 : bundleName_(bundleName), interfaceType_(interfaceType), flags_(flags), userId_(userId), env_(env) {} 249 250 bool operator==(const Query &query) const 251 { 252 return bundleName_ == query.bundleName_ && interfaceType_ == query.interfaceType_ && 253 flags_ == query.flags_ && userId_ == query.userId_ && env_ == query.env_; 254 } 255 }; 256 257 struct QueryHash { operatorQueryHash258 size_t operator()(const Query &query) const 259 { 260 return std::hash<std::string>()(query.bundleName_) ^ std::hash<std::string>()(query.interfaceType_) ^ 261 std::hash<int32_t>()(query.flags_) ^ std::hash<int32_t>()(query.userId_) ^ 262 std::hash<napi_env>()(query.env_); 263 } 264 }; 265 266 struct BundleInfosCallbackInfo : public BaseCallbackInfo { BundleInfosCallbackInfoBundleInfosCallbackInfo267 explicit BundleInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 268 269 int32_t flags = 0; 270 int32_t userId = Constants::UNSPECIFIED_USERID; 271 std::vector<BundleInfo> bundleInfos; 272 }; 273 274 struct BundleInfoCallbackInfo : public BaseCallbackInfo { BundleInfoCallbackInfoBundleInfoCallbackInfo275 explicit BundleInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 276 bool isSavedInCache = false; 277 int32_t flags = 0; 278 int32_t userId = Constants::UNSPECIFIED_USERID; 279 int32_t uid = 0; 280 std::string bundleName; 281 BundleInfo bundleInfo; 282 }; 283 284 struct BatchBundleInfoCallbackInfo : public BaseCallbackInfo { BatchBundleInfoCallbackInfoBatchBundleInfoCallbackInfo285 explicit BatchBundleInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 286 bool isSavedInCache = false; 287 int32_t flags = 0; 288 int32_t userId = Constants::UNSPECIFIED_USERID; 289 int32_t uid = 0; 290 std::vector<std::string> bundleNames; 291 std::vector<BundleInfo> bundleInfos; 292 }; 293 294 struct PluginCallbackInfo : public BaseCallbackInfo { PluginCallbackInfoPluginCallbackInfo295 explicit PluginCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 296 int32_t userId = Constants::UNSPECIFIED_USERID; 297 std::string hostBundleName; 298 std::vector<PluginBundleInfo> pluginBundleInfos; 299 }; 300 301 struct SharedBundleCallbackInfo : public BaseCallbackInfo { SharedBundleCallbackInfoSharedBundleCallbackInfo302 explicit SharedBundleCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 303 304 std::string bundleName; 305 std::string moduleName; 306 std::vector<SharedBundleInfo> sharedBundles; 307 }; 308 309 struct AppProvisionInfoCallbackInfo : public BaseCallbackInfo { AppProvisionInfoCallbackInfoAppProvisionInfoCallbackInfo310 explicit AppProvisionInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 311 int32_t userId = Constants::UNSPECIFIED_USERID; 312 std::string bundleName; 313 AppProvisionInfo appProvisionInfo; 314 }; 315 316 struct RecoverableApplicationCallbackInfo : public BaseCallbackInfo { RecoverableApplicationCallbackInfoRecoverableApplicationCallbackInfo317 explicit RecoverableApplicationCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 318 319 std::vector<RecoverableApplicationInfo> recoverableApplicationInfos; 320 }; 321 322 struct PreinstalledApplicationInfosCallbackInfo : public BaseCallbackInfo { PreinstalledApplicationInfosCallbackInfoPreinstalledApplicationInfosCallbackInfo323 explicit PreinstalledApplicationInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 324 std::vector<PreinstalledApplicationInfo> preinstalledApplicationInfos; 325 }; 326 327 struct CloneAppBundleInfoCallbackInfo : public BaseCallbackInfo { CloneAppBundleInfoCallbackInfoCloneAppBundleInfoCallbackInfo328 explicit CloneAppBundleInfoCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 329 330 int32_t appIndex = 0; 331 int32_t bundleFlags = 0; 332 int32_t userId = Constants::UNSPECIFIED_USERID; 333 std::string bundleName; 334 BundleInfo bundleInfo; 335 }; 336 337 struct CloneAppBundleInfosCallbackInfo : public BaseCallbackInfo { CloneAppBundleInfosCallbackInfoCloneAppBundleInfosCallbackInfo338 explicit CloneAppBundleInfosCallbackInfo(napi_env env) : BaseCallbackInfo(env) {} 339 340 int32_t bundleFlags = 0; 341 int32_t userId = Constants::UNSPECIFIED_USERID; 342 std::string bundleName; 343 std::vector<BundleInfo> bundleInfos; 344 }; 345 346 napi_value GetBundleArchiveInfo(napi_env env, napi_callback_info info); 347 napi_value GetBundleNameByUid(napi_env env, napi_callback_info info); 348 napi_value SetApplicationEnabled(napi_env env, napi_callback_info info); 349 napi_value SetAbilityEnabled(napi_env env, napi_callback_info info); 350 napi_value IsApplicationEnabled(napi_env env, napi_callback_info info); 351 napi_value IsAbilityEnabled(napi_env env, napi_callback_info info); 352 napi_value QueryAbilityInfos(napi_env env, napi_callback_info info); 353 napi_value BatchQueryAbilityInfos(napi_env env, napi_callback_info info); 354 napi_value QueryAbilityInfosSync(napi_env env, napi_callback_info info); 355 napi_value QueryExtensionInfos(napi_env env, napi_callback_info info); 356 napi_value GetAbilityLabel(napi_env env, napi_callback_info info); 357 napi_value GetAbilityIcon(napi_env env, napi_callback_info info); 358 napi_value CleanBundleCacheFiles(napi_env env, napi_callback_info info); 359 napi_value GetPermissionDef(napi_env env, napi_callback_info info); 360 napi_value GetLaunchWantForBundle(napi_env env, napi_callback_info info); 361 napi_value GetProfile(napi_env env, napi_callback_info info, const AbilityProfileType &profileType); 362 napi_value GetProfileByAbility(napi_env env, napi_callback_info info); 363 napi_value GetProfileByExAbility(napi_env env, napi_callback_info info); 364 napi_value GetApplicationInfo(napi_env env, napi_callback_info info); 365 napi_value GetApplicationInfos(napi_env env, napi_callback_info info); 366 napi_value GetBundleInfos(napi_env env, napi_callback_info info); 367 napi_value GetBundleInfo(napi_env env, napi_callback_info info); 368 napi_value GetApplicationInfoSync(napi_env env, napi_callback_info info); 369 napi_value GetBundleInfoSync(napi_env env, napi_callback_info info); 370 napi_value GetBundleInfoForSelf(napi_env env, napi_callback_info info); 371 napi_value GetAllSharedBundleInfo(napi_env env, napi_callback_info info); 372 napi_value GetSharedBundleInfo(napi_env env, napi_callback_info info); 373 napi_value GetAppProvisionInfo(napi_env env, napi_callback_info info); 374 napi_value GetSpecifiedDistributionType(napi_env env, napi_callback_info info); 375 napi_value GetAdditionalInfo(napi_env env, napi_callback_info info); 376 napi_value GetBundleInfoForSelfSync(napi_env env, napi_callback_info info); 377 napi_value VerifyAbc(napi_env env, napi_callback_info info); 378 napi_value DeleteAbc(napi_env env, napi_callback_info info); 379 napi_value GetExtResource(napi_env env, napi_callback_info info); 380 napi_value EnableDynamicIcon(napi_env env, napi_callback_info info); 381 napi_value DisableDynamicIcon(napi_env env, napi_callback_info info); 382 napi_value GetDynamicIcon(napi_env env, napi_callback_info info); 383 napi_value GetJsonProfile(napi_env env, napi_callback_info info); 384 napi_value GetRecoverableApplicationInfo(napi_env env, napi_callback_info info); 385 napi_value SetAdditionalInfo(napi_env env, napi_callback_info info); 386 napi_value CanOpenLink(napi_env env, napi_callback_info info); 387 napi_value GetAllPreinstalledApplicationInfos(napi_env env, napi_callback_info info); 388 napi_value GetAllBundleInfoByDeveloperId(napi_env env, napi_callback_info info); 389 napi_value GetDeveloperIds(napi_env env, napi_callback_info info); 390 napi_value SwitchUninstallState(napi_env env, napi_callback_info info); 391 napi_value GetAppCloneBundleInfo(napi_env env, napi_callback_info info); 392 napi_value GetAllAppCloneBundleInfo(napi_env env, napi_callback_info info); 393 napi_value GetAppCloneIdentity(napi_env env, napi_callback_info info); 394 napi_value GetAllPluginInfo(napi_env env, napi_callback_info info); 395 napi_value GetAllBundleCacheSize(napi_env env, napi_callback_info info); 396 napi_value CleanAllBundleCache(napi_env env, napi_callback_info info); 397 napi_value GetLaunchWant(napi_env env, napi_callback_info info); 398 napi_value MigrateData(napi_env env, napi_callback_info info); 399 napi_value GetAllDynamicIconInfo(napi_env env, napi_callback_info info); 400 napi_value GetDynamicIconInfo(napi_env env, napi_callback_info info); 401 napi_value GetAbilityInfos(napi_env env, napi_callback_info info); 402 void CreateApplicationFlagObject(napi_env env, napi_value value); 403 void CreateAbilityFlagObject(napi_env env, napi_value value); 404 void CreateExtensionAbilityFlagObject(napi_env env, napi_value value); 405 void CreateExtensionAbilityTypeObject(napi_env env, napi_value value); 406 void CreateBundleFlagObject(napi_env env, napi_value value); 407 void CreatePermissionGrantStateObject(napi_env env, napi_value value); 408 void CreateAbilityTypeObject(napi_env env, napi_value value); 409 void CreateDisplayOrientationObject(napi_env env, napi_value value); 410 void CreateOrientationRelatedToSensor(napi_env env, napi_value value); 411 void CreateLaunchTypeObject(napi_env env, napi_value value); 412 void CreateSupportWindowModesObject(napi_env env, napi_value value); 413 void CreateModuleTypeObject(napi_env env, napi_value value); 414 void CreateBundleTypeObject(napi_env env, napi_value value); 415 void CreateCompatiblePolicyObject(napi_env env, napi_value value); 416 void CreateProfileTypeObject(napi_env env, napi_value value); 417 void CreateAppDistributionTypeObject(napi_env env, napi_value value); 418 void RegisterClearCacheListener(); 419 void CreateMultiAppModeTypeObject(napi_env env, napi_value value); 420 void CreateApplicationInfoFlagObject(napi_env env, napi_value value); 421 } // namespace AppExecFwk 422 } // namespace OHOS 423 #endif // BUNDLE_FRAMEWORK_INTERFACES_KITS_JS_BUNDLE_MANAGER_BUNDLE_MANAGER_H 424