From 7f93765affc6ffce3aec8fab1b6bf5ba22fec9ed Mon Sep 17 00:00:00 2001 From: zhuhan Date: Tue, 22 Apr 2025 15:40:44 +0800 Subject: [PATCH] :wantagent add context Signed-off-by: zhuhan Change-Id: Ied9eae23e54ce290d29ba4348ac6568638331370 --- frameworks/cj/ffi/cj_ability_runtime_error.h | 1 + .../ffi/want_agent/src/cj_want_agent_ffi.cpp | 3 +- frameworks/js/napi/wantagent/BUILD.gn | 3 + .../wantagent/ability_want_agent/BUILD.gn | 3 + .../ability_want_agent/want_agent_module.cpp | 1 + .../js/napi/wantagent/napi_want_agent.cpp | 108 +++++++++++++++++- .../js/napi/wantagent/napi_want_agent.h | 4 + .../src/ability_runtime_error_util.cpp | 2 + .../include/ability_manager_errors.h | 5 + .../include/ability_manager_interface.h | 2 +- .../ability_manager/include/sender_info.h | 2 + .../include/ability_runtime_error_util.h | 1 + .../src/ability_runtime_error_util.cpp | 6 +- .../wantagent/include/completed_dispatcher.h | 11 +- .../wantagent/include/pending_want.h | 21 ++-- .../wantagent/include/want_agent_client.h | 2 +- .../wantagent/include/want_agent_helper.h | 7 +- .../wantagent/src/completed_dispatcher.cpp | 40 +++++++ .../inner_api/wantagent/src/pending_want.cpp | 52 ++++----- .../wantagent/src/want_agent_client.cpp | 16 ++- .../wantagent/src/want_agent_helper.cpp | 19 ++- .../ability_business_error.h | 3 + .../include/ability_manager_proxy.h | 2 +- .../include/ability_manager_service.h | 2 +- .../abilitymgr/include/pending_want_manager.h | 2 +- .../abilitymgr/include/pending_want_record.h | 1 - .../abilitymgr/src/ability_manager_proxy.cpp | 8 +- .../src/ability_manager_service.cpp | 2 +- .../abilitymgr/src/ability_manager_stub.cpp | 3 + .../abilitymgr/src/pending_want_manager.cpp | 6 +- .../abilitymgr/src/pending_want_record.cpp | 17 +-- services/abilitymgr/src/sender_info.cpp | 16 ++- .../wantagenthelpertrigger_fuzzer.cpp | 3 +- .../AMS/mock_serviceability_manager_service.h | 2 +- .../include/mock_ability_manager_service.h | 2 +- .../mock_ability_delegator_stub.h | 4 +- .../AMS/mock_ability_manager_service.h | 2 +- .../AMS/mock_serviceability_manager_service.h | 2 +- .../mock_iabilitymanager.h | 2 +- .../include/appmgr/mock_ability_mgr_host.h | 2 +- .../mock/include/mock_ability_manager_proxy.h | 2 +- .../mock/include/mock_ability_mgr_service.h | 2 +- .../panding_want_manager_test.cpp | 3 +- .../ability_manager_stub_mock_second_test.h | 2 +- .../ability_manager_stub_mock_test.h | 2 +- .../include/ability_manager_stub_mock_test.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_impl_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../ability_manager_stub_mock.h | 2 +- .../pending_want_manager_test.cpp | 2 +- .../pending_want_record_test.cpp | 2 +- .../pending_want_test/pending_want_test.cpp | 60 +--------- .../ability_manager_stub_mock.h | 2 +- .../mock_ability_manager_service.h | 2 +- .../want_agent_helper_test.cpp | 9 +- tools/test/mock/mock_ability_manager_stub.h | 2 +- 62 files changed, 333 insertions(+), 167 deletions(-) diff --git a/frameworks/cj/ffi/cj_ability_runtime_error.h b/frameworks/cj/ffi/cj_ability_runtime_error.h index fe63d75c30..9cb46b3873 100644 --- a/frameworks/cj/ffi/cj_ability_runtime_error.h +++ b/frameworks/cj/ffi/cj_ability_runtime_error.h @@ -39,6 +39,7 @@ enum { ERR_ABILITY_RUNTIME_EXTERNAL_START_ABILITY_WAITTING = 16000017, ERR_ABILITY_RUNTIME_EXTERNAL_NOT_SUPPORT_CROSS_APP_START = 16000018, ERR_ABILITY_RUNTIME_EXTERNAL_CANNOT_MATCH_ANY_COMPONENT = 16000019, + ERR_ABILITY_RUNTIME_EXTERNAL_NOT_ABILITY_CONTEXT = 16000020, ERR_ABILITY_RUNTIME_EXTERNAL_INTERNAL_ERROR = 16000050, ERR_ABILITY_RUNTIME_EXTERNAL_NETWORK_ERROR = 16000051, ERR_ABILITY_RUNTIME_EXTERNAL_FREE_INSTALL_NOT_SUPPORT = 16000052, diff --git a/frameworks/cj/ffi/want_agent/src/cj_want_agent_ffi.cpp b/frameworks/cj/ffi/want_agent/src/cj_want_agent_ffi.cpp index 428dabeb6b..1721005b4a 100644 --- a/frameworks/cj/ffi/want_agent/src/cj_want_agent_ffi.cpp +++ b/frameworks/cj/ffi/want_agent/src/cj_want_agent_ffi.cpp @@ -86,7 +86,8 @@ void CJWantAgent::OnTrigger(CJTriggerInfo cjTriggerInfo, std::function completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo, completedData, nullptr); } int32_t CJWantAgent::UnWrapTriggerInfoParam(CJTriggerInfo cjTriggerInfo, std::function callback, diff --git a/frameworks/js/napi/wantagent/BUILD.gn b/frameworks/js/napi/wantagent/BUILD.gn index 9ffdaac603..647ca59ad2 100644 --- a/frameworks/js/napi/wantagent/BUILD.gn +++ b/frameworks/js/napi/wantagent/BUILD.gn @@ -31,11 +31,14 @@ ohos_shared_library("wantagent") { deps = [ "${ability_runtime_innerkits_path}/ability_manager:ability_start_options", "${ability_runtime_innerkits_path}/error_utils:ability_runtime_error_util", + "${ability_runtime_innerkits_path}/napi_base_context:napi_base_context", "${ability_runtime_innerkits_path}/runtime:runtime", "${ability_runtime_innerkits_path}/wantagent:wantagent_innerkits", "${ability_runtime_napi_path}/inner/napi_common:napi_common", "${ability_runtime_napi_path}/inner/napi_wantagent_common:napi_wantagent_common", + "${ability_runtime_native_path}/ability:ability_context_native", "${ability_runtime_native_path}/ability/native:abilitykit_native", + "${ability_runtime_native_path}/ability/native:extensionkit_native", "${ability_runtime_native_path}/appkit:app_context", ] diff --git a/frameworks/js/napi/wantagent/ability_want_agent/BUILD.gn b/frameworks/js/napi/wantagent/ability_want_agent/BUILD.gn index 1ed0925c12..438bf1879e 100644 --- a/frameworks/js/napi/wantagent/ability_want_agent/BUILD.gn +++ b/frameworks/js/napi/wantagent/ability_want_agent/BUILD.gn @@ -32,11 +32,14 @@ ohos_shared_library("wantagent_napi") { deps = [ "${ability_runtime_innerkits_path}/ability_manager:ability_start_options", "${ability_runtime_innerkits_path}/error_utils:ability_runtime_error_util", + "${ability_runtime_innerkits_path}/napi_base_context:napi_base_context", "${ability_runtime_innerkits_path}/runtime:runtime", "${ability_runtime_innerkits_path}/wantagent:wantagent_innerkits", "${ability_runtime_napi_path}/inner/napi_common:napi_common", "${ability_runtime_napi_path}/inner/napi_wantagent_common:napi_wantagent_common", + "${ability_runtime_native_path}/ability:ability_context_native", "${ability_runtime_native_path}/ability/native:abilitykit_native", + "${ability_runtime_native_path}/ability/native:extensionkit_native", "${ability_runtime_native_path}/appkit:app_context", ] diff --git a/frameworks/js/napi/wantagent/ability_want_agent/want_agent_module.cpp b/frameworks/js/napi/wantagent/ability_want_agent/want_agent_module.cpp index 9b9b9b6da3..3691b7df8a 100644 --- a/frameworks/js/napi/wantagent/ability_want_agent/want_agent_module.cpp +++ b/frameworks/js/napi/wantagent/ability_want_agent/want_agent_module.cpp @@ -59,6 +59,7 @@ napi_value JsNapiWantAgentInit(napi_env env, napi_value exportObj) BindNativeFunction(env, exportObj, "getUid", moduleName, JsWantAgent::GetUid); BindNativeFunction(env, exportObj, "cancel", moduleName, JsWantAgent::Cancel); BindNativeFunction(env, exportObj, "trigger", moduleName, JsWantAgent::NapiTrigger); + BindNativeFunction(env, exportObj, "triggerAsync", moduleName, JsWantAgent::NapiTriggerAsync); BindNativeFunction(env, exportObj, "getWant", moduleName, JsWantAgent::NapiGetWant); BindNativeFunction(env, exportObj, "getWantAgent", moduleName, JsWantAgent::NapiGetWantAgent); BindNativeFunction(env, exportObj, "getOperationType", moduleName, JsWantAgent::NapiGetOperationType); diff --git a/frameworks/js/napi/wantagent/napi_want_agent.cpp b/frameworks/js/napi/wantagent/napi_want_agent.cpp index cfd8fe457b..149c7bc5bf 100644 --- a/frameworks/js/napi/wantagent/napi_want_agent.cpp +++ b/frameworks/js/napi/wantagent/napi_want_agent.cpp @@ -21,8 +21,10 @@ #include #include "ability_runtime_error_util.h" +#include "extension_context.h" #include "hilog_tag_wrapper.h" #include "ipc_skeleton.h" +#include "napi_base_context.h" #include "napi_common.h" #include "napi_common_want_agent.h" #include "start_options.h" @@ -295,6 +297,12 @@ napi_value JsWantAgent::NapiTrigger(napi_env env, napi_callback_info info) return (me != nullptr) ? me->OnNapiTrigger(env, info) : nullptr; }; +napi_value JsWantAgent::NapiTriggerAsync(napi_env env, napi_callback_info info) +{ + JsWantAgent* me = CheckParamsAndGetThis(env, info); + return (me != nullptr) ? me->OnNapiTriggerAsync(env, info) : nullptr; +}; + napi_value JsWantAgent::NapiGetWantAgent(napi_env env, napi_callback_info info) { JsWantAgent* me = CheckParamsAndGetThis(env, info); @@ -712,7 +720,8 @@ napi_value JsWantAgent::OnTrigger(napi_env env, napi_callback_info info) auto execute = [wantAgent, triggerObj, triggerInfo] () { TAG_LOGD(AAFwkTag::WANTAGENT, "called"); - WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo, completedData, nullptr); }; napi_value result = nullptr; NapiAsyncTask::ScheduleHighQos("JsWantAgent::OnTrigger", @@ -1156,7 +1165,8 @@ napi_value JsWantAgent::OnNapiTrigger(napi_env env, napi_callback_info info) } auto execute = [wantAgent, triggerObj, triggerInfo] () { TAG_LOGD(AAFwkTag::WANTAGENT, "called"); - WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo, completedData, nullptr); }; napi_value result = nullptr; NapiAsyncTask::ScheduleHighQos("JsWantAgent::OnNapiTrigger", @@ -1165,6 +1175,100 @@ napi_value JsWantAgent::OnNapiTrigger(napi_env env, napi_callback_info info) return CreateJsNull(env); } +napi_value JsWantAgent::OnNapiTriggerAsync(napi_env env, napi_callback_info info) +{ + size_t argc = ARGS_MAX_COUNT; + napi_value argv[ARGS_MAX_COUNT] = {nullptr}; + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); + if (argc < ARGC_THREE) { + ThrowTooFewParametersError(env); + return CreateJsUndefined(env); + } + + bool stageMode = false; + napi_status status = OHOS::AbilityRuntime::IsStageContext(env, argv[ARGC_TWO], stageMode); + if (status != napi_ok || !stageMode) { + ThrowInvalidParamError(env, "Parse param context failed, must be a context of stageMode."); + return CreateJsUndefined(env); + } + + auto context = OHOS::AbilityRuntime::GetStageModeContext(env, argv[ARGC_TWO]); + if (context == nullptr) { + ThrowInvalidParamError(env, "Parse param context failed, must not be nullptr."); + return CreateJsUndefined(env); + } + + auto inputContextPtr = ConvertToContext(context); + if (inputContextPtr == nullptr) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "the context is not ability context"); + AbilityRuntimeErrorUtil::Throw(env, ERR_ABILITY_RUNTIME_EXTERNAL_NOT_ABILITY_CONTEXT); + return CreateJsUndefined(env); + } + + std::shared_ptr wantAgent = nullptr; + TriggerInfo triggerInfo; + auto triggerObj = std::make_shared(); + int32_t errCode = UnWrapTriggerInfoParam(env, info, wantAgent, triggerInfo, triggerObj); + if (errCode != NO_ERROR) { + ThrowInvalidParamError(env, "Parameter error!"); + return CreateJsUndefined(env); + } + auto retCode = std::make_shared(NO_ERROR); + if (!CheckCallerIsSystemApp()) { + AbilityRuntimeErrorUtil::Throw(env, ERR_ABILITY_RUNTIME_NOT_SYSTEM_APP); + return CreateJsUndefined(env); + } + std::shared_ptr data = std::make_shared(); + auto execute = [wantAgent, triggerObj, triggerInfo, inputContextPtr, data, retCode] () { + sptr completedData; + *retCode = WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo, completedData, + inputContextPtr->GetToken()); + *data = *reinterpret_cast(completedData.GetRefPtr()); + }; + NapiAsyncTask::CompleteCallback complete = [retCode, data](napi_env env, NapiAsyncTask& task, int32_t status) { + if (*retCode == NO_ERROR) { + task.ResolveWithNoError(env, CreateJsCompletedData(env, *data)); + } else { + task.Reject(env, CreateJsError(env, *retCode, AbilityRuntimeErrorUtil::GetErrMessage(*retCode))); + } + }; + napi_value result = nullptr; + NapiAsyncTask::ScheduleHighQos("JsWantAgent::OnNapiTriggerAsync", + env, CreateAsyncTaskWithLastParam(env, nullptr, std::move(execute), std::move(complete), &result)); + + return result; +} + +std::shared_ptr JsWantAgent::ConvertToContext(std::shared_ptr context) +{ + auto uiAbilityContext = AbilityRuntime::Context::ConvertTo(context); + auto extensionContext = AbilityRuntime::Context::ConvertTo(context); + if (uiAbilityContext == nullptr && extensionContext == nullptr) { + return nullptr; + } + + return OHOS::AbilityRuntime::Context::ConvertTo(context); +} + +napi_value JsWantAgent::CreateJsCompletedData(napi_env env, const CompletedDispatcher &data) +{ + napi_value objValue = nullptr; + napi_create_object(env, &objValue); + WantAgent *pWantAgent = new (std::nothrow) WantAgent(data.GetPendingWant()); + if (pWantAgent == nullptr) { + TAG_LOGE(AAFwkTag::WANTAGENT, "null pWantAgent"); + return objValue; + } + + napi_value jsWantAgent = OHOS::AppExecFwk::WrapWantAgent(env, pWantAgent, nullptr); + napi_set_named_property(env, objValue, "info", jsWantAgent); + napi_set_named_property(env, objValue, "want", CreateJsWant(env, data.GetWant())); + napi_set_named_property(env, objValue, "finalCode", CreateJsValue(env, data.GetResultCode())); + napi_set_named_property(env, objValue, "finalData", CreateJsValue(env, data.GetResultData())); + napi_set_named_property(env, objValue, "extraInfo", CreateJsWantParams(env, data.GetResultExtras())); + return objValue; +} + napi_value JsWantAgent::OnNapiGetWantAgent(napi_env env, napi_callback_info info) { size_t argc = ARGS_MAX_COUNT; diff --git a/frameworks/js/napi/wantagent/napi_want_agent.h b/frameworks/js/napi/wantagent/napi_want_agent.h index 92ccb769a2..fe34e7a276 100644 --- a/frameworks/js/napi/wantagent/napi_want_agent.h +++ b/frameworks/js/napi/wantagent/napi_want_agent.h @@ -91,9 +91,11 @@ public: static napi_value GetWantAgent(napi_env env, napi_callback_info info); static napi_value NapiGetWant(napi_env env, napi_callback_info info); static napi_value NapiTrigger(napi_env env, napi_callback_info info); + static napi_value NapiTriggerAsync(napi_env env, napi_callback_info info); static napi_value NapiGetWantAgent(napi_env env, napi_callback_info info); static napi_value NapiGetOperationType(napi_env env, napi_callback_info info); static napi_value NapiSetWantAgentMultithreading(napi_env env, napi_callback_info info); + static napi_value CreateJsCompletedData(napi_env env, const CompletedDispatcher &data); private: napi_value OnEqual(napi_env env, napi_callback_info info); @@ -106,9 +108,11 @@ private: napi_value OnGetWantAgent(napi_env env, napi_callback_info info); napi_value OnNapiGetWant(napi_env env, napi_callback_info info); napi_value OnNapiTrigger(napi_env env, napi_callback_info info); + napi_value OnNapiTriggerAsync(napi_env env, napi_callback_info info); napi_value OnNapiGetWantAgent(napi_env env, napi_callback_info info); napi_value OnNapiGetOperationType(napi_env env, napi_callback_info info); napi_value OnNapiSetWantAgentMultithreading(napi_env env, napi_callback_info info); + std::shared_ptr ConvertToContext(std::shared_ptr context); int32_t UnWrapTriggerInfoParam(napi_env env, napi_callback_info info, std::shared_ptr &wantAgent, TriggerInfo &triggerInfo, std::shared_ptr &triggerObj); diff --git a/frameworks/simulator/ability_simulator/src/ability_runtime_error_util.cpp b/frameworks/simulator/ability_simulator/src/ability_runtime_error_util.cpp index 85a62bb171..b6dd5dd4f7 100644 --- a/frameworks/simulator/ability_simulator/src/ability_runtime_error_util.cpp +++ b/frameworks/simulator/ability_simulator/src/ability_runtime_error_util.cpp @@ -37,6 +37,8 @@ const std::map ERROR_MSG_MAP = { "Incorrect ability type." }, { ERR_ABILITY_RUNTIME_EXTERNAL_NO_SUCH_ID, "The specified ID does not exist." }, + { ERR_ABILITY_RUNTIME_EXTERNAL_NOT_ABILITY_CONTEXT, + "The context is not ability context." }, { ERR_ABILITY_RUNTIME_EXTERNAL_VISIBILITY_VERIFICATION_FAILED, "Failed to start the invisible ability." }, { ERR_ABILITY_RUNTIME_EXTERNAL_CROSS_USER_OPERATION, diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_errors.h b/interfaces/inner_api/ability_manager/include/ability_manager_errors.h index 104287ca8c..7c58417f6e 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_errors.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_errors.h @@ -802,6 +802,11 @@ enum { * Result (2097334) for app selector not exists. */ ERR_APP_SELECTOR_NOT_EXISTS = 2097334, + + /** + * Result (2097335) for canceled wantagent. + */ + ERR_WANTAGENT_CANCELED = 2097335, /** * Native error(3000000) for target bundle not exist. diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h index 4d576a8f50..0f84a0fdd6 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -862,7 +862,7 @@ public: virtual sptr GetWantSender( const WantSenderInfo &wantSenderInfo, const sptr &callerToken, int32_t uid = -1) = 0; - virtual int SendWantSender(sptr target, const SenderInfo &senderInfo) = 0; + virtual int SendWantSender(sptr target, SenderInfo &senderInfo) = 0; virtual void CancelWantSender(const sptr &sender) = 0; diff --git a/interfaces/inner_api/ability_manager/include/sender_info.h b/interfaces/inner_api/ability_manager/include/sender_info.h index dd08876d7f..d6094ae3e5 100644 --- a/interfaces/inner_api/ability_manager/include/sender_info.h +++ b/interfaces/inner_api/ability_manager/include/sender_info.h @@ -20,6 +20,7 @@ #include "parcel.h" +#include "iremote_object.h" #include "start_options.h" #include "want.h" @@ -34,6 +35,7 @@ struct SenderInfo : public Parcelable { std::string resolvedType; std::string requiredPermission; Want want; + sptr callerToken = nullptr; bool ReadFromParcel(Parcel &parcel); virtual bool Marshalling(Parcel &parcel) const override; diff --git a/interfaces/inner_api/error_utils/include/ability_runtime_error_util.h b/interfaces/inner_api/error_utils/include/ability_runtime_error_util.h index d7cd19ae3b..b13d9d3eef 100644 --- a/interfaces/inner_api/error_utils/include/ability_runtime_error_util.h +++ b/interfaces/inner_api/error_utils/include/ability_runtime_error_util.h @@ -40,6 +40,7 @@ enum { ERR_ABILITY_RUNTIME_EXTERNAL_START_ABILITY_WAITTING = 16000017, ERR_ABILITY_RUNTIME_EXTERNAL_NOT_SUPPORT_CROSS_APP_START = 16000018, ERR_ABILITY_RUNTIME_EXTERNAL_CANNOT_MATCH_ANY_COMPONENT = 16000019, + ERR_ABILITY_RUNTIME_EXTERNAL_NOT_ABILITY_CONTEXT = 16000020, ERR_ABILITY_RUNTIME_EXTERNAL_INTERNAL_ERROR = 16000050, ERR_ABILITY_RUNTIME_EXTERNAL_NETWORK_ERROR = 16000051, ERR_ABILITY_RUNTIME_EXTERNAL_FREE_INSTALL_NOT_SUPPORT = 16000052, diff --git a/interfaces/inner_api/error_utils/src/ability_runtime_error_util.cpp b/interfaces/inner_api/error_utils/src/ability_runtime_error_util.cpp index 8fd1198bd7..6a0c4a8622 100644 --- a/interfaces/inner_api/error_utils/src/ability_runtime_error_util.cpp +++ b/interfaces/inner_api/error_utils/src/ability_runtime_error_util.cpp @@ -84,8 +84,8 @@ const std::map ERROR_MSG_MAP = { "Invalid wantagent object." }, { ERR_ABILITY_RUNTIME_EXTERNAL_WANTAGENT_NOT_FOUND, "The wantAgent object does not exist." }, - { ERR_ABILITY_RUNTIME_EXTERNAL_WANTAGENT_CANCELED, - "The wantAgent object has been canceled." }, + { ERR_ABILITY_RUNTIME_EXTERNAL_NOT_ABILITY_CONTEXT, + "The context is not ability context." }, { ERR_ABILITY_RUNTIME_EXTERNAL_NO_SUCH_URI_ABILITY, "Input error. The specified uri does not exist." }, { ERR_ABILITY_RUNTIME_EXTERNAL_FA_NOT_SUPPORT_OPERATION, @@ -150,6 +150,8 @@ const std::map ERROR_MSG_MAP = { "Restart too frequently. Try again at least 3s later." }, { ERR_ABILITY_RUNTIME_EXTERNAL_NOT_SYSTEM_HSP, "The input bundleName and moduleName is not system HSP" }, + { ERR_ABILITY_RUNTIME_EXTERNAL_WANTAGENT_CANCELED, + "The WantAgent has been canceled." }, }; } diff --git a/interfaces/inner_api/wantagent/include/completed_dispatcher.h b/interfaces/inner_api/wantagent/include/completed_dispatcher.h index 910f01d8a2..a0ae8d62fd 100644 --- a/interfaces/inner_api/wantagent/include/completed_dispatcher.h +++ b/interfaces/inner_api/wantagent/include/completed_dispatcher.h @@ -28,9 +28,12 @@ namespace OHOS::AbilityRuntime::WantAgent { class PendingWant; class CompletedDispatcher : public AAFwk::WantReceiverStub { public: + CompletedDispatcher(); CompletedDispatcher(const std::shared_ptr &pendingWant, const std::shared_ptr &callback, const std::shared_ptr &handler); virtual ~CompletedDispatcher() = default; + + CompletedDispatcher &operator=(const CompletedDispatcher &other); void Send(const int32_t resultCode) override; @@ -38,9 +41,15 @@ public: const AAFwk::WantParams &extras, bool serialized, bool sticky, int sendingUser) override; void Run(); + + int GetResultCode() const; + std::string GetResultData() const; + AAFwk::Want GetWant() const; + AAFwk::WantParams GetResultExtras() const; + std::shared_ptr GetPendingWant() const; private: - const std::shared_ptr pendingWant_; + std::shared_ptr pendingWant_; const std::shared_ptr callback_; const std::shared_ptr handler_; AAFwk::Want want_; diff --git a/interfaces/inner_api/wantagent/include/pending_want.h b/interfaces/inner_api/wantagent/include/pending_want.h index 5e936b5362..00ab6d4fe0 100644 --- a/interfaces/inner_api/wantagent/include/pending_want.h +++ b/interfaces/inner_api/wantagent/include/pending_want.h @@ -207,32 +207,25 @@ public: ErrCode Cancel(const sptr &target, uint32_t flags = 0); - void Send(const sptr &target); - - void Send(int resultCode, const sptr &target); + void Send(int resultCode, sptr &onCompleted, const sptr &target); void Send(int resultCode, - const std::shared_ptr &want, const sptr &target); - - void Send(int resultCode, const sptr &onCompleted, const sptr &target); - - void Send(int resultCode, - const std::shared_ptr &want, const sptr &onCompleted, + const std::shared_ptr &want, sptr &onCompleted, const sptr &target); void Send(int resultCode, - const std::shared_ptr &want, const sptr &onCompleted, + const std::shared_ptr &want, sptr &onCompleted, const std::string &requiredPermission, const sptr &target); ErrCode Send(int resultCode, const std::shared_ptr &want, - const sptr &onCompleted, const std::string &requiredPermission, + sptr &onCompleted, const std::string &requiredPermission, const std::shared_ptr &options, const std::shared_ptr &startOptions, - const sptr &target); + const sptr &target, sptr callerToken = nullptr); int SendAndReturnResult(int resultCode, const std::shared_ptr &want, - const sptr &onCompleted, const std::string &requiredPermission, + sptr &onCompleted, const std::string &requiredPermission, const std::shared_ptr &options, const std::shared_ptr &startOptions, - const sptr &target); + const sptr &target, sptr callerToken = nullptr); ErrCode GetBundleName(const sptr &target, std::string &bundleName); diff --git a/interfaces/inner_api/wantagent/include/want_agent_client.h b/interfaces/inner_api/wantagent/include/want_agent_client.h index ccf9052ec6..eef0eb808e 100644 --- a/interfaces/inner_api/wantagent/include/want_agent_client.h +++ b/interfaces/inner_api/wantagent/include/want_agent_client.h @@ -37,7 +37,7 @@ public: ErrCode GetWantSender(const WantSenderInfo &wantSenderInfo, const sptr &callerToken, sptr &wantSender, int32_t uid = -1); - ErrCode SendWantSender(sptr target, const SenderInfo &senderInfo); + ErrCode SendWantSender(sptr target, SenderInfo &senderInfo); ErrCode CancelWantSender(const sptr &sender, uint32_t flags = 0); diff --git a/interfaces/inner_api/wantagent/include/want_agent_helper.h b/interfaces/inner_api/wantagent/include/want_agent_helper.h index 5e838b02b6..e08b449267 100644 --- a/interfaces/inner_api/wantagent/include/want_agent_helper.h +++ b/interfaces/inner_api/wantagent/include/want_agent_helper.h @@ -102,7 +102,7 @@ public: */ static ErrCode TriggerWantAgent(std::shared_ptr agent, const std::shared_ptr &callback, - const TriggerInfo ¶msInfo); + const TriggerInfo ¶msInfo, sptr &data, sptr callerToken); /** * Cancels an WantAgent. @@ -191,8 +191,9 @@ private: private: static ErrCode Send(const std::shared_ptr &pendingWant, WantAgentConstant::OperationType type, - const sptr &callBack, - const TriggerInfo ¶msInfo); + sptr &callBack, + const TriggerInfo ¶msInfo, + sptr callerToken); static unsigned int FlagsTransformer(const std::vector &flags); diff --git a/interfaces/inner_api/wantagent/src/completed_dispatcher.cpp b/interfaces/inner_api/wantagent/src/completed_dispatcher.cpp index 1af1e91817..41e12f8b2b 100644 --- a/interfaces/inner_api/wantagent/src/completed_dispatcher.cpp +++ b/interfaces/inner_api/wantagent/src/completed_dispatcher.cpp @@ -16,6 +16,9 @@ #include "completed_dispatcher.h" namespace OHOS::AbilityRuntime::WantAgent { +CompletedDispatcher::CompletedDispatcher() +{} + CompletedDispatcher::CompletedDispatcher(const std::shared_ptr &pendingWant, const std::shared_ptr &callback, const std::shared_ptr &handler) : pendingWant_(pendingWant), callback_(callback), handler_(handler) @@ -24,6 +27,18 @@ CompletedDispatcher::CompletedDispatcher(const std::shared_ptr &pen void CompletedDispatcher::Send(const int32_t resultCode) {} +CompletedDispatcher &CompletedDispatcher::operator=(const CompletedDispatcher &other) +{ + if (this != &other) { + pendingWant_ = other.pendingWant_; + want_ = other.want_; + resultCode_ = other.resultCode_; + resultData_ = other.resultData_; + resultExtras_ = other.resultExtras_; + } + return *this; +} + void CompletedDispatcher::PerformReceive(const AAFwk::Want &want, int resultCode, const std::string &data, const AAFwk::WantParams &extras, bool serialized, bool sticky, int sendingUser) { @@ -42,4 +57,29 @@ void CompletedDispatcher::Run() callback_->OnSendFinished(want_, resultCode_, resultData_, resultExtras_); } } + +int CompletedDispatcher::GetResultCode() const +{ + return resultCode_; +} + +std::string CompletedDispatcher::GetResultData() const +{ + return resultData_; +} + +AAFwk::Want CompletedDispatcher::GetWant() const +{ + return want_; +} + +AAFwk::WantParams CompletedDispatcher::GetResultExtras() const +{ + return resultExtras_; +} + +std::shared_ptr CompletedDispatcher::GetPendingWant() const +{ + return pendingWant_; +} } // namespace OHOS::AbilityRuntime::WantAgent diff --git a/interfaces/inner_api/wantagent/src/pending_want.cpp b/interfaces/inner_api/wantagent/src/pending_want.cpp index 3ef6b2e01b..d6d60c634d 100644 --- a/interfaces/inner_api/wantagent/src/pending_want.cpp +++ b/interfaces/inner_api/wantagent/src/pending_want.cpp @@ -238,58 +238,40 @@ ErrCode PendingWant::Cancel(const sptr &target, uint32_t fla return WantAgentClient::GetInstance().CancelWantSender(target, flags); } -void PendingWant::Send(const sptr &target) -{ - Send(0, nullptr, nullptr, "", nullptr, nullptr, target); -} - -void PendingWant::Send(int resultCode, const sptr &target) -{ - Send(resultCode, nullptr, nullptr, "", nullptr, nullptr, target); -} - -void PendingWant::Send(int resultCode, const std::shared_ptr &want, - const sptr &target) -{ - Send(resultCode, want, nullptr, "", nullptr, nullptr, target); -} - void PendingWant::Send( - int resultCode, const sptr &onCompleted, const sptr &target) + int resultCode, sptr &onCompleted, const sptr &target) { - Send(resultCode, nullptr, onCompleted, "", nullptr, nullptr, target); + Send(resultCode, nullptr, onCompleted, "", nullptr, nullptr, target, nullptr); } void PendingWant::Send(int resultCode, const std::shared_ptr &want, - const sptr &onCompleted, const sptr &target) + sptr &onCompleted, const sptr &target) { - Send(resultCode, want, onCompleted, "", nullptr, nullptr, target); + Send(resultCode, want, onCompleted, "", nullptr, nullptr, target, nullptr); } void PendingWant::Send(int resultCode, const std::shared_ptr &want, - const sptr &onCompleted, const std::string &requiredPermission, + sptr &onCompleted, const std::string &requiredPermission, const sptr &target) { - Send(resultCode, want, onCompleted, requiredPermission, nullptr, nullptr, target); + Send(resultCode, want, onCompleted, requiredPermission, nullptr, nullptr, target, nullptr); } ErrCode PendingWant::Send(int resultCode, const std::shared_ptr &want, - const sptr &onCompleted, const std::string &requiredPermission, + sptr &onCompleted, const std::string &requiredPermission, const std::shared_ptr &options, const std::shared_ptr &startOptions, - const sptr &target) + const sptr &target, sptr callerToken) { int result = - SendAndReturnResult(resultCode, want, onCompleted, requiredPermission, options, startOptions, target); - if (result != 0) { - return ERR_ABILITY_RUNTIME_EXTERNAL_SERVICE_BUSY; - } + SendAndReturnResult(resultCode, want, onCompleted, requiredPermission, options, + startOptions, target, callerToken); return result; } int PendingWant::SendAndReturnResult(int resultCode, const std::shared_ptr &want, - const sptr &onCompleted, const std::string &requiredPermission, + sptr &onCompleted, const std::string &requiredPermission, const std::shared_ptr &options, const std::shared_ptr &startOptions, - const sptr &target) + const sptr &target, sptr callerToken) { TAG_LOGD(AAFwkTag::WANTAGENT, "call"); SenderInfo senderInfo; @@ -306,7 +288,15 @@ int PendingWant::SendAndReturnResult(int resultCode, const std::shared_ptr senderInfo.requiredPermission = requiredPermission; senderInfo.code = resultCode; senderInfo.finishedReceiver = onCompleted; - return WantAgentClient::GetInstance().SendWantSender(target, senderInfo); + senderInfo.callerToken = callerToken; + int res = WantAgentClient::GetInstance().SendWantSender(target, senderInfo); + sptr obj = senderInfo.finishedReceiver->AsObject(); + if (obj == nullptr) { + TAG_LOGE(AAFwkTag::WANTAGENT, "finishedReceiver obj null"); + return res; + } + onCompleted = iface_cast(obj); + return res; } ErrCode PendingWant::IsEquals( diff --git a/interfaces/inner_api/wantagent/src/want_agent_client.cpp b/interfaces/inner_api/wantagent/src/want_agent_client.cpp index c19943ee44..7bb61a9290 100644 --- a/interfaces/inner_api/wantagent/src/want_agent_client.cpp +++ b/interfaces/inner_api/wantagent/src/want_agent_client.cpp @@ -80,7 +80,7 @@ ErrCode WantAgentClient::GetWantSender( return ERR_OK; } -ErrCode WantAgentClient::SendWantSender(sptr target, const SenderInfo &senderInfo) +ErrCode WantAgentClient::SendWantSender(sptr target, SenderInfo &senderInfo) { CHECK_POINTER_AND_RETURN(target, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_WANTAGENT); auto abms = GetAbilityManager(); @@ -105,7 +105,19 @@ ErrCode WantAgentClient::SendWantSender(sptr target, const SenderIn if (error != NO_ERROR) { return ERR_ABILITY_RUNTIME_EXTERNAL_SERVICE_TIMEOUT; } - return reply.ReadInt32(); + std::unique_ptr completedDataReply(reply.ReadParcelable()); + if (!completedDataReply) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "readParcelableInfo fail"); + return INNER_ERR; + } + senderInfo = *completedDataReply; + ErrCode res = reply.ReadInt32(); + if (res == ERR_WANTAGENT_CANCELED) { + return ERR_ABILITY_RUNTIME_EXTERNAL_WANTAGENT_CANCELED; + } else if (res == ERR_INVALID_VALUE) { + return ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_WANTAGENT; + } + return ERR_OK; } ErrCode WantAgentClient::CancelWantSender(const sptr &sender, uint32_t flags) diff --git a/interfaces/inner_api/wantagent/src/want_agent_helper.cpp b/interfaces/inner_api/wantagent/src/want_agent_helper.cpp index fbe194df57..bf87450861 100644 --- a/interfaces/inner_api/wantagent/src/want_agent_helper.cpp +++ b/interfaces/inner_api/wantagent/src/want_agent_helper.cpp @@ -192,7 +192,8 @@ WantAgentConstant::OperationType WantAgentHelper::GetType(std::shared_ptr agent, - const std::shared_ptr &callback, const TriggerInfo ¶msInfo) + const std::shared_ptr &callback, const TriggerInfo ¶msInfo, + sptr &data, sptr callerToken) { TAG_LOGD(AAFwkTag::WANTAGENT, "call"); if (agent == nullptr) { @@ -203,13 +204,20 @@ ErrCode WantAgentHelper::TriggerWantAgent(std::shared_ptr agent, WantAgentConstant::OperationType type = GetType(agent); sptr dispatcher = nullptr; if (callback != nullptr) { - dispatcher = new (std::nothrow) CompletedDispatcher(pendingWant, callback, nullptr); + if (callerToken != nullptr) { + dispatcher = new (std::nothrow) CompletedDispatcher(pendingWant, nullptr, nullptr); + } else { + dispatcher = new (std::nothrow) CompletedDispatcher(pendingWant, callback, nullptr); + } } - return Send(pendingWant, type, dispatcher, paramsInfo); + int32_t res = Send(pendingWant, type, dispatcher, paramsInfo, callerToken); + data = std::move(dispatcher); + return res; } ErrCode WantAgentHelper::Send(const std::shared_ptr &pendingWant, - WantAgentConstant::OperationType type, const sptr &callBack, const TriggerInfo ¶msInfo) + WantAgentConstant::OperationType type, sptr &callBack, const TriggerInfo ¶msInfo, + sptr callerToken) { TAG_LOGD(AAFwkTag::WANTAGENT, "call"); if (pendingWant == nullptr) { @@ -223,7 +231,8 @@ ErrCode WantAgentHelper::Send(const std::shared_ptr &pendingWant, paramsInfo.GetPermission(), paramsInfo.GetExtraInfo(), paramsInfo.GetStartOptions(), - pendingWant->GetTarget()); + pendingWant->GetTarget(), + callerToken); } ErrCode WantAgentHelper::Cancel(const std::shared_ptr agent, uint32_t flags) diff --git a/interfaces/kits/native/ability/native/ability_business_error/ability_business_error.h b/interfaces/kits/native/ability/native/ability_business_error/ability_business_error.h index af486c9e89..143e966ac8 100644 --- a/interfaces/kits/native/ability/native/ability_business_error/ability_business_error.h +++ b/interfaces/kits/native/ability/native/ability_business_error/ability_business_error.h @@ -86,6 +86,9 @@ enum class AbilityErrorCode { // implicit start can not match any component. ERROR_CODE_CANNOT_MATCH_ANY_COMPONENT = 16000019, + + // the context is not ability context. + ERR_ABILITY_RUNTIME_EXTERNAL_NOT_ABILITY_CONTEXT = 16000020, // free install network abnormal. ERROR_CODE_NETWORK_ABNORMAL = 16000051, diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 19d4bf6155..5b58779f13 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -674,7 +674,7 @@ public: virtual sptr GetWantSender( const WantSenderInfo &wantSenderInfo, const sptr &callerToken, int32_t uid = -1) override; - virtual int SendWantSender(sptr target, const SenderInfo &senderInfo) override; + virtual int SendWantSender(sptr target, SenderInfo &senderInfo) override; virtual void CancelWantSender(const sptr &sender) override; diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index bf37333b3c..63a4c1323c 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -925,7 +925,7 @@ public: virtual sptr GetWantSender( const WantSenderInfo &wantSenderInfo, const sptr &callerToken, int32_t uid = -1) override; - virtual int SendWantSender(sptr target, const SenderInfo &senderInfo) override; + virtual int SendWantSender(sptr target, SenderInfo &senderInfo) override; virtual void CancelWantSender(const sptr &sender) override; diff --git a/services/abilitymgr/include/pending_want_manager.h b/services/abilitymgr/include/pending_want_manager.h index 8109b23465..fe50995f47 100644 --- a/services/abilitymgr/include/pending_want_manager.h +++ b/services/abilitymgr/include/pending_want_manager.h @@ -144,7 +144,7 @@ public: public: sptr GetWantSender(int32_t callingUid, int32_t uid, const bool isSystemApp, const WantSenderInfo &wantSenderInfo, const sptr &callerToken, int32_t appIndex = 0); - int32_t SendWantSender(sptr target, const SenderInfo &senderInfo); + int32_t SendWantSender(sptr target, SenderInfo &senderInfo); void CancelWantSender(const bool isSystemAppCall, const sptr &sender); int32_t GetPendingWantUid(const sptr &target); diff --git a/services/abilitymgr/include/pending_want_record.h b/services/abilitymgr/include/pending_want_record.h index 3f3a4d3bc6..ecdef73c13 100644 --- a/services/abilitymgr/include/pending_want_record.h +++ b/services/abilitymgr/include/pending_want_record.h @@ -31,7 +31,6 @@ namespace AAFwk { class PendingWantManager; class PendingWantRecord : public WantSenderStub { public: - static const int START_CANCELED = -96; PendingWantRecord(); PendingWantRecord(const std::shared_ptr &pendingWantManager, int32_t uid, diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 79e00c89c0..1a9ae9ff7e 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -2116,7 +2116,7 @@ sptr AbilityManagerProxy::GetWantSender( return wantSender; } -int AbilityManagerProxy::SendWantSender(sptr target, const SenderInfo &senderInfo) +int AbilityManagerProxy::SendWantSender(sptr target, SenderInfo &senderInfo) { MessageParcel data; MessageParcel reply; @@ -2137,6 +2137,12 @@ int AbilityManagerProxy::SendWantSender(sptr target, const SenderIn TAG_LOGE(AAFwkTag::ABILITYMGR, "request error:%{public}d", error); return error; } + std::unique_ptr completedDataReply(reply.ReadParcelable()); + if (!completedDataReply) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "readParcelableInfo fail"); + return INNER_ERR; + } + senderInfo = *completedDataReply; return reply.ReadInt32(); } diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index e88256cbe7..cfe38ef06b 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -5320,7 +5320,7 @@ sptr AbilityManagerService::GetWantSender( return pendingWantManager->GetWantSender(callerUid, appUid, isSystemApp, wantSenderInfo, callerToken, appIndex); } -int AbilityManagerService::SendWantSender(sptr target, const SenderInfo &senderInfo) +int AbilityManagerService::SendWantSender(sptr target, SenderInfo &senderInfo) { TAG_LOGI(AAFwkTag::ABILITYMGR, "call"); auto pendingWantManager = GetCurrentPendingWantManager(); diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index ddfae67a60..b2606302c0 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -1879,6 +1879,9 @@ int AbilityManagerStub::SendWantSenderInner(MessageParcel &data, MessageParcel & return ERR_INVALID_VALUE; } int32_t result = SendWantSender(wantSender, *senderInfo); + if (!reply.WriteParcelable(senderInfo.get())) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "completedData write fail"); + } reply.WriteInt32(result); return NO_ERROR; } diff --git a/services/abilitymgr/src/pending_want_manager.cpp b/services/abilitymgr/src/pending_want_manager.cpp index f62585323b..e8bf95f852 100644 --- a/services/abilitymgr/src/pending_want_manager.cpp +++ b/services/abilitymgr/src/pending_want_manager.cpp @@ -64,7 +64,7 @@ sptr PendingWantManager::GetWantSender(int32_t callingUid, int32_t if (wantSenderInfo.type != static_cast(OperationType::SEND_COMMON_EVENT) && !isSystemApp && !AAFwk::PermissionVerification::GetInstance()->IsSACall()) { for (auto it = info.allWants.begin(); it != info.allWants.end();) { - if (info.bundleName != it->want.GetBundle()) { + if (info.bundleName != it->want.GetBundle()) { it = info.allWants.erase(it); } else { it->want.RemoveParam("ohos.extra.param.key.appCloneIndex"); @@ -202,7 +202,7 @@ bool PendingWantManager::CheckPendingWantRecordByKey( return true; } -int32_t PendingWantManager::SendWantSender(sptr target, const SenderInfo &senderInfo) +int32_t PendingWantManager::SendWantSender(sptr target, SenderInfo &senderInfo) { SenderInfo info = senderInfo; @@ -235,7 +235,7 @@ int32_t PendingWantManager::SendWantSender(sptr target, const Sende } return ERR_INVALID_VALUE; } - return record->SenderInner(info); + return record->SenderInner(senderInfo); } void PendingWantManager::CancelWantSender(const bool isSystemAppCall, const sptr &sender) diff --git a/services/abilitymgr/src/pending_want_record.cpp b/services/abilitymgr/src/pending_want_record.cpp index ee5fe014fd..dda3bf001e 100644 --- a/services/abilitymgr/src/pending_want_record.cpp +++ b/services/abilitymgr/src/pending_want_record.cpp @@ -72,7 +72,8 @@ int32_t PendingWantRecord::SenderInner(SenderInfo &senderInfo) WantParams wantParams = {}; senderInfo.finishedReceiver->PerformReceive(want, senderInfo.code, "canceled", wantParams, false, false, 0); } - return START_CANCELED; + TAG_LOGE(AAFwkTag::WANTAGENT, "wantagent has been canceled"); + return ERR_WANTAGENT_CANCELED; } auto pendingWantManager = pendingWantManager_.lock(); @@ -92,11 +93,13 @@ int32_t PendingWantRecord::SenderInner(SenderInfo &senderInfo) bool sendFinish = (senderInfo.finishedReceiver != nullptr); int32_t res = ExecuteOperation(pendingWantManager, senderInfo, want); TAG_LOGI(AAFwkTag::WANTAGENT, "ExecuteOperation return %{public}d, sendFinish %{public}d", res, sendFinish); - if (sendFinish && res != START_CANCELED) { + if (sendFinish && res != ERR_WANTAGENT_CANCELED) { WantParams wantParams = {}; senderInfo.finishedReceiver->PerformReceive(want, senderInfo.code, "", wantParams, false, false, 0); } - + if (res != NO_ERROR) { + return ERR_INVALID_VALUE; + } return res; } @@ -107,25 +110,25 @@ int32_t PendingWantRecord::ExecuteOperation( switch (key_->GetType()) { case static_cast(OperationType::START_ABILITY): res = pendingWantManager->PendingWantStartAbility(want, senderInfo.startOptions, - callerToken_, -1, callerUid_, callerTokenId_); + senderInfo.callerToken, -1, callerUid_, callerTokenId_); break; case static_cast(OperationType::START_ABILITIES): { std::vector allWantsInfos = key_->GetAllWantsInfos(); allWantsInfos.back().want = want; res = pendingWantManager->PendingWantStartAbilitys( - allWantsInfos, senderInfo.startOptions, callerToken_, -1, callerUid_, callerTokenId_); + allWantsInfos, senderInfo.startOptions, senderInfo.callerToken, -1, callerUid_, callerTokenId_); break; } case static_cast(OperationType::START_SERVICE): case static_cast(OperationType::START_FOREGROUND_SERVICE): - res = pendingWantManager->PendingWantStartAbility(want, nullptr, callerToken_, + res = pendingWantManager->PendingWantStartAbility(want, nullptr, senderInfo.callerToken, -1, callerUid_, callerTokenId_); break; case static_cast(OperationType::SEND_COMMON_EVENT): res = pendingWantManager->PendingWantPublishCommonEvent(want, senderInfo, callerUid_, callerTokenId_); break; case static_cast(OperationType::START_SERVICE_EXTENSION): - res = pendingWantManager->PendingWantStartServiceExtension(want, callerToken_); + res = pendingWantManager->PendingWantStartServiceExtension(want, senderInfo.callerToken); break; default: break; diff --git a/services/abilitymgr/src/sender_info.cpp b/services/abilitymgr/src/sender_info.cpp index 8c8b9549db..6f96617f80 100644 --- a/services/abilitymgr/src/sender_info.cpp +++ b/services/abilitymgr/src/sender_info.cpp @@ -48,6 +48,13 @@ bool SenderInfo::ReadFromParcel(Parcel &parcel) if (parcel.ReadBool()) { startOptions = parcel.ReadParcelable(); } + if (parcel.ReadBool()) { + callerToken = (static_cast(&parcel))->ReadRemoteObject(); + if (callerToken == nullptr) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "null remote object"); + return false; + } + } return true; } @@ -71,8 +78,6 @@ SenderInfo *SenderInfo::Unmarshalling(Parcel &parcel) bool SenderInfo::Marshalling(Parcel &parcel) const { - TAG_LOGD(AAFwkTag::ABILITYMGR, "call"); - if (!parcel.WriteInt32(code)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "write code failed"); return false; @@ -113,6 +118,13 @@ bool SenderInfo::Marshalling(Parcel &parcel) const return false; } } + if (callerToken) { + if (!parcel.WriteBool(true) || + !(static_cast(&parcel))->WriteRemoteObject(callerToken)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "write callerToken failed"); + return false; + } + } return true; } } // namespace AAFwk diff --git a/test/fuzztest/wantagenthelpertrigger_fuzzer/wantagenthelpertrigger_fuzzer.cpp b/test/fuzztest/wantagenthelpertrigger_fuzzer/wantagenthelpertrigger_fuzzer.cpp index 6c96b8465e..9534303a8b 100644 --- a/test/fuzztest/wantagenthelpertrigger_fuzzer/wantagenthelpertrigger_fuzzer.cpp +++ b/test/fuzztest/wantagenthelpertrigger_fuzzer/wantagenthelpertrigger_fuzzer.cpp @@ -61,7 +61,8 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) if (wantAgent) { // trigger want agent TriggerInfo triggerInfo(GET_BUNDLE_INFO_PERMISSION, extraInfo, want, resultCode); - WantAgentHelper::TriggerWantAgent(wantAgent, nullptr, triggerInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, nullptr, triggerInfo, completedData, nullptr); } if (params) { diff --git a/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h b/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h index 29dba8d192..4973fd9767 100644 --- a/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h +++ b/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h @@ -122,7 +122,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h b/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h index 24e645bb0d..e4f2843c87 100644 --- a/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h +++ b/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h @@ -97,7 +97,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h b/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h index 59b307afb2..be458c7cfb 100644 --- a/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h +++ b/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h @@ -78,7 +78,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); @@ -258,7 +258,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h b/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h index eeddb8c204..3aad74681d 100644 --- a/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h +++ b/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h @@ -114,7 +114,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h b/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h index 6a8d1dcce4..6f831357fe 100644 --- a/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h +++ b/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h @@ -116,7 +116,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/moduletest/ability_manager_client_test/mock_iabilitymanager.h b/test/moduletest/ability_manager_client_test/mock_iabilitymanager.h index ba47fb140a..d952e784aa 100644 --- a/test/moduletest/ability_manager_client_test/mock_iabilitymanager.h +++ b/test/moduletest/ability_manager_client_test/mock_iabilitymanager.h @@ -169,7 +169,7 @@ public: { return nullptr; } - int SendWantSender(sptr target, const SenderInfo &senderInfo) override + int SendWantSender(sptr target, SenderInfo &senderInfo) override { return 0; } diff --git a/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h b/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h index 61917d3da5..a2d815e858 100644 --- a/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h +++ b/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h @@ -157,7 +157,7 @@ public: return nullptr; } - virtual int SendWantSender(const sptr& target, const SenderInfo& senderInfo) override + virtual int SendWantSender(sptr& target, SenderInfo& senderInfo) override { return 0; } diff --git a/test/moduletest/mock/include/mock_ability_manager_proxy.h b/test/moduletest/mock/include/mock_ability_manager_proxy.h index aa63c388ba..48a253bcc7 100644 --- a/test/moduletest/mock/include/mock_ability_manager_proxy.h +++ b/test/moduletest/mock/include/mock_ability_manager_proxy.h @@ -62,7 +62,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantBundleName, std::string(const sptr& target)); diff --git a/test/moduletest/mock/include/mock_ability_mgr_service.h b/test/moduletest/mock/include/mock_ability_mgr_service.h index cb18960c7e..53d5c33d78 100644 --- a/test/moduletest/mock/include/mock_ability_mgr_service.h +++ b/test/moduletest/mock/include/mock_ability_mgr_service.h @@ -70,7 +70,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/moduletest/panding_want_manager_test/panding_want_manager_test.cpp b/test/moduletest/panding_want_manager_test/panding_want_manager_test.cpp index 505d4c5cf8..b8d2d5dead 100644 --- a/test/moduletest/panding_want_manager_test/panding_want_manager_test.cpp +++ b/test/moduletest/panding_want_manager_test/panding_want_manager_test.cpp @@ -300,7 +300,8 @@ HWTEST_F(PandingWantManagerTest, pending_want_mgr_test_005, TestSize.Level1) TriggerInfo paramsInfo("", nullptr, abilityWant, 11); EXPECT_CALL(*call, OnSendFinished(_, _, _, _)).Times(1); - WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo, completedData, nullptr); } /* diff --git a/test/unittest/ability_manager_client_branch_second_test/ability_manager_stub_mock_second_test.h b/test/unittest/ability_manager_client_branch_second_test/ability_manager_stub_mock_second_test.h index 4b3a201ff5..e548112350 100644 --- a/test/unittest/ability_manager_client_branch_second_test/ability_manager_stub_mock_second_test.h +++ b/test/unittest/ability_manager_client_branch_second_test/ability_manager_stub_mock_second_test.h @@ -305,7 +305,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h b/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h index 88be7d651a..3294414622 100644 --- a/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h +++ b/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h @@ -305,7 +305,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h b/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h index 713087051f..916b58700f 100644 --- a/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h +++ b/test/unittest/ability_manager_client_branch_third_test/mock/include/ability_manager_stub_mock_test.h @@ -272,7 +272,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_proxy_fifth_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_fifth_test/ability_manager_stub_mock.h index 43afa4a809..9643e1fb1f 100644 --- a/test/unittest/ability_manager_proxy_fifth_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_fifth_test/ability_manager_stub_mock.h @@ -317,7 +317,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_proxy_fourth_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_fourth_test/ability_manager_stub_mock.h index d0b8cf2318..001d1dc358 100644 --- a/test/unittest/ability_manager_proxy_fourth_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_fourth_test/ability_manager_stub_mock.h @@ -317,7 +317,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_proxy_second_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_second_test/ability_manager_stub_mock.h index 22d05973ee..de1d65e657 100644 --- a/test/unittest/ability_manager_proxy_second_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_second_test/ability_manager_stub_mock.h @@ -317,7 +317,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_proxy_sixth_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_sixth_test/ability_manager_stub_mock.h index 22d05973ee..de1d65e657 100644 --- a/test/unittest/ability_manager_proxy_sixth_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_sixth_test/ability_manager_stub_mock.h @@ -317,7 +317,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h index 98fd670053..21af4f02cc 100644 --- a/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h @@ -317,7 +317,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_proxy_third_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_third_test/ability_manager_stub_mock.h index 1513472afd..b12fdc033e 100644 --- a/test/unittest/ability_manager_proxy_third_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_third_test/ability_manager_stub_mock.h @@ -285,7 +285,7 @@ public: sptr asCallerSourceToken, int32_t userId, int requestCode)); MOCK_METHOD3(GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h b/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h index 8f993136f1..b0bce5bb86 100644 --- a/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h +++ b/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h @@ -45,7 +45,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/ability_manager_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_test/ability_manager_stub_mock.h index 60088fc8f2..20e1a0749f 100644 --- a/test/unittest/ability_manager_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_test/ability_manager_stub_mock.h @@ -310,7 +310,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/app_service_extension_context_test/ability_manager_stub_mock.h b/test/unittest/app_service_extension_context_test/ability_manager_stub_mock.h index 2e7647f5a1..cf60029107 100644 --- a/test/unittest/app_service_extension_context_test/ability_manager_stub_mock.h +++ b/test/unittest/app_service_extension_context_test/ability_manager_stub_mock.h @@ -281,7 +281,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/pending_want_manager_test/pending_want_manager_test.cpp b/test/unittest/pending_want_manager_test/pending_want_manager_test.cpp index 741e3701e1..8a3def2d98 100644 --- a/test/unittest/pending_want_manager_test/pending_want_manager_test.cpp +++ b/test/unittest/pending_want_manager_test/pending_want_manager_test.cpp @@ -488,7 +488,7 @@ HWTEST_F(PendingWantManagerTest, PendingWantManagerTest_1400, TestSize.Level1) EXPECT_NE(pendingWantRecord, nullptr); SenderInfo info; info.finishedReceiver = new CancelReceiver(); - EXPECT_EQ(pendingManager_->SendWantSender(pendingWantRecord, info), -1); + EXPECT_EQ(pendingManager_->SendWantSender(pendingWantRecord, info), ERR_INVALID_VALUE); EXPECT_TRUE(CancelReceiver::performReceiveCount == 100); CancelReceiver::performReceiveCount = 0; } diff --git a/test/unittest/pending_want_record_test/pending_want_record_test.cpp b/test/unittest/pending_want_record_test/pending_want_record_test.cpp index 66ae8c90f6..918d97cff3 100644 --- a/test/unittest/pending_want_record_test/pending_want_record_test.cpp +++ b/test/unittest/pending_want_record_test/pending_want_record_test.cpp @@ -307,7 +307,7 @@ HWTEST_F(PendingWantRecordTest, PendingWantRecordTest_0700, TestSize.Level1) EXPECT_NE(pendingWantRecord, nullptr); SenderInfo info; pendingWantRecord->canceled_ = true; - EXPECT_EQ(pendingWantRecord->SenderInner(info), -96); + EXPECT_EQ(pendingWantRecord->SenderInner(info), 2097335); } /* diff --git a/test/unittest/pending_want_test/pending_want_test.cpp b/test/unittest/pending_want_test/pending_want_test.cpp index 735268ba2b..7de92aaa2e 100644 --- a/test/unittest/pending_want_test/pending_want_test.cpp +++ b/test/unittest/pending_want_test/pending_want_test.cpp @@ -489,8 +489,9 @@ HWTEST_F(PendingWantTest, PendingWant_2100, Function | MediumTest | Level1) unsigned int flags = 1; flags |= FLAG_NO_CREATE; AbilityManagerClient::GetInstance()->Connect(); - EXPECT_EQ(ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_WANTAGENT, - pendingWant.SendAndReturnResult(requestCode, want, nullptr, "Permission", nullptr, nullptr, nullptr)); + sptr onCompleted; + EXPECT_EQ(ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_WANTAGENT, pendingWant.SendAndReturnResult(requestCode, + want, onCompleted, "Permission", nullptr, nullptr, nullptr, nullptr)); } /* @@ -762,56 +763,6 @@ HWTEST_F(PendingWantTest, PendingWant_4300, Function | MediumTest | Level1) pendingWant->GetUid(nullptr, uid); } -/* - * @tc.number : PendingWant_4400 - * @tc.name : PendingWant Send - * @tc.desc : Send - */ -HWTEST_F(PendingWantTest, PendingWant_4400, Function | MediumTest | Level1) -{ - GTEST_LOG_(INFO) << "PendingWant_4400 start"; - auto pendingWant = std::make_shared(nullptr); - sptr target; - pendingWant->Send(target); - EXPECT_TRUE(pendingWant != nullptr); - GTEST_LOG_(INFO) << "PendingWant_4400 end"; -} - -/* - * @tc.number : PendingWant_4500 - * @tc.name : PendingWant Send - * @tc.desc : Send - */ -HWTEST_F(PendingWantTest, PendingWant_4500, Function | MediumTest | Level1) -{ - GTEST_LOG_(INFO) << "PendingWant_4500 start"; - auto pendingWant = std::make_shared(nullptr); - int requestCode = 10; - sptr target; - pendingWant->Send(requestCode, target); - EXPECT_TRUE(pendingWant != nullptr); - GTEST_LOG_(INFO) << "PendingWant_4500 end"; -} - -/* - * @tc.number : PendingWant_4600 - * @tc.name : PendingWant Send - * @tc.desc : Send - */ -HWTEST_F(PendingWantTest, PendingWant_4600, Function | MediumTest | Level1) -{ - GTEST_LOG_(INFO) << "PendingWant_4600 start"; - auto pendingWant = std::make_shared(nullptr); - int requestCode = 10; - std::shared_ptr want = std::make_shared(); - ElementName element("device", "bundleName", "abilityName"); - want->SetElement(element); - sptr target; - pendingWant->Send(requestCode, want, target); - EXPECT_TRUE(pendingWant != nullptr); - GTEST_LOG_(INFO) << "PendingWant_4600 end"; -} - /* * @tc.number : PendingWant_4700 * @tc.name : PendingWant Send @@ -888,8 +839,9 @@ HWTEST_F(PendingWantTest, PendingWant_5000, Function | MediumTest | Level1) std::shared_ptr options; std::shared_ptr startOptions = nullptr; sptr target; - auto result = pendingWant.Send(requestCode, want, onCompleted, requiredPermission, options, startOptions, target); - EXPECT_EQ(result, ERR_ABILITY_RUNTIME_EXTERNAL_SERVICE_BUSY); + auto result = pendingWant.Send(requestCode, want, onCompleted, + requiredPermission, options, startOptions, target, nullptr); + EXPECT_EQ(result, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_WANTAGENT); GTEST_LOG_(INFO) << "PendingWant_5000 end"; } diff --git a/test/unittest/service_extension_context_test/ability_manager_stub_mock.h b/test/unittest/service_extension_context_test/ability_manager_stub_mock.h index 2e7647f5a1..cf60029107 100644 --- a/test/unittest/service_extension_context_test/ability_manager_stub_mock.h +++ b/test/unittest/service_extension_context_test/ability_manager_stub_mock.h @@ -281,7 +281,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h b/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h index e861fc0862..346bccbf3c 100644 --- a/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h +++ b/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h @@ -95,7 +95,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target)); diff --git a/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp b/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp index 54d90f68e6..cfbd49c427 100644 --- a/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp +++ b/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp @@ -1012,7 +1012,8 @@ HWTEST_F(WantAgentHelperTest, WantAgentHelper_4900, Function | MediumTest | Leve std::shared_ptr callback; TriggerInfo paramsInfo; - WantAgentHelper::TriggerWantAgent(nullptr, callback, paramsInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(nullptr, callback, paramsInfo, completedData, nullptr); GTEST_LOG_(INFO) << "WantAgentHelper::TriggerWantAgent end"; } @@ -1028,7 +1029,8 @@ HWTEST_F(WantAgentHelperTest, WantAgentHelper_5000, Function | MediumTest | Leve std::shared_ptr wantAgent(nullptr); TriggerInfo paramsInfo; - WantAgentHelper::TriggerWantAgent(wantAgent, nullptr, paramsInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, nullptr, paramsInfo, completedData, nullptr); GTEST_LOG_(INFO) << "WantAgentHelper::TriggerWantAgent end"; } @@ -1045,7 +1047,8 @@ HWTEST_F(WantAgentHelperTest, WantAgentHelper_5100, Function | MediumTest | Leve std::shared_ptr wantAgent(nullptr); std::shared_ptr callback; TriggerInfo paramsInfo; - WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo); + sptr completedData; + WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo, completedData, nullptr); GTEST_LOG_(INFO) << "WantAgentHelper::TriggerWantAgent end"; } diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h index c3f7267ac5..b2b0181584 100644 --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -76,7 +76,7 @@ public: MOCK_METHOD3( GetWantSender, sptr(const WantSenderInfo& wantSenderInfo, const sptr& callerToken, int32_t uid)); - MOCK_METHOD2(SendWantSender, int(sptr target, const SenderInfo& senderInfo)); + MOCK_METHOD2(SendWantSender, int(sptr target, SenderInfo& senderInfo)); MOCK_METHOD1(CancelWantSender, void(const sptr& sender)); MOCK_METHOD1(GetPendingWantUid, int(const sptr& target)); MOCK_METHOD1(GetPendingWantUserId, int(const sptr& target));