From a204ed98648496989945b772739c6e40aad81510 Mon Sep 17 00:00:00 2001 From: zhongjianfei Date: Mon, 17 Jan 2022 16:52:21 +0800 Subject: [PATCH 1/7] zhongjianfei@huawei.com Signed-off-by: zhongjianfei Change-Id: Ia6ab67858567b278e913a1ee1847a1e85d7987b1 --- .../ability/native/test/unittest/form_host_client_test.cpp | 2 +- .../native/test/unittest/form_provider_client_test.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frameworks/kits/ability/native/test/unittest/form_host_client_test.cpp b/frameworks/kits/ability/native/test/unittest/form_host_client_test.cpp index 3900a34b744..2413235ee23 100644 --- a/frameworks/kits/ability/native/test/unittest/form_host_client_test.cpp +++ b/frameworks/kits/ability/native/test/unittest/form_host_client_test.cpp @@ -33,7 +33,7 @@ using OHOS::Parcel; class FormHostClientTest : public testing::Test { public: - FormHostClientTest() + FormHostClientTest() {} ~FormHostClientTest() {} diff --git a/frameworks/kits/ability/native/test/unittest/form_provider_client_test.cpp b/frameworks/kits/ability/native/test/unittest/form_provider_client_test.cpp index fdaa12710bb..92ba7ef1935 100644 --- a/frameworks/kits/ability/native/test/unittest/form_provider_client_test.cpp +++ b/frameworks/kits/ability/native/test/unittest/form_provider_client_test.cpp @@ -35,7 +35,7 @@ const std::string FORM_SUPPLY_INFO = "com.form.supply.info.test"; class FormProviderClientTest : public testing::Test { public: - FormProviderClientTest() + FormProviderClientTest() {} ~FormProviderClientTest() {} @@ -71,9 +71,9 @@ void FormProviderClientTest::SetUp(void) Permission::PermissionKit::AddDefPermissions(permList); std::vector permnameList; permnameList.emplace_back(PERMISSION_NAME_REQUIRE_FORM); - Permission::PermissionKit::AddUserGrantedReqPermissions(FORM_MANAGER_SERVICE_BUNDLE_NAME, + Permission::PermissionKit::AddUserGrantedReqPermissions(FORM_MANAGER_SERVICE_BUNDLE_NAME, permnameList, 0); - Permission::PermissionKit::GrantUserGrantedPermission(FORM_MANAGER_SERVICE_BUNDLE_NAME, + Permission::PermissionKit::GrantUserGrantedPermission(FORM_MANAGER_SERVICE_BUNDLE_NAME, PERMISSION_NAME_REQUIRE_FORM, 0); } -- Gitee From fc72088d2c6fe8b37eca1081de8f6add14a21e5c Mon Sep 17 00:00:00 2001 From: yangzk Date: Mon, 17 Jan 2022 12:01:55 +0800 Subject: [PATCH 2/7] add GetExtensionAbilityInfo Signed-off-by: yangzk Change-Id: Ie1d68c9abf864edfee0c2c9c04b5f507a9b4134b --- .../native/src/js_service_extension.cpp | 18 ++--- .../include/ability_manager_service.h | 4 + .../src/ability_manager_service.cpp | 76 ++++++++++++++++++- 3 files changed, 87 insertions(+), 11 deletions(-) diff --git a/frameworks/kits/ability/native/src/js_service_extension.cpp b/frameworks/kits/ability/native/src/js_service_extension.cpp index f5aefbaf5b8..1abe9ce14fa 100755 --- a/frameworks/kits/ability/native/src/js_service_extension.cpp +++ b/frameworks/kits/ability/native/src/js_service_extension.cpp @@ -42,22 +42,22 @@ JsServiceExtension::JsServiceExtension(JsRuntime& jsRuntime) : jsRuntime_(jsRunt JsServiceExtension::~JsServiceExtension() = default; void JsServiceExtension::Init(const std::shared_ptr &record, - const std::shared_ptr &application, - std::shared_ptr &handler, + const std::shared_ptr &application, std::shared_ptr &handler, const sptr &token) { ServiceExtension::Init(record, application, handler, token); - std::string srcPath(Extension::abilityInfo_->package); - srcPath.append("/assets/js/"); - if (!Extension::abilityInfo_->srcPath.empty()) { - srcPath.append(Extension::abilityInfo_->srcPath); + if (Extension::abilityInfo_->srcEntrance.empty()) { + HILOG_ERROR("abilityInfo srcEntrance is empty"); + return; } - srcPath.append("/").append(Extension::abilityInfo_->name).append(".abc"); + std::string srcPath(Extension::abilityInfo_->moduleName + "/"); + srcPath.append(Extension::abilityInfo_->srcPath); + srcPath.erase(srcPath.rfind('.')); + srcPath.append(".abc"); std::string moduleName(Extension::abilityInfo_->moduleName); moduleName.append("::").append(abilityInfo_->name); - HILOG_INFO("JsServiceExtension::Init moduleName:%{public}s,srcPath:%{public}s.", - moduleName.c_str(), srcPath.c_str()); + HILOG_INFO("JsServiceExtension::Init module:%{public}s,srcPath:%{public}s.", moduleName.c_str(), srcPath.c_str()); HandleScope handleScope(jsRuntime_); auto& engine = jsRuntime_.GetNativeEngine(); diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index f6c2176e820..bc7dde09312 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -897,6 +897,10 @@ private: void InitDataAbilityManager(int32_t userId, bool switchUser); void InitPendWantManager(int32_t userId, bool switchUser); + int32_t GetAbilityInfoFromExtension(const Want &want, AppExecFwk::AbilityInfo& abilityInfo); + int32_t InitAbilityInfoFromExtension(AppExecFwk::ExtensionAbilityInfo &extensionInfo, + AppExecFwk::AbilityInfo &abilityInfo); + // multi user void StartFreezingScreen(); void StopFreezingScreen(); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 9325436dcc9..08399f6a49c 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -28,6 +28,7 @@ #include "ability_manager_errors.h" #include "ability_util.h" #include "bytrace.h" +#include "bundle_mgr_client.h" #include "configuration_distributor.h" #include "hilog_wrapper.h" #include "if_system_ability_manager.h" @@ -2006,8 +2007,12 @@ int AbilityManagerService::GenerateAbilityRequest( bms->QueryAbilityInfo(want, AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_APPLICATION, userId, request.abilityInfo); if (request.abilityInfo.name.empty() || request.abilityInfo.bundleName.empty()) { - HILOG_ERROR("Get ability info failed."); - return RESOLVE_ABILITY_ERR; + // try to find extension + int ret = GetAbilityInfoFromExtension(want, request.abilityInfo); + if (!ret) { + HILOG_ERROR("Get ability info failed."); + return RESOLVE_ABILITY_ERR; + } } HILOG_DEBUG("Query ability name: %{public}s,", request.abilityInfo.name.c_str()); if (request.abilityInfo.type == AppExecFwk::AbilityType::SERVICE) { @@ -2982,5 +2987,72 @@ bool AbilityManagerService::IsAbilityControllerResuming(const std::string &bundl } return true; } + +int32_t AbilityManagerService::InitAbilityInfoFromExtension(AppExecFwk::ExtensionAbilityInfo &extensionInfo, + AppExecFwk::AbilityInfo &abilityInfo) +{ + abilityInfo.bundleName = extensionInfo.bundleName; + abilityInfo.package = extensionInfo.moduleName; + abilityInfo.moduleName = extensionInfo.moduleName; + abilityInfo.name = extensionInfo.name; + abilityInfo.srcEntrance = extensionInfo.srcEntrance; + abilityInfo.srcPath = extensionInfo.srcEntrance; + abilityInfo.iconPath = extensionInfo.icon; + abilityInfo.iconId = extensionInfo.iconId; + abilityInfo.label = extensionInfo.label; + abilityInfo.labelId = extensionInfo.labelId; + abilityInfo.description = extensionInfo.description; + abilityInfo.descriptionId = extensionInfo.descriptionId; + abilityInfo.permissions = extensionInfo.permissions; + abilityInfo.readPermission = extensionInfo.readPermission; + abilityInfo.writePermission = extensionInfo.writePermission; + abilityInfo.extensionAbilityType = extensionInfo.type; + abilityInfo.visible = extensionInfo.visible; + abilityInfo.applicationInfo = extensionInfo.applicationInfo; + abilityInfo.resourcePath = extensionInfo.resourcePath; + abilityInfo.enabled = extensionInfo.enabled; + switch (extensionInfo.type) { + case AppExecFwk::ExtensionAbilityType::FORM: + abilityInfo.type = AppExecFwk::AbilityType::FORM; + break; + case AppExecFwk::ExtensionAbilityType::SERVICE: + abilityInfo.type = AppExecFwk::AbilityType::SERVICE; + break; + case AppExecFwk::ExtensionAbilityType::DATASHARE: + abilityInfo.type = AppExecFwk::AbilityType::DATA; + break; + default: + abilityInfo.type = AppExecFwk::AbilityType::EXTENSION; + break; + } + return 0; +} + +int32_t AbilityManagerService::GetAbilityInfoFromExtension(const Want &want, AppExecFwk::AbilityInfo &abilityInfo) +{ + ElementName elementName = want.GetElement(); + std::string bundleName = elementName.GetBundleName(); + std::string abilityName = elementName.GetAbilityName(); + AppExecFwk::BundleMgrClient bundleClient; + AppExecFwk::BundleInfo bundleInfo; + if (!bundleClient.GetBundleInfo(bundleName, AppExecFwk::BundleFlag::GET_BUNDLE_WITH_EXTENSION_INFO, bundleInfo)) { + HILOG_ERROR("Failed to get bundle info when generate ability request."); + return RESOLVE_APP_ERR; + } + bool found = false; + + for (auto &extensionInfo: bundleInfo.extensionInfos) { + if (extensionInfo.name != abilityName) { + continue; + } + found = true; + HILOG_DEBUG("GetExtensionAbilityInfo, extension ability info found, name=%{public}s", abilityName.c_str()); + abilityInfo.applicationName = bundleInfo.applicationInfo.name; + InitAbilityInfoFromExtension(extensionInfo, abilityInfo); + break; + } + + return found; +} } // namespace AAFwk } // namespace OHOS -- Gitee From c8b2b804cb0613e7e79d6773c918a9ee282cbb64 Mon Sep 17 00:00:00 2001 From: njupthan Date: Mon, 17 Jan 2022 17:20:45 +0000 Subject: [PATCH 3/7] Application running information query Signed-off-by: njupthan --- .../include/mock_ability_manager_service.h | 4 + .../mock/AMS/mock_ability_manager_service.h | 4 + .../AMS/mock_serviceability_manager_service.h | 6 +- interfaces/innerkits/ability_manager/BUILD.gn | 2 + .../ability_manager_headers.gni | 4 +- .../include/ability_manager_client.h | 31 ++-- .../include/ability_manager_interface.h | 45 ++++-- .../include/ability_running_info.h | 45 ++++++ .../include/extension_running_info.h | 44 ++++++ interfaces/kits/napi/BUILD.gn | 1 + .../kits/napi/aafwk/ability_manager/BUILD.gn | 63 ++++++++ .../ability_manager_module.cpp | 30 ++++ .../ability_manager/js_ability_manager.cpp | 138 ++++++++++++++++++ .../ability_manager/js_ability_manager.h | 27 ++++ .../js_ability_manager_utils.cpp | 101 +++++++++++++ .../js_ability_manager_utils.h | 33 +++++ .../kits/napi/aafwk/mission_manager/BUILD.gn | 15 +- .../mission_manager/js_mission_info_utils.cpp | 2 + .../mission_manager/js_mission_info_utils.h | 3 + .../aafwk/mission_manager/mission_manager.cpp | 1 + services/abilitymgr/abilitymgr.gni | 2 + .../include/ability_connect_manager.h | 6 + .../include/ability_manager_proxy.h | 8 +- .../include/ability_manager_service.h | 4 + .../abilitymgr/include/ability_manager_stub.h | 3 + services/abilitymgr/include/app_scheduler.h | 4 + .../abilitymgr/include/data_ability_manager.h | 2 + .../include/kernal_ability_manager.h | 3 + services/abilitymgr/include/mission_list.h | 2 +- .../abilitymgr/include/mission_list_manager.h | 3 + .../src/ability_connect_manager.cpp | 57 ++++++++ .../abilitymgr/src/ability_manager_client.cpp | 32 +++- .../abilitymgr/src/ability_manager_proxy.cpp | 82 ++++++++++- .../src/ability_manager_service.cpp | 59 +++++++- .../abilitymgr/src/ability_manager_stub.cpp | 52 +++++++ .../abilitymgr/src/ability_running_info.cpp | 75 ++++++++++ services/abilitymgr/src/app_scheduler.cpp | 12 ++ .../abilitymgr/src/data_ability_manager.cpp | 33 +++++ .../abilitymgr/src/extension_running_info.cpp | 84 +++++++++++ .../abilitymgr/src/kernal_ability_manager.cpp | 26 ++++ .../abilitymgr/src/mission_list_manager.cpp | 44 ++++++ .../include/bundlemgr/mock_bundle_manager.h | 11 ++ .../src/appmgr/mock_app_scheduler.cpp | 11 ++ .../src/bundlemgr/mock_bundle_manager.cpp | 3 +- .../ability_manager_stub_mock.h | 3 + .../ability_manager_stub_impl_mock.h | 4 + .../ability_manager_stub_mock.h | 5 + .../mock/include/mock_ability_mgr_service.h | 4 + tools/test/mock/mock_ability_manager_stub.h | 4 + 49 files changed, 1186 insertions(+), 51 deletions(-) create mode 100644 interfaces/innerkits/ability_manager/include/ability_running_info.h create mode 100644 interfaces/innerkits/ability_manager/include/extension_running_info.h create mode 100644 interfaces/kits/napi/aafwk/ability_manager/BUILD.gn create mode 100644 interfaces/kits/napi/aafwk/ability_manager/ability_manager_module.cpp create mode 100644 interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.cpp create mode 100644 interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.h create mode 100644 interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.cpp create mode 100644 interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.h create mode 100644 services/abilitymgr/src/ability_running_info.cpp create mode 100644 services/abilitymgr/src/extension_running_info.cpp diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h index b95b4560f87..5cb3a9f4026 100755 --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h @@ -135,6 +135,10 @@ public: MOCK_METHOD0(CleanAllMissions, int()); MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); int RemoveMission(int id) override; diff --git a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h index ad5d44601d6..74a58d225c8 100644 --- a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h @@ -115,6 +115,10 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + int MoveMissionToEnd(const sptr &token, const bool nonFirst) override; bool IsFirstInMission(const sptr &token) override; int CompelVerifyPermission(const std::string &permission, int pid, int uid, std::string &message) override; diff --git a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h index 499e4d506f6..152c4a308e9 100755 --- a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h @@ -110,7 +110,11 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); - + + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + int MoveMissionToEnd(const sptr &token, const bool nonFirst) override; bool IsFirstInMission(const sptr &token) override; int CompelVerifyPermission(const std::string &permission, int pid, int uid, std::string &message) override; diff --git a/interfaces/innerkits/ability_manager/BUILD.gn b/interfaces/innerkits/ability_manager/BUILD.gn index ea024b0226e..405b2b9fbe2 100644 --- a/interfaces/innerkits/ability_manager/BUILD.gn +++ b/interfaces/innerkits/ability_manager/BUILD.gn @@ -48,10 +48,12 @@ ohos_shared_library("ability_manager") { "${services_path}/abilitymgr/src/ability_manager_stub.cpp", "${services_path}/abilitymgr/src/ability_mission_info.cpp", "${services_path}/abilitymgr/src/ability_record_info.cpp", + "${services_path}/abilitymgr/src/ability_running_info.cpp", "${services_path}/abilitymgr/src/ability_scheduler_proxy.cpp", "${services_path}/abilitymgr/src/ability_scheduler_stub.cpp", "${services_path}/abilitymgr/src/ability_start_setting.cpp", "${services_path}/abilitymgr/src/caller_info.cpp", + "${services_path}/abilitymgr/src/extension_running_info.cpp", "${services_path}/abilitymgr/src/image_info.cpp", "${services_path}/abilitymgr/src/launch_param.cpp", "${services_path}/abilitymgr/src/lifecycle_state_info.cpp", diff --git a/interfaces/innerkits/ability_manager/ability_manager_headers.gni b/interfaces/innerkits/ability_manager/ability_manager_headers.gni index 5913ebcafca..e5021289e2f 100644 --- a/interfaces/innerkits/ability_manager/ability_manager_headers.gni +++ b/interfaces/innerkits/ability_manager/ability_manager_headers.gni @@ -18,7 +18,9 @@ ability_manager_headers = { "ability_manager_client.h", "ability_manager_errors.h", "ability_manager_interface.h", + "ability_running_info.h", "ability_scheduler_interface.h", + "extension_running_info.h" "lifecycle_state_info.h", "mission_stack_info.h", "stack_info.h", @@ -39,4 +41,4 @@ ability_manager_headers = { "shared_memory.h", ] header_base = "interfaces/innerkits/ability_manager/include" -} +} \ No newline at end of file diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_client.h b/interfaces/innerkits/ability_manager/include/ability_manager_client.h index f4271493446..a38b5f6097a 100644 --- a/interfaces/innerkits/ability_manager/include/ability_manager_client.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_client.h @@ -131,8 +131,8 @@ public: * @param requestCode the resultCode of the ability to start. * @return Returns ERR_OK on success, others on failure. */ - ErrCode StartAbility(const Want &want, const StartOptions &startOptions, - const sptr &callerToken, int requestCode = DEFAULT_INVAL_VALUE); + ErrCode StartAbility(const Want &want, const StartOptions &startOptions, const sptr &callerToken, + int requestCode = DEFAULT_INVAL_VALUE); /** * TerminateAbility with want, return want from ability manager service. @@ -358,8 +358,7 @@ public: * mission. This parameter cannot be null. * @return Returns ERR_OK on success, others on failure. */ - ErrCode SetMissionDescriptionInfo( - const sptr &token, const MissionDescriptionInfo &description); + ErrCode SetMissionDescriptionInfo(const sptr &token, const MissionDescriptionInfo &description); /** * get current system mission lock mode state. @@ -476,8 +475,8 @@ public: * @param wantParams, extended params. * @return Returns ERR_OK on success, others on failure. */ - ErrCode ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, - int32_t missionId, const sptr &callback, AAFwk::WantParams &wantParams); + ErrCode ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, int32_t missionId, + const sptr &callback, AAFwk::WantParams &wantParams); /** * start continuation. @@ -536,8 +535,7 @@ public: * * @return Returns ERR_OK on success, others on failure. */ - ErrCode RegisterMissionListener(const std::string &deviceId, - const sptr &listener); + ErrCode RegisterMissionListener(const std::string &deviceId, const sptr &listener); /** * @brief UnRegister mission listener from ability manager service. @@ -546,8 +544,7 @@ public: * * @return Returns ERR_OK on success, others on failure. */ - ErrCode UnRegisterMissionListener(const std::string &deviceId, - const sptr &listener); + ErrCode UnRegisterMissionListener(const std::string &deviceId, const sptr &listener); /** * @brief Get mission infos from ams. @@ -557,7 +554,7 @@ public: * * @return Returns ERR_OK on success, others on failure. */ - ErrCode GetMissionInfos(const std::string& deviceId, int32_t numMax, std::vector &missionInfos); + ErrCode GetMissionInfos(const std::string &deviceId, int32_t numMax, std::vector &missionInfos); /** * @brief Get mission info by id. @@ -567,7 +564,7 @@ public: * * @return Returns ERR_OK on success, others on failure. */ - ErrCode GetMissionInfo(const std::string& deviceId, int32_t missionId, MissionInfo &missionInfo); + ErrCode GetMissionInfo(const std::string &deviceId, int32_t missionId, MissionInfo &missionInfo); /** * @brief Get the Mission Snapshot Info object @@ -601,6 +598,12 @@ public: */ ErrCode MoveMissionToFront(int32_t missionId); + ErrCode GetAbilityRunningInfos(std::vector &info); + + ErrCode GetExtensionRunningInfos(int upperLimit, std::vector &info); + + ErrCode GetProcessRunningInfos(std::vector &info); + /** * Start synchronizing remote device mission * @param devId, deviceId. @@ -608,14 +611,14 @@ public: * @param tag, call tag. * @return Returns ERR_OK on success, others on failure. */ - ErrCode StartSyncRemoteMissions(const std::string& devId, bool fixConflict, int64_t tag); + ErrCode StartSyncRemoteMissions(const std::string &devId, bool fixConflict, int64_t tag); /** * Stop synchronizing remote device mission * @param devId, deviceId. * @return Returns ERR_OK on success, others on failure. */ - ErrCode StopSyncRemoteMissions(const std::string& devId); + ErrCode StopSyncRemoteMissions(const std::string &devId); /** * @brief start user. diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h index 6e57722b2e6..1b51ee12fa0 100755 --- a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h @@ -27,6 +27,8 @@ #include "foundation/appexecfwk/standard/interfaces/innerkits/appexecfwk_core/include/appmgr/configuration.h" #include "mission_snapshot.h" #include "ability_mission_info.h" +#include "ability_running_info.h" +#include "extension_running_info.h" #include "mission_option.h" #include "stack_info.h" #include "stack_setting.h" @@ -43,10 +45,10 @@ #include "snapshot.h" #include "start_options.h" #include "stop_user_callback.h" +#include "running_process_info.h" #include "remote_mission_listener_interface.h" #include "iability_controller.h" - namespace OHOS { namespace AAFwk { const std::string ABILITY_MANAGER_SERVICE_NAME = "AbilityManagerService"; @@ -99,8 +101,11 @@ public: * @param requestCode the resultCode of the ability to start. * @return Returns ERR_OK on success, others on failure. */ - virtual int StartAbility(const Want &want, const StartOptions &startOptions, - const sptr &callerToken, int requestCode = DEFAULT_INVAL_VALUE) { return 0; } + virtual int StartAbility(const Want &want, const StartOptions &startOptions, const sptr &callerToken, + int requestCode = DEFAULT_INVAL_VALUE) + { + return 0; + } /** * TerminateAbility, terminate the special ability. @@ -508,8 +513,8 @@ public: */ virtual void GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memoryInfo) = 0; - virtual int ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, - int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams) = 0; + virtual int ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, int32_t missionId, + const sptr &callBack, AAFwk::WantParams &wantParams) = 0; virtual int ContinueAbility(const std::string &deviceId, int32_t missionId) = 0; @@ -527,11 +532,10 @@ public: virtual int UnRegisterMissionListener(const sptr &listener) = 0; - virtual int GetMissionInfos(const std::string& deviceId, int32_t numMax, - std::vector &missionInfos) = 0; + virtual int GetMissionInfos( + const std::string &deviceId, int32_t numMax, std::vector &missionInfos) = 0; - virtual int GetMissionInfo(const std::string& deviceId, int32_t missionId, - MissionInfo &missionInfo) = 0; + virtual int GetMissionInfo(const std::string &deviceId, int32_t missionId, MissionInfo &missionInfo) = 0; virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) = 0; @@ -545,6 +549,12 @@ public: virtual int StopUser(int userId, const sptr &callback) = 0; + virtual int GetAbilityRunningInfos(std::vector &info) = 0; + + virtual int GetExtensionRunningInfos(int upperLimit, std::vector &info) = 0; + + virtual int GetProcessRunningInfos(std::vector &info) = 0; + /** * Start synchronizing remote device mission * @param devId, deviceId. @@ -552,17 +562,16 @@ public: * @param tag, call tag. * @return Returns ERR_OK on success, others on failure. */ - virtual int StartSyncRemoteMissions(const std::string& devId, bool fixConflict, int64_t tag) = 0; + virtual int StartSyncRemoteMissions(const std::string &devId, bool fixConflict, int64_t tag) = 0; /** * Stop synchronizing remote device mission * @param devId, deviceId. * @return Returns ERR_OK on success, others on failure. */ - virtual int StopSyncRemoteMissions(const std::string& devId) = 0; + virtual int StopSyncRemoteMissions(const std::string &devId) = 0; - virtual int RegisterMissionListener(const std::string &deviceId, - const sptr &listener) = 0; + virtual int RegisterMissionListener(const std::string &deviceId, const sptr &listener) = 0; virtual int UnRegisterMissionListener(const std::string &deviceId, const sptr &listener) = 0; @@ -706,7 +715,7 @@ public: // ipc id for minimize ability (38) MINIMIZE_ABILITY, - // ipc id for lock mission for cleanup operation (39) + // ipc id for lock mission for cleanup operation (39) LOCK_MISSION_FOR_CLEANUP, // ipc id for unlock mission for cleanup operation (40) @@ -718,7 +727,7 @@ public: // ipc id for unregister mission listener (42) UNREGISTER_MISSION_LISTENER, - // ipc id for get mission infos (43) + // ipc id for get mission infos (43) GET_MISSION_INFOS, // ipc id for get mission info by id (44) @@ -796,6 +805,12 @@ public: GET_SYSTEM_MEMORY_ATTR, + GET_ABILITY_RUNNING_INFO, + + GET_EXTENSION_RUNNING_INFO, + + GET_PROCESS_RUNNING_INFO, + CLEAR_UP_APPLICATION_DATA, START_ABILITY_FOR_OPTIONS, diff --git a/interfaces/innerkits/ability_manager/include/ability_running_info.h b/interfaces/innerkits/ability_manager/include/ability_running_info.h new file mode 100644 index 00000000000..1e4de26867a --- /dev/null +++ b/interfaces/innerkits/ability_manager/include/ability_running_info.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_AAFWK_INTERFACES_INNERKITS_RUNNING_ABILITY_INFO_H +#define OHOS_AAFWK_INTERFACES_INNERKITS_RUNNING_ABILITY_INFO_H + +#include "parcel.h" +#include "ability_info.h" +#include "element_name.h" +#include "iremote_object.h" + +namespace OHOS { +namespace AAFwk { +/** + * @struct AbilityRunningInfo + * AbilityRunningInfo is used to save informations about running ability. + */ +struct AbilityRunningInfo : public Parcelable { +public: + AppExecFwk::ElementName ability; + int pid; + int uid; + std::string processName; + int64_t startTime; + int abilityState; + + bool ReadFromParcel(Parcel &parcel); + virtual bool Marshalling(Parcel &parcel) const override; + static AbilityRunningInfo *Unmarshalling(Parcel &parcel); +}; +} // namespace AAFwk +} // namespace OHOS +#endif // OHOS_AAFWK_INTERFACES_INNERKITS_RUNNING_ABILITY_INFO_H \ No newline at end of file diff --git a/interfaces/innerkits/ability_manager/include/extension_running_info.h b/interfaces/innerkits/ability_manager/include/extension_running_info.h new file mode 100644 index 00000000000..80b39e797a1 --- /dev/null +++ b/interfaces/innerkits/ability_manager/include/extension_running_info.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_AAFWK_INTERFACES_INNERKITS_EXTENSION_RUNNING_INFO_H +#define OHOS_AAFWK_INTERFACES_INNERKITS_EXTENSION_RUNNING_INFO_H + +#include "parcel.h" +#include "element_name.h" +#include "iremote_object.h" + +namespace OHOS { +namespace AAFwk { +/** + * @struct ExtensionRunningInfo + * ExtensionRunningInfo is used to save informations about extension. + */ +struct ExtensionRunningInfo : public Parcelable { +public: + AppExecFwk::ElementName extension; + int pid; + int uid; + std::string processName; + int64_t startTime; + std::vector clientPackage; + + bool ReadFromParcel(Parcel &parcel); + virtual bool Marshalling(Parcel &parcel) const override; + static ExtensionRunningInfo *Unmarshalling(Parcel &parcel); +}; +} // namespace AAFwk +} // namespace OHOS +#endif // OHOS_AAFWK_INTERFACES_INNERKITS_EXTENSION_RUNNING_INFO_H \ No newline at end of file diff --git a/interfaces/kits/napi/BUILD.gn b/interfaces/kits/napi/BUILD.gn index 4f3a620bf69..5b4b94587ef 100644 --- a/interfaces/kits/napi/BUILD.gn +++ b/interfaces/kits/napi/BUILD.gn @@ -18,6 +18,7 @@ group("napi_packages") { "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/ability:ability_napi", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/abilityManager:abilitymanager", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/ability_context:abilitycontext_napi", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/ability_manager:abilitymanager_napi", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/dataUriUtils:datauriutils", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/extensioncontext:extensioncontext_napi", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/featureAbility:featureability", diff --git a/interfaces/kits/napi/aafwk/ability_manager/BUILD.gn b/interfaces/kits/napi/aafwk/ability_manager/BUILD.gn new file mode 100644 index 00000000000..f7cf0c91e29 --- /dev/null +++ b/interfaces/kits/napi/aafwk/ability_manager/BUILD.gn @@ -0,0 +1,63 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_shared_library("abilitymanager_napi") { + include_dirs = [] + + sources = [ + "ability_manager_module.cpp", + "js_ability_manager.cpp", + "js_ability_manager_utils.cpp", + ] + + configs = [ "//foundation/aafwk/standard/services/common:common_config" ] + + include_dirs = [ + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/ability_manager", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common", + "//base/global/resmgr_standard/interfaces/innerkits/include", + "//third_party/icu/icu4c/source/common", + "//foundation/aafwk/standard/frameworks/kits/ability/native/include/continuation/kits", + "//foundation/communication/ipc/ipc/native/src/napi/include", + ] + + deps = [ + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", + "//foundation/aafwk/standard/interfaces/innerkits/base:base", + "//foundation/aafwk/standard/interfaces/innerkits/want:want", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common:napi_common", + "//foundation/aafwk/standard/services/abilitymgr:abilityms", + "//foundation/ace/napi:ace_napi", + "//foundation/appexecfwk/standard/interfaces/innerkits/libeventhandler:libeventhandler", + "//foundation/distributedschedule/safwk/interfaces/innerkits/safwk:system_ability_fwk", + "//foundation/distributedschedule/samgr/interfaces/innerkits/samgr_proxy:samgr_proxy", + "//utils/native/base:utils", + ] + + external_deps = [ + "aafwk_standard:ability_manager", + "aafwk_standard:runtime", + "aafwk_standard:want", + "appexecfwk_standard:appexecfwk_base", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + "ipc_js:rpc", + ] + + relative_install_dir = "module/application" + + subsystem_name = "aafwk" + part_name = "aafwk_standard" +} diff --git a/interfaces/kits/napi/aafwk/ability_manager/ability_manager_module.cpp b/interfaces/kits/napi/aafwk/ability_manager/ability_manager_module.cpp new file mode 100644 index 00000000000..261cba341f0 --- /dev/null +++ b/interfaces/kits/napi/aafwk/ability_manager/ability_manager_module.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "native_engine/native_engine.h" +#include "js_ability_manager.h" + +extern "C" __attribute__((constructor)) +void NAPI_application_AbilityManager_AutoRegister() +{ + auto moduleManager = NativeModuleManager::GetInstance(); + NativeModule newModuleInfo = { + .name = "application.AbilityManager", + .fileName = "application/abilitymanager_napi.so/ability_manager.js", + .registerCallback = OHOS::AbilityRuntime::JsAbilityManagerInit, + }; + + moduleManager->Register(&newModuleInfo); +} \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.cpp b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.cpp new file mode 100644 index 00000000000..a86da7106b1 --- /dev/null +++ b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "js_ability_manager.h" + +#include + +#include "ability_manager_client.h" +#include "hilog_wrapper.h" +#include "js_runtime.h" +#include "js_runtime_utils.h" +#include "napi/native_api.h" +#include "if_system_ability_manager.h" +#include "iservice_registry.h" +#include "system_ability_definition.h" +#include "js_ability_manager_utils.h" +#include "event_runner.h" + +namespace OHOS { +namespace AbilityRuntime { +using AbilityManagerClient = AAFwk::AbilityManagerClient; +namespace { +class JsAbilityManager final { +public: + JsAbilityManager() = default; + ~JsAbilityManager() = default; + + static void Finalizer(NativeEngine* engine, void* data, void* hint) + { + HILOG_INFO("JsAbilityManager::Finalizer is called"); + std::unique_ptr(static_cast(data)); + } + + static NativeValue* GetAbilityRunningInfos(NativeEngine* engine, NativeCallbackInfo* info) + { + JsAbilityManager* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnGetAbilityRunningInfos(*engine, *info) : nullptr; + } + + static NativeValue* GetExtensionRunningInfos(NativeEngine* engine, NativeCallbackInfo* info) + { + JsAbilityManager* me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnGetExtensionRunningInfos(*engine, *info) : nullptr; + } + +private: + NativeValue* OnGetAbilityRunningInfos(NativeEngine &engine, NativeCallbackInfo &info) + { + HILOG_INFO("%{public}s is called", __FUNCTION__); + AsyncTask::CompleteCallback complete = + [](NativeEngine &engine, AsyncTask &task, int32_t status) { + std::vector infos; + auto errcode = AbilityManagerClient::GetInstance()->GetAbilityRunningInfos(infos); + if (errcode == 0) { + task.Resolve(engine, CreateJsAbilityRunningInfoArray(engine, infos)); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "Get mission infos failed.")); + } + }; + + NativeValue* lastParam = (info.argc == 0) ? nullptr : info.argv[0]; + NativeValue* result = nullptr; + AsyncTask::Schedule( + engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; + } + + NativeValue* OnGetExtensionRunningInfos(NativeEngine &engine, NativeCallbackInfo &info) + { + HILOG_INFO("%{public}s is called", __FUNCTION__); + if (info.argc == 0) { + HILOG_ERROR("Not enough params"); + return engine.CreateUndefined(); + } + int upperLimit = -1; + if (!ConvertFromJsValue(engine, info.argv[0], upperLimit)) { + HILOG_ERROR("Parse missionId failed"); + return engine.CreateUndefined(); + } + + AsyncTask::CompleteCallback complete = + [upperLimit](NativeEngine &engine, AsyncTask &task, int32_t status) { + std::vector infos; + auto errcode = AbilityManagerClient::GetInstance()->GetExtensionRunningInfos(upperLimit, infos); + if (errcode == 0) { + task.Resolve(engine, CreateJsExtensionRunningInfoArray(engine, infos)); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "Get mission infos failed.")); + } + }; + + NativeValue* lastParam = (info.argc == 1) ? nullptr : info.argv[1]; + NativeValue* result = nullptr; + AsyncTask::Schedule( + engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; + } +}; +} // namespace + +NativeValue* JsAbilityManagerInit(NativeEngine* engine, NativeValue* exportObj) +{ + HILOG_INFO("JsAbilityManagerInit is called"); + + if (engine == nullptr || exportObj == nullptr) { + HILOG_INFO("engine or exportObj null"); + return nullptr; + } + + NativeObject* object = ConvertNativeValueTo(exportObj); + if (object == nullptr) { + HILOG_INFO("object null"); + return nullptr; + } + + std::unique_ptr jsAbilityManager = std::make_unique(); + object->SetNativePointer(jsAbilityManager.release(), JsAbilityManager::Finalizer, nullptr); + + HILOG_INFO("JsAbilityManagerInit BindNativeFunction called"); + BindNativeFunction(*engine, *object, "getAbilityRunningInfos", JsAbilityManager::GetAbilityRunningInfos); + BindNativeFunction(*engine, *object, "getExtensionRunningInfos", JsAbilityManager::GetExtensionRunningInfos); + HILOG_INFO("JsAbilityManagerInit end"); + return engine->CreateUndefined(); +} +} // namespace AbilityRuntime +} // namespace OHOS diff --git a/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.h b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.h new file mode 100644 index 00000000000..d209c8dd966 --- /dev/null +++ b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "native_engine/native_engine.h" +#include "event_handler.h" + +#ifndef OHOS_ABILITY_RUNTIME_ABILITY_MANAGER_H +#define OHOS_ABILITY_RUNTIME_ABILITY_MANAGER_H + +namespace OHOS { +namespace AbilityRuntime { +NativeValue* JsAbilityManagerInit(NativeEngine* engine, NativeValue* exportObj); +} // namespace AbilityRuntime +} // namespace OHOS +#endif // OHOS_ABILITY_RUNTIME_ABILITY_MANAGER_H \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.cpp b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.cpp new file mode 100644 index 00000000000..191503be7b4 --- /dev/null +++ b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "js_ability_manager_utils.h" + +#include + +#include "hilog_wrapper.h" +#include "napi_common_want.h" +#include "napi_remote_object.h" +#include "js_runtime.h" +#include "js_runtime_utils.h" + +namespace OHOS { +namespace AbilityRuntime { +napi_value CreateJSToken(napi_env env, const sptr target) +{ + napi_value tokenClass = nullptr; + auto constructorcb = [](napi_env env, napi_callback_info info) -> napi_value { + napi_value thisVar = nullptr; + napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); + return thisVar; + }; + napi_define_class( + env, "TokenClass", NAPI_AUTO_LENGTH, constructorcb, nullptr, 0, nullptr, &tokenClass); + napi_value jsToken = nullptr; + napi_new_instance(env, tokenClass, 0, nullptr, &jsToken); + auto finalizecb = [](napi_env env, void *data, void *hint) {}; + napi_wrap(env, jsToken, (void *)target.GetRefPtr(), finalizecb, nullptr, nullptr); + return jsToken; +} + +NativeValue* CreateJsAbilityRunningInfoArray( + NativeEngine &engine, const std::vector &infos) +{ + NativeValue* arrayValue = engine.CreateArray(infos.size()); + NativeArray* array = ConvertNativeValueTo(arrayValue); + uint32_t index = 0; + for (const auto &runningInfo : infos) { + array->SetElement(index++, CreateJsAbilityRunningInfo(engine, runningInfo)); + } + return arrayValue; +} + +NativeValue* CreateJsExtensionRunningInfoArray( + NativeEngine &engine, const std::vector &infos) +{ + NativeValue* arrayValue = engine.CreateArray(infos.size()); + NativeArray* array = ConvertNativeValueTo(arrayValue); + uint32_t index = 0; + for (const auto &runningInfo : infos) { + array->SetElement(index++, CreateJsExtensionRunningInfo(engine, runningInfo)); + } + return arrayValue; +} + +NativeValue* CreateJsAbilityRunningInfo(NativeEngine &engine, const AAFwk::AbilityRunningInfo &info) +{ + NativeValue* objValue = engine.CreateObject(); + NativeObject* object = ConvertNativeValueTo(objValue); + + napi_value napiElementName = + OHOS::AppExecFwk::WrapElementName(reinterpret_cast(&engine), info.ability); + object->SetProperty("ability", reinterpret_cast(napiElementName)); + object->SetProperty("pid", CreateJsValue(engine, info.pid)); + object->SetProperty("uid", CreateJsValue(engine, info.uid)); + object->SetProperty("processName", CreateJsValue(engine, info.processName)); + object->SetProperty("startTime", CreateJsValue(engine, info.startTime)); + object->SetProperty("abilityState", CreateJsValue(engine, info.abilityState)); + return objValue; +} + +NativeValue* CreateJsExtensionRunningInfo(NativeEngine &engine, const AAFwk::ExtensionRunningInfo &info) +{ + NativeValue* objValue = engine.CreateObject(); + NativeObject* object = ConvertNativeValueTo(objValue); + + napi_value napiElementName = + OHOS::AppExecFwk::WrapElementName(reinterpret_cast(&engine), info.extension); + object->SetProperty("extension", reinterpret_cast(napiElementName)); + object->SetProperty("pid", CreateJsValue(engine, info.pid)); + object->SetProperty("uid", CreateJsValue(engine, info.uid)); + object->SetProperty("processName", CreateJsValue(engine, info.processName)); + object->SetProperty("startTime", CreateJsValue(engine, info.startTime)); + object->SetProperty("clientPackage", CreateNativeArray(engine, info.clientPackage)); + return objValue; +} +} // namespace AbilityRuntime +} // namespace OHOS diff --git a/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.h b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.h new file mode 100644 index 00000000000..855a34720f7 --- /dev/null +++ b/interfaces/kits/napi/aafwk/ability_manager/js_ability_manager_utils.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ability_running_info.h" +#include "extension_running_info.h" +#include "native_engine/native_engine.h" + +#ifndef OHOS_APPEXECFWK_RUNTIME_APP_MANAGER_UTILS_H +#define OHOS_APPEXECFWK_RUNTIME_APP_MANAGER_UTILS_H + +namespace OHOS { +namespace AbilityRuntime { +NativeValue* CreateJsAbilityRunningInfoArray( + NativeEngine &engine, const std::vector &infos); +NativeValue* CreateJsExtensionRunningInfoArray( + NativeEngine &engine, const std::vector &infos); +NativeValue* CreateJsAbilityRunningInfo(NativeEngine &engine, const AAFwk::AbilityRunningInfo &info); +NativeValue* CreateJsExtensionRunningInfo(NativeEngine &engine, const AAFwk::ExtensionRunningInfo &info); +} // namespace AbilityRuntime +} // namespace OHOS +#endif // OHOS_APPEXECFWK_RUNTIME_APP_MANAGER_UTILS_H \ No newline at end of file diff --git a/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn b/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn index 7b26afe1bcb..122801a7f38 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn +++ b/interfaces/kits/napi/aafwk/mission_manager/BUILD.gn @@ -25,13 +25,20 @@ ohos_shared_library("missionmanager_napi") { configs = [ "//foundation/aafwk/standard/services/common:common_config" ] - include_dirs = - [ "//foundation/multimedia/image_standard/interfaces/innerkits/include" ] + include_dirs = [ + "//foundation/multimedia/image_standard/interfaces/innerkits/include", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common", + "//base/global/resmgr_standard/interfaces/innerkits/include", + "//third_party/icu/icu4c/source/common", + "//foundation/aafwk/standard/frameworks/kits/ability/native/include/continuation/kits", + "//foundation/communication/ipc/ipc/native/src/napi/include", + ] deps = [ - "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/aafwk/standard/interfaces/innerkits/base:base", "//foundation/aafwk/standard/interfaces/innerkits/want:want", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common:napi_common", "//foundation/aafwk/standard/services/abilitymgr:abilityms", "//foundation/ace/napi:ace_napi", "//foundation/appexecfwk/standard/interfaces/innerkits/libeventhandler:libeventhandler", @@ -41,11 +48,13 @@ ohos_shared_library("missionmanager_napi") { ] external_deps = [ + "aafwk_standard:ability_manager", "aafwk_standard:runtime", "aafwk_standard:want", "appexecfwk_standard:appexecfwk_base", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "ipc_js:rpc", "multimedia_image_standard:image", ] diff --git a/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.cpp b/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.cpp index 5b20d9c5eb7..dcbe084b7d1 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.cpp +++ b/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.cpp @@ -16,6 +16,8 @@ #include "js_mission_info_utils.h" #include "hilog_wrapper.h" +#include "napi_common_want.h" +#include "napi_remote_object.h" #include "ohos/aafwk/base/array_wrapper.h" #include "ohos/aafwk/base/bool_wrapper.h" #include "ohos/aafwk/base/byte_wrapper.h" diff --git a/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.h b/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.h index 1b66f674428..00c01039dd7 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.h +++ b/interfaces/kits/napi/aafwk/mission_manager/js_mission_info_utils.h @@ -16,6 +16,9 @@ #include "js_runtime_utils.h" #include "mission_info.h" #include "mission_snapshot.h" +#include "ability_running_info.h" +#include "extension_running_info.h" +#include "running_process_info.h" #include "native_engine/native_engine.h" #include "ohos/aafwk/content/want_params_wrapper.h" #include "want.h" diff --git a/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp b/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp index 3f9a59de06d..8da52d39ad1 100644 --- a/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp +++ b/interfaces/kits/napi/aafwk/mission_manager/mission_manager.cpp @@ -460,6 +460,7 @@ NativeValue* JsMissionManagerInit(NativeEngine* engine, NativeValue* exportObj) BindNativeFunction(*engine, *object, "clearMission", JsMissionManager::ClearMission); BindNativeFunction(*engine, *object, "clearAllMissions", JsMissionManager::ClearAllMissions); BindNativeFunction(*engine, *object, "moveMissionToFront", JsMissionManager::MoveMissionToFront); + BindNativeFunction(*engine, *object, "moveMissionToFront", JsMissionManager::MoveMissionToFront); return engine->CreateUndefined(); } } // namespace AbilityRuntime diff --git a/services/abilitymgr/abilitymgr.gni b/services/abilitymgr/abilitymgr.gni index af51d4df38b..4778cad5486 100644 --- a/services/abilitymgr/abilitymgr.gni +++ b/services/abilitymgr/abilitymgr.gni @@ -39,6 +39,8 @@ abilityms_files = [ "${services_path}/abilitymgr/src/lifecycle_state_info.cpp", "${services_path}/abilitymgr/src/stack_info.cpp", "${services_path}/abilitymgr/src/mission_stack_info.cpp", + "${services_path}/abilitymgr/src/ability_running_info.cpp", + "${services_path}/abilitymgr/src/extension_running_info.cpp", "${services_path}/abilitymgr/src/mission_record_info.cpp", "${services_path}/abilitymgr/src/ability_record_info.cpp", "${services_path}/abilitymgr/src/ability_mission_info.cpp", diff --git a/services/abilitymgr/include/ability_connect_manager.h b/services/abilitymgr/include/ability_connect_manager.h index e5f8ceb6b40..8be56f1feb5 100644 --- a/services/abilitymgr/include/ability_connect_manager.h +++ b/services/abilitymgr/include/ability_connect_manager.h @@ -23,6 +23,8 @@ #include "ability_connect_callback_interface.h" #include "ability_event_handler.h" #include "ability_record.h" +#include "ability_running_info.h" +#include "extension_running_info.h" #include "connection_record.h" #include "element_name.h" #include "ohos/aafwk/content/want.h" @@ -181,6 +183,10 @@ public: ConnectListType GetConnectRecordListByCallback(sptr callback); void RemoveAll(); + void GetExtensionRunningInfos(int upperLimit, std::vector &info); + + void GetAbilityRunningInfos(std::vector &info); + /** * SetEventHandler. * diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 9255eb5f31a..f417e70f581 100755 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -525,6 +525,12 @@ public: virtual int StopUser(int userId, const sptr &callback) override; + virtual int GetAbilityRunningInfos(std::vector &info) override; + + virtual int GetExtensionRunningInfos(int upperLimit, std::vector &info) override; + + virtual int GetProcessRunningInfos(std::vector &info) override; + virtual int RegisterMissionListener(const std::string &deviceId, const sptr &listener) override; @@ -552,7 +558,7 @@ public: virtual int GetMissionSnapshot(const std::string& deviceId, int32_t missionId, MissionSnapshot& snapshot) override; private: - template + template int GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos); bool WriteInterfaceToken(MessageParcel &data); diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index f6c2176e820..02bfac738db 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -679,6 +679,10 @@ public: std::shared_ptr GetConfiguration(); + virtual int GetAbilityRunningInfos(std::vector &info) override; + virtual int GetExtensionRunningInfos(int upperLimit, std::vector &info) override; + virtual int GetProcessRunningInfos(std::vector &info) override; + int GetMissionSaveTime() const; /** diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index 1f377e1bfb4..fe39b4845ce 100755 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -125,6 +125,9 @@ private: int MoveMissionToFrontInner(MessageParcel &data, MessageParcel &reply); int StartUserInner(MessageParcel &data, MessageParcel &reply); int StopUserInner(MessageParcel &data, MessageParcel &reply); + int GetAbilityRunningInfosInner(MessageParcel &data, MessageParcel &reply); + int GetExtensionRunningInfosInner(MessageParcel &data, MessageParcel &reply); + int GetProcessRunningInfosInner(MessageParcel &data, MessageParcel &reply); int StartSyncRemoteMissionsInner(MessageParcel &data, MessageParcel &reply); int StopSyncRemoteMissionsInner(MessageParcel &data, MessageParcel &reply); diff --git a/services/abilitymgr/include/app_scheduler.h b/services/abilitymgr/include/app_scheduler.h index 2f088545156..2b72c2df772 100644 --- a/services/abilitymgr/include/app_scheduler.h +++ b/services/abilitymgr/include/app_scheduler.h @@ -28,6 +28,7 @@ #include "refbase.h" #include "singleton.h" #include "system_memory_attr.h" +#include "running_process_info.h" namespace OHOS { namespace AAFwk { @@ -223,11 +224,14 @@ public: */ void GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memoryInfo, std::string &strConfig); + void GetRunningProcessInfoByToken(const sptr &token, AppExecFwk::RunningProcessInfo &info); /** * Start a resident process */ void StartupResidentProcess(); + int GetProcessRunningInfos(std::vector &info); + protected: /** * OnAbilityRequestDone, app manager service call this interface after ability request done. diff --git a/services/abilitymgr/include/data_ability_manager.h b/services/abilitymgr/include/data_ability_manager.h index b3286f03df1..13b5a91517e 100644 --- a/services/abilitymgr/include/data_ability_manager.h +++ b/services/abilitymgr/include/data_ability_manager.h @@ -22,6 +22,7 @@ #include #include "ability_record.h" +#include "ability_running_info.h" #include "data_ability_record.h" #include "nocopyable.h" @@ -46,6 +47,7 @@ public: std::shared_ptr GetAbilityRecordByScheduler(const sptr &scheduler); void Dump(const char *func, int line); void DumpState(std::vector &info, const std::string &args = "") const; + void GetAbilityRunningInfos(std::vector &info); private: using DataAbilityRecordPtr = std::shared_ptr; diff --git a/services/abilitymgr/include/kernal_ability_manager.h b/services/abilitymgr/include/kernal_ability_manager.h index 45cae4e58a4..dd1ec48af34 100644 --- a/services/abilitymgr/include/kernal_ability_manager.h +++ b/services/abilitymgr/include/kernal_ability_manager.h @@ -20,6 +20,7 @@ #include #include "ability_record.h" +#include "ability_running_info.h" #include "want.h" namespace OHOS { @@ -91,6 +92,8 @@ public: void RestartAbility(const std::shared_ptr abilityRecord); + void GetAbilityRunningInfos(std::vector &info); + private: /** * StartAbilityLocked. diff --git a/services/abilitymgr/include/mission_list.h b/services/abilitymgr/include/mission_list.h index fe2008febc1..0a3911245c9 100644 --- a/services/abilitymgr/include/mission_list.h +++ b/services/abilitymgr/include/mission_list.h @@ -170,7 +170,7 @@ private: std::string GetTypeName(); MissionListType type_; - std::list> missions_; + std::list> missions_ {}; }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/include/mission_list_manager.h b/services/abilitymgr/include/mission_list_manager.h index fe7b0590606..25d5b2433f3 100644 --- a/services/abilitymgr/include/mission_list_manager.h +++ b/services/abilitymgr/include/mission_list_manager.h @@ -20,6 +20,7 @@ #include #include +#include "ability_running_info.h" #include "mission_list.h" #include "mission_listener_controller.h" #include "mission_info.h" @@ -249,6 +250,8 @@ public: * @param info dump result. */ void DumpMissionInfos(std::vector &info); + + void GetAbilityRunningInfos(std::vector &info); private: int StartAbilityLocked(const std::shared_ptr ¤tTopAbility, const std::shared_ptr &callerAbility, const AbilityRequest &abilityRequest); diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp index 43665d4d33a..243804717bd 100755 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -941,5 +941,62 @@ void AbilityConnectManager::DumpState(std::vector &info, const std: } } } + +void AbilityConnectManager::GetExtensionRunningInfos(int upperLimit, std::vector &info) +{ + HILOG_INFO("Get extension running info."); + std::lock_guard guard(Lock_); + auto queryInfo = [&info, upperLimit](ServiceMapType::reference service) { + if (static_cast(info.size()) >= upperLimit) { + return; + } + auto abilityRecord = service.second; + CHECK_POINTER(abilityRecord); + ExtensionRunningInfo extensionInfo; + AppExecFwk::RunningProcessInfo processInfo; + extensionInfo.extension = abilityRecord->GetWant().GetElement(); + DelayedSingleton::GetInstance()-> + GetRunningProcessInfoByToken(extensionInfo.token, processInfo); + extensionInfo.pid = processInfo.pid_; + extensionInfo.uid = processInfo.uid_; + extensionInfo.processName = processInfo.processName_; + extensionInfo.startTime = abilityRecord->GetStartTime(); + ConnectListType connectRecordList = abilityRecord->GetConnectRecordList(); + for (auto &connectRecord : connectRecordList) { + CHECK_POINTER(connectRecord); + auto callerAbilityRecord = Token::GetAbilityRecordByToken(connectRecord->GetToken()); + CHECK_POINTER(callerAbilityRecord); + std::string package = callerAbilityRecord->GetAbilityInfo().bundleName; + extensionInfo.clientPackage.emplace_back(package); + } + info.emplace_back(extensionInfo); + // extension type + }; + std::for_each(serviceMap_.begin(), serviceMap_.end(), queryInfo); +} + +void AbilityConnectManager::GetAbilityRunningInfos(std::vector &info) +{ + HILOG_INFO("Query running ability infos."); + std::lock_guard guard(Lock_); + + auto queryInfo = [&info](ServiceMapType::reference service) { + auto abilityRecord = service.second; + CHECK_POINTER(abilityRecord); + AbilityRunningInfo runningInfo; + AppExecFwk::RunningProcessInfo processInfo; + runningInfo.ability = abilityRecord->GetWant().GetElement(); + DelayedSingleton::GetInstance()-> + GetRunningProcessInfoByToken(runningInfo.token, processInfo); + runningInfo.pid = processInfo.pid_; + runningInfo.uid = processInfo.uid_; + runningInfo.processName = processInfo.processName_; + runningInfo.startTime = abilityRecord->GetStartTime(); + runningInfo.abilityState = static_cast(abilityRecord->GetAbilityState()); + info.emplace_back(runningInfo); + }; + + std::for_each(serviceMap_.begin(), serviceMap_.end(), queryInfo); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index c54f280f0db..704e52b82d7 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -753,6 +753,27 @@ ErrCode AbilityManagerClient::MoveMissionToFront(int32_t missionId) return abms->MoveMissionToFront(missionId); } +ErrCode AbilityManagerClient::GetAbilityRunningInfos(std::vector &info) +{ + CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); + sptr abms = iface_cast(remoteObject_); + return abms->GetAbilityRunningInfos(info); +} + +ErrCode AbilityManagerClient::GetExtensionRunningInfos(int upperLimit, std::vector &info) +{ + CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); + sptr abms = iface_cast(remoteObject_); + return abms->GetExtensionRunningInfos(upperLimit, info); +} + +ErrCode AbilityManagerClient::GetProcessRunningInfos(std::vector &info) +{ + CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); + sptr abms = iface_cast(remoteObject_); + return abms->GetProcessRunningInfos(info); +} + /** * Start synchronizing remote device mission * @param devId, deviceId. @@ -760,37 +781,32 @@ ErrCode AbilityManagerClient::MoveMissionToFront(int32_t missionId) * @param tag, call tag. * @return Returns ERR_OK on success, others on failure. */ -ErrCode AbilityManagerClient::StartSyncRemoteMissions(const std::string& devId, bool fixConflict, int64_t tag) +ErrCode AbilityManagerClient::StartSyncRemoteMissions(const std::string &devId, bool fixConflict, int64_t tag) { CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); auto abms = iface_cast(remoteObject_); return abms->StartSyncRemoteMissions(devId, fixConflict, tag); } - /** * Stop synchronizing remote device mission * @param devId, deviceId. * @return Returns ERR_OK on success, others on failure. */ -ErrCode AbilityManagerClient::StopSyncRemoteMissions(const std::string& devId) +ErrCode AbilityManagerClient::StopSyncRemoteMissions(const std::string &devId) { CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); auto abms = iface_cast(remoteObject_); return abms->StopSyncRemoteMissions(devId); } - ErrCode AbilityManagerClient::StartUser(int accountId) { CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); - sptr abms = iface_cast(remoteObject_); return abms->StartUser(accountId); } - ErrCode AbilityManagerClient::StopUser(int accountId, const sptr &callback) { CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); - sptr abms = iface_cast(remoteObject_); return abms->StopUser(accountId, callback); } @@ -810,4 +826,4 @@ ErrCode AbilityManagerClient::GetMissionSnapshot(const std::string& deviceId, in return abms->GetMissionSnapshot(deviceId, missionId, snapshot); } } // namespace AAFwk -} // namespace OHOS +} // namespace AAFwk diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index fc3a387d67e..cc965a489e8 100755 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -131,8 +131,8 @@ int AbilityManagerProxy::StartAbility(const Want &want, const sptr &callerToken, int requestCode) +int AbilityManagerProxy::StartAbility( + const Want &want, const StartOptions &startOptions, const sptr &callerToken, int requestCode) { int error; MessageParcel data; @@ -592,7 +592,7 @@ int AbilityManagerProxy::GetAllStackInfo(StackInfo &stackInfo) return result; } -template +template int AbilityManagerProxy::GetParcelableInfos(MessageParcel &reply, std::vector &parcelableInfos) { int32_t infoSize = reply.ReadInt32(); @@ -1983,6 +1983,80 @@ int AbilityManagerProxy::StopUser(int userId, const sptr &cal return reply.ReadInt32(); } +int AbilityManagerProxy::GetAbilityRunningInfos(std::vector &info) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + + auto error = Remote()->SendRequest(IAbilityManager::GET_ABILITY_RUNNING_INFO, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Get ability running info, error: %{public}d", error); + return error; + } + error = GetParcelableInfos(reply, info); + if (error != NO_ERROR) { + HILOG_ERROR("GetParcelableInfos fail, error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} + +int AbilityManagerProxy::GetExtensionRunningInfos(int upperLimit, std::vector &info) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + + if (!data.WriteInt32(upperLimit)) { + HILOG_ERROR("upperLimit write failed."); + return INNER_ERR; + } + + auto error = Remote()->SendRequest(IAbilityManager::GET_EXTENSION_RUNNING_INFO, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Get extension running info failed., error: %{public}d", error); + return error; + } + error = GetParcelableInfos(reply, info); + if (error != NO_ERROR) { + HILOG_ERROR("GetParcelableInfos fail, error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} + +int AbilityManagerProxy::GetProcessRunningInfos(std::vector &info) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + + auto error = Remote()->SendRequest(IAbilityManager::GET_PROCESS_RUNNING_INFO, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Get process running info, error: %{public}d", error); + return error; + } + error = GetParcelableInfos(reply, info); + if (error != NO_ERROR) { + HILOG_ERROR("GetParcelableInfos fail, error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} + int AbilityManagerProxy::StartSyncRemoteMissions(const std::string& devId, bool fixConflict, int64_t tag) { HILOG_INFO("called"); @@ -2131,4 +2205,4 @@ bool AbilityManagerProxy::IsUserAStabilityTest() return reply.ReadBool(); } } // namespace AAFwk -} // namespace OHOS +} // namespace OHOS \ No newline at end of file diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index b4837a79034..e9cc6ae4bd3 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -231,25 +231,27 @@ int AbilityManagerService::StartAbility( if (callerToken != nullptr && !VerificationToken(callerToken)) { return ERR_INVALID_VALUE; } - + HILOG_INFO("%{public}s 1111111111", __func__); AbilityRequest abilityRequest; int result = GenerateAbilityRequest(want, requestCode, abilityRequest, callerToken); if (result != ERR_OK) { HILOG_ERROR("Generate ability request error."); return result; } + HILOG_INFO("%{public}s 2222222", __func__); auto abilityInfo = abilityRequest.abilityInfo; result = AbilityUtil::JudgeAbilityVisibleControl(abilityInfo, callerUid); if (result != ERR_OK) { HILOG_ERROR("%{public}s JudgeAbilityVisibleControl error.", __func__); return result; } + HILOG_INFO("%{public}s 3333333", __func__); auto type = abilityInfo.type; if (type == AppExecFwk::AbilityType::DATA) { HILOG_ERROR("Cannot start data ability, use 'AcquireDataAbility()' instead."); return ERR_INVALID_VALUE; } - + HILOG_INFO("%{public}s 4444444", __func__); if (!AbilityUtil::IsSystemDialogAbility(abilityInfo.bundleName, abilityInfo.name)) { result = PreLoadAppDataAbilities(abilityInfo.bundleName); if (result != ERR_OK) { @@ -2799,6 +2801,59 @@ int AbilityManagerService::StopUser(int userId, const sptr &c return 0; } +int AbilityManagerService::GetAbilityRunningInfos(std::vector &info) +{ + HILOG_DEBUG("Get running ability infos."); + auto bundleMgr = GetBundleManager(); + if (!bundleMgr) { + HILOG_ERROR("bundleMgr is nullptr."); + return INNER_ERR; + } + + auto callerUid = IPCSkeleton::GetCallingUid(); + auto isSystem = bundleMgr->CheckIsSystemAppByUid(callerUid); + HILOG_DEBUG("callerUid : %{public}d, isSystem : %{public}d", callerUid, static_cast(isSystem)); + + if (!isSystem) { + HILOG_ERROR("callar is not system app."); + return INNER_ERR; + } + + currentMissionListManager_->GetAbilityRunningInfos(info); + kernalAbilityManager_->GetAbilityRunningInfos(info); + connectManager_->GetAbilityRunningInfos(info); + dataAbilityManager_->GetAbilityRunningInfos(info); + + return ERR_OK; +} + +int AbilityManagerService::GetExtensionRunningInfos(int upperLimit, std::vector &info) +{ + HILOG_DEBUG("Get extension infos, upperLimit : %{public}d", upperLimit); + auto bundleMgr = GetBundleManager(); + if (!bundleMgr) { + HILOG_ERROR("bundleMgr is nullptr."); + return INNER_ERR; + } + + auto callerUid = IPCSkeleton::GetCallingUid(); + auto isSystem = bundleMgr->CheckIsSystemAppByUid(callerUid); + HILOG_DEBUG("callerUid : %{public}d, isSystem : %{public}d", callerUid, static_cast(isSystem)); + + if (!isSystem) { + HILOG_ERROR("callar is not system app."); + return INNER_ERR; + } + + connectManager_->GetExtensionRunningInfos(upperLimit, info); + return ERR_OK; +} + +int AbilityManagerService::GetProcessRunningInfos(std::vector &info) +{ + return DelayedSingleton::GetInstance()->GetProcessRunningInfos(info); +} + void AbilityManagerService::ClearUserData(int32_t userId) { HILOG_DEBUG("%{public}s", __func__); diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index b94cf6b91ae..26252031815 100755 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -125,6 +125,9 @@ void AbilityManagerStub::SecondStepInit() requestFuncMap_[MOVE_MISSION_TO_FRONT] = &AbilityManagerStub::MoveMissionToFrontInner; requestFuncMap_[START_USER] = &AbilityManagerStub::StartUserInner; requestFuncMap_[STOP_USER] = &AbilityManagerStub::StopUserInner; + requestFuncMap_[GET_ABILITY_RUNNING_INFO] = &AbilityManagerStub::GetAbilityRunningInfosInner; + requestFuncMap_[GET_EXTENSION_RUNNING_INFO] = &AbilityManagerStub::GetExtensionRunningInfosInner; + requestFuncMap_[GET_PROCESS_RUNNING_INFO] = &AbilityManagerStub::GetProcessRunningInfosInner; requestFuncMap_[SET_ABILITY_CONTROLLER] = &AbilityManagerStub::SetAbilityControllerInner; requestFuncMap_[IS_USER_A_STABILITY_TEST] = &AbilityManagerStub::IsUserAStabilityTestInner; } @@ -1125,6 +1128,55 @@ int AbilityManagerStub::StopUserInner(MessageParcel &data, MessageParcel &reply) return NO_ERROR; } +int AbilityManagerStub::GetAbilityRunningInfosInner(MessageParcel &data, MessageParcel &reply) +{ + std::vector abilityRunningInfos; + auto result = GetAbilityRunningInfos(abilityRunningInfos); + reply.WriteInt32(abilityRunningInfos.size()); + for (auto &it : abilityRunningInfos) { + if (!reply.WriteParcelable(&it)) { + return ERR_INVALID_VALUE; + } + } + if (!reply.WriteInt32(result)) { + return ERR_INVALID_VALUE; + } + return result; +} + +int AbilityManagerStub::GetExtensionRunningInfosInner(MessageParcel &data, MessageParcel &reply) +{ + auto upperLimit = data.ReadInt32(); + std::vector infos; + auto result = GetExtensionRunningInfos(upperLimit, infos); + reply.WriteInt32(infos.size()); + for (auto &it : infos) { + if (!reply.WriteParcelable(&it)) { + return ERR_INVALID_VALUE; + } + } + if (!reply.WriteInt32(result)) { + return ERR_INVALID_VALUE; + } + return result; +} + +int AbilityManagerStub::GetProcessRunningInfosInner(MessageParcel &data, MessageParcel &reply) +{ + std::vector infos; + auto result = GetProcessRunningInfos(infos); + reply.WriteInt32(infos.size()); + for (auto &it : infos) { + if (!reply.WriteParcelable(&it)) { + return ERR_INVALID_VALUE; + } + } + if (!reply.WriteInt32(result)) { + return ERR_INVALID_VALUE; + } + return NO_ERROR; +} + int AbilityManagerStub::StartSyncRemoteMissionsInner(MessageParcel &data, MessageParcel &reply) { std::string deviceId = data.ReadString(); diff --git a/services/abilitymgr/src/ability_running_info.cpp b/services/abilitymgr/src/ability_running_info.cpp new file mode 100644 index 00000000000..7ea5da7739c --- /dev/null +++ b/services/abilitymgr/src/ability_running_info.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ability_running_info.h" +#include "hilog_wrapper.h" +#include "nlohmann/json.hpp" +#include "string_ex.h" + +namespace OHOS { +namespace AAFwk { +bool AbilityRunningInfo::ReadFromParcel(Parcel &parcel) +{ + std::unique_ptr abilityInfo(parcel.ReadParcelable()); + if (abilityInfo == nullptr) { + return false; + } + ability = *abilityInfo; + pid = parcel.ReadInt32(); + uid = parcel.ReadInt32(); + processName = Str16ToStr8(parcel.ReadString16()); + startTime = parcel.ReadInt64(); + abilityState = parcel.ReadInt32(); + return true; +} + +AbilityRunningInfo *AbilityRunningInfo::Unmarshalling(Parcel &parcel) +{ + AbilityRunningInfo *info = new (std::nothrow) AbilityRunningInfo(); + if (info == nullptr) { + return nullptr; + } + + if (!info->ReadFromParcel(parcel)) { + delete info; + info = nullptr; + } + return info; +} + +bool AbilityRunningInfo::Marshalling(Parcel &parcel) const +{ + if (!parcel.WriteParcelable(&ability)) { + return false; + } + if (!parcel.WriteInt32(pid)) { + return false; + } + if (!parcel.WriteInt32(uid)) { + return false; + } + if (!parcel.WriteString16(Str8ToStr16(processName))) { + return false; + } + if (!parcel.WriteInt64(startTime)) { + return false; + } + if (!parcel.WriteInt32(abilityState)) { + return false; + } + return true; +} +} // namespace AAFwk +} // namespace OHOS \ No newline at end of file diff --git a/services/abilitymgr/src/app_scheduler.cpp b/services/abilitymgr/src/app_scheduler.cpp index a9b95559f75..3e27e3db9c4 100644 --- a/services/abilitymgr/src/app_scheduler.cpp +++ b/services/abilitymgr/src/app_scheduler.cpp @@ -242,10 +242,22 @@ void AppScheduler::GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memoryInfo, appMgrClient_->GetSystemMemoryAttr(memoryInfo, strConfig); } +void AppScheduler::GetRunningProcessInfoByToken(const sptr &token, AppExecFwk::RunningProcessInfo &info) +{ + CHECK_POINTER(appMgrClient_); + appMgrClient_->GetRunningProcessInfoByToken(token, info); +} + void AppScheduler::StartupResidentProcess() { CHECK_POINTER(appMgrClient_); appMgrClient_->StartupResidentProcess(); } + +int AppScheduler::GetProcessRunningInfos(std::vector &info) +{ + CHECK_POINTER_AND_RETURN(appMgrClient_, INNER_ERR); + return static_cast(appMgrClient_->GetAllRunningProcesses(info)); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/data_ability_manager.cpp b/services/abilitymgr/src/data_ability_manager.cpp index db89bf074ae..7c16645db90 100644 --- a/services/abilitymgr/src/data_ability_manager.cpp +++ b/services/abilitymgr/src/data_ability_manager.cpp @@ -494,5 +494,38 @@ void DataAbilityManager::DumpState(std::vector &info, const std::st } return; } + +void DataAbilityManager::GetAbilityRunningInfos(std::vector &info) +{ + HILOG_INFO("Get ability running infos"); + std::lock_guard locker(mutex_); + + auto queryInfo = [&info](DataAbilityRecordPtrMap::reference data) { + auto dataAbilityRecord = data.second; + if (!dataAbilityRecord) { + return; + } + + auto abilityRecord = dataAbilityRecord->GetAbilityRecord(); + if (!abilityRecord) { + return; + } + + AbilityRunningInfo runningInfo; + AppExecFwk::RunningProcessInfo processInfo; + runningInfo.ability = abilityRecord->GetWant().GetElement(); + DelayedSingleton::GetInstance()-> + GetRunningProcessInfoByToken(runningInfo.token, processInfo); + runningInfo.pid = processInfo.pid_; + runningInfo.uid = processInfo.uid_; + runningInfo.processName = processInfo.processName_; + runningInfo.startTime = abilityRecord->GetStartTime(); + runningInfo.abilityState = static_cast(abilityRecord->GetAbilityState()); + info.emplace_back(runningInfo); + }; + + std::for_each(dataAbilityRecordsLoading_.begin(), dataAbilityRecordsLoading_.end(), queryInfo); + std::for_each(dataAbilityRecordsLoaded_.begin(), dataAbilityRecordsLoaded_.end(), queryInfo); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/extension_running_info.cpp b/services/abilitymgr/src/extension_running_info.cpp new file mode 100644 index 00000000000..5f6123a3357 --- /dev/null +++ b/services/abilitymgr/src/extension_running_info.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "extension_running_info.h" +#include "hilog_wrapper.h" +#include "nlohmann/json.hpp" +#include "string_ex.h" + +namespace OHOS { +namespace AAFwk { +bool ExtensionRunningInfo::ReadFromParcel(Parcel &parcel) +{ + std::unique_ptr readExtension(parcel.ReadParcelable()); + if (readExtension == nullptr) { + return false; + } + extension = *readExtension; + pid = parcel.ReadInt32(); + uid = parcel.ReadInt32(); + processName = Str16ToStr8(parcel.ReadString16()); + startTime = parcel.ReadInt32(); + int32_t clientPackageSize = parcel.ReadInt32(); + for (int32_t i = 0; i < clientPackageSize; i++) { + clientPackage.emplace_back(Str16ToStr8(parcel.ReadString16())); + } + return true; +} + +ExtensionRunningInfo *ExtensionRunningInfo::Unmarshalling(Parcel &parcel) +{ + ExtensionRunningInfo *info = new (std::nothrow) ExtensionRunningInfo(); + if (info == nullptr) { + return nullptr; + } + + if (!info->ReadFromParcel(parcel)) { + delete info; + info = nullptr; + } + return info; +} + +bool ExtensionRunningInfo::Marshalling(Parcel &parcel) const +{ + if (!parcel.WriteParcelable(&extension)) { + return false; + } + if (!parcel.WriteInt32(pid)) { + return false; + } + if (!parcel.WriteInt32(uid)) { + return false; + } + if (!parcel.WriteString16(Str8ToStr16(processName))) { + return false; + } + if (!parcel.WriteInt32(startTime)) { + return false; + } + int32_t clientPackageSize = static_cast(clientPackage.size()); + if (!parcel.WriteInt32(clientPackageSize)) { + return false; + } + for (std::string package : clientPackage) { + if (!parcel.WriteString16(Str8ToStr16(package))) { + return false; + } + } + return true; +} +} // namespace AAFwk +} // namespace OHOS \ No newline at end of file diff --git a/services/abilitymgr/src/kernal_ability_manager.cpp b/services/abilitymgr/src/kernal_ability_manager.cpp index e1dcd5ec2c4..5d8d8e51b0d 100644 --- a/services/abilitymgr/src/kernal_ability_manager.cpp +++ b/services/abilitymgr/src/kernal_ability_manager.cpp @@ -375,6 +375,32 @@ void KernalAbilityManager::OnTimeOut(uint32_t msgId, int64_t eventId) } } +void KernalAbilityManager::GetAbilityRunningInfos(std::vector &info) +{ + HILOG_DEBUG("Get ability running infos"); + std::lock_guard guard(stackLock_); + + for (auto &ability : abilities_) { + if (!ability) { + HILOG_DEBUG("ability is nullptr."); + continue; + } + + AbilityRunningInfo runningInfo; + AppExecFwk::RunningProcessInfo processInfo; + runningInfo.ability = ability->GetWant().GetElement(); + DelayedSingleton::GetInstance()-> + GetRunningProcessInfoByToken(runningInfo.token, processInfo); + runningInfo.pid = processInfo.pid_; + runningInfo.uid = processInfo.uid_; + runningInfo.processName = processInfo.processName_; + runningInfo.startTime = ability->GetStartTime(); + runningInfo.abilityState = static_cast(ability->GetAbilityState()); + info.emplace_back(runningInfo); + } +} + + void KernalAbilityManager::RestartAbility(const std::shared_ptr abilityRecord) { CHECK_POINTER(abilityRecord); diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index c934493732e..98b1a1676e7 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -1494,5 +1494,49 @@ void MissionListManager::DumpMission(int missionId, std::vector &in } innerMissionInfo.Dump(info); } + +void MissionListManager::GetAbilityRunningInfos(std::vector &info) +{ + std::lock_guard guard(managerLock_); + + auto func = [&info](const std::shared_ptr &mission) { + if (!mission) { + return; + } + + auto ability = mission->GetAbilityRecord(); + if (!ability) { + return; + } + + AbilityRunningInfo runningInfo; + AppExecFwk::RunningProcessInfo processInfo; + + runningInfo.ability = ability->GetWant().GetElement(); + runningInfo.startTime = ability->GetStartTime(); + runningInfo.abilityState = static_cast(ability->GetAbilityState()); + + DelayedSingleton::GetInstance()-> + GetRunningProcessInfoByToken(runningInfo.token, processInfo); + runningInfo.pid = processInfo.pid_; + runningInfo.uid = processInfo.uid_; + runningInfo.processName = processInfo.processName_; + info.emplace_back(runningInfo); + }; + if (!(defaultStandardList_->GetAllMissions().empty())) { + auto list = defaultStandardList_->GetAllMissions(); + std::for_each(list.begin(), list.end(), func); + } + if (!(defaultSingleList_->GetAllMissions().empty())) { + auto list = defaultSingleList_->GetAllMissions(); + std::for_each(list.begin(), list.end(), func); + } + for (auto missionList : currentMissionLists_) { + if (!(missionList->GetAllMissions().empty())) { + auto list = missionList->GetAllMissions(); + std::for_each(list.begin(), list.end(), func); + } + } +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h b/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h index dce7b43aec7..e7b572911db 100644 --- a/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h +++ b/services/abilitymgr/test/mock/libs/appexecfwk_core/include/bundlemgr/mock_bundle_manager.h @@ -36,6 +36,7 @@ const std::string COM_IX_HIRADIO = "com.ix.hiRadio"; const std::string COM_IX_HISERVICE = "com.ix.hiService"; const std::string COM_IX_MUSICSERVICE = "com.ix.musicService"; const std::string COM_IX_HIDATA = "com.ix.hiData"; +const std::string COM_IX_HIEXTENSION = "com.ix.hiExtension"; constexpr int32_t MAX_SYS_UID = 2899; constexpr int32_t ROOT_UID = 0; @@ -123,6 +124,16 @@ auto HiDataInfo = [](std::string bundleName, AbilityInfo &abilityInfo, ElementNa abilityInfo.process = "p6"; return true; }; + +auto HiExtensionInfo = [](std::string bundleName, AbilityInfo &abilityInfo, ElementName &elementTemp) { + abilityInfo.name = elementTemp.GetAbilityName(); + abilityInfo.bundleName = elementTemp.GetBundleName(); + abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName(); + abilityInfo.applicationName = "hiExtension"; + abilityInfo.applicationInfo.name = "hiExtension"; + abilityInfo.type = AbilityType::EXTENSION; + return true; +}; } // namespace class BundleMgrProxy : public IRemoteProxy { public: diff --git a/services/abilitymgr/test/mock/libs/appexecfwk_core/src/appmgr/mock_app_scheduler.cpp b/services/abilitymgr/test/mock/libs/appexecfwk_core/src/appmgr/mock_app_scheduler.cpp index 84145783d0b..45dedded486 100644 --- a/services/abilitymgr/test/mock/libs/appexecfwk_core/src/appmgr/mock_app_scheduler.cpp +++ b/services/abilitymgr/test/mock/libs/appexecfwk_core/src/appmgr/mock_app_scheduler.cpp @@ -164,5 +164,16 @@ void AppScheduler::StartupResidentProcess() { HILOG_INFO("Test AppScheduler::StartupResidentProcess()"); } + +int AppScheduler::GetProcessRunningInfos(std::vector &info) +{ + HILOG_INFO("Test AppScheduler::GetProcessRunningInfos()"); + return 0; +} + +void AppScheduler::GetRunningProcessInfoByToken(const sptr &token, AppExecFwk::RunningProcessInfo &info) +{ + HILOG_INFO("Test AppScheduler::GetRunningProcessInfoByToken()"); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp b/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp index 989dfbfbef4..8a01e9423e5 100644 --- a/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp +++ b/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp @@ -87,7 +87,8 @@ BundleMgrService::BundleMgrService() abilityInfoMap_.emplace(COM_IX_HIRADIO, HiRadioInfo); abilityInfoMap_.emplace(COM_IX_HISERVICE, HiServiceInfo); abilityInfoMap_.emplace(COM_IX_MUSICSERVICE, MusicServiceInfo); - abilityInfoMap_.emplace(COM_IX_HIDATA, HiDataInfo); + abilityInfoMap_.emplace(COM_IX_HIDATA, HiDataInfo); + abilityInfoMap_.emplace(COM_IX_HIEXTENSION, HiExtensionInfo); GTEST_LOG_(INFO) << "BundleMgrService()"; } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h index 4bbdfa5e31e..ba9b246a54d 100755 --- a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h @@ -379,6 +379,9 @@ public: MOCK_METHOD0(CleanAllMissions, int()); MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h index 0075b557b50..63830d69ee5 100755 --- a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h @@ -54,6 +54,10 @@ public: MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + int InvokeSendRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { code_ = code; diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h index 2ed83816db6..a9c0d71074a 100755 --- a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h @@ -98,6 +98,11 @@ public: MOCK_METHOD1(TerminateAbilityTest, void(int id)); MOCK_METHOD1(MoveMissionToEnd, int(int id)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); + + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + virtual int StartUser(int userId) override { return 0; diff --git a/services/test/mock/include/mock_ability_mgr_service.h b/services/test/mock/include/mock_ability_mgr_service.h index a95f9080f81..ada77c0675e 100755 --- a/services/test/mock/include/mock_ability_mgr_service.h +++ b/services/test/mock/include/mock_ability_mgr_service.h @@ -109,6 +109,10 @@ public: MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + virtual int StartUser(int userId) override { return 0; diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h index 73fe0ad0e5b..9f7ce482a95 100755 --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -133,6 +133,10 @@ public: MOCK_METHOD1(MoveMissionToFront, int(int32_t missionId)); MOCK_METHOD1(ClearUpApplicationData, int(const std::string &)); + MOCK_METHOD1(GetAbilityRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetExtensionRunningInfos, int(int upperLimit, std::vector &info)); + MOCK_METHOD1(GetProcessRunningInfos, int(std::vector &info)); + MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); virtual int StartUser(int userId) override { -- Gitee From 00a2a5b465270806b081a0fee1996677a66c9fe1 Mon Sep 17 00:00:00 2001 From: njupthan Date: Mon, 17 Jan 2022 17:49:46 +0000 Subject: [PATCH 4/7] Fix codex Signed-off-by: njupthan --- services/abilitymgr/src/ability_connect_manager.cpp | 4 ++-- services/abilitymgr/src/data_ability_manager.cpp | 2 +- services/abilitymgr/src/kernal_ability_manager.cpp | 2 +- services/abilitymgr/src/mission_list_manager.cpp | 2 +- .../appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp index 243804717bd..b276cdeb63d 100755 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -956,7 +956,7 @@ void AbilityConnectManager::GetExtensionRunningInfos(int upperLimit, std::vector AppExecFwk::RunningProcessInfo processInfo; extensionInfo.extension = abilityRecord->GetWant().GetElement(); DelayedSingleton::GetInstance()-> - GetRunningProcessInfoByToken(extensionInfo.token, processInfo); + GetRunningProcessInfoByToken(abilityRecord->GetToken(), processInfo); extensionInfo.pid = processInfo.pid_; extensionInfo.uid = processInfo.uid_; extensionInfo.processName = processInfo.processName_; @@ -987,7 +987,7 @@ void AbilityConnectManager::GetAbilityRunningInfos(std::vectorGetWant().GetElement(); DelayedSingleton::GetInstance()-> - GetRunningProcessInfoByToken(runningInfo.token, processInfo); + GetRunningProcessInfoByToken(abilityRecord->GetToken(), processInfo); runningInfo.pid = processInfo.pid_; runningInfo.uid = processInfo.uid_; runningInfo.processName = processInfo.processName_; diff --git a/services/abilitymgr/src/data_ability_manager.cpp b/services/abilitymgr/src/data_ability_manager.cpp index 7c16645db90..898e3847432 100644 --- a/services/abilitymgr/src/data_ability_manager.cpp +++ b/services/abilitymgr/src/data_ability_manager.cpp @@ -515,7 +515,7 @@ void DataAbilityManager::GetAbilityRunningInfos(std::vector AppExecFwk::RunningProcessInfo processInfo; runningInfo.ability = abilityRecord->GetWant().GetElement(); DelayedSingleton::GetInstance()-> - GetRunningProcessInfoByToken(runningInfo.token, processInfo); + GetRunningProcessInfoByToken(abilityRecord->GetToken(), processInfo); runningInfo.pid = processInfo.pid_; runningInfo.uid = processInfo.uid_; runningInfo.processName = processInfo.processName_; diff --git a/services/abilitymgr/src/kernal_ability_manager.cpp b/services/abilitymgr/src/kernal_ability_manager.cpp index 5d8d8e51b0d..1667b8db46f 100644 --- a/services/abilitymgr/src/kernal_ability_manager.cpp +++ b/services/abilitymgr/src/kernal_ability_manager.cpp @@ -390,7 +390,7 @@ void KernalAbilityManager::GetAbilityRunningInfos(std::vectorGetWant().GetElement(); DelayedSingleton::GetInstance()-> - GetRunningProcessInfoByToken(runningInfo.token, processInfo); + GetRunningProcessInfoByToken(ability->GetToken(), processInfo); runningInfo.pid = processInfo.pid_; runningInfo.uid = processInfo.uid_; runningInfo.processName = processInfo.processName_; diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index 98b1a1676e7..80580441eb1 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -1517,7 +1517,7 @@ void MissionListManager::GetAbilityRunningInfos(std::vector runningInfo.abilityState = static_cast(ability->GetAbilityState()); DelayedSingleton::GetInstance()-> - GetRunningProcessInfoByToken(runningInfo.token, processInfo); + GetRunningProcessInfoByToken(ability->GetToken(), processInfo); runningInfo.pid = processInfo.pid_; runningInfo.uid = processInfo.uid_; runningInfo.processName = processInfo.processName_; diff --git a/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp b/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp index 8a01e9423e5..2b08969a3bf 100644 --- a/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp +++ b/services/abilitymgr/test/mock/libs/appexecfwk_core/src/bundlemgr/mock_bundle_manager.cpp @@ -87,8 +87,8 @@ BundleMgrService::BundleMgrService() abilityInfoMap_.emplace(COM_IX_HIRADIO, HiRadioInfo); abilityInfoMap_.emplace(COM_IX_HISERVICE, HiServiceInfo); abilityInfoMap_.emplace(COM_IX_MUSICSERVICE, MusicServiceInfo); - abilityInfoMap_.emplace(COM_IX_HIDATA, HiDataInfo); - abilityInfoMap_.emplace(COM_IX_HIEXTENSION, HiExtensionInfo); + abilityInfoMap_.emplace(COM_IX_HIDATA, HiDataInfo); + abilityInfoMap_.emplace(COM_IX_HIEXTENSION, HiExtensionInfo); GTEST_LOG_(INFO) << "BundleMgrService()"; } -- Gitee From f8981bf8aee16e7398b23e1831448031f41af657 Mon Sep 17 00:00:00 2001 From: njupthan Date: Mon, 17 Jan 2022 19:26:32 +0000 Subject: [PATCH 5/7] Fix codex Signed-off-by: njupthan --- .../innerkits/ability_manager/ability_manager_headers.gni | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interfaces/innerkits/ability_manager/ability_manager_headers.gni b/interfaces/innerkits/ability_manager/ability_manager_headers.gni index e5021289e2f..057a03e5b05 100644 --- a/interfaces/innerkits/ability_manager/ability_manager_headers.gni +++ b/interfaces/innerkits/ability_manager/ability_manager_headers.gni @@ -20,7 +20,7 @@ ability_manager_headers = { "ability_manager_interface.h", "ability_running_info.h", "ability_scheduler_interface.h", - "extension_running_info.h" + "extension_running_info.h", "lifecycle_state_info.h", "mission_stack_info.h", "stack_info.h", @@ -41,4 +41,4 @@ ability_manager_headers = { "shared_memory.h", ] header_base = "interfaces/innerkits/ability_manager/include" -} \ No newline at end of file +} -- Gitee From 02e463096d203699b8f8f1087af90f5e3ff4dbc6 Mon Sep 17 00:00:00 2001 From: njupthan Date: Mon, 17 Jan 2022 21:45:14 +0000 Subject: [PATCH 6/7] Context provides application/Hap package/component information query capability Signed-off-by: njupthan --- .../native/js_data_struct_converter.cpp | 28 ++++++++++++++++++- .../include/js_data_struct_converter.h | 2 ++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/frameworks/kits/runtime/native/js_data_struct_converter.cpp b/frameworks/kits/runtime/native/js_data_struct_converter.cpp index b4a9583fba2..bb26794ba1b 100644 --- a/frameworks/kits/runtime/native/js_data_struct_converter.cpp +++ b/frameworks/kits/runtime/native/js_data_struct_converter.cpp @@ -78,11 +78,33 @@ NativeValue* CreateJsAbilityInfo(NativeEngine& engine, const AppExecFwk::Ability object->SetProperty("minFormWidth", CreateJsValue(engine, abilityInfo.minFormWidth)); object->SetProperty("defaultFormWidth", CreateJsValue(engine, abilityInfo.defaultFormWidth)); object->SetProperty("uri", CreateJsValue(engine, abilityInfo.uri)); - // customizeData: Map>; + object->SetProperty("metaData", CreateJsCustomizeDataArray(engine, abilityInfo.metaData.customizeData)); return objValue; } +NativeValue* CreateJsCustomizeData(NativeEngine& engine, const AppExecFwk::CustomizeData &Info) +{ + NativeValue *objValue = engine.CreateObject(); + NativeObject *object = ConvertNativeValueTo(objValue); + + object->SetProperty("name", CreateJsValue(engine, Info.name)); + object->SetProperty("value", CreateJsValue(engine, Info.value)); + object->SetProperty("extra", CreateJsValue(engine, Info.extra)); + return objValue; +} + +NativeValue* CreateJsCustomizeDataArray(NativeEngine& engine, const std::vector &info) +{ + NativeValue* arrayValue = engine.CreateArray(info.size()); + NativeArray* array = ConvertNativeValueTo(arrayValue); + uint32_t index = 0; + for (const auto& item : info) { + array->SetElement(index++, CreateJsCustomizeData(engine, item)); + } + return arrayValue; +} + NativeValue* CreateJsModuleInfo(NativeEngine& engine, const AppExecFwk::ModuleInfo &moduleInfo) { NativeValue *objValue = engine.CreateObject(); @@ -126,6 +148,10 @@ NativeValue* CreateJsApplicationInfo(NativeEngine& engine, const AppExecFwk::App } } object->SetProperty("moduleInfo", arrayValue); + // metaData: Map>; + for (auto &item : applicationInfo.metaData) { + object->SetProperty(item.first.c_str(), CreateJsCustomizeDataArray(engine, item.second)); + } return objValue; } diff --git a/interfaces/innerkits/runtime/include/js_data_struct_converter.h b/interfaces/innerkits/runtime/include/js_data_struct_converter.h index 739234ffd28..67b41a09c7f 100644 --- a/interfaces/innerkits/runtime/include/js_data_struct_converter.h +++ b/interfaces/innerkits/runtime/include/js_data_struct_converter.h @@ -32,6 +32,8 @@ NativeValue* CreateJsAbilityInfo(NativeEngine& engine, const AppExecFwk::Ability NativeValue* CreateJsModuleInfo(NativeEngine& engine, const AppExecFwk::ModuleInfo &moduleInfo); NativeValue* CreateJsApplicationInfo(NativeEngine& engine, const AppExecFwk::ApplicationInfo &applicationInfo); NativeValue* CreateJsLaunchParam(NativeEngine& engine, const AAFwk::LaunchParam& launchParam); +NativeValue* CreateJsCustomizeData(NativeEngine& engine, const AppExecFwk::CustomizeData &Info); +NativeValue* CreateJsCustomizeDataArray(NativeEngine& engine, const std::vector &info); } // namespace AbilityRuntime } // namespace OHOS #endif // ABILITY_RUNTIME_JS_DATA_STRUCT_CONVERTER_H \ No newline at end of file -- Gitee From a97e4c9c4a68b975928e8675002c14e93e573c08 Mon Sep 17 00:00:00 2001 From: tusi_fly Date: Tue, 18 Jan 2022 18:33:43 +0800 Subject: [PATCH 7/7] contentStorage Signed-off-by: tusi_fly Change-Id: Ie0a6929f445bfdc9541ca5b59580fa04eb808056 --- .../ability/native/src/ability_runtime/js_window_stage.cpp | 3 +-- frameworks/kits/runtime/native/js_runtime.cpp | 2 ++ interfaces/innerkits/runtime/BUILD.gn | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_window_stage.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_window_stage.cpp index eb189da6dcc..d24c0040b90 100644 --- a/frameworks/kits/ability/native/src/ability_runtime/js_window_stage.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_window_stage.cpp @@ -129,8 +129,7 @@ NativeValue* JsWindowStage::OnSetUIContent(NativeEngine& engine, NativeCallbackI } HILOG_INFO("JsWindowStage::OnSetUIContent Get url: %{public}s", contextUrl.c_str()); - windowScene_->GetMainWindow()->SetUIContent(contextUrl, &engine, - static_cast(abilityContext->GetContentStorage())); + windowScene_->GetMainWindow()->SetUIContent(contextUrl, &engine, info.argv[2]); return engine.CreateUndefined(); } diff --git a/frameworks/kits/runtime/native/js_runtime.cpp b/frameworks/kits/runtime/native/js_runtime.cpp index 85c64e55541..4d36368bbfe 100644 --- a/frameworks/kits/runtime/native/js_runtime.cpp +++ b/frameworks/kits/runtime/native/js_runtime.cpp @@ -21,6 +21,7 @@ #include #include "native_engine/impl/ark/ark_native_engine.h" +#include "declarative_module_preloader.h" #include "event_handler.h" #include "hilog_wrapper.h" @@ -269,6 +270,7 @@ bool JsRuntime::Initialize(const Options& options) return false; } + OHOS::Ace::DeclarativeModulePreloader::Preload(*nativeEngine_); codePath_ = options.codePath; return true; } diff --git a/interfaces/innerkits/runtime/BUILD.gn b/interfaces/innerkits/runtime/BUILD.gn index 19aa60c882d..3c090a96075 100644 --- a/interfaces/innerkits/runtime/BUILD.gn +++ b/interfaces/innerkits/runtime/BUILD.gn @@ -57,6 +57,7 @@ ohos_shared_library("runtime") { deps = [ "//ark/js_runtime:libark_jsruntime", + "//foundation/ace/ace_engine/interfaces/innerkits/ace:ace_uicontent", "//foundation/ace/napi:ace_napi", "//foundation/ace/napi:ace_napi_ark", "//utils/native/base:utils", -- Gitee