:wantagent add context

Signed-off-by: zhuhan <zhuhan10@huawei.com>
Change-Id: Ied9eae23e54ce290d29ba4348ac6568638331370
This commit is contained in:
zhuhan
2025-04-22 15:40:44 +08:00
committed by wkljy
parent 5a0d798201
commit 7f93765aff
62 changed files with 333 additions and 167 deletions
@@ -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,
@@ -86,7 +86,8 @@ void CJWantAgent::OnTrigger(CJTriggerInfo cjTriggerInfo, std::function<void(CJCo
return;
}
TAG_LOGD(AAFwkTag::WANTAGENT, "called");
WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo);
sptr<CompletedDispatcher> completedData;
WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo, completedData, nullptr);
}
int32_t CJWantAgent::UnWrapTriggerInfoParam(CJTriggerInfo cjTriggerInfo, std::function<void(CJCompleteData)> callback,
+3
View File
@@ -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",
]
@@ -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",
]
@@ -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);
@@ -21,8 +21,10 @@
#include <unistd.h>
#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<JsWantAgent>(env, info);
return (me != nullptr) ? me->OnNapiTriggerAsync(env, info) : nullptr;
};
napi_value JsWantAgent::NapiGetWantAgent(napi_env env, napi_callback_info info)
{
JsWantAgent* me = CheckParamsAndGetThis<JsWantAgent>(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<CompletedDispatcher> 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<CompletedDispatcher> 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> wantAgent = nullptr;
TriggerInfo triggerInfo;
auto triggerObj = std::make_shared<TriggerCompleteCallBack>();
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<int32_t>(NO_ERROR);
if (!CheckCallerIsSystemApp()) {
AbilityRuntimeErrorUtil::Throw(env, ERR_ABILITY_RUNTIME_NOT_SYSTEM_APP);
return CreateJsUndefined(env);
}
std::shared_ptr<CompletedDispatcher> data = std::make_shared<CompletedDispatcher>();
auto execute = [wantAgent, triggerObj, triggerInfo, inputContextPtr, data, retCode] () {
sptr<CompletedDispatcher> completedData;
*retCode = WantAgentHelper::TriggerWantAgent(wantAgent, triggerObj, triggerInfo, completedData,
inputContextPtr->GetToken());
*data = *reinterpret_cast<CompletedDispatcher*>(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<AbilityRuntime::Context> JsWantAgent::ConvertToContext(std::shared_ptr<AbilityRuntime::Context> context)
{
auto uiAbilityContext = AbilityRuntime::Context::ConvertTo<AbilityRuntime::AbilityContext>(context);
auto extensionContext = AbilityRuntime::Context::ConvertTo<AbilityRuntime::ExtensionContext>(context);
if (uiAbilityContext == nullptr && extensionContext == nullptr) {
return nullptr;
}
return OHOS::AbilityRuntime::Context::ConvertTo<AbilityRuntime::Context>(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;
@@ -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<AbilityRuntime::Context> ConvertToContext(std::shared_ptr<AbilityRuntime::Context> context);
int32_t UnWrapTriggerInfoParam(napi_env env, napi_callback_info info,
std::shared_ptr<WantAgent> &wantAgent, TriggerInfo &triggerInfo,
std::shared_ptr<TriggerCompleteCallBack> &triggerObj);
@@ -37,6 +37,8 @@ const std::map<int32_t, std::string> 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,
@@ -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.
@@ -862,7 +862,7 @@ public:
virtual sptr<IWantSender> GetWantSender(
const WantSenderInfo &wantSenderInfo, const sptr<IRemoteObject> &callerToken, int32_t uid = -1) = 0;
virtual int SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo) = 0;
virtual int SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo) = 0;
virtual void CancelWantSender(const sptr<IWantSender> &sender) = 0;
@@ -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<IRemoteObject> callerToken = nullptr;
bool ReadFromParcel(Parcel &parcel);
virtual bool Marshalling(Parcel &parcel) const override;
@@ -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,
@@ -84,8 +84,8 @@ const std::map<int32_t, std::string> 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<int32_t, std::string> 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." },
};
}
@@ -28,9 +28,12 @@ namespace OHOS::AbilityRuntime::WantAgent {
class PendingWant;
class CompletedDispatcher : public AAFwk::WantReceiverStub {
public:
CompletedDispatcher();
CompletedDispatcher(const std::shared_ptr<PendingWant> &pendingWant,
const std::shared_ptr<CompletedCallback> &callback, const std::shared_ptr<AppExecFwk::EventHandler> &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<PendingWant> GetPendingWant() const;
private:
const std::shared_ptr<PendingWant> pendingWant_;
std::shared_ptr<PendingWant> pendingWant_;
const std::shared_ptr<CompletedCallback> callback_;
const std::shared_ptr<AppExecFwk::EventHandler> handler_;
AAFwk::Want want_;
@@ -207,32 +207,25 @@ public:
ErrCode Cancel(const sptr<AAFwk::IWantSender> &target, uint32_t flags = 0);
void Send(const sptr<AAFwk::IWantSender> &target);
void Send(int resultCode, const sptr<AAFwk::IWantSender> &target);
void Send(int resultCode, sptr<CompletedDispatcher> &onCompleted, const sptr<AAFwk::IWantSender> &target);
void Send(int resultCode,
const std::shared_ptr<AAFwk::Want> &want, const sptr<AAFwk::IWantSender> &target);
void Send(int resultCode, const sptr<CompletedDispatcher> &onCompleted, const sptr<AAFwk::IWantSender> &target);
void Send(int resultCode,
const std::shared_ptr<AAFwk::Want> &want, const sptr<CompletedDispatcher> &onCompleted,
const std::shared_ptr<AAFwk::Want> &want, sptr<CompletedDispatcher> &onCompleted,
const sptr<AAFwk::IWantSender> &target);
void Send(int resultCode,
const std::shared_ptr<AAFwk::Want> &want, const sptr<CompletedDispatcher> &onCompleted,
const std::shared_ptr<AAFwk::Want> &want, sptr<CompletedDispatcher> &onCompleted,
const std::string &requiredPermission, const sptr<AAFwk::IWantSender> &target);
ErrCode Send(int resultCode, const std::shared_ptr<AAFwk::Want> &want,
const sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
const std::shared_ptr<AAFwk::WantParams> &options, const std::shared_ptr<AAFwk::StartOptions> &startOptions,
const sptr<AAFwk::IWantSender> &target);
const sptr<AAFwk::IWantSender> &target, sptr<IRemoteObject> callerToken = nullptr);
int SendAndReturnResult(int resultCode, const std::shared_ptr<AAFwk::Want> &want,
const sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
const std::shared_ptr<AAFwk::WantParams> &options, const std::shared_ptr<AAFwk::StartOptions> &startOptions,
const sptr<AAFwk::IWantSender> &target);
const sptr<AAFwk::IWantSender> &target, sptr<IRemoteObject> callerToken = nullptr);
ErrCode GetBundleName(const sptr<AAFwk::IWantSender> &target, std::string &bundleName);
@@ -37,7 +37,7 @@ public:
ErrCode GetWantSender(const WantSenderInfo &wantSenderInfo, const sptr<IRemoteObject> &callerToken,
sptr<IWantSender> &wantSender, int32_t uid = -1);
ErrCode SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo);
ErrCode SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo);
ErrCode CancelWantSender(const sptr<IWantSender> &sender, uint32_t flags = 0);
@@ -102,7 +102,7 @@ public:
*/
static ErrCode TriggerWantAgent(std::shared_ptr<WantAgent> agent,
const std::shared_ptr<CompletedCallback> &callback,
const TriggerInfo &paramsInfo);
const TriggerInfo &paramsInfo, sptr<CompletedDispatcher> &data, sptr<IRemoteObject> callerToken);
/**
* Cancels an WantAgent.
@@ -191,8 +191,9 @@ private:
private:
static ErrCode Send(const std::shared_ptr<PendingWant> &pendingWant,
WantAgentConstant::OperationType type,
const sptr<CompletedDispatcher> &callBack,
const TriggerInfo &paramsInfo);
sptr<CompletedDispatcher> &callBack,
const TriggerInfo &paramsInfo,
sptr<IRemoteObject> callerToken);
static unsigned int FlagsTransformer(const std::vector<WantAgentConstant::Flags> &flags);
@@ -16,6 +16,9 @@
#include "completed_dispatcher.h"
namespace OHOS::AbilityRuntime::WantAgent {
CompletedDispatcher::CompletedDispatcher()
{}
CompletedDispatcher::CompletedDispatcher(const std::shared_ptr<PendingWant> &pendingWant,
const std::shared_ptr<CompletedCallback> &callback, const std::shared_ptr<AppExecFwk::EventHandler> &handler)
: pendingWant_(pendingWant), callback_(callback), handler_(handler)
@@ -24,6 +27,18 @@ CompletedDispatcher::CompletedDispatcher(const std::shared_ptr<PendingWant> &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<PendingWant> CompletedDispatcher::GetPendingWant() const
{
return pendingWant_;
}
} // namespace OHOS::AbilityRuntime::WantAgent
@@ -238,58 +238,40 @@ ErrCode PendingWant::Cancel(const sptr<AAFwk::IWantSender> &target, uint32_t fla
return WantAgentClient::GetInstance().CancelWantSender(target, flags);
}
void PendingWant::Send(const sptr<AAFwk::IWantSender> &target)
{
Send(0, nullptr, nullptr, "", nullptr, nullptr, target);
}
void PendingWant::Send(int resultCode, const sptr<AAFwk::IWantSender> &target)
{
Send(resultCode, nullptr, nullptr, "", nullptr, nullptr, target);
}
void PendingWant::Send(int resultCode, const std::shared_ptr<Want> &want,
const sptr<AAFwk::IWantSender> &target)
{
Send(resultCode, want, nullptr, "", nullptr, nullptr, target);
}
void PendingWant::Send(
int resultCode, const sptr<CompletedDispatcher> &onCompleted, const sptr<AAFwk::IWantSender> &target)
int resultCode, sptr<CompletedDispatcher> &onCompleted, const sptr<AAFwk::IWantSender> &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> &want,
const sptr<CompletedDispatcher> &onCompleted, const sptr<AAFwk::IWantSender> &target)
sptr<CompletedDispatcher> &onCompleted, const sptr<AAFwk::IWantSender> &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> &want,
const sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
const sptr<AAFwk::IWantSender> &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> &want,
const sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
const std::shared_ptr<WantParams> &options, const std::shared_ptr<StartOptions> &startOptions,
const sptr<AAFwk::IWantSender> &target)
const sptr<AAFwk::IWantSender> &target, sptr<IRemoteObject> 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> &want,
const sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
sptr<CompletedDispatcher> &onCompleted, const std::string &requiredPermission,
const std::shared_ptr<WantParams> &options, const std::shared_ptr<StartOptions> &startOptions,
const sptr<AAFwk::IWantSender> &target)
const sptr<AAFwk::IWantSender> &target, sptr<IRemoteObject> callerToken)
{
TAG_LOGD(AAFwkTag::WANTAGENT, "call");
SenderInfo senderInfo;
@@ -306,7 +288,15 @@ int PendingWant::SendAndReturnResult(int resultCode, const std::shared_ptr<Want>
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<IRemoteObject> obj = senderInfo.finishedReceiver->AsObject();
if (obj == nullptr) {
TAG_LOGE(AAFwkTag::WANTAGENT, "finishedReceiver obj null");
return res;
}
onCompleted = iface_cast<CompletedDispatcher>(obj);
return res;
}
ErrCode PendingWant::IsEquals(
@@ -80,7 +80,7 @@ ErrCode WantAgentClient::GetWantSender(
return ERR_OK;
}
ErrCode WantAgentClient::SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo)
ErrCode WantAgentClient::SendWantSender(sptr<IWantSender> 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<IWantSender> target, const SenderIn
if (error != NO_ERROR) {
return ERR_ABILITY_RUNTIME_EXTERNAL_SERVICE_TIMEOUT;
}
return reply.ReadInt32();
std::unique_ptr<SenderInfo> completedDataReply(reply.ReadParcelable<SenderInfo>());
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<IWantSender> &sender, uint32_t flags)
@@ -192,7 +192,8 @@ WantAgentConstant::OperationType WantAgentHelper::GetType(std::shared_ptr<WantAg
}
ErrCode WantAgentHelper::TriggerWantAgent(std::shared_ptr<WantAgent> agent,
const std::shared_ptr<CompletedCallback> &callback, const TriggerInfo &paramsInfo)
const std::shared_ptr<CompletedCallback> &callback, const TriggerInfo &paramsInfo,
sptr<CompletedDispatcher> &data, sptr<IRemoteObject> callerToken)
{
TAG_LOGD(AAFwkTag::WANTAGENT, "call");
if (agent == nullptr) {
@@ -203,13 +204,20 @@ ErrCode WantAgentHelper::TriggerWantAgent(std::shared_ptr<WantAgent> agent,
WantAgentConstant::OperationType type = GetType(agent);
sptr<CompletedDispatcher> 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> &pendingWant,
WantAgentConstant::OperationType type, const sptr<CompletedDispatcher> &callBack, const TriggerInfo &paramsInfo)
WantAgentConstant::OperationType type, sptr<CompletedDispatcher> &callBack, const TriggerInfo &paramsInfo,
sptr<IRemoteObject> callerToken)
{
TAG_LOGD(AAFwkTag::WANTAGENT, "call");
if (pendingWant == nullptr) {
@@ -223,7 +231,8 @@ ErrCode WantAgentHelper::Send(const std::shared_ptr<PendingWant> &pendingWant,
paramsInfo.GetPermission(),
paramsInfo.GetExtraInfo(),
paramsInfo.GetStartOptions(),
pendingWant->GetTarget());
pendingWant->GetTarget(),
callerToken);
}
ErrCode WantAgentHelper::Cancel(const std::shared_ptr<WantAgent> agent, uint32_t flags)
@@ -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,
@@ -674,7 +674,7 @@ public:
virtual sptr<IWantSender> GetWantSender(
const WantSenderInfo &wantSenderInfo, const sptr<IRemoteObject> &callerToken, int32_t uid = -1) override;
virtual int SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo) override;
virtual int SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo) override;
virtual void CancelWantSender(const sptr<IWantSender> &sender) override;
@@ -925,7 +925,7 @@ public:
virtual sptr<IWantSender> GetWantSender(
const WantSenderInfo &wantSenderInfo, const sptr<IRemoteObject> &callerToken, int32_t uid = -1) override;
virtual int SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo) override;
virtual int SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo) override;
virtual void CancelWantSender(const sptr<IWantSender> &sender) override;
@@ -144,7 +144,7 @@ public:
public:
sptr<IWantSender> GetWantSender(int32_t callingUid, int32_t uid, const bool isSystemApp,
const WantSenderInfo &wantSenderInfo, const sptr<IRemoteObject> &callerToken, int32_t appIndex = 0);
int32_t SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo);
int32_t SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo);
void CancelWantSender(const bool isSystemAppCall, const sptr<IWantSender> &sender);
int32_t GetPendingWantUid(const sptr<IWantSender> &target);
@@ -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> &pendingWantManager, int32_t uid,
@@ -2116,7 +2116,7 @@ sptr<IWantSender> AbilityManagerProxy::GetWantSender(
return wantSender;
}
int AbilityManagerProxy::SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo)
int AbilityManagerProxy::SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo)
{
MessageParcel data;
MessageParcel reply;
@@ -2137,6 +2137,12 @@ int AbilityManagerProxy::SendWantSender(sptr<IWantSender> target, const SenderIn
TAG_LOGE(AAFwkTag::ABILITYMGR, "request error:%{public}d", error);
return error;
}
std::unique_ptr<SenderInfo> completedDataReply(reply.ReadParcelable<SenderInfo>());
if (!completedDataReply) {
TAG_LOGE(AAFwkTag::ABILITYMGR, "readParcelableInfo fail");
return INNER_ERR;
}
senderInfo = *completedDataReply;
return reply.ReadInt32();
}
@@ -5320,7 +5320,7 @@ sptr<IWantSender> AbilityManagerService::GetWantSender(
return pendingWantManager->GetWantSender(callerUid, appUid, isSystemApp, wantSenderInfo, callerToken, appIndex);
}
int AbilityManagerService::SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo)
int AbilityManagerService::SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo)
{
TAG_LOGI(AAFwkTag::ABILITYMGR, "call");
auto pendingWantManager = GetCurrentPendingWantManager();
@@ -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;
}
@@ -64,7 +64,7 @@ sptr<IWantSender> PendingWantManager::GetWantSender(int32_t callingUid, int32_t
if (wantSenderInfo.type != static_cast<int32_t>(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<IWantSender> target, const SenderInfo &senderInfo)
int32_t PendingWantManager::SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo)
{
SenderInfo info = senderInfo;
@@ -235,7 +235,7 @@ int32_t PendingWantManager::SendWantSender(sptr<IWantSender> target, const Sende
}
return ERR_INVALID_VALUE;
}
return record->SenderInner(info);
return record->SenderInner(senderInfo);
}
void PendingWantManager::CancelWantSender(const bool isSystemAppCall, const sptr<IWantSender> &sender)
@@ -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<int32_t>(OperationType::START_ABILITY):
res = pendingWantManager->PendingWantStartAbility(want, senderInfo.startOptions,
callerToken_, -1, callerUid_, callerTokenId_);
senderInfo.callerToken, -1, callerUid_, callerTokenId_);
break;
case static_cast<int32_t>(OperationType::START_ABILITIES): {
std::vector<WantsInfo> 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<int32_t>(OperationType::START_SERVICE):
case static_cast<int32_t>(OperationType::START_FOREGROUND_SERVICE):
res = pendingWantManager->PendingWantStartAbility(want, nullptr, callerToken_,
res = pendingWantManager->PendingWantStartAbility(want, nullptr, senderInfo.callerToken,
-1, callerUid_, callerTokenId_);
break;
case static_cast<int32_t>(OperationType::SEND_COMMON_EVENT):
res = pendingWantManager->PendingWantPublishCommonEvent(want, senderInfo, callerUid_, callerTokenId_);
break;
case static_cast<int32_t>(OperationType::START_SERVICE_EXTENSION):
res = pendingWantManager->PendingWantStartServiceExtension(want, callerToken_);
res = pendingWantManager->PendingWantStartServiceExtension(want, senderInfo.callerToken);
break;
default:
break;
+14 -2
View File
@@ -48,6 +48,13 @@ bool SenderInfo::ReadFromParcel(Parcel &parcel)
if (parcel.ReadBool()) {
startOptions = parcel.ReadParcelable<StartOptions>();
}
if (parcel.ReadBool()) {
callerToken = (static_cast<MessageParcel*>(&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<MessageParcel*>(&parcel))->WriteRemoteObject(callerToken)) {
TAG_LOGE(AAFwkTag::ABILITYMGR, "write callerToken failed");
return false;
}
}
return true;
}
} // namespace AAFwk
@@ -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<CompletedDispatcher> completedData;
WantAgentHelper::TriggerWantAgent(wantAgent, nullptr, triggerInfo, completedData, nullptr);
}
if (params) {
@@ -122,7 +122,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -97,7 +97,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -78,7 +78,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -258,7 +258,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -114,7 +114,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -116,7 +116,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -169,7 +169,7 @@ public:
{
return nullptr;
}
int SendWantSender(sptr<IWantSender> target, const SenderInfo &senderInfo) override
int SendWantSender(sptr<IWantSender> target, SenderInfo &senderInfo) override
{
return 0;
}
@@ -157,7 +157,7 @@ public:
return nullptr;
}
virtual int SendWantSender(const sptr<AAFwk::IWantSender>& target, const SenderInfo& senderInfo) override
virtual int SendWantSender(sptr<AAFwk::IWantSender>& target, SenderInfo& senderInfo) override
{
return 0;
}
@@ -62,7 +62,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantBundleName, std::string(const sptr<IWantSender>& target));
@@ -70,7 +70,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -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<CompletedDispatcher> completedData;
WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo, completedData, nullptr);
}
/*
@@ -305,7 +305,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -305,7 +305,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -272,7 +272,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -317,7 +317,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -317,7 +317,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -317,7 +317,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -317,7 +317,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -317,7 +317,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -285,7 +285,7 @@ public:
sptr<IRemoteObject> asCallerSourceToken, int32_t userId, int requestCode));
MOCK_METHOD3(GetWantSender,
sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken, int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -45,7 +45,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -310,7 +310,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -281,7 +281,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -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;
}
@@ -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);
}
/*
@@ -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<CompletedDispatcher> 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<PendingWant>(nullptr);
sptr<AAFwk::IWantSender> 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<PendingWant>(nullptr);
int requestCode = 10;
sptr<AAFwk::IWantSender> 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<PendingWant>(nullptr);
int requestCode = 10;
std::shared_ptr<Want> want = std::make_shared<Want>();
ElementName element("device", "bundleName", "abilityName");
want->SetElement(element);
sptr<AAFwk::IWantSender> 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<WantParams> options;
std::shared_ptr<StartOptions> startOptions = nullptr;
sptr<AAFwk::IWantSender> 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";
}
@@ -281,7 +281,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -95,7 +95,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));
@@ -1012,7 +1012,8 @@ HWTEST_F(WantAgentHelperTest, WantAgentHelper_4900, Function | MediumTest | Leve
std::shared_ptr<CompletedCallback> callback;
TriggerInfo paramsInfo;
WantAgentHelper::TriggerWantAgent(nullptr, callback, paramsInfo);
sptr<CompletedDispatcher> 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> wantAgent(nullptr);
TriggerInfo paramsInfo;
WantAgentHelper::TriggerWantAgent(wantAgent, nullptr, paramsInfo);
sptr<CompletedDispatcher> 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> wantAgent(nullptr);
std::shared_ptr<CompletedCallback> callback;
TriggerInfo paramsInfo;
WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo);
sptr<CompletedDispatcher> completedData;
WantAgentHelper::TriggerWantAgent(wantAgent, callback, paramsInfo, completedData, nullptr);
GTEST_LOG_(INFO) << "WantAgentHelper::TriggerWantAgent end";
}
+1 -1
View File
@@ -76,7 +76,7 @@ public:
MOCK_METHOD3(
GetWantSender, sptr<IWantSender>(const WantSenderInfo& wantSenderInfo, const sptr<IRemoteObject>& callerToken,
int32_t uid));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, const SenderInfo& senderInfo));
MOCK_METHOD2(SendWantSender, int(sptr<IWantSender> target, SenderInfo& senderInfo));
MOCK_METHOD1(CancelWantSender, void(const sptr<IWantSender>& sender));
MOCK_METHOD1(GetPendingWantUid, int(const sptr<IWantSender>& target));
MOCK_METHOD1(GetPendingWantUserId, int(const sptr<IWantSender>& target));