diff --git a/interfaces/inner_api/appexecfwk_core/BUILD.gn b/interfaces/inner_api/appexecfwk_core/BUILD.gn index da872f3e119e7d677425b41f931c46a43c542417..6309de578960ebf1364a9875305820311f012036 100644 --- a/interfaces/inner_api/appexecfwk_core/BUILD.gn +++ b/interfaces/inner_api/appexecfwk_core/BUILD.gn @@ -25,6 +25,15 @@ idl_gen_interface("verify_manager_interface") { hitrace = "HITRACE_TAG_APP" } +idl_gen_interface("default_app_interface") { + sources = [ "IDefaultApp.idl" ] + # log_domainid = "0xD001120" + # log_tag = "BMS" + subsystem_name = "bundlemanager" + part_name = "bundle_framework" + hitrace = "HITRACE_TAG_APP" +} + config("bundlemgr_ipc_public_config") { include_dirs = [ "${target_gen_dir}" ] } @@ -166,8 +175,11 @@ ohos_shared_library("appexecfwk_core") { if (bundle_framework_default_app) { defines += [ "BUNDLE_FRAMEWORK_DEFAULT_APP" ] sources += [ - "src/default_app/default_app_host.cpp", - "src/default_app/default_app_proxy.cpp", + "src/default_app/default_app_client.cpp", + ] + deps += [ + ":default_app_proxy", + ":default_app_stub", ] } @@ -259,6 +271,7 @@ ohos_shared_library("bundlemgr_mini") { } deps = [ ":bundle_mgr_ext_interface", + ":default_app_interface", ":verify_manager_interface", "${base_path}:appexecfwk_base", "${common_path}:libappexecfwk_common", @@ -431,4 +444,82 @@ ohos_source_set("bundle_mgr_ext_stub") { ] subsystem_name = "bundlemanager" part_name = "bundle_framework" +} + +ohos_source_set("default_app_proxy") { + sanitize = { + cboundary_sanitize = true + cfi = true + cfi_cross_dso = true + debug = false + integer_overflow = true + ubsan = true + } + cflags = [ + "-Os", + "-fstack-protector-strong", + ] + + cflags_cc = [ + "-Os", + "-fstack-protector-strong", + ] + + if (target_cpu == "arm") { + cflags += [ "-DBINDER_IPC_32BIT" ] + } + output_values = get_target_outputs(":default_app_interface") + sources = filter_include(output_values, [ "*default_app_proxy.cpp" ]) + deps = [ + ":default_app_interface", + "${base_path}:appexecfwk_base", + ] + external_deps = [ + "ability_base:want", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", + ] + subsystem_name = "bundlemanager" + part_name = "bundle_framework" +} + +ohos_source_set("default_app_stub") { + sanitize = { + boundary_sanitize = true + cfi = true + cfi_cross_dso = true + debug = false + integer_overflow = true + ubsan = true + } + cflags = [ + "-Os", + "-fstack-protector-strong", + ] + + cflags_cc = [ + "-Os", + "-fstack-protector-strong", + ] + + if (target_cpu == "arm") { + cflags += [ "-DBINDER_IPC_32BIT" ] + } + output_values = get_target_outputs(":default_app_interface") + sources = filter_include(output_values, [ "*default_app_stub.cpp" ]) + deps = [ + ":default_app_interface", + "${base_path}:appexecfwk_base", + ] + external_deps = [ + "ability_base:want", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "ipc:ipc_core", + ] + subsystem_name = "bundlemanager" + part_name = "bundle_framework" } \ No newline at end of file diff --git a/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_proxy.h b/interfaces/inner_api/appexecfwk_core/IDefaultApp.idl similarity index 30% rename from interfaces/inner_api/appexecfwk_core/include/default_app/default_app_proxy.h rename to interfaces/inner_api/appexecfwk_core/IDefaultApp.idl index c972f875ad870711f17a52c237794ce8a05aa10e..dd34523a80d486a640fa248cf0c0831dc3b9c123 100644 --- a/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_proxy.h +++ b/interfaces/inner_api/appexecfwk_core/IDefaultApp.idl @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2025 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 @@ -13,31 +13,14 @@ * limitations under the License. */ -#ifndef FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_PROXY_H -#define FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_PROXY_H + sequenceable OHOS.AAFwk.Want; + sequenceable OHOS.AppExecFwk.BundleInfo; -#include "bundle_framework_core_ipc_interface_code.h" -#include "default_app_interface.h" -#include "iremote_proxy.h" - -namespace OHOS { -namespace AppExecFwk { -class DefaultAppProxy : public IRemoteProxy { -public: - explicit DefaultAppProxy(const sptr& object); - virtual ~DefaultAppProxy(); - - virtual ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp) override; - virtual ErrCode GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo) override; - virtual ErrCode SetDefaultApplication(int32_t userId, const std::string& type, const Want& want) override; - virtual ErrCode ResetDefaultApplication(int32_t userId, const std::string& type) override; - -private: - template - ErrCode GetParcelableInfo(DefaultAppInterfaceCode code, MessageParcel& data, T& parcelableInfo); - bool SendRequest(DefaultAppInterfaceCode code, MessageParcel& data, MessageParcel& reply); - static inline BrokerDelegator delegator_; -}; -} -} -#endif + option_stub_hooks on; + interface_token ohos.appexecfwk.DefaultApp; + interface OHOS.AppExecFwk.IDefaultApp { + [ipccode 0]void IsDefaultApplication([in] String type, [out] boolean isDefaultApp, [out] int funcResult); + [ipccode 1]void GetDefaultApplication([in] int userId, [in] String type, [out] BundleInfo bundleInfo, [out] int funcResult); + [ipccode 2]void SetDefaultApplication([in] int userId, [in] String type, [in] Want want, [out] int funcResult); + [ipccode 3]void ResetDefaultApplication([in] int userId, [in] String type, [out] int funcResult); + } \ No newline at end of file diff --git a/interfaces/inner_api/appexecfwk_core/include/bundle_framework_core_ipc_interface_code.h b/interfaces/inner_api/appexecfwk_core/include/bundle_framework_core_ipc_interface_code.h index fa43eea1e577a3d58fc54e4fdd95545d14f62aaa..558bbbd3565cae162f3ddd19b3301153def4ff6b 100644 --- a/interfaces/inner_api/appexecfwk_core/include/bundle_framework_core_ipc_interface_code.h +++ b/interfaces/inner_api/appexecfwk_core/include/bundle_framework_core_ipc_interface_code.h @@ -312,14 +312,6 @@ enum class StatusReceiverInterfaceCode : uint8_t { ON_FINISHED = 1, }; -/* SAID: 401-74 Interface No.74 subservice also provides the following interfaces */ -enum class DefaultAppInterfaceCode : uint8_t { - IS_DEFAULT_APPLICATION = 0, - GET_DEFAULT_APPLICATION = 1, - SET_DEFAULT_APPLICATION = 2, - RESET_DEFAULT_APPLICATION = 3, -}; - /* SAID: 401-100 Interface No.100 subservice also provides the following interfaces */ enum class OverlayManagerInterfaceCode : uint8_t { GET_ALL_OVERLAY_MODULE_INFO = 0, diff --git a/interfaces/inner_api/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h b/interfaces/inner_api/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h index 5eb6ba8a9999f87000dc60d56c9d4c2900a31039..30ce0d05923adb63a175f8268c7e90fad9b02c58 100644 --- a/interfaces/inner_api/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h +++ b/interfaces/inner_api/appexecfwk_core/include/bundlemgr/bundle_mgr_interface.h @@ -36,9 +36,9 @@ #include "data_group_info.h" #include "app_control_interface.h" #include "bundle_resource_interface.h" -#include "default_app_interface.h" #include "extend_resource_manager_interface.h" #include "ibundle_mgr_ext.h" +#include "idefault_app.h" #include "overlay_manager_interface.h" #include "plugin/plugin_bundle_info.h" #include "quick_fix_manager_interface.h" diff --git a/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_interface.h b/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_client.h similarity index 38% rename from interfaces/inner_api/appexecfwk_core/include/default_app/default_app_interface.h rename to interfaces/inner_api/appexecfwk_core/include/default_app/default_app_client.h index d483abdd63f70f8c3c937afbdd8dd024ce0adb33..c584df95aad4a7e0422d7cb8e89b7e9c99a4009f 100644 --- a/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_interface.h +++ b/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_client.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2025 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 @@ -13,39 +13,51 @@ * limitations under the License. */ -#ifndef FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_INTERFACE_H -#define FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_INTERFACE_H +#ifndef FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_CLIENT_H +#define FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_CLIENT_H + +#include #include "appexecfwk_errors.h" #include "bundle_info.h" -#include "iremote_broker.h" +#include "bundle_mgr_interface.h" +#include "idefault_app.h" #include "want.h" namespace OHOS { namespace AppExecFwk { -class IDefaultApp : public IRemoteBroker { + +class DefaultAppClient { public: using Want = OHOS::AAFwk::Want; + static DefaultAppClient &GetInstance(); + + ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp); + ErrCode GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo); + ErrCode SetDefaultApplication(int32_t userId, const std::string& type, const Want& want); + ErrCode ResetDefaultApplication(int32_t userId, const std::string& type); + +private: + DefaultAppClient(); + ~DefaultAppClient(); + DISALLOW_COPY_AND_MOVE(DefaultAppClient); + + class DefaultAppDeathRecipient : public IRemoteObject::DeathRecipient { + public: + DefaultAppDeathRecipient() = default; + ~DefaultAppDeathRecipient() override = default; + void OnRemoteDied(const wptr& remote) override; + + private: + DISALLOW_COPY_AND_MOVE(DefaultAppDeathRecipient); + }; + void ResetDefaultAppProxy(const wptr& remote); + sptr GetDefaultAppProxy(); - DECLARE_INTERFACE_DESCRIPTOR(u"ohos.appexecfwk.DefaultApp"); - - virtual ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp) - { - return ERR_APPEXECFWK_SERVICE_INTERNAL_ERROR; - } - virtual ErrCode GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo) - { - return ERR_APPEXECFWK_SERVICE_INTERNAL_ERROR; - } - virtual ErrCode SetDefaultApplication(int32_t userId, const std::string& type, const Want& want) - { - return ERR_APPEXECFWK_SERVICE_INTERNAL_ERROR; - } - virtual ErrCode ResetDefaultApplication(int32_t userId, const std::string& type) - { - return ERR_APPEXECFWK_SERVICE_INTERNAL_ERROR; - } + std::mutex mutex_; + sptr deathRecipient_ = nullptr; + sptr defaultApp_; }; } } -#endif +#endif // FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_CLIENT_H \ No newline at end of file diff --git a/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_client.cpp b/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_client.cpp new file mode 100644 index 0000000000000000000000000000000000000000..83c325d013acb2156ea1136e7b657703fc2d2e29 --- /dev/null +++ b/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_client.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2025 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 "default_app_client.h" + +#include "app_log_tag_wrapper.h" +#include "app_log_wrapper.h" +#include "bundle_mgr_interface.h" +#include "bundle_mgr_proxy.h" +#include "bundle_mgr_service_death_recipient.h" +#include "iservice_registry.h" +#include "system_ability_definition.h" + +namespace OHOS { +namespace AppExecFwk { + +DefaultAppClient &DefaultAppClient::GetInstance() +{ + static DefaultAppClient instance; + return instance; +} + +DefaultAppClient::DefaultAppClient() +{ + APP_LOGD("create DefaultAppClient"); +} + +DefaultAppClient::~DefaultAppClient() +{ + APP_LOGD("destory DefaultAppClient"); +} + +ErrCode DefaultAppClient::IsDefaultApplication(const std::string& type, bool& isDefaultApp) +{ + APP_LOGD("begin to call IsDefaultApplication"); + auto proxy = GetDefaultAppProxy(); + if (proxy == nullptr) { + APP_LOGE("failed to get default app proxy"); + return ERR_APPEXECFWK_NULL_PTR; + } + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode ipcRet = proxy->IsDefaultApplication(type, isDefaultApp, funcResult); + if (ipcRet != ERR_OK) { + APP_LOGE("IsDefaultApplication failed due to proxy error, err: %{public}d", ipcRet); + return ipcRet; + } + return funcResult; +} + +ErrCode DefaultAppClient::GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo) +{ + APP_LOGD("begin to GetDefaultApplication"); + if (type.empty()) { + APP_LOGE("type is empty"); + return ERR_BUNDLE_MANAGER_INVALID_TYPE; + } + auto proxy = GetDefaultAppProxy(); + if (proxy == nullptr) { + APP_LOGE("failed to get default app proxy"); + return ERR_APPEXECFWK_NULL_PTR; + } + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode ipcRet = proxy->GetDefaultApplication(userId, type, bundleInfo, funcResult); + if (ipcRet != ERR_OK) { + APP_LOGE("GetDefaultApplication failed due to proxy error, err: %{public}d", ipcRet); + return ipcRet; + } + return funcResult; +} + +ErrCode DefaultAppClient::SetDefaultApplication(int32_t userId, const std::string& type, const Want& want) +{ + APP_LOGD("begin to SetDefaultApplication"); + auto proxy = GetDefaultAppProxy(); + if (proxy == nullptr) { + APP_LOGE("failed to get default app proxy"); + return ERR_APPEXECFWK_NULL_PTR; + } + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode ipcRet = proxy->SetDefaultApplication(userId, type, want, funcResult); + if (ipcRet != ERR_OK) { + APP_LOGE("SetDefaultApplication failed due to proxy error, err: %{public}d", ipcRet); + return ipcRet; + } + return funcResult; +} + +ErrCode DefaultAppClient::ResetDefaultApplication(int32_t userId, const std::string& type) +{ + APP_LOGD("begin to ResetDefaultApplication"); + if (type.empty()) { + APP_LOGE("type is empty"); + return ERR_BUNDLE_MANAGER_INVALID_TYPE; + } + auto proxy = GetDefaultAppProxy(); + if (proxy == nullptr) { + APP_LOGE("failed to get default app proxy"); + return ERR_APPEXECFWK_NULL_PTR; + } + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode ipcRet = proxy->ResetDefaultApplication(userId, type, funcResult); + if (ipcRet != ERR_OK) { + APP_LOGE("ResetDefaultApplication failed due to ipc error, err: %{public}d", ipcRet); + return ipcRet; + } + return funcResult; +} + +void DefaultAppClient::ResetDefaultAppProxy(const wptr& remote) +{ + std::lock_guard lock(mutex_); + if (defaultApp_ == nullptr) { + APP_LOGE("proxy is nullptr"); + return; + } + auto serviceRemote = defaultApp_->AsObject(); + if ((serviceRemote != nullptr) && (serviceRemote == remote.promote())) { + serviceRemote->RemoveDeathRecipient(deathRecipient_); + } + defaultApp_ = nullptr; + deathRecipient_ = nullptr; +} + +void DefaultAppClient::DefaultAppDeathRecipient::OnRemoteDied(const wptr &remote) +{ + if (remote == nullptr) { + APP_LOGE("remote is nullptr"); + return; + } + DefaultAppClient::GetInstance().ResetDefaultAppProxy(remote); +} + +sptr DefaultAppClient::GetDefaultAppProxy() +{ + std::lock_guard lock(mutex_); + if (defaultApp_ != nullptr) { + return defaultApp_; + } + sptr systemAbilityManager = + SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (systemAbilityManager == nullptr) { + APP_LOGE("failed to get system ability manager"); + return nullptr; + } + sptr remoteObject = systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); + if (remoteObject == nullptr) { + APP_LOGE("get bms sa failed"); + return nullptr; + } + auto bundleMgr = iface_cast(remoteObject); + if (bundleMgr == nullptr) { + APP_LOGE("get bundle mgr failed"); + return nullptr; + } + defaultApp_ = bundleMgr->GetDefaultAppProxy(); + if ((defaultApp_ == nullptr) || (defaultApp_->AsObject() == nullptr)) { + APP_LOGE("failed to get default app proxy"); + return nullptr; + } + deathRecipient_ = new (std::nothrow) DefaultAppDeathRecipient(); + if (deathRecipient_ == nullptr) { + APP_LOGE("failed to create default app death recipient"); + return nullptr; + } + + if ((defaultApp_->AsObject()->IsProxyObject()) && (!defaultApp_->AsObject()->AddDeathRecipient(deathRecipient_))) { + APP_LOGE("failed to add default app death recipient"); + deathRecipient_ = nullptr; + defaultApp_ = nullptr; + return nullptr; + } + return defaultApp_; +} +} +} \ No newline at end of file diff --git a/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_host.cpp b/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_host.cpp deleted file mode 100644 index 788b6a17c3f4e46b9a42789fa361a8cd7ce62648..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_host.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) 2022-2025 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 "default_app_host.h" - -#include "app_log_tag_wrapper.h" -#include "app_log_wrapper.h" -#include "appexecfwk_errors.h" -#include "bundle_framework_core_ipc_interface_code.h" -#include "bundle_memory_guard.h" -#include "hitrace_meter.h" -#include "ipc_types.h" - -namespace OHOS { -namespace AppExecFwk { -DefaultAppHost::DefaultAppHost() -{ - LOG_D(BMS_TAG_DEFAULT, "create DefaultAppHost"); -} - -DefaultAppHost::~DefaultAppHost() -{ - LOG_D(BMS_TAG_DEFAULT, "destroy DefaultAppHost"); -} - -int DefaultAppHost::OnRemoteRequest( - uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) -{ - BundleMemoryGuard memoryGuard; - LOG_I(BMS_TAG_DEFAULT, "DefaultAppHost OnRemoteRequest, message code : %{public}u", code); - std::u16string descriptor = DefaultAppHost::GetDescriptor(); - std::u16string remoteDescriptor = data.ReadInterfaceToken(); - if (descriptor != remoteDescriptor) { - LOG_E(BMS_TAG_DEFAULT, "descriptor invalid"); - return OBJECT_NULL; - } - - switch (code) { - case static_cast(DefaultAppInterfaceCode::IS_DEFAULT_APPLICATION): - return HandleIsDefaultApplication(data, reply); - case static_cast(DefaultAppInterfaceCode::GET_DEFAULT_APPLICATION): - return HandleGetDefaultApplication(data, reply); - case static_cast(DefaultAppInterfaceCode::SET_DEFAULT_APPLICATION): - return HandleSetDefaultApplication(data, reply); - case static_cast(DefaultAppInterfaceCode::RESET_DEFAULT_APPLICATION): - return HandleResetDefaultApplication(data, reply); - default: - LOG_W(BMS_TAG_DEFAULT, "DefaultAppHost receive unknown code, code = %{public}d", code); - return IPCObjectStub::OnRemoteRequest(code, data, reply, option); - } -} - -ErrCode DefaultAppHost::HandleIsDefaultApplication(Parcel& data, Parcel& reply) -{ - LOG_I(BMS_TAG_DEFAULT, "begin to HandleIsDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - std::string type = data.ReadString(); - bool isDefaultApp = false; - ErrCode ret = IsDefaultApplication(type, isDefaultApp); - if (!reply.WriteInt32(ret)) { - LOG_E(BMS_TAG_DEFAULT, "write ret failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (ret == ERR_OK) { - if (!reply.WriteBool(isDefaultApp)) { - LOG_E(BMS_TAG_DEFAULT, "write isDefaultApp failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - } - return ERR_OK; -} - -ErrCode DefaultAppHost::HandleGetDefaultApplication(Parcel& data, Parcel& reply) -{ - LOG_I(BMS_TAG_DEFAULT, "begin to HandleGetDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - int32_t userId = data.ReadInt32(); - std::string type = data.ReadString(); - BundleInfo bundleInfo; - ErrCode ret = GetDefaultApplication(userId, type, bundleInfo); - if (!reply.WriteInt32(ret)) { - LOG_E(BMS_TAG_DEFAULT, "write ret failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (ret == ERR_OK) { - if (!reply.WriteParcelable(&bundleInfo)) { - LOG_E(BMS_TAG_DEFAULT, "write bundleInfo failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - } - return ERR_OK; -} - -ErrCode DefaultAppHost::HandleSetDefaultApplication(Parcel& data, Parcel& reply) -{ - LOG_I(BMS_TAG_DEFAULT, "begin to HandleSetDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - int32_t userId = data.ReadInt32(); - std::string type = data.ReadString(); - std::unique_ptr want(data.ReadParcelable()); - if (want == nullptr) { - LOG_E(BMS_TAG_DEFAULT, "ReadParcelable failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - ErrCode ret = SetDefaultApplication(userId, type, *want); - if (!reply.WriteInt32(ret)) { - LOG_E(BMS_TAG_DEFAULT, "write ret failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - return ERR_OK; -} - -ErrCode DefaultAppHost::HandleResetDefaultApplication(Parcel& data, Parcel& reply) -{ - LOG_I(BMS_TAG_DEFAULT, "begin to HandleResetDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - int32_t userId = data.ReadInt32(); - std::string type = data.ReadString(); - ErrCode ret = ResetDefaultApplication(userId, type); - if (!reply.WriteInt32(ret)) { - LOG_E(BMS_TAG_DEFAULT, "write ret failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - return ERR_OK; -} -} -} diff --git a/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_proxy.cpp b/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_proxy.cpp deleted file mode 100644 index 71a578959aaafc1368bc6246c3532e03b0d10dbd..0000000000000000000000000000000000000000 --- a/interfaces/inner_api/appexecfwk_core/src/default_app/default_app_proxy.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (c) 2022-2025 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 "default_app_proxy.h" - -#include "app_log_tag_wrapper.h" -#include "app_log_wrapper.h" -#include "appexecfwk_errors.h" -#include "hitrace_meter.h" -#include "ipc_types.h" -#include "parcel.h" - -namespace OHOS { -namespace AppExecFwk { -DefaultAppProxy::DefaultAppProxy(const sptr& object) - : IRemoteProxy(object) -{ - LOG_D(BMS_TAG_DEFAULT, "create DefaultAppProxy"); -} - -DefaultAppProxy::~DefaultAppProxy() -{ - LOG_D(BMS_TAG_DEFAULT, "destroy DefaultAppProxy"); -} - -ErrCode DefaultAppProxy::IsDefaultApplication(const std::string& type, bool& isDefaultApp) -{ - LOG_D(BMS_TAG_DEFAULT, "begin to call IsDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - - MessageParcel data; - if (!data.WriteInterfaceToken(GetDescriptor())) { - LOG_E(BMS_TAG_DEFAULT, "WriteInterfaceToken failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteString(type)) { - LOG_E(BMS_TAG_DEFAULT, "write type failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - - MessageParcel reply; - if (!SendRequest(DefaultAppInterfaceCode::IS_DEFAULT_APPLICATION, data, reply)) { - LOG_E(BMS_TAG_DEFAULT, "SendRequest failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - ErrCode ret = reply.ReadInt32(); - if (ret == ERR_OK) { - isDefaultApp = reply.ReadBool(); - } - return ret; -} - -ErrCode DefaultAppProxy::GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo) -{ - LOG_D(BMS_TAG_DEFAULT, "begin to GetDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - - if (type.empty()) { - LOG_E(BMS_TAG_DEFAULT, "type is empty"); - return ERR_BUNDLE_MANAGER_INVALID_TYPE; - } - - MessageParcel data; - if (!data.WriteInterfaceToken(GetDescriptor())) { - LOG_E(BMS_TAG_DEFAULT, "WriteInterfaceToken failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteInt32(userId)) { - LOG_E(BMS_TAG_DEFAULT, "write userId failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteString(type)) { - LOG_E(BMS_TAG_DEFAULT, "write type failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - return GetParcelableInfo(DefaultAppInterfaceCode::GET_DEFAULT_APPLICATION, data, bundleInfo); -} - -ErrCode DefaultAppProxy::SetDefaultApplication(int32_t userId, const std::string& type, const Want& want) -{ - LOG_D(BMS_TAG_DEFAULT, "begin to SetDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - - MessageParcel data; - if (!data.WriteInterfaceToken(GetDescriptor())) { - LOG_E(BMS_TAG_DEFAULT, "WriteInterfaceToken failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteInt32(userId)) { - LOG_E(BMS_TAG_DEFAULT, "write userId failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteString(type)) { - LOG_E(BMS_TAG_DEFAULT, "write type failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteParcelable(&want)) { - LOG_E(BMS_TAG_DEFAULT, "write want failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - - MessageParcel reply; - if (!SendRequest(DefaultAppInterfaceCode::SET_DEFAULT_APPLICATION, data, reply)) { - LOG_E(BMS_TAG_DEFAULT, "SendRequest failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - - return reply.ReadInt32(); -} - -ErrCode DefaultAppProxy::ResetDefaultApplication(int32_t userId, const std::string& type) -{ - LOG_D(BMS_TAG_DEFAULT, "begin to ResetDefaultApplication"); - HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - - if (type.empty()) { - LOG_E(BMS_TAG_DEFAULT, "type is empty"); - return ERR_BUNDLE_MANAGER_INVALID_TYPE; - } - - MessageParcel data; - if (!data.WriteInterfaceToken(GetDescriptor())) { - LOG_E(BMS_TAG_DEFAULT, "WriteInterfaceToken failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteInt32(userId)) { - LOG_E(BMS_TAG_DEFAULT, "write userId failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - if (!data.WriteString(type)) { - LOG_E(BMS_TAG_DEFAULT, "write type failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - - MessageParcel reply; - if (!SendRequest(DefaultAppInterfaceCode::RESET_DEFAULT_APPLICATION, data, reply)) { - LOG_E(BMS_TAG_DEFAULT, "SendRequest failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - - return reply.ReadInt32(); -} - -template -ErrCode DefaultAppProxy::GetParcelableInfo(DefaultAppInterfaceCode code, MessageParcel& data, T& parcelableInfo) -{ - MessageParcel reply; - if (!SendRequest(code, data, reply)) { - LOG_E(BMS_TAG_DEFAULT, "SendRequest failed"); - return ERR_APPEXECFWK_PARCEL_ERROR; - } - ErrCode ret = reply.ReadInt32(); - if (ret != ERR_OK) { - LOG_E(BMS_TAG_DEFAULT, "host reply errCode : %{public}d", ret); - return ret; - } - - std::unique_ptr info(reply.ReadParcelable()); - if (info == nullptr) { - LOG_E(BMS_TAG_DEFAULT, "ReadParcelable failed"); - return ERR_BUNDLE_MANAGER_INTERNAL_ERROR; - } - parcelableInfo = *info; - LOG_D(BMS_TAG_DEFAULT, "GetParcelableInfo success"); - return ERR_OK; -} - -bool DefaultAppProxy::SendRequest(DefaultAppInterfaceCode code, MessageParcel& data, MessageParcel& reply) -{ - MessageOption option(MessageOption::TF_SYNC); - sptr remote = Remote(); - if (remote == nullptr) { - LOG_E(BMS_TAG_DEFAULT, "failed to send request %{public}hhu due to remote object null", code); - return false; - } - int32_t result = remote->SendRequest(static_cast(code), data, reply, option); - if (result != NO_ERROR) { - LOG_E(BMS_TAG_DEFAULT, "receive error code %{public}d in transact %{public}hhu", result, code); - return false; - } - return true; -} -} -} diff --git a/interfaces/kits/cj/src/default_app.cpp b/interfaces/kits/cj/src/default_app.cpp index 19f471c9f8c5651364bc463b3df59f38aff40869..ed9412cf03ca09d6f48dbc03153cfeb8d0c2efbc 100644 --- a/interfaces/kits/cj/src/default_app.cpp +++ b/interfaces/kits/cj/src/default_app.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -17,9 +17,8 @@ #include "app_log_wrapper.h" #include "bundle_error.h" #include "cj_common_ffi.h" -#include "bundle_mgr_proxy.h" +#include "default_app_client.h" #include "iservice_registry.h" -#include "system_ability_definition.h" #include "common_func.h" namespace OHOS { @@ -55,31 +54,6 @@ ErrCode ParamsProcessIsDefaultApplicationSync(std::string& type) return SUCCESS_CODE; } -static OHOS::sptr GetDefaultAppProxy() -{ - auto systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (systemAbilityManager == nullptr) { - APP_LOGE("systemAbilityManager is null."); - return nullptr; - } - auto bundleMgrSa = systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); - if (bundleMgrSa == nullptr) { - APP_LOGE("bundleMgrSa is null."); - return nullptr; - } - auto bundleMgr = OHOS::iface_cast(bundleMgrSa); - if (bundleMgr == nullptr) { - APP_LOGE("iface_cast failed."); - return nullptr; - } - auto defaultAppProxy = bundleMgr->GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - APP_LOGE("GetDefaultAppProxy failed."); - return nullptr; - } - return defaultAppProxy; -} - extern "C" { RetDataBool FfiBundleManagerIsDefaultApplication(char* type) { @@ -90,13 +64,7 @@ extern "C" { return nRet; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - nRet.code = ERROR_BUNDLE_SERVICE_EXCEPTION; - return nRet; - } - - ErrCode ret = defaultAppProxy->IsDefaultApplication(strType, isDefaultApp); + ErrCode ret = DefaultAppClient::GetInstance().IsDefaultApplication(strType, isDefaultApp); ret = CommonFunc::ConvertErrCode(ret); if (ret != SUCCESS_CODE) { APP_LOGE("FfiBundleManagerIsDefaultApplication failed: %{public}d", ret); diff --git a/interfaces/kits/js/default_app/js_default_app.cpp b/interfaces/kits/js/default_app/js_default_app.cpp index 6b3bad90f2954a7f94109377f09fae596ce072d1..68d6cee1a0f0ce4e58af8496ff5d895a1405726e 100644 --- a/interfaces/kits/js/default_app/js_default_app.cpp +++ b/interfaces/kits/js/default_app/js_default_app.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -19,16 +19,13 @@ #include "app_log_wrapper.h" #include "bundle_errors.h" -#include "bundle_mgr_interface.h" -#include "bundle_mgr_proxy.h" #include "business_error.h" #include "common_func.h" -#include "if_system_ability_manager.h" +#include "default_app_client.h" #include "ipc_skeleton.h" #include "iservice_registry.h" #include "napi_arg.h" #include "napi_constants.h" -#include "system_ability_definition.h" namespace OHOS { namespace AppExecFwk { @@ -86,31 +83,6 @@ static bool ParseType(napi_env env, napi_value value, std::string& result) return true; } -static OHOS::sptr GetDefaultAppProxy() -{ - auto systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (systemAbilityManager == nullptr) { - APP_LOGE("systemAbilityManager is null"); - return nullptr; - } - auto bundleMgrSa = systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); - if (bundleMgrSa == nullptr) { - APP_LOGE("bundleMgrSa is null"); - return nullptr; - } - auto bundleMgr = OHOS::iface_cast(bundleMgrSa); - if (bundleMgr == nullptr) { - APP_LOGE("iface_cast failed"); - return nullptr; - } - auto defaultAppProxy = bundleMgr->GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - APP_LOGE("GetDefaultAppProxy failed"); - return nullptr; - } - return defaultAppProxy; -} - static void ConvertAbilityInfo(napi_env env, napi_value objAbilityInfo, const AbilityInfo &abilityInfo) { APP_LOGD("begin to ConvertAbilityInfo"); @@ -233,12 +205,7 @@ static ErrCode InnerIsDefaultApplication(DefaultAppCallbackInfo *info) APP_LOGE("info is null"); return ERROR_BUNDLE_SERVICE_EXCEPTION; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - APP_LOGE("defaultAppProxy is null"); - return ERROR_BUNDLE_SERVICE_EXCEPTION; - } - ErrCode ret = defaultAppProxy->IsDefaultApplication(info->type, info->isDefaultApp); + ErrCode ret = DefaultAppClient::GetInstance().IsDefaultApplication(info->type, info->isDefaultApp); APP_LOGD("IsDefaultApplication ErrCode : %{public}d", ret); return CommonFunc::ConvertErrCode(ret); } @@ -352,15 +319,7 @@ napi_value IsDefaultApplicationSync(napi_env env, napi_callback_info info) return nRet; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - napi_value error = BusinessError::CreateCommonError(env, ERROR_BUNDLE_SERVICE_EXCEPTION, - IS_DEFAULT_APPLICATION_SYNC); - napi_throw(env, error); - return nRet; - } - - ErrCode ret = defaultAppProxy->IsDefaultApplication(type, isDefaultApp); + ErrCode ret = DefaultAppClient::GetInstance().IsDefaultApplication(type, isDefaultApp); ret = CommonFunc::ConvertErrCode(ret); if (ret != ERR_OK) { APP_LOGE("ResetDefaultApplicationSync failed: %{public}d", ret); @@ -380,12 +339,7 @@ static ErrCode InnerGetDefaultApplication(DefaultAppCallbackInfo *info) APP_LOGE("info is null"); return ERROR_BUNDLE_SERVICE_EXCEPTION; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - APP_LOGE("defaultAppProxy is null"); - return ERROR_BUNDLE_SERVICE_EXCEPTION; - } - ErrCode ret = defaultAppProxy->GetDefaultApplication(info->userId, info->type, info->bundleInfo); + ErrCode ret = DefaultAppClient::GetInstance().GetDefaultApplication(info->userId, info->type, info->bundleInfo); APP_LOGD("GetDefaultApplication ErrCode : %{public}d", ret); return CommonFunc::ConvertErrCode(ret); } @@ -511,16 +465,8 @@ napi_value GetDefaultApplicationSync(napi_env env, napi_callback_info info) return nullptr; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - napi_value error = BusinessError::CreateCommonError(env, ERROR_BUNDLE_SERVICE_EXCEPTION, - GET_DEFAULT_APPLICATION_SYNC); - napi_throw(env, error); - return nullptr; - } - BundleInfo bundleInfo; - ErrCode ret = defaultAppProxy->GetDefaultApplication(userId, type, bundleInfo); + ErrCode ret = DefaultAppClient::GetInstance().GetDefaultApplication(userId, type, bundleInfo); ret = CommonFunc::ConvertErrCode(ret); if (ret != ERR_OK) { APP_LOGE("GetDefaultApplicationSync failed: %{public}d", ret); @@ -543,12 +489,7 @@ static ErrCode InnerSetDefaultApplication(const DefaultAppCallbackInfo *info) APP_LOGE("info is null"); return ERROR_BUNDLE_SERVICE_EXCEPTION; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - APP_LOGE("defaultAppProxy is null"); - return ERROR_BUNDLE_SERVICE_EXCEPTION; - } - ErrCode ret = defaultAppProxy->SetDefaultApplication(info->userId, info->type, info->want); + ErrCode ret = DefaultAppClient::GetInstance().SetDefaultApplication(info->userId, info->type, info->want); APP_LOGD("SetDefaultApplication ErrCode : %{public}d", ret); return CommonFunc::ConvertErrCode(ret); } @@ -687,16 +628,7 @@ napi_value SetDefaultApplicationSync(napi_env env, napi_callback_info info) if (ParamsProcessSetDefaultApplicationSync(env, info, type, want, userId) != ERR_OK) { return nRet; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - napi_value error = BusinessError::CreateCommonError(env, ERROR_BUNDLE_SERVICE_EXCEPTION, - SET_DEFAULT_APPLICATION_SYNC); - napi_throw(env, error); - return nRet; - } - - ErrCode ret = defaultAppProxy->SetDefaultApplication(userId, - type, want); + ErrCode ret = DefaultAppClient::GetInstance().SetDefaultApplication(userId, type, want); ret = CommonFunc::ConvertErrCode(ret); if (ret != ERR_OK) { APP_LOGE("SetDefaultApplicationSync failed: %{public}d", ret); @@ -716,12 +648,7 @@ static ErrCode InnerResetDefaultApplication(const DefaultAppCallbackInfo *info) APP_LOGE("info is null"); return ERROR_BUNDLE_SERVICE_EXCEPTION; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - APP_LOGE("defaultAppProxy is null"); - return ERROR_BUNDLE_SERVICE_EXCEPTION; - } - ErrCode ret = defaultAppProxy->ResetDefaultApplication(info->userId, info->type); + ErrCode ret = DefaultAppClient::GetInstance().ResetDefaultApplication(info->userId, info->type); APP_LOGD("ResetDefaultApplication ErrCode : %{public}d", ret); return CommonFunc::ConvertErrCode(ret); } @@ -847,15 +774,7 @@ napi_value ResetDefaultApplicationSync(napi_env env, napi_callback_info info) return nRet; } - auto defaultAppProxy = GetDefaultAppProxy(); - if (defaultAppProxy == nullptr) { - napi_value error = BusinessError::CreateCommonError(env, ERROR_BUNDLE_SERVICE_EXCEPTION, - RESET_DEFAULT_APPLICATION_SYNC); - napi_throw(env, error); - return nRet; - } - - ErrCode ret = defaultAppProxy->ResetDefaultApplication(userId, type); + ErrCode ret = DefaultAppClient::GetInstance().ResetDefaultApplication(userId, type); ret = CommonFunc::ConvertErrCode(ret); if (ret != ERR_OK) { APP_LOGE("ResetDefaultApplicationSync failed: %{public}d", ret); diff --git a/services/bundlemgr/include/default_app/default_app_host_impl.h b/services/bundlemgr/include/default_app/default_app_host_impl.h index bc850654e6d63ac8161847e2fec12cff86289aeb..5e5aaecb80ac57dfff7b7d8dd9d722d33193bc8c 100644 --- a/services/bundlemgr/include/default_app/default_app_host_impl.h +++ b/services/bundlemgr/include/default_app/default_app_host_impl.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -16,17 +16,22 @@ #ifndef FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_DEFAULT_APP_HOST_IMPL_H #define FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_DEFAULT_APP_HOST_IMPL_H -#include "default_app_host.h" #include "default_app_mgr.h" +#include "default_app_stub.h" namespace OHOS { namespace AppExecFwk { -class DefaultAppHostImpl : public DefaultAppHost { +class DefaultAppHostImpl : public DefaultAppStub { public: - virtual ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp) override; - virtual ErrCode GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo) override; - virtual ErrCode SetDefaultApplication(int32_t userId, const std::string& type, const Want& want) override; - virtual ErrCode ResetDefaultApplication(int32_t userId, const std::string& type) override; + virtual int32_t CallbackEnter([[maybe_unused]] uint32_t code) override; + virtual int32_t CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result) override; + virtual ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp, int32_t& funcResult) override; + virtual ErrCode GetDefaultApplication( + int32_t userId, const std::string& type, BundleInfo& bundleInfo, int32_t& funcResult) override; + virtual ErrCode SetDefaultApplication( + int32_t userId, const std::string& type, const Want& want, int32_t& funcResult) override; + virtual ErrCode ResetDefaultApplication(int32_t userId, const std::string& type, int32_t& funcResult) override; + private: std::string GetCallerName(); }; diff --git a/services/bundlemgr/src/default_app/default_app_host_impl.cpp b/services/bundlemgr/src/default_app/default_app_host_impl.cpp index 29af188611cfb49aa58070f55fca6baa5d4dee7f..afaa17d02bfa244703e8fbc020b83f0dc223bbb1 100644 --- a/services/bundlemgr/src/default_app/default_app_host_impl.cpp +++ b/services/bundlemgr/src/default_app/default_app_host_impl.cpp @@ -16,6 +16,7 @@ #include "default_app_host_impl.h" #include "app_log_tag_wrapper.h" +#include "bundle_memory_guard.h" #include "bundle_mgr_service.h" #include "event_report.h" #include "hitrace_meter.h" @@ -23,19 +24,34 @@ namespace OHOS { namespace AppExecFwk { -ErrCode DefaultAppHostImpl::IsDefaultApplication(const std::string& type, bool& isDefaultApp) +int32_t DefaultAppHostImpl::CallbackEnter([[maybe_unused]] uint32_t code) +{ + BundleMemoryGuard::SetBundleMemoryGuard(); + return ERR_OK; +} +int32_t DefaultAppHostImpl::CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result) +{ + BundleMemoryGuard::ClearBundleMemoryGuard(); + return ERR_OK; +} + +ErrCode DefaultAppHostImpl::IsDefaultApplication(const std::string& type, bool& isDefaultApp, int32_t& funcResult) { int32_t userId = IPCSkeleton::GetCallingUid() / Constants::BASE_USER_RANGE; - return DefaultAppMgr::GetInstance().IsDefaultApplication(userId, type, isDefaultApp); + funcResult = DefaultAppMgr::GetInstance().IsDefaultApplication(userId, type, isDefaultApp); + return ERR_OK; } -ErrCode DefaultAppHostImpl::GetDefaultApplication(int32_t userId, const std::string& type, BundleInfo& bundleInfo) +ErrCode DefaultAppHostImpl::GetDefaultApplication( + int32_t userId, const std::string& type, BundleInfo& bundleInfo, int32_t& funcResult) { HITRACE_METER_NAME_EX(HITRACE_LEVEL_INFO, HITRACE_TAG_APP, __PRETTY_FUNCTION__, nullptr); - return DefaultAppMgr::GetInstance().GetDefaultApplication(userId, type, bundleInfo); + funcResult = DefaultAppMgr::GetInstance().GetDefaultApplication(userId, type, bundleInfo); + return ERR_OK; } -ErrCode DefaultAppHostImpl::SetDefaultApplication(int32_t userId, const std::string& type, const Want& want) +ErrCode DefaultAppHostImpl::SetDefaultApplication( + int32_t userId, const std::string& type, const Want& want, int32_t& funcResult) { LOG_D(BMS_TAG_DEFAULT, "SetDefaultApplication userId:%{public}d type:%{public}s", userId, type.c_str()); const ElementName& elementName = want.GetElement(); @@ -49,43 +65,46 @@ ErrCode DefaultAppHostImpl::SetDefaultApplication(int32_t userId, const std::str if (isEmpty) { LOG_D(BMS_TAG_DEFAULT, "ElementName is empty"); Element element; - ErrCode result = DefaultAppMgr::GetInstance().SetDefaultApplication(userId, type, element); - if (result == ERR_OK) { + funcResult = DefaultAppMgr::GetInstance().SetDefaultApplication(userId, type, element); + if (funcResult == ERR_OK) { EventReport::SendDefaultAppEvent(DefaultAppActionType::SET, userId, GetCallerName(), want.ToString(), type); } - return result; + return ERR_OK; } // case2 : ElementName is valid ability or valid extension. auto dataMgr = DelayedSingleton::GetInstance()->GetDataMgr(); if (dataMgr == nullptr) { LOG_E(BMS_TAG_DEFAULT, "DataMgr is nullptr"); - return ERR_BUNDLE_MANAGER_INTERNAL_ERROR; + funcResult = ERR_BUNDLE_MANAGER_INTERNAL_ERROR; + return ERR_OK; } if (!dataMgr->HasUserId(userId)) { LOG_E(BMS_TAG_DEFAULT, "userId not exist"); - return ERR_BUNDLE_MANAGER_INVALID_USER_ID; + funcResult = ERR_BUNDLE_MANAGER_INVALID_USER_ID; + return ERR_OK; } Element element; bool ret = dataMgr->GetElement(userId, elementName, element); if (!ret) { LOG_E(BMS_TAG_DEFAULT, "GetElement failed"); - return ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH; + funcResult = ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH; + return ERR_OK; } - ErrCode result = DefaultAppMgr::GetInstance().SetDefaultApplication(userId, type, element); - if (result == ERR_OK) { + funcResult = DefaultAppMgr::GetInstance().SetDefaultApplication(userId, type, element); + if (funcResult == ERR_OK) { EventReport::SendDefaultAppEvent(DefaultAppActionType::SET, userId, GetCallerName(), want.ToString(), type); } - return result; + return ERR_OK; } -ErrCode DefaultAppHostImpl::ResetDefaultApplication(int32_t userId, const std::string& type) +ErrCode DefaultAppHostImpl::ResetDefaultApplication(int32_t userId, const std::string& type, int32_t& funcResult) { - ErrCode result = DefaultAppMgr::GetInstance().ResetDefaultApplication(userId, type); - if (result == ERR_OK) { + funcResult = DefaultAppMgr::GetInstance().ResetDefaultApplication(userId, type); + if (funcResult == ERR_OK) { EventReport::SendDefaultAppEvent( DefaultAppActionType::RESET, userId, GetCallerName(), Constants::EMPTY_STRING, type); } - return result; + return ERR_OK; } std::string DefaultAppHostImpl::GetCallerName() diff --git a/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_host.h b/services/bundlemgr/test/mock/src/system_ability_manager_client.cpp similarity index 38% rename from interfaces/inner_api/appexecfwk_core/include/default_app/default_app_host.h rename to services/bundlemgr/test/mock/src/system_ability_manager_client.cpp index 96d736d871486595fb6470a61f6d1de551ab4c3d..3cddc1dba9dc45c85ca0d6544d727eed7bb54e34 100644 --- a/interfaces/inner_api/appexecfwk_core/include/default_app/default_app_host.h +++ b/services/bundlemgr/test/mock/src/system_ability_manager_client.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2025 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 @@ -13,31 +13,17 @@ * limitations under the License. */ -#ifndef FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_HOST_H -#define FOUNDATION_APPEXECFWK_INTERFACES_INNERKITS_APPEXECFWK_CORE_INCLUDE_DEFAULT_APP_HOST_H - - -#include "default_app_interface.h" -#include "iremote_stub.h" -#include "nocopyable.h" +#include "iservice_registry.h" namespace OHOS { -namespace AppExecFwk { -class DefaultAppHost : public IRemoteStub { -public: - DefaultAppHost(); - virtual ~DefaultAppHost(); - - int OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override; - -private: - ErrCode HandleIsDefaultApplication(Parcel& data, Parcel& reply); - ErrCode HandleGetDefaultApplication(Parcel& data, Parcel& reply); - ErrCode HandleSetDefaultApplication(Parcel& data, Parcel& reply); - ErrCode HandleResetDefaultApplication(Parcel& data, Parcel& reply); - - DISALLOW_COPY_AND_MOVE(DefaultAppHost); -}; +SystemAbilityManagerClient& SystemAbilityManagerClient::GetInstance() +{ + static auto instance = new SystemAbilityManagerClient(); + return *instance; } + +sptr SystemAbilityManagerClient::GetSystemAbilityManager() +{ + return nullptr; } -#endif +} // namespace OHOS \ No newline at end of file diff --git a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/BUILD.gn b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/BUILD.gn index 4c2c0be99fa4c7386027ef7b6fe4ad2f84aca4bd..15c6ccebd401f298d5c78d9ec00285898724eb98 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/BUILD.gn +++ b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/BUILD.gn @@ -34,6 +34,7 @@ ohos_unittest("BmsBundleDefaultAppTest") { "${services_path}/bundlemgr/src/installd/installd_host_impl.cpp", "${services_path}/bundlemgr/src/installd/installd_operator.cpp", "${services_path}/bundlemgr/test/mock/src/installd_service.cpp", + "${services_path}/bundlemgr/test/mock/src/system_ability_manager_client.cpp", ] sources += [ @@ -371,12 +372,146 @@ ohos_unittest("BmsBundleDefaultAppMgrTest") { } } +ohos_unittest("BmsBundleDefaultAppClientTest") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + use_exceptions = true + module_out_path = module_output_path + include_dirs = [ "${services_path}/bundlemgr/test/unittest/bms_bundle_default_app_test/mock/" ] + sources = bundle_mgr_source + sources -= [ "${services_path}/bundlemgr/src/bms_param.cpp" ] + sources += [ "${services_path}/bundlemgr/test/mock/src/bms_param.cpp" ] + sources += [ "${services_path}/bundlemgr/test/mock/src/system_ability_manager_client.cpp" ] + sources -= [ "${services_path}/bundlemgr/src/system_ability_helper.cpp" ] + sources += [ + "${services_path}/bundlemgr/src/aot/aot_executor.cpp", + "${services_path}/bundlemgr/src/installd/installd_host_impl.cpp", + "${services_path}/bundlemgr/src/installd/installd_operator.cpp", + "${services_path}/bundlemgr/test/mock/src/installd_service.cpp", + ] + + sources += [ + "${services_path}/bundlemgr/test/mock/src/accesstoken_kit.cpp", + "${services_path}/bundlemgr/test/mock/src/installd_permission_mgr.cpp", + "${services_path}/bundlemgr/test/mock/src/mock_bundle_status.cpp", + "${services_path}/bundlemgr/test/mock/src/mock_clean_cache.cpp", + "${services_path}/bundlemgr/test/mock/src/mock_status_receiver.cpp", + "${services_path}/bundlemgr/test/mock/src/system_ability_helper.cpp", + "${services_path}/bundlemgr/test/unittest/bms_bundle_default_app_test/mock/mock_ipc_skeleton.cpp", + ] + + sources += bundle_install_sources + + sources += [ "bms_bundle_default_app_client_test.cpp" ] + + configs = [ "${services_path}/bundlemgr/test:bundlemgr_test_config" ] + cflags = [] + if (target_cpu == "arm") { + cflags += [ "-DBINDER_IPC_32BIT" ] + } + deps = [ + "${bundle_framework_path}/test/sceneProject/unittest/ohos_test:copy_ohos_test", + "${bundle_framework_path}/test/sceneProject/unittest/test_bundle/defaultAppTest:defaultAppTest", + "${core_path}:appexecfwk_core", + ] + deps += bundle_install_deps + + external_deps = [ + "ability_base:want", + "ability_runtime:app_manager", + "access_token:el5_filekey_manager_sdk", + "access_token:libprivacy_sdk", + "access_token:libtokenid_sdk", + "appspawn:hnpapi", + "appverify:libhapverify", + "bounds_checking_function:libsec_shared", + "common_event_service:cesfwk_innerkits", + "eventhandler:libeventhandler", + "hilog:libhilog", + "hitrace:hitrace_meter", + "init:libbegetutil", + "json:nlohmann_json_static", + "jsoncpp:jsoncpp", + "safwk:system_ability_fwk", + "samgr:samgr_proxy", + "selinux_adapter:librestorecon", + ] + external_deps += bundle_install_external_deps + defines = [] + if (configpolicy_enable) { + external_deps += [ "config_policy:configpolicy_util" ] + defines += [ "CONFIG_POLOCY_ENABLE" ] + } + if (build_selinux) { + external_deps += [ "selinux_adapter:libhap_restorecon" ] + cflags += [ "-DWITH_SELINUX" ] + } + if (account_enable) { + external_deps += [ "os_account:os_account_innerkits" ] + defines += [ "ACCOUNT_ENABLE" ] + } + if (global_resmgr_enable) { + defines += [ "GLOBAL_RESMGR_ENABLE" ] + external_deps += [ "resource_management:global_resmgr" ] + } + if (hicollie_enable) { + external_deps += [ "hicollie:libhicollie" ] + defines += [ "HICOLLIE_ENABLE" ] + } + + if (hisysevent_enable) { + sources += [ "${services_path}/bundlemgr/src/inner_event_report.cpp" ] + external_deps += [ "hisysevent:libhisysevent" ] + defines += [ "HISYSEVENT_ENABLE" ] + } + + if (bundle_framework_default_app) { + sources += default_app + defines += [ "BUNDLE_FRAMEWORK_DEFAULT_APP" ] + } + + if (storage_service_enable) { + external_deps += [ "storage_service:storage_manager_sa_proxy" ] + defines += [ "STORAGE_SERVICE_ENABLE" ] + } + + configs += [ "../../../../../services/bundlemgr:rdb_config" ] + external_deps += [ "relational_store:native_rdb" ] + sources += [ + "${services_path}/bundlemgr/src/bundle_data_storage_rdb.cpp", + "${services_path}/bundlemgr/src/preinstall_data_storage_rdb.cpp", + ] + if (udmf_enabled) { + defines += [ "BUNDLE_FRAMEWORK_UDMF_ENABLED" ] + external_deps += [ "udmf:utd_client" ] + } + + if (user_auth_framework_impl_enabled) { + external_deps += [ "user_auth_framework:userauth_client" ] + defines += [ "BMS_USER_AUTH_FRAMEWORK_ENABLED" ] + include_dirs += [ "${services_path}/bundlemgr/include/user_auth" ] + sources += user_auth + } + + if (bms_device_info_manager_part_enabled) { + external_deps += [ + "device_info_manager:distributed_device_profile_common", + "device_info_manager:distributed_device_profile_sdk", + ] + defines += [ "BMS_DEVICE_INFO_MANAGER_ENABLE" ] + } +} + group("unittest") { testonly = true if (ability_runtime_enable) { deps = [ ":BmsBundleDefaultAppMgrTest", ":BmsBundleDefaultAppTest", + ":BmsBundleDefaultAppClientTest", ] } } diff --git a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_client_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_client_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..973fff5af9871cd1c87864ab1b4fc5961ecc0522 --- /dev/null +++ b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_client_test.cpp @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2025 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 + +#define private public +#include "aot/aot_executor.h" +#include "bundle_info.h" +#include "bundle_installer_host.h" +#include "bundle_permission_mgr.h" +#include "bundle_verify_mgr.h" +#include "default_app_client.h" +#include "default_app_host_impl.h" +#include "inner_bundle_info.h" +#include "installd/installd_service.h" +#include "installd_client.h" +#include "mock_ipc_skeleton.h" +#include "mock_rdb_data_manager.h" +#include "mock_status_receiver.h" +#include "permission_define.h" +#include "scope_guard.h" + +using namespace testing::ext; +using namespace OHOS; +using namespace OHOS::AppExecFwk; + +namespace OHOS { +namespace { +const std::string TYPE = "type"; +const int32_t USER_ID = 100; +const std::string BUNDLE_NAME = "com.test.defaultApp"; +const std::string MODULE_NAME = "module01"; +const std::string ABILITY_NAME = "BROWSER"; +} // namespace + +class BmsBundleDefaultAppClientTest : public testing::Test { +public: + BmsBundleDefaultAppClientTest(); + ~BmsBundleDefaultAppClientTest(); + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +BmsBundleDefaultAppClientTest::BmsBundleDefaultAppClientTest() {} + +BmsBundleDefaultAppClientTest::~BmsBundleDefaultAppClientTest() {} + +void BmsBundleDefaultAppClientTest::SetUpTestCase() {} + +void BmsBundleDefaultAppClientTest::TearDownTestCase() {} + +void BmsBundleDefaultAppClientTest::SetUp() {} + +void BmsBundleDefaultAppClientTest::TearDown() {} + +/** + * @tc.number: GetDefaultAppProxy_0010 + * @tc.name: test GetDefaultAppProxy + * @tc.desc: 1.GetDefaultAppProxy + */ +HWTEST_F(BmsBundleDefaultAppClientTest, GetDefaultAppProxy_0010, Function | SmallTest | Level1) +{ + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + EXPECT_EQ(DefaultAppClient::GetInstance().GetDefaultAppProxy(), nullptr); +} + +/** + * @tc.number: IsDefaultApplication_0010 + * @tc.name: test IsDefaultApplication + * @tc.desc: 1.IsDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppClientTest, IsDefaultApplication_0010, Function | SmallTest | Level1) +{ + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + bool isDefaultApp = false; + std::string strType = TYPE; + ErrCode ret = DefaultAppClient::GetInstance().IsDefaultApplication(strType, isDefaultApp); + EXPECT_EQ(ret, ERR_APPEXECFWK_NULL_PTR); +} + +/** + * @tc.number: GetDefaultApplication_0010 + * @tc.name: test GetDefaultApplication + * @tc.desc: 1.GetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppClientTest, GetDefaultApplication_0010, Function | SmallTest | Level1) +{ + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + std::string strType = TYPE; + BundleInfo bundleInfo; + ErrCode ret = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, strType, bundleInfo); + EXPECT_EQ(ret, ERR_APPEXECFWK_NULL_PTR); +} + +/** + * @tc.number: SetDefaultApplication_0010 + * @tc.name: test SetDefaultApplication + * @tc.desc: 1.SetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppClientTest, SetDefaultApplication_0010, Function | SmallTest | Level1) +{ + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + std::string strType = TYPE; + AAFwk::Want want; + ElementName elementName("", BUNDLE_NAME, ABILITY_NAME, MODULE_NAME); + want.SetElement(elementName); + ErrCode ret = DefaultAppClient::GetInstance().SetDefaultApplication(USER_ID, strType, want); + EXPECT_EQ(ret, ERR_APPEXECFWK_NULL_PTR); +} + +/** + * @tc.number: ResetDefaultApplication_0010 + * @tc.name: test ResetDefaultApplication + * @tc.desc: 1.ResetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppClientTest, ResetDefaultApplication_0010, Function | SmallTest | Level1) +{ + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + std::string strType = TYPE; + ErrCode ret = DefaultAppClient::GetInstance().ResetDefaultApplication(USER_ID, strType); + EXPECT_EQ(ret, ERR_APPEXECFWK_NULL_PTR); +} +} // namespace OHOS \ No newline at end of file diff --git a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_mgr_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_mgr_test.cpp index 2d74d57856d8dc3d244060b275fddca508e2e668..40534ad59e18e61b6f99d5cc8d345328b93bd8be 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_mgr_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_mgr_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -231,8 +231,10 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, SetDefaultApplication_0010, Function | Smal AAFwk::Want want; ElementName elementName("", "", "", ""); want.SetElement(elementName); - auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want); - EXPECT_NE(res, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want, funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -247,9 +249,11 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, SetDefaultApplication_0020, Function | Smal AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, "", MODULE_NAME); want.SetElement(elementName); - auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want, funcResult); ScopeGuard stateGuard([&] { ResetDataMgr(); }); - EXPECT_EQ(res, ERR_BUNDLE_MANAGER_INTERNAL_ERROR); + EXPECT_EQ(res, ERR_OK); + EXPECT_EQ(funcResult, ERR_BUNDLE_MANAGER_INTERNAL_ERROR); } /** @@ -264,8 +268,10 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, SetDefaultApplication_0030, Function | Smal AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, "", MODULE_NAME); want.SetElement(elementName); - auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want); - EXPECT_EQ(res, ERR_BUNDLE_MANAGER_INVALID_USER_ID); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want, funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_EQ(funcResult, ERR_BUNDLE_MANAGER_INVALID_USER_ID); } /** @@ -283,8 +289,10 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, SetDefaultApplication_0040, Function | Smal AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_NAME, MODULE_NAME); want.SetElement(elementName); - auto res = impl.SetDefaultApplication(101, DEFAULT_APP_VIDEO, want); - EXPECT_EQ(res, ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.SetDefaultApplication(101, DEFAULT_APP_VIDEO, want, funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_EQ(funcResult, ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH); } /** @@ -303,8 +311,10 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, SetDefaultApplication_0050, Function | Smal AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, "", MODULE_NAME); want.SetElement(elementName); - auto res = impl.SetDefaultApplication(101, DEFAULT_APP_VIDEO, want); - EXPECT_EQ(res, ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.SetDefaultApplication(101, DEFAULT_APP_VIDEO, want, funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_EQ(funcResult, ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH); } /** @@ -316,7 +326,8 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, IsDefaultApplication_0100, Function | Small { DefaultAppHostImpl impl; bool isDefaultApp = false; - auto res = impl.IsDefaultApplication("IMAGE", isDefaultApp); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.IsDefaultApplication("IMAGE", isDefaultApp, funcResult); EXPECT_EQ(res, ERR_OK); } @@ -328,8 +339,10 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, IsDefaultApplication_0100, Function | Small HWTEST_F(BmsBundleDefaultAppMgrTest, ResetDefaultApplication_0010, Function | SmallTest | Level1) { DefaultAppHostImpl impl; - auto res = impl.ResetDefaultApplication(100, "IMAGE"); - EXPECT_NE(res, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.ResetDefaultApplication(100, "IMAGE", funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -1334,8 +1347,10 @@ HWTEST_F(BmsBundleDefaultAppMgrTest, GetDefaultApplication_0500, Function | Smal DefaultAppHostImpl impl; BundleInfo bundleInfo; std::string type; - auto res = impl.GetDefaultApplication(USER_ID, type, bundleInfo); - EXPECT_NE(res, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.GetDefaultApplication(USER_ID, type, bundleInfo, funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** diff --git a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_test.cpp index 614bb7aca3ba57494ff0bec7c0878396be9e33f2..d56f5c33a2ae02cd125e0a442f7c5e7799695f91 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_default_app_test/bms_bundle_default_app_test.cpp @@ -26,6 +26,7 @@ #include "bundle_mgr_service.h" #include "bundle_permission_mgr.h" #include "bundle_verify_mgr.h" +#include "default_app_client.h" #include "inner_bundle_info.h" #include "installd/installd_service.h" #include "installd_client.h" @@ -95,6 +96,7 @@ const std::string PDF_MIME_TYPE = "application/pdf"; const std::string PDF_UTD = "com.adobe.pdf"; const std::string PDF_SUFFIX = ".pdf"; const std::string TEST_CALLER_NAME = "0"; +const std::string TYPE = "type"; const nlohmann::json DEFAULT_CONFIG = R"( [{ @@ -267,7 +269,9 @@ ErrCode BmsBundleDefaultAppTest::SetDefaultApplicationWrap(sptr def AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, abilityName, MODULE_NAME); want.SetElement(elementName); - return defaultAppProxy->SetDefaultApplication(USER_ID, type, want); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + defaultAppProxy->SetDefaultApplication(USER_ID, type, want, funcResult); + return funcResult; } @@ -285,17 +289,20 @@ HWTEST_F(BmsBundleDefaultAppTest, UTD_0100, Function | SmallTest | Level1) EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; EXPECT_EQ(abilityInfo.name, ABILITY_GENERAL_AVI); } - result = defaultAppProxy->ResetDefaultApplication(USER_ID, UTD_GENERAL_AVI); + result = defaultAppProxy->ResetDefaultApplication(USER_ID, UTD_GENERAL_AVI, funcResult); EXPECT_EQ(result, ERR_OK); - result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); + EXPECT_EQ(funcResult, ERR_OK); + result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); EXPECT_NE(result, ERR_OK); } @@ -313,17 +320,20 @@ HWTEST_F(BmsBundleDefaultAppTest, UTD_0200, Function | SmallTest | Level1) EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; EXPECT_EQ(abilityInfo.name, ABILITY_GENERAL_VIDEO); } - result = defaultAppProxy->ResetDefaultApplication(USER_ID, UTD_GENERAL_AVI); + result = defaultAppProxy->ResetDefaultApplication(USER_ID, UTD_GENERAL_AVI, funcResult); EXPECT_EQ(result, ERR_OK); - result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); + EXPECT_EQ(funcResult, ERR_OK); + result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); EXPECT_NE(result, ERR_OK); } @@ -341,8 +351,10 @@ HWTEST_F(BmsBundleDefaultAppTest, UTD_0300, Function | SmallTest | Level1) EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, UTD_GENERAL_AVI, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); } /** @@ -355,7 +367,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0100, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); bool isDefaultApp = false; - ErrCode result = defaultAppProxy->IsDefaultApplication(DEFAULT_APP_VIDEO, isDefaultApp); + ErrCode result = DefaultAppClient::GetInstance().IsDefaultApplication(DEFAULT_APP_VIDEO, isDefaultApp); EXPECT_EQ(result, ERR_OK); EXPECT_FALSE(isDefaultApp); } @@ -374,8 +386,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0200, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.name, BUNDLE_NAME); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { @@ -405,14 +419,17 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0300, Function | SmallTest ErrCode result = SetDefaultApplicationWrap(defaultAppProxy, DEFAULT_APP_VIDEO, ABILITY_VIDEO); EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.name, BUNDLE_NAME); AAFwk::Want want; - result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); + result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want, funcResult); EXPECT_EQ(result, ERR_OK); - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); + EXPECT_EQ(funcResult, ERR_OK); + result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); EXPECT_NE(result, ERR_OK); } @@ -433,8 +450,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0400, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -455,14 +474,17 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0500, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); AAFwk::Want want; - ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); result = SetDefaultApplicationWrap(defaultAppProxy, DEFAULT_FILE_TYPE_VIDEO_MP4, ABILITY_VIDEO_MP4); EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, bundleInfo); + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.name, BUNDLE_NAME); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { @@ -486,13 +508,16 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0600, Function | SmallTest ErrCode result = SetDefaultApplicationWrap(defaultAppProxy, DEFAULT_APP_VIDEO, ABILITY_VIDEO); EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.name, BUNDLE_NAME); - result = defaultAppProxy->ResetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO); + result = defaultAppProxy->ResetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, funcResult); EXPECT_EQ(result, ERR_OK); - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); + EXPECT_EQ(funcResult, ERR_OK); + result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, bundleInfo); EXPECT_NE(result, ERR_OK); } @@ -507,18 +532,22 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0700, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); AAFwk::Want want; - ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_WORD, want); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_WORD, want, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); result = SetDefaultApplicationWrap(defaultAppProxy, DEFAULT_FILE_TYPE_WORD, DEFAULT_APP_WORD); EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_WORD, bundleInfo); + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_WORD, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.name, BUNDLE_NAME); - result = defaultAppProxy->ResetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_WORD); + result = defaultAppProxy->ResetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_WORD, funcResult); EXPECT_EQ(result, ERR_OK); - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_WORD, bundleInfo); + EXPECT_EQ(funcResult, ERR_OK); + result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_WORD, bundleInfo); EXPECT_NE(result, ERR_OK); } @@ -536,8 +565,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0800, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_IMAGE, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_IMAGE, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -559,8 +590,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_0900, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_BROWSER, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_BROWSER, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -582,8 +615,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1000, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_AUDIO, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_AUDIO, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -605,8 +640,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1100, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_PDF, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_PDF, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -628,8 +665,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1200, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_WORD, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_WORD, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -651,8 +690,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1300, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_EXCEL, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_EXCEL, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -674,8 +715,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1400, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_PPT, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_PPT, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); EXPECT_EQ(bundleInfo.abilityInfos.size(), 1); if (bundleInfo.abilityInfos.size() == 1) { auto abilityInfo = bundleInfo.abilityInfos[0]; @@ -694,7 +737,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1500, Function | SmallTest EXPECT_NE(defaultAppProxy, nullptr); for (const std::string& invalidType : invalidTypeSet) { bool isDefaultApp = false; - ErrCode result = defaultAppProxy->IsDefaultApplication(invalidType, isDefaultApp); + ErrCode result = DefaultAppClient::GetInstance().IsDefaultApplication(invalidType, isDefaultApp); EXPECT_EQ(result, ERR_OK); EXPECT_FALSE(isDefaultApp); } @@ -726,7 +769,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1700, Function | SmallTest EXPECT_NE(defaultAppProxy, nullptr); BundleInfo bundleInfo; for (const std::string& invalidType : invalidTypeSet) { - ErrCode result = defaultAppProxy->GetDefaultApplication(USER_ID, invalidType, bundleInfo); + ErrCode result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, invalidType, bundleInfo); EXPECT_NE(result, ERR_OK); } } @@ -741,7 +784,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1800, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); for (const std::string& invalidType : invalidTypeSet) { - ErrCode result = defaultAppProxy->ResetDefaultApplication(USER_ID, invalidType); + ErrCode result = DefaultAppClient::GetInstance().ResetDefaultApplication(USER_ID, invalidType); EXPECT_NE(result, ERR_OK); } } @@ -758,7 +801,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_1900, Function | SmallTest AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_VIDEO, MODULE_NAME); want.SetElement(elementName); - ErrCode result = defaultAppProxy->SetDefaultApplication(INVALID_USER_ID, DEFAULT_APP_VIDEO, want); + ErrCode result = DefaultAppClient::GetInstance().SetDefaultApplication(INVALID_USER_ID, DEFAULT_APP_VIDEO, want); EXPECT_NE(result, ERR_OK); } @@ -772,7 +815,8 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_2000, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); BundleInfo bundleInfo; - ErrCode result = defaultAppProxy->GetDefaultApplication(INVALID_USER_ID, DEFAULT_APP_VIDEO, bundleInfo); + ErrCode result = + DefaultAppClient::GetInstance().GetDefaultApplication(INVALID_USER_ID, DEFAULT_APP_VIDEO, bundleInfo); EXPECT_NE(result, ERR_OK); } @@ -785,7 +829,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_2100, Function | SmallTest { auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); - ErrCode result = defaultAppProxy->ResetDefaultApplication(INVALID_USER_ID, DEFAULT_APP_VIDEO); + ErrCode result = DefaultAppClient::GetInstance().ResetDefaultApplication(INVALID_USER_ID, DEFAULT_APP_VIDEO); EXPECT_NE(result, ERR_OK); } @@ -801,7 +845,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_2200, Function | SmallTest AAFwk::Want want; ElementName elementName("", "", ABILITY_VIDEO, MODULE_NAME); want.SetElement(elementName); - ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); + ErrCode result = DefaultAppClient::GetInstance().SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); EXPECT_NE(result, ERR_OK); } @@ -817,7 +861,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_2300, Function | SmallTest AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_VIDEO, ""); want.SetElement(elementName); - ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); + ErrCode result = DefaultAppClient::GetInstance().SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); EXPECT_NE(result, ERR_OK); } @@ -833,7 +877,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_2400, Function | SmallTest AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, "", MODULE_NAME); want.SetElement(elementName); - ErrCode result = defaultAppProxy->SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); + ErrCode result = DefaultAppClient::GetInstance().SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); EXPECT_NE(result, ERR_OK); } @@ -952,7 +996,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_3300, Function | SmallTest EXPECT_NE(defaultAppProxy, nullptr); BundleInfo bundleInfo; std::string emptyType = ""; - ErrCode result = defaultAppProxy->GetDefaultApplication(USER_ID, emptyType, bundleInfo); + ErrCode result = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, emptyType, bundleInfo); EXPECT_EQ(result, ERR_BUNDLE_MANAGER_INVALID_TYPE); } @@ -966,7 +1010,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_3400, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); std::string emptyType = ""; - ErrCode result = defaultAppProxy->ResetDefaultApplication(USER_ID, emptyType); + ErrCode result = DefaultAppClient::GetInstance().ResetDefaultApplication(USER_ID, emptyType); EXPECT_EQ(result, ERR_BUNDLE_MANAGER_INVALID_TYPE); } @@ -1478,8 +1522,10 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_6500, Function | SmallTest EXPECT_EQ(result, ERR_OK); BundleInfo bundleInfo; - result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_EMAIL, bundleInfo); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + result = defaultAppProxy->GetDefaultApplication(USER_ID, DEFAULT_APP_EMAIL, bundleInfo, funcResult); EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_OK); ASSERT_EQ(bundleInfo.abilityInfos.size(), 1); EXPECT_EQ(bundleInfo.abilityInfos[0].name, ABILITY_EMAIL); @@ -1526,7 +1572,7 @@ HWTEST_F(BmsBundleDefaultAppTest, BmsBundleDefaultApp_6700, Function | SmallTest auto defaultAppProxy = GetDefaultAppProxy(); EXPECT_NE(defaultAppProxy, nullptr); bool isDefaultApp = false; - ErrCode result = defaultAppProxy->IsDefaultApplication("general.video", isDefaultApp); + ErrCode result = DefaultAppClient::GetInstance().IsDefaultApplication("general.video", isDefaultApp); EXPECT_EQ(result, ERR_OK); EXPECT_FALSE(isDefaultApp); } @@ -1900,7 +1946,8 @@ HWTEST_F(BmsBundleDefaultAppTest, IsDefaultApplication_0100, Function | SmallTes DefaultAppHostImpl impl; bool isDefaultApp = false; ClearDataMgr(); - auto res = impl.IsDefaultApplication(DEFAULT_FILE_TYPE_VIDEO_MP4, isDefaultApp); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.IsDefaultApplication(DEFAULT_FILE_TYPE_VIDEO_MP4, isDefaultApp, funcResult); EXPECT_EQ(isDefaultApp, false); EXPECT_EQ(res, ERR_OK); } @@ -1918,8 +1965,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0100, Function | SmallTe want.SetElement(elementName); ClearDataMgr(); ScopeGuard stateGuard([&] { ResetDataMgr(); }); - auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want); - EXPECT_EQ(res, ERR_BUNDLE_MANAGER_INTERNAL_ERROR); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + auto res = impl.SetDefaultApplication(USER_ID, DEFAULT_FILE_TYPE_VIDEO_MP4, want, funcResult); + EXPECT_EQ(res, ERR_OK); + EXPECT_EQ(funcResult, ERR_BUNDLE_MANAGER_INTERNAL_ERROR); } /** @@ -1933,8 +1982,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0200, Function | SmallTe AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_VIDEO, ""); want.SetElement(elementName); - ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); - EXPECT_NE(result, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -1948,8 +1999,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0300, Function | SmallTe AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, "", MODULE_NAME); want.SetElement(elementName); - ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); - EXPECT_NE(result, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -1963,8 +2016,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0400, Function | SmallTe AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_PDF_ERROR, MODULE_NAME); want.SetElement(elementName); - ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_PDF, want); - EXPECT_NE(result, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_PDF, want, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -1978,8 +2033,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0500, Function | SmallTe AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_WORD_ERROR, MODULE_NAME); want.SetElement(elementName); - ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_WORD, want); - EXPECT_NE(result, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_WORD, want, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -1993,8 +2050,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0600, Function | SmallTe AAFwk::Want want; ElementName elementName("", BUNDLE_NAME, ABILITY_EXCEL_ERROR, MODULE_NAME); want.SetElement(elementName); - ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_EXCEL, want); - EXPECT_NE(result, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_EXCEL, want, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -2016,8 +2075,10 @@ HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0700, Function | SmallTe if (!res) { dataMgr->AddUserId(USER_ID); } - ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want); - EXPECT_NE(result, ERR_OK); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.SetDefaultApplication(USER_ID, DEFAULT_APP_VIDEO, want, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_NE(funcResult, ERR_OK); } /** @@ -2029,8 +2090,10 @@ HWTEST_F(BmsBundleDefaultAppTest, ResetDefaultApplication_0100, Function | Small { DefaultAppHostImpl impl; std::string emptyType = ""; - ErrCode result = impl.ResetDefaultApplication(USER_ID, emptyType); - EXPECT_EQ(result, ERR_BUNDLE_MANAGER_INVALID_TYPE); + ErrCode funcResult = ERR_APPEXECFWK_IDL_GET_RESULT_ERROR; + ErrCode result = impl.ResetDefaultApplication(USER_ID, emptyType, funcResult); + EXPECT_EQ(result, ERR_OK); + EXPECT_EQ(funcResult, ERR_BUNDLE_MANAGER_INVALID_TYPE); } /** @@ -2417,4 +2480,148 @@ HWTEST_F(BmsBundleDefaultAppTest, CallerNameTest_0100, Function | SmallTest | Le UnInstallBundle(BUNDLE_NAME); EXPECT_EQ(callerName, BUNDLE_NAME); } + +/** + * @tc.number: GetDefaultAppProxy_0010 + * @tc.name: test GetDefaultAppProxy + * @tc.desc: 1.GetDefaultAppProxy + */ +HWTEST_F(BmsBundleDefaultAppTest, GetDefaultAppProxy_0010, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); +} + +/** + * @tc.number: IsDefaultApplication_0010 + * @tc.name: test IsDefaultApplication + * @tc.desc: 1.IsDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppTest, IsDefaultApplication_0010, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + bool isDefaultApp = false; + std::string strType = TYPE; + ErrCode ret = DefaultAppClient::GetInstance().IsDefaultApplication(strType, isDefaultApp); + EXPECT_EQ(ret, ERR_OK); +} + +/** + * @tc.number: GetDefaultApplication_0010 + * @tc.name: test GetDefaultApplication + * @tc.desc: 1.GetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppTest, GetDefaultApplication_0010, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + std::string strType = TYPE; + BundleInfo bundleInfo; + ErrCode ret = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, strType, bundleInfo); + EXPECT_EQ(ret, ERR_BUNDLE_MANAGER_PERMISSION_DENIED); +} + +/** + * @tc.number: GetDefaultApplication_0020 + * @tc.name: test GetDefaultApplication + * @tc.desc: 1.GetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppTest, GetDefaultApplication_0020, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + std::string strType = ""; + BundleInfo bundleInfo; + ErrCode ret = DefaultAppClient::GetInstance().GetDefaultApplication(USER_ID, strType, bundleInfo); + EXPECT_EQ(ret, ERR_BUNDLE_MANAGER_INVALID_TYPE); +} + +/** + * @tc.number: SetDefaultApplication_0010 + * @tc.name: test SetDefaultApplication + * @tc.desc: 1.SetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppTest, SetDefaultApplication_0010, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + std::string strType = TYPE; + AAFwk::Want want; + ElementName elementName("", BUNDLE_NAME, ABILITY_NAME, MODULE_NAME); + want.SetElement(elementName); + ErrCode ret = DefaultAppClient::GetInstance().SetDefaultApplication(USER_ID, strType, want); + EXPECT_EQ(ret, ERR_BUNDLE_MANAGER_ABILITY_AND_TYPE_MISMATCH); +} + +/** + * @tc.number: ResetDefaultApplication_0010 + * @tc.name: test ResetDefaultApplication + * @tc.desc: 1.ResetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppTest, ResetDefaultApplication_0010, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + std::string strType = ""; + ErrCode ret = DefaultAppClient::GetInstance().ResetDefaultApplication(USER_ID, strType); + EXPECT_EQ(ret, ERR_BUNDLE_MANAGER_INVALID_TYPE); +} + +/** + * @tc.number: ResetDefaultApplication_0020 + * @tc.name: test ResetDefaultApplication + * @tc.desc: 1.ResetDefaultApplication + */ +HWTEST_F(BmsBundleDefaultAppTest, ResetDefaultApplication_0020, Function | SmallTest | Level1) +{ + auto defaultApp = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultApp, nullptr); + std::string strType = TYPE; + ErrCode ret = DefaultAppClient::GetInstance().ResetDefaultApplication(USER_ID, strType); + EXPECT_EQ(ret, ERR_BUNDLE_MANAGER_PERMISSION_DENIED); +} + +/** + * @tc.number: ResetDefaultAppProxy_0010 + * @tc.name: test ResetDefaultAppProxy + * @tc.desc: 1.ResetDefaultAppProxy + */ +HWTEST_F(BmsBundleDefaultAppTest, ResetDefaultAppProxy_0010, Function | SmallTest | Level1) +{ + DefaultAppClient::GetInstance().defaultApp_ = nullptr; + wptr remote; + DefaultAppClient::GetInstance().ResetDefaultAppProxy(remote); + EXPECT_NE(DefaultAppClient::GetInstance().GetDefaultAppProxy(), nullptr); + DefaultAppClient::GetInstance().ResetDefaultAppProxy(remote); + EXPECT_EQ(DefaultAppClient::GetInstance().deathRecipient_, nullptr); +} + +/** + * @tc.number: OnRemoteDied_0010 + * @tc.name: test OnRemoteDied + * @tc.desc: 1.OnRemoteDied + */ +HWTEST_F(BmsBundleDefaultAppTest, OnRemoteDied_0010, Function | SmallTest | Level1) +{ + wptr remote = nullptr; + DefaultAppClient::DefaultAppDeathRecipient deathRecipient; + auto defaultAppProxy = DefaultAppClient::GetInstance().GetDefaultAppProxy(); + EXPECT_NE(defaultAppProxy, nullptr); + deathRecipient.OnRemoteDied(remote); + EXPECT_NE(DefaultAppClient::GetInstance().defaultApp_, nullptr); + EXPECT_NE(DefaultAppClient::GetInstance().deathRecipient_, nullptr); + + sptr systemAbilityManager = + SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + ASSERT_NE(systemAbilityManager, nullptr); + remote = systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); + ASSERT_NE(remote, nullptr); + deathRecipient.OnRemoteDied(remote); + EXPECT_EQ(DefaultAppClient::GetInstance().defaultApp_, nullptr); + EXPECT_EQ(DefaultAppClient::GetInstance().deathRecipient_, nullptr); +} } // OHOS \ No newline at end of file diff --git a/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/BUILD.gn index dac431db5493c3386ee1f070723d8b2ad662a623..301c8b1f1230b0a168cc9a636add868939223568 100644 --- a/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023-2025 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 @@ -36,6 +36,7 @@ ohos_fuzztest("DefaultAppHostFuzzTest") { "${base_path}:appexecfwk_base", "${common_path}:libappexecfwk_common", "${core_path}:appexecfwk_core", + "${core_path}:default_app_stub", ] external_deps = [ "ability_base:want", diff --git a/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp b/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp index 97c476635c72b8b7e43fcedba206299faea33b5b..3833e91c9ce12c2d55df22a98bc0bf3b414f8399 100644 --- a/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp +++ b/test/fuzztest/fuzztest_application/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp @@ -18,7 +18,7 @@ #include #include #define private public -#include "default_app_host.h" +#include "default_app_stub.h" #include "securec.h" using namespace OHOS::AppExecFwk; @@ -26,17 +26,51 @@ namespace OHOS { constexpr size_t U32_AT_SIZE = 4; constexpr uint32_t CODE_MAX = 3; +class TestDefaultAppStub : public DefaultAppStub { +public: + int32_t CallbackEnter([[maybe_unused]] uint32_t code) override + { + return 0; + } + int32_t CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result) override + { + return 0; + } + + ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode GetDefaultApplication( + int32_t userId, const std::string& type, BundleInfo& bundleInfo, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode SetDefaultApplication( + int32_t userId, const std::string& type, const Want& want, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode ResetDefaultApplication(int32_t userId, const std::string& type, int32_t& funcResult) override + { + return ERR_OK; + } +}; + bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) { for (uint32_t code = 0; code <= CODE_MAX; code++) { MessageParcel datas; - std::u16string descriptor = DefaultAppHost::GetDescriptor(); + std::u16string descriptor = DefaultAppStub::GetDescriptor(); datas.WriteInterfaceToken(descriptor); datas.WriteBuffer(data, size); datas.RewindRead(0); MessageParcel reply; MessageOption option; - DefaultAppHost defaultAppHost; + TestDefaultAppStub defaultAppHost; defaultAppHost.OnRemoteRequest(code, datas, reply, option); } return true; diff --git a/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapp_fuzzer/bmsdefaultapp_fuzzer.cpp b/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapp_fuzzer/bmsdefaultapp_fuzzer.cpp index 832300678438b44f8feb5fe54eeb580dc7aee18b..2aef7e47d490e03c556db52d78193020f47d39a9 100644 --- a/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapp_fuzzer/bmsdefaultapp_fuzzer.cpp +++ b/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapp_fuzzer/bmsdefaultapp_fuzzer.cpp @@ -266,12 +266,13 @@ bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size) want2.SetAction("ohos.want.action.viewData"); want2.SetUri("https://123"); want2.SetElementName("", ""); - defaultAppHostImpl.SetDefaultApplication(TEST_USERID_100, type, want2); - defaultAppHostImpl.SetDefaultApplication(START_USERID, type, want2); + int32_t funcResult = 0; + defaultAppHostImpl.SetDefaultApplication(TEST_USERID_100, type, want2, funcResult); + defaultAppHostImpl.SetDefaultApplication(START_USERID, type, want2, funcResult); // test ResetDefaultApplication - defaultAppHostImpl.ResetDefaultApplication(TEST_USERID_100, type); - defaultAppHostImpl.ResetDefaultApplication(START_USERID, type); + defaultAppHostImpl.ResetDefaultApplication(TEST_USERID_100, type, funcResult); + defaultAppHostImpl.ResetDefaultApplication(START_USERID, type, funcResult); // test GetCallerName defaultAppHostImpl.GetCallerName(); diff --git a/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/BUILD.gn index c46600576b9ff9209a457b6355ad62316a0a38a8..460de5892441e128986322abbd1ac93d1db46285 100644 --- a/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/BUILD.gn @@ -37,6 +37,7 @@ ohos_fuzztest("BMSDefaultAppHostFuzzTest") { "${base_path}:appexecfwk_base", "${common_path}:libappexecfwk_common", "${core_path}:appexecfwk_core", + "${core_path}:default_app_stub", ] external_deps = [ "ability_base:want", diff --git a/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/bmsdefaultapphost_fuzzer.cpp b/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/bmsdefaultapphost_fuzzer.cpp index 3e2d345608f16a7b917bb66948a5306c196f2afa..55d99c074383215591e210abf5840c539e87a657 100644 --- a/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/bmsdefaultapphost_fuzzer.cpp +++ b/test/fuzztest/fuzztest_bundlemanager/bmsdefaultapphost_fuzzer/bmsdefaultapphost_fuzzer.cpp @@ -19,7 +19,7 @@ #include #include #define private public -#include "default_app_host.h" +#include "default_app_stub.h" #include "securec.h" #include "bms_fuzztest_util.h" @@ -28,16 +28,50 @@ using namespace OHOS::AppExecFwk::BMSFuzzTestUtil; namespace OHOS { constexpr uint32_t CODE_MAX = 3; +class TestDefaultAppStub : public DefaultAppStub { +public: + int32_t CallbackEnter([[maybe_unused]] uint32_t code) override + { + return 0; + } + int32_t CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result) override + { + return 0; + } + + ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode GetDefaultApplication( + int32_t userId, const std::string& type, BundleInfo& bundleInfo, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode SetDefaultApplication( + int32_t userId, const std::string& type, const Want& want, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode ResetDefaultApplication(int32_t userId, const std::string& type, int32_t& funcResult) override + { + return ERR_OK; + } +}; + bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size) { MessageParcel datas; - std::u16string descriptor = DefaultAppHost::GetDescriptor(); + std::u16string descriptor = DefaultAppStub::GetDescriptor(); datas.WriteInterfaceToken(descriptor); datas.WriteBuffer(data, size); datas.RewindRead(0); MessageParcel reply; MessageOption option; - DefaultAppHost defaultAppHost; + TestDefaultAppStub defaultAppHost; FuzzedDataProvider fdp(data, size); uint8_t code = fdp.ConsumeIntegralInRange(0, CODE_MAX); defaultAppHost.OnRemoteRequest(code, datas, reply, option); diff --git a/test/fuzztest/fuzztest_bundlemanager/bmsgetdefaultapplication_fuzzer/bmsgetdefaultapplication_fuzzer.cpp b/test/fuzztest/fuzztest_bundlemanager/bmsgetdefaultapplication_fuzzer/bmsgetdefaultapplication_fuzzer.cpp index a8ccf98d14ae50993d9df7306234fa0d4b427eef..5a76fbb05def4689543712a6299bd81b56c39fd6 100644 --- a/test/fuzztest/fuzztest_bundlemanager/bmsgetdefaultapplication_fuzzer/bmsgetdefaultapplication_fuzzer.cpp +++ b/test/fuzztest/fuzztest_bundlemanager/bmsgetdefaultapplication_fuzzer/bmsgetdefaultapplication_fuzzer.cpp @@ -33,7 +33,8 @@ bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size) FuzzedDataProvider fdp(data, size); std::string type = fdp.ConsumeRandomLengthString(STRING_MAX_LENGTH); int32_t userId = BMSFuzzTestUtil::GenerateRandomUser(fdp); - defaultApp.GetDefaultApplication(userId, type, bundleInfo); + int32_t funcResult = 0; + defaultApp.GetDefaultApplication(userId, type, bundleInfo, funcResult); return true; } } @@ -44,4 +45,4 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) // Run your code on data. OHOS::DoSomethingInterestingWithMyAPI(data, size); return 0; -} \ No newline at end of file +} diff --git a/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/BUILD.gn index 369c57166df61b3ea021115a700cdc3096eb9a80..379f0ae6d7bbee71983995210071ed6725f34760 100755 --- a/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 diff --git a/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/getdefaultapplication_fuzzer.cpp b/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/getdefaultapplication_fuzzer.cpp index 12d01078f6a6f02b92baf5644810c77ee49e0487..7bfec00c54715b548ca2206d72e5bbefa3c30f10 100755 --- a/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/getdefaultapplication_fuzzer.cpp +++ b/test/fuzztest/fuzztest_information/getdefaultapplication_fuzzer/getdefaultapplication_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -28,7 +28,8 @@ namespace OHOS { sptr object; DefaultAppProxy defaultApp(object); BundleInfo bundleInfo; - defaultApp.GetDefaultApplication(reinterpret_cast(data), type, bundleInfo); + int32_t funcResult = 0; + defaultApp.GetDefaultApplication(reinterpret_cast(data), type, bundleInfo, funcResult); return true; } } diff --git a/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/BUILD.gn index 396f4df68aad6dd4384036cae2307879fd797259..7f63008290e16cd28bf552f2a63761c9f1bfb4f7 100644 --- a/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/BUILD.gn @@ -53,6 +53,7 @@ ohos_fuzztest("DefaultAppHostFuzzTest") { "${bundle_framework_path}/test/sceneProject/unittest/test_bundle/defaultAppTest:defaultAppTest", "${bundle_framework_path}/test/sceneProject/unittest/test_bundle/resourceManagerTest:resourceManagerTest", "${core_path}:appexecfwk_core", + "${core_path}:default_app_stub", ] deps += bundle_install_deps diff --git a/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp b/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp index 5b074ba1b5fcd9b7c20a40a9598c80c9d8d805c5..ee232569e6676f65334c88feb1dd041e650bd7cc 100644 --- a/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp +++ b/test/fuzztest/fuzztest_others/defaultapphost_fuzzer/defaultapphost_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -18,7 +18,7 @@ #include #include #define private public -#include "default_app_host.h" +#include "default_app_stub.h" #include "securec.h" using namespace OHOS::AppExecFwk; @@ -29,6 +29,40 @@ constexpr size_t DCAMERA_SHIFT_24 = 24; constexpr size_t DCAMERA_SHIFT_16 = 16; constexpr size_t DCAMERA_SHIFT_8 = 8; +class TestDefaultAppStub : public DefaultAppStub { +public: + int32_t CallbackEnter([[maybe_unused]] uint32_t code) override + { + return 0; + } + int32_t CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result) override + { + return 0; + } + + ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode GetDefaultApplication( + int32_t userId, const std::string& type, BundleInfo& bundleInfo, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode SetDefaultApplication( + int32_t userId, const std::string& type, const Want& want, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode ResetDefaultApplication(int32_t userId, const std::string& type, int32_t& funcResult) override + { + return ERR_OK; + } +}; + uint32_t GetU32Data(const char* ptr) { return (ptr[0] << DCAMERA_SHIFT_24) | (ptr[1] << DCAMERA_SHIFT_16) | (ptr[2] << DCAMERA_SHIFT_8) | (ptr[3]); @@ -37,19 +71,14 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) { uint32_t code = (GetU32Data(data) % MESSAGE_SIZE); MessageParcel datas; - std::u16string descriptor = DefaultAppHost::GetDescriptor(); + std::u16string descriptor = DefaultAppStub::GetDescriptor(); datas.WriteInterfaceToken(descriptor); datas.WriteBuffer(data, size); datas.RewindRead(0); MessageParcel reply; MessageOption option; - DefaultAppHost defaultAppHost; + TestDefaultAppStub defaultAppHost; defaultAppHost.OnRemoteRequest(code, datas, reply, option); - defaultAppHost.HandleIsDefaultApplication(datas, reply); - defaultAppHost.HandleGetDefaultApplication(datas, reply); - defaultAppHost.HandleSetDefaultApplication(datas, reply); - defaultAppHost.HandleResetDefaultApplication(datas, reply); - return true; } } diff --git a/test/fuzztest/fuzztest_others/defaultapphostimpl_fuzzer/defaultapphostimpl_fuzzer.cpp b/test/fuzztest/fuzztest_others/defaultapphostimpl_fuzzer/defaultapphostimpl_fuzzer.cpp index 8381fa2b7a066cdbd2f20bcd3ae51147dccb2e9d..bfd7a49954ead14052a9f8348270402f95846172 100644 --- a/test/fuzztest/fuzztest_others/defaultapphostimpl_fuzzer/defaultapphostimpl_fuzzer.cpp +++ b/test/fuzztest/fuzztest_others/defaultapphostimpl_fuzzer/defaultapphostimpl_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -33,13 +33,14 @@ namespace OHOS { element.bundleName = ""; AAFwk::Want want; want.SetElementName("", ""); + int32_t funcResult = 0; bool isDefaultApp = false; auto defaultAppHostImpl_ = std::make_shared(); - defaultAppHostImpl_->GetDefaultApplication(reinterpret_cast(data), type, bundleInfo); - defaultAppHostImpl_->IsDefaultApplication(type, isDefaultApp); - defaultAppHostImpl_->SetDefaultApplication(reinterpret_cast(data), type, want); - defaultAppHostImpl_->ResetDefaultApplication(reinterpret_cast(data), type); + defaultAppHostImpl_->GetDefaultApplication(reinterpret_cast(data), type, bundleInfo, funcResult); + defaultAppHostImpl_->IsDefaultApplication(type, isDefaultApp, funcResult); + defaultAppHostImpl_->SetDefaultApplication(reinterpret_cast(data), type, want, funcResult); + defaultAppHostImpl_->ResetDefaultApplication(reinterpret_cast(data), type, funcResult); return true; } diff --git a/test/fuzztest/fuzztest_others/defaultappproxy_fuzzer/defaultappproxy_fuzzer.cpp b/test/fuzztest/fuzztest_others/defaultappproxy_fuzzer/defaultappproxy_fuzzer.cpp index e947ee595d31b1714390fa6fa72740aa3ecd4ec7..2f356591506cc7a4ffed8fa826a618fd472696c3 100644 --- a/test/fuzztest/fuzztest_others/defaultappproxy_fuzzer/defaultappproxy_fuzzer.cpp +++ b/test/fuzztest/fuzztest_others/defaultappproxy_fuzzer/defaultappproxy_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -50,11 +50,11 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) MessageParcel reply; sptr object; DefaultAppProxy defaultAppProxy(object); - defaultAppProxy.IsDefaultApplication(type, isDefaultApp); - defaultAppProxy.GetDefaultApplication(userId, type, bundleInfo); - defaultAppProxy.SetDefaultApplication(userId, type, want); - defaultAppProxy.ResetDefaultApplication(userId, type); - defaultAppProxy.SendRequest(DefaultAppInterfaceCode::IS_DEFAULT_APPLICATION, datas, reply); + int32_t funcResult = 0; + defaultAppProxy.IsDefaultApplication(type, isDefaultApp, funcResult); + defaultAppProxy.GetDefaultApplication(userId, type, bundleInfo, funcResult); + defaultAppProxy.SetDefaultApplication(userId, type, want, funcResult); + defaultAppProxy.ResetDefaultApplication(userId, type, funcResult); return true; } diff --git a/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/BUILD.gn index 4f97b3e8ec07b6db3a16b845ca38884899019f09..220cd1409eaf69a5ce97b96d0b09dea0b0d747ed 100755 --- a/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 diff --git a/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/isdefaultapplication_fuzzer.cpp b/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/isdefaultapplication_fuzzer.cpp index 4d2333781b49ecebfe8590479d2238a0fc404c82..5598c05f70db2cc98030a10dd9d699ddc854ce91 100755 --- a/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/isdefaultapplication_fuzzer.cpp +++ b/test/fuzztest/fuzztest_others/isdefaultapplication_fuzzer/isdefaultapplication_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -32,7 +32,8 @@ constexpr size_t THRESHOLD = 2; } sptr object; DefaultAppProxy defaultApp(object); - defaultApp.IsDefaultApplication(type, isDefaultApp); + int32_t funcResult = 0; + defaultApp.IsDefaultApplication(type, isDefaultApp, funcResult); return true; } } diff --git a/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/BUILD.gn index 4ad378f0fb3645e9abb6ccc7db7a90f8854e9f90..8754e4e21e5cdd624aa7f8129ee5eb6b5858562c 100755 --- a/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 diff --git a/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/resetdefaultapplication_fuzzer.cpp b/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/resetdefaultapplication_fuzzer.cpp index 7ecd2555c0dd5cd1eb0b2dffbfbab2879da28a33..12e92ac91186205ab383d7e7cf6d954a61a2dcfd 100755 --- a/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/resetdefaultapplication_fuzzer.cpp +++ b/test/fuzztest/fuzztest_others/resetdefaultapplication_fuzzer/resetdefaultapplication_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -27,7 +27,8 @@ namespace OHOS { std::string type (reinterpret_cast(data), size); sptr object; DefaultAppProxy defaultApp(object); - defaultApp.ResetDefaultApplication(reinterpret_cast(data), type); + int32_t funcResult = 0; + defaultApp.ResetDefaultApplication(reinterpret_cast(data), type, funcResult); return true; } } diff --git a/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/BUILD.gn b/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/BUILD.gn index 016ad6b6e5f875c542ee6c175163f8b6cda67f90..e4589b5731385e6dd749c0c1d7b8b2d8d2dc2553 100755 --- a/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/BUILD.gn +++ b/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2023 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 diff --git a/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/setdefaultapplication_fuzzer.cpp b/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/setdefaultapplication_fuzzer.cpp index d3c7b7f6ef24c7a3b89473fa36ed0e38d740649d..b702d053b4bfc70c37bd4629d2520550dbba4bc7 100755 --- a/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/setdefaultapplication_fuzzer.cpp +++ b/test/fuzztest/fuzztest_others/setdefaultapplication_fuzzer/setdefaultapplication_fuzzer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2025 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 @@ -32,7 +32,8 @@ namespace OHOS { Want want; std::string bundleName (reinterpret_cast(data), size); want.SetAction(bundleName); - defaultApp.SetDefaultApplication(reinterpret_cast(data), type, want); + int32_t funcResult = 0; + defaultApp.SetDefaultApplication(reinterpret_cast(data), type, want, funcResult); return true; } } diff --git a/test/systemtest/common/bms/acts_bms_kit_system_test/acts_bms_kit_system_test.cpp b/test/systemtest/common/bms/acts_bms_kit_system_test/acts_bms_kit_system_test.cpp index 18b2b6d445e1016c7b027cf4445c871c2e46f90d..d0287df9cd221dbe196acf448852e89734bc9765 100644 --- a/test/systemtest/common/bms/acts_bms_kit_system_test/acts_bms_kit_system_test.cpp +++ b/test/systemtest/common/bms/acts_bms_kit_system_test/acts_bms_kit_system_test.cpp @@ -35,6 +35,7 @@ #include "bundle_user_info.h" #include "clean_cache_callback_host.h" #include "common_tool.h" +#include "default_app_client.h" #include "extension_ability_info.h" #include "form_info.h" #include "permission_define.h" @@ -6481,11 +6482,9 @@ HWTEST_F(ActsBmsKitSystemTest, SetDebugMode_0100, Function | SmallTest | Level1) */ HWTEST_F(ActsBmsKitSystemTest, GetDefaultAppProxy_0100, Function | SmallTest | Level1) { - sptr bundleMgrProxy = GetBundleMgrProxy(); - ASSERT_NE(bundleMgrProxy, nullptr); - sptr getDefaultAppProxy = bundleMgrProxy->GetDefaultAppProxy(); + std::string type = ""; bool isDefaultApp = false; - ErrCode res = getDefaultAppProxy->IsDefaultApplication("", isDefaultApp); + ErrCode res = DefaultAppClient::GetInstance().IsDefaultApplication(type, isDefaultApp); EXPECT_EQ(res, ERR_OK); EXPECT_FALSE(isDefaultApp); } @@ -6495,31 +6494,18 @@ HWTEST_F(ActsBmsKitSystemTest, GetDefaultAppProxy_0100, Function | SmallTest | L * @tc.name: test GetDefaultAppProxy proxy * @tc.desc: 1.system run normally * 2.test GetDefaultApplication failed + * 3.test ResetDefaultApplication failed */ HWTEST_F(ActsBmsKitSystemTest, GetDefaultAppProxy_0400, Function | SmallTest | Level1) { - sptr bundleMgrProxy = GetBundleMgrProxy(); - ASSERT_NE(bundleMgrProxy, nullptr); - sptr getDefaultAppProxy = bundleMgrProxy->GetDefaultAppProxy(); BundleInfo bundleInfo; - ErrCode result = getDefaultAppProxy->GetDefaultApplication(USERID, "", bundleInfo); + ErrCode result = DefaultAppClient::GetInstance().GetDefaultApplication(USERID, "", bundleInfo); EXPECT_NE(result, ERR_OK); -} -/** - * @tc.number: GetDefaultAppProxy_0500 - * @tc.name: test GetDefaultAppProxy proxy - * @tc.desc: 1.system run normally - * 2.test ResetDefaultApplication failed - */ -HWTEST_F(ActsBmsKitSystemTest, GetDefaultAppProxy_0500, Function | SmallTest | Level1) -{ - sptr bundleMgrProxy = GetBundleMgrProxy(); - ASSERT_NE(bundleMgrProxy, nullptr); - sptr getDefaultAppProxy = bundleMgrProxy->GetDefaultAppProxy(); - ErrCode result = getDefaultAppProxy->ResetDefaultApplication(USERID, ""); + result = DefaultAppClient::GetInstance().ResetDefaultApplication(USERID, ""); EXPECT_NE(result, ERR_OK); } + /** * @tc.number: CheckAbilityEnabled_0100 * @tc.name: test SetAbilityEnabled and IsAbilityEnabled proxy @@ -9360,19 +9346,16 @@ HWTEST_F(ActsBmsKitSystemTest, SendRequest_0001, Function | SmallTest | Level1) HWTEST_F(ActsBmsKitSystemTest, GetDefaultAppProxy_0200, Function | SmallTest | Level1) { StartProcess(); - sptr bundleMgrProxy = GetBundleMgrProxy(); - ASSERT_NE(bundleMgrProxy, nullptr); - sptr getDefaultAppProxy = bundleMgrProxy->GetDefaultAppProxy(); AAFwk::Want want; ElementName elementName( "", DEFAULT_APP_BUNDLE_NAME, DEFAULT_APP_MODULE_NAME, DEFAULT_APP_VIDEO); want.SetElement(elementName); - ErrCode res = getDefaultAppProxy->SetDefaultApplication(USERID, DEFAULT_APP_VIDEO, want); + ErrCode res = DefaultAppClient::GetInstance().SetDefaultApplication(USERID, DEFAULT_APP_VIDEO, want); EXPECT_NE(res, ERR_OK); BundleInfo bundleInfo; - res = getDefaultAppProxy->GetDefaultApplication(USERID, DEFAULT_APP_VIDEO, bundleInfo); + res = DefaultAppClient::GetInstance().GetDefaultApplication(USERID, DEFAULT_APP_VIDEO, bundleInfo); EXPECT_NE(res, ERR_OK); - res = getDefaultAppProxy->ResetDefaultApplication(USERID, DEFAULT_APP_VIDEO); + res = DefaultAppClient::GetInstance().ResetDefaultApplication(USERID, DEFAULT_APP_VIDEO); EXPECT_EQ(res, ERR_OK); } diff --git a/test/systemtest/common/bms/bms_default_app_host_test/BUILD.gn b/test/systemtest/common/bms/bms_default_app_host_test/BUILD.gn index 4367fa68e7928bb879ee8546d64837a2205e6373..a003b808fbd70561c6e0ef015e563810e625b505 100755 --- a/test/systemtest/common/bms/bms_default_app_host_test/BUILD.gn +++ b/test/systemtest/common/bms/bms_default_app_host_test/BUILD.gn @@ -31,6 +31,7 @@ ohos_systemtest("BmsDefaultAppHostTest") { deps = [ "${common_path}:libappexecfwk_common", "${core_path}:appexecfwk_core", + "${core_path}:default_app_stub", ] defines = [ "APP_LOG_TAG = \"BundleMgrTool\"" ] diff --git a/test/systemtest/common/bms/bms_default_app_host_test/bms_default_app_host_test.cpp b/test/systemtest/common/bms/bms_default_app_host_test/bms_default_app_host_test.cpp index 4869cdef87320dcba9cc70b8259f427cb0ad8fe6..13b92aebc714625264fc6752d405391a0674b5cd 100755 --- a/test/systemtest/common/bms/bms_default_app_host_test/bms_default_app_host_test.cpp +++ b/test/systemtest/common/bms/bms_default_app_host_test/bms_default_app_host_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -17,7 +17,7 @@ #include #include #include -#include "default_app_host.h" +#include "default_app_stub.h" #include "bundle_framework_core_ipc_interface_code.h" using namespace testing::ext; @@ -32,6 +32,40 @@ const uint32_t CODE_ERR = 4; namespace OHOS { namespace AppExecFwk { +class TestDefaultAppStub : public DefaultAppStub { +public: + int32_t CallbackEnter([[maybe_unused]] uint32_t code) override + { + return 0; + } + int32_t CallbackExit([[maybe_unused]] uint32_t code, [[maybe_unused]] int32_t result) override + { + return 0; + } + + ErrCode IsDefaultApplication(const std::string& type, bool& isDefaultApp, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode GetDefaultApplication( + int32_t userId, const std::string& type, BundleInfo& bundleInfo, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode SetDefaultApplication( + int32_t userId, const std::string& type, const Want& want, int32_t& funcResult) override + { + return ERR_OK; + } + + ErrCode ResetDefaultApplication(int32_t userId, const std::string& type, int32_t& funcResult) override + { + return ERR_OK; + } +}; + class BmsDefaultAppHostTest : public testing::Test { public: static void SetUpTestCase(); @@ -60,84 +94,24 @@ void BmsDefaultAppHostTest::TearDown() */ HWTEST_F(BmsDefaultAppHostTest, OnRemoteRequest_0100, Function | MediumTest | Level1) { - DefaultAppHost defaultAppHost; + TestDefaultAppStub defaultAppStub; MessageParcel data; MessageParcel reply; MessageOption option; - ErrCode res = defaultAppHost.OnRemoteRequest(CODE_IS_DEFAULT_APPLICATION, data, reply, option); - EXPECT_EQ(res, OBJECT_NULL); + ErrCode res = defaultAppStub.OnRemoteRequest(CODE_IS_DEFAULT_APPLICATION, data, reply, option); + EXPECT_EQ(res, ERR_TRANSACTION_FAILED); - res = defaultAppHost.OnRemoteRequest(CODE_GET_DEFAULT_APPLICATION, data, reply, option); - EXPECT_EQ(res, OBJECT_NULL); + res = defaultAppStub.OnRemoteRequest(CODE_GET_DEFAULT_APPLICATION, data, reply, option); + EXPECT_EQ(res, ERR_TRANSACTION_FAILED); - res = defaultAppHost.OnRemoteRequest(CODE_SET_DEFAULT_APPLICATION, data, reply, option); - EXPECT_EQ(res, OBJECT_NULL); + res = defaultAppStub.OnRemoteRequest(CODE_SET_DEFAULT_APPLICATION, data, reply, option); + EXPECT_EQ(res, ERR_TRANSACTION_FAILED); - res = defaultAppHost.OnRemoteRequest(CODE_RESET_DEFAULT_APPLICATION, data, reply, option); - EXPECT_EQ(res, OBJECT_NULL); - - res = defaultAppHost.OnRemoteRequest(CODE_ERR, data, reply, option); - EXPECT_EQ(res, OBJECT_NULL); -} - -/** - * @tc.number: HandleIsDefaultApplication_0100 - * @tc.name: test the HandleIsDefaultApplication - * @tc.desc: 1. system running normally - * 2. test HandleIsDefaultApplication - */ -HWTEST_F(BmsDefaultAppHostTest, HandleIsDefaultApplication_0100, Function | MediumTest | Level1) -{ - DefaultAppHost defaultAppHost; - MessageParcel data; - MessageParcel reply; - ErrCode res = defaultAppHost.HandleIsDefaultApplication(data, reply); - EXPECT_EQ(res, ERR_OK); -} + res = defaultAppStub.OnRemoteRequest(CODE_RESET_DEFAULT_APPLICATION, data, reply, option); + EXPECT_EQ(res, ERR_TRANSACTION_FAILED); -/** - * @tc.number: HandleGetDefaultApplication_0100 - * @tc.name: test the HandleGetDefaultApplication - * @tc.desc: 1. system running normally - * 2. test HandleGetDefaultApplication - */ -HWTEST_F(BmsDefaultAppHostTest, HandleGetDefaultApplication_0100, Function | MediumTest | Level1) -{ - DefaultAppHost defaultAppHost; - MessageParcel data; - MessageParcel reply; - ErrCode res = defaultAppHost.HandleGetDefaultApplication(data, reply); - EXPECT_EQ(res, ERR_OK); -} - -/** - * @tc.number: HandleSetDefaultApplication_0100 - * @tc.name: test the HandleSetDefaultApplication - * @tc.desc: 1. system running normally - * 2. test HandleSetDefaultApplication - */ -HWTEST_F(BmsDefaultAppHostTest, HandleSetDefaultApplication_0100, Function | MediumTest | Level1) -{ - DefaultAppHost defaultAppHost; - MessageParcel data; - MessageParcel reply; - ErrCode res = defaultAppHost.HandleSetDefaultApplication(data, reply); - EXPECT_EQ(res, ERR_APPEXECFWK_PARCEL_ERROR); -} - -/** - * @tc.number: HandleResetDefaultApplication_0100 - * @tc.name: test the HandleResetDefaultApplication - * @tc.desc: 1. system running normally - * 2. test HandleResetDefaultApplication - */ -HWTEST_F(BmsDefaultAppHostTest, HandleResetDefaultApplication_0100, Function | MediumTest | Level1) -{ - DefaultAppHost defaultAppHost; - MessageParcel data; - MessageParcel reply; - ErrCode res = defaultAppHost.HandleResetDefaultApplication(data, reply); - EXPECT_EQ(res, ERR_OK); + res = defaultAppStub.OnRemoteRequest(CODE_ERR, data, reply, option); + EXPECT_EQ(res, ERR_TRANSACTION_FAILED); } } // AppExecFwk } // OHOS \ No newline at end of file