From 28ad050ff2273ef3d8e158a4d3151891c8c77cb0 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 30 Aug 2022 17:41:17 +0800 Subject: [PATCH 1/4] add user Signed-off-by: unknown --- .../include/ability_manager_client.h | 22 ++++++++++++ .../include/ability_manager_errors.h | 5 +++ .../include/ability_manager_interface.h | 20 +++++++++++ .../include/ability_manager_proxy.h | 7 ++++ .../include/ability_manager_service.h | 10 +++++- .../abilitymgr/src/ability_manager_client.cpp | 36 +++++++++++++++++-- .../abilitymgr/src/ability_manager_proxy.cpp | 11 ++++++ .../src/ability_manager_service.cpp | 28 +++++++++++++-- .../abilitymgr/src/ability_manager_stub.cpp | 3 +- 9 files changed, 135 insertions(+), 7 deletions(-) diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_client.h b/interfaces/inner_api/ability_manager/include/ability_manager_client.h index c268eda45a2..dc321365488 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_client.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_client.h @@ -258,6 +258,28 @@ public: const sptr &callerToken, int32_t userId = DEFAULT_INVAL_VALUE); + /** + * Connect data share extension ability. + * + * @param want, special want for the data share extension ability. + * @param connect, callback used to notify caller the result of connecting or disconnecting. + * @param userId, the extension runs in. + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode ConnectDataShareExtensionAbility(const Want &want, const sptr &connect, + int32_t userId = DEFAULT_INVAL_VALUE); + + /** + * Connect extension ability. + * + * @param want, special want for the extension ability. + * @param connect, callback used to notify caller the result of connecting or disconnecting. + * @param userId, the extension runs in. + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode ConnectExtensionAbility(const Want &want, const sptr &connect, + int32_t userId = DEFAULT_INVAL_VALUE); + /** * DisconnectAbility, disconnect session with service ability. * 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 52d48fa9e9a..1f2771669ae 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_errors.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_errors.h @@ -268,6 +268,11 @@ enum { * Result(2097201) for window mode. */ ERR_AAFWK_INVALID_WINDOW_MODE, + + /** + * Result(2097202) for wrong interface call. + */ + ERR_WRONG_INTERFACE_CALL, }; enum { 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 04a1f20a2a5..477f4fc8c56 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -241,6 +241,26 @@ public: const sptr &callerToken, int32_t userId = DEFAULT_INVAL_VALUE) = 0; + /** + * Connect extension ability. + * + * @param want, special want for service type's ability. + * @param connect, callback used to notify caller the result of connecting or disconnecting. + * @param callerToken, caller ability token. + * @param extensionType, type of the extension. + * @param userId, the service user ID. + * @return Returns ERR_OK on success, others on failure. + */ + virtual int ConnectAbility( + const Want &want, + const sptr &connect, + const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType, + int32_t userId = DEFAULT_INVAL_VALUE) + { + return 0; + } + /** * DisconnectAbility, disconnect session with service ability. * diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index b1860d992f0..aa901a42a7f 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -189,6 +189,13 @@ public: const sptr &callerToken, int32_t userId = DEFAULT_INVAL_VALUE) override; + virtual int ConnectAbility( + const Want &want, + const sptr &connect, + const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType, + int32_t userId = DEFAULT_INVAL_VALUE) override; + /** * DisconnectAbility, connect session with service ability. * diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index dfb334347bb..3f104acbe7d 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -229,6 +229,13 @@ public: const sptr &callerToken, int32_t userId = DEFAULT_INVAL_VALUE) override; + virtual int ConnectAbility( + const Want &want, + const sptr &connect, + const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType, + int32_t userId = DEFAULT_INVAL_VALUE) override; + /** * ContinueMission, continue ability from mission center. * @@ -898,7 +905,8 @@ private: const Want &want, const int32_t userId, const sptr &connect, - const sptr &callerToken); + const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType); int DisconnectLocalAbility(const sptr &connect); int ConnectRemoteAbility(const Want &want, const sptr &connect); int DisconnectRemoteAbility(const sptr &connect); diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index e8dd67f7ce7..144ee49a8b7 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -220,7 +220,7 @@ ErrCode AbilityManagerClient::ConnectAbility(const Want &want, const sptrConnectAbility(want, connect, nullptr, userId); + return abms->ConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } ErrCode AbilityManagerClient::ConnectAbility( @@ -231,7 +231,39 @@ ErrCode AbilityManagerClient::ConnectAbility( CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Connect ability called, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); - return abms->ConnectAbility(want, connect, callerToken, userId); + return abms->ConnectAbility(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); +} + +ErrCode AbilityManagerClient::ConnectDataShareExtensionAbility(const Want &want, + const sptr &connect, int32_t userId) +{ + HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); + auto abms = GetAbilityManager(); + if (abms == nullptr) { + HILOG_ERROR("Connect data share extension ability failed, bundleName:%{public}s, abilityName:%{public}s", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); + return ABILITY_SERVICE_NOT_CONNECTED; + } + + HILOG_INFO("Connect data extension ability, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); + return abms->ConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::DATASHARE, userId); +} + +ErrCode AbilityManagerClient::ConnectExtensionAbility(const Want &want, const sptr &connect, + int32_t userId) +{ + HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); + auto abms = GetAbilityManager(); + if (abms == nullptr) { + HILOG_ERROR("Connect extension ability failed, bundleName:%{public}s, abilityName:%{public}s", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); + return ABILITY_SERVICE_NOT_CONNECTED; + } + + HILOG_INFO("Connect extension ability, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); + return abms->ConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::UNSPECIFIED, userId); } ErrCode AbilityManagerClient::DisconnectAbility(const sptr &connect) diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index f433d32196f..a1494d79acb 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -423,6 +423,13 @@ int AbilityManagerProxy::CloseAbility(const sptr &token, int resu int AbilityManagerProxy::ConnectAbility( const Want &want, const sptr &connect, const sptr &callerToken, int32_t userId) +{ + return ConnectAbility(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); +} + +int AbilityManagerProxy::ConnectAbility( + const Want &want, const sptr &connect, const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType, int32_t userId) { int error; MessageParcel data; @@ -466,6 +473,10 @@ int AbilityManagerProxy::ConnectAbility( HILOG_ERROR("userId write failed."); return INNER_ERR; } + if (!data.WriteInt32(static_cast(extensionType))) { + HILOG_ERROR("extensionType write failed."); + return INNER_ERR; + } error = Remote()->SendRequest(IAbilityManager::CONNECT_ABILITY, data, reply, option); if (error != NO_ERROR) { HILOG_ERROR("Send request error: %{public}d", error); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index a8471628f44..0f30d4e1550 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1418,6 +1418,13 @@ int AbilityManagerService::MinimizeAbility(const sptr &token, boo int AbilityManagerService::ConnectAbility( const Want &want, const sptr &connect, const sptr &callerToken, int32_t userId) +{ + return ConnectAbility(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); +} + +int AbilityManagerService::ConnectAbility( + const Want &want, const sptr &connect, const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType, int32_t userId) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); HILOG_INFO("Connect ability called, element uri: %{public}s.", want.GetElement().GetURI().c_str()); @@ -1497,14 +1504,14 @@ int AbilityManagerService::ConnectAbility( if (callerToken != nullptr && callerToken->GetObjectDescriptor() != u"ohos.aafwk.AbilityToken") { HILOG_INFO("%{public}s invalid Token.", __func__); - eventInfo.errCode = ConnectLocalAbility(abilityWant, validUserId, connect, nullptr); + eventInfo.errCode = ConnectLocalAbility(abilityWant, validUserId, connect, nullptr, extensionType); if (eventInfo.errCode != ERR_OK) { AAFWK::EventReport::SendExtensionEvent(AAFWK::CONNECT_SERVICE_ERROR, HiSysEventType::FAULT, eventInfo); } return eventInfo.errCode; } - eventInfo.errCode = ConnectLocalAbility(abilityWant, validUserId, connect, callerToken); + eventInfo.errCode = ConnectLocalAbility(abilityWant, validUserId, connect, callerToken, extensionType); if (eventInfo.errCode != ERR_OK) { AAFWK::EventReport::SendExtensionEvent(AAFWK::CONNECT_SERVICE_ERROR, HiSysEventType::FAULT, eventInfo); @@ -1532,7 +1539,8 @@ int AbilityManagerService::DisconnectAbility(const sptr &con } int AbilityManagerService::ConnectLocalAbility(const Want &want, const int32_t userId, - const sptr &connect, const sptr &callerToken) + const sptr &connect, const sptr &callerToken, + AppExecFwk::ExtensionAbilityType extensionType) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); HILOG_INFO("Connect local ability begin."); @@ -1547,6 +1555,20 @@ int AbilityManagerService::ConnectLocalAbility(const Want &want, const int32_t u HILOG_ERROR("Generate ability request error."); return result; } + + if (abilityRequest.abilityInfo.isStageBasedModel) { + bool isService = (abilityRequest.abilityInfo.extensionAbilityType == AppExecFwk::ExtensionAbilityType::SERVICE); + bool isData = (abilityRequest.abilityInfo.extensionAbilityType == AppExecFwk::ExtensionAbilityType::DATASHARE); + if (extensionType == AppExecFwk::ExtensionAbilityType::DATASHARE && !isData) { + HILOG_ERROR("Not data extension type, please don't use ConnectDataShareExtensionAbility."); + return ERR_WRONG_INTERFACE_CALL; + } + + if (extensionType == AppExecFwk::ExtensionAbilityType::UNSPECIFIED && (isData || isService)) { + HILOG_ERROR("Data or service extension type, please don't use ConnectExtensionAbility."); + return ERR_WRONG_INTERFACE_CALL; + } + } auto abilityInfo = abilityRequest.abilityInfo; int32_t validUserId = abilityInfo.applicationInfo.singleton ? U0_USER_ID : userId; HILOG_DEBUG("validUserId : %{public}d, singleton is : %{public}d", diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index e1534094574..29ba8bbae47 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -452,7 +452,8 @@ int AbilityManagerStub::ConnectAbilityInner(MessageParcel &data, MessageParcel & token = data.ReadRemoteObject(); } int32_t userId = data.ReadInt32(); - int32_t result = ConnectAbility(*want, callback, token, userId); + AppExecFwk::ExtensionAbilityType extensionType = static_cast(data.ReadInt32()); + int32_t result = ConnectAbility(*want, callback, token, extensionType, userId); reply.WriteInt32(result); delete want; return NO_ERROR; -- Gitee From 5b0bc19fb0ee68c3e0a2565b746b6dcea32739c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 30 Aug 2022 18:54:21 +0800 Subject: [PATCH 2/4] add user Signed-off-by: unknown --- .../include/ability_manager_interface.h | 2 ++ .../abilitymgr/include/ability_manager_stub.h | 1 + .../abilitymgr/src/ability_manager_proxy.cpp | 2 +- .../abilitymgr/src/ability_manager_stub.cpp | 29 ++++++++++++++++++- 4 files changed, 32 insertions(+), 2 deletions(-) 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 477f4fc8c56..fda88bb0514 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -924,6 +924,8 @@ public: RELEASE_CALL_ABILITY, + CONNECT_ABILITY_WITH_TYPE, + // ipc id for continue ability(1101) START_CONTINUATION = 1101, diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index 624d0fa6fac..53eefdae6cb 100644 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -83,6 +83,7 @@ private: int StopExtensionAbilityInner(MessageParcel& data, MessageParcel& reply); int StartAbilityAddCallerInner(MessageParcel &data, MessageParcel &reply); int ConnectAbilityInner(MessageParcel &data, MessageParcel &reply); + int ConnectAbilityWithTypeInner(MessageParcel &data, MessageParcel &reply); int DisconnectAbilityInner(MessageParcel &data, MessageParcel &reply); int StopServiceAbilityInner(MessageParcel &data, MessageParcel &reply); int DumpStateInner(MessageParcel &data, MessageParcel &reply); diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index a1494d79acb..af8788a582d 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -477,7 +477,7 @@ int AbilityManagerProxy::ConnectAbility( HILOG_ERROR("extensionType write failed."); return INNER_ERR; } - error = Remote()->SendRequest(IAbilityManager::CONNECT_ABILITY, data, reply, option); + error = Remote()->SendRequest(IAbilityManager::CONNECT_ABILITY_WITH_TYPE, data, reply, option); if (error != NO_ERROR) { HILOG_ERROR("Send request error: %{public}d", error); return error; diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 29ba8bbae47..1273f0c53fa 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -76,6 +76,7 @@ void AbilityManagerStub::FirstStepInit() requestFuncMap_[FORCE_TIMEOUT] = &AbilityManagerStub::ForceTimeoutForTestInner; #endif requestFuncMap_[FREE_INSTALL_ABILITY_FROM_REMOTE] = &AbilityManagerStub::FreeInstallAbilityFromRemoteInner; + requestFuncMap_[CONNECT_ABILITY_WITH_TYPE] = &AbilityManagerStub::ConnectAbilityWithTypeInner; } void AbilityManagerStub::SecondStepInit() @@ -437,6 +438,30 @@ int AbilityManagerStub::StartAbilityAddCallerInner(MessageParcel &data, MessageP } int AbilityManagerStub::ConnectAbilityInner(MessageParcel &data, MessageParcel &reply) +{ + Want *want = data.ReadParcelable(); + if (want == nullptr) { + HILOG_ERROR("want is nullptr"); + return ERR_INVALID_VALUE; + } + sptr callback = nullptr; + sptr token = nullptr; + if (data.ReadBool()) { + callback = iface_cast(data.ReadRemoteObject()); + } + if (data.ReadBool()) { + token = data.ReadRemoteObject(); + } + int32_t userId = data.ReadInt32(); + int32_t result = ConnectAbility(*want, callback, token, AppExecFwk::ExtensionAbilityType::SERVICE, userId); + reply.WriteInt32(result); + if (want != nullptr) { + delete want; + } + return NO_ERROR; +} + +int AbilityManagerStub::ConnectAbilityWithTypeInner(MessageParcel &data, MessageParcel &reply) { Want *want = data.ReadParcelable(); if (want == nullptr) { @@ -455,7 +480,9 @@ int AbilityManagerStub::ConnectAbilityInner(MessageParcel &data, MessageParcel & AppExecFwk::ExtensionAbilityType extensionType = static_cast(data.ReadInt32()); int32_t result = ConnectAbility(*want, callback, token, extensionType, userId); reply.WriteInt32(result); - delete want; + if (want != nullptr) { + delete want; + } return NO_ERROR; } -- Gitee From 92e051417db1126d338b84c45a55044adf597070 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 30 Aug 2022 19:35:12 +0800 Subject: [PATCH 3/4] add user Signed-off-by: unknown --- services/abilitymgr/src/ability_manager_client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index 144ee49a8b7..66c54fecb52 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -245,8 +245,8 @@ ErrCode AbilityManagerClient::ConnectDataShareExtensionAbility(const Want &want, return ABILITY_SERVICE_NOT_CONNECTED; } - HILOG_INFO("Connect data extension ability, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", - want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); + HILOG_INFO("Connect data share extension ability, bundleName:%{public}s, abilityName:%{public}s.", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); return abms->ConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::DATASHARE, userId); } -- Gitee From 70d98403ad04c3ae89a41a5fab4a3507be6cada0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 31 Aug 2022 09:33:25 +0800 Subject: [PATCH 4/4] add user Signed-off-by: unknown --- .../include/ability_manager_interface.h | 4 ++-- .../include/ability_manager_proxy.h | 2 +- .../include/ability_manager_service.h | 2 +- .../abilitymgr/src/ability_manager_client.cpp | 22 ++++++++++--------- .../abilitymgr/src/ability_manager_proxy.cpp | 10 +++++---- .../src/ability_manager_service.cpp | 14 ++++-------- .../abilitymgr/src/ability_manager_stub.cpp | 4 ++-- .../ability_manager_proxy_test.cpp | 4 ++-- 8 files changed, 30 insertions(+), 32 deletions(-) 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 fda88bb0514..895f99681ea 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -242,7 +242,7 @@ public: int32_t userId = DEFAULT_INVAL_VALUE) = 0; /** - * Connect extension ability. + * Connect ability common method. * * @param want, special want for service type's ability. * @param connect, callback used to notify caller the result of connecting or disconnecting. @@ -251,7 +251,7 @@ public: * @param userId, the service user ID. * @return Returns ERR_OK on success, others on failure. */ - virtual int ConnectAbility( + virtual int ConnectAbilityCommon( const Want &want, const sptr &connect, const sptr &callerToken, diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index aa901a42a7f..c245c3d98ae 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -189,7 +189,7 @@ public: const sptr &callerToken, int32_t userId = DEFAULT_INVAL_VALUE) override; - virtual int ConnectAbility( + virtual int ConnectAbilityCommon( const Want &want, const sptr &connect, const sptr &callerToken, diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 3f104acbe7d..99d057bdb52 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -229,7 +229,7 @@ public: const sptr &callerToken, int32_t userId = DEFAULT_INVAL_VALUE) override; - virtual int ConnectAbility( + virtual int ConnectAbilityCommon( const Want &want, const sptr &connect, const sptr &callerToken, diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index 66c54fecb52..203d45b7336 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -220,7 +220,7 @@ ErrCode AbilityManagerClient::ConnectAbility(const Want &want, const sptrConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::SERVICE, userId); + return abms->ConnectAbilityCommon(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } ErrCode AbilityManagerClient::ConnectAbility( @@ -231,7 +231,7 @@ ErrCode AbilityManagerClient::ConnectAbility( CHECK_POINTER_RETURN_NOT_CONNECTED(abms); HILOG_INFO("Connect ability called, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); - return abms->ConnectAbility(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); + return abms->ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } ErrCode AbilityManagerClient::ConnectDataShareExtensionAbility(const Want &want, @@ -240,14 +240,16 @@ ErrCode AbilityManagerClient::ConnectDataShareExtensionAbility(const Want &want, HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); if (abms == nullptr) { - HILOG_ERROR("Connect data share extension ability failed, bundleName:%{public}s, abilityName:%{public}s", - want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); + HILOG_ERROR("Connect failed, bundleName:%{public}s, abilityName:%{public}s, uri:%{public}s.", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), + want.GetUriString().c_str()); return ABILITY_SERVICE_NOT_CONNECTED; } - HILOG_INFO("Connect data share extension ability, bundleName:%{public}s, abilityName:%{public}s.", - want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); - return abms->ConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::DATASHARE, userId); + HILOG_INFO("Connect called, bundleName:%{public}s, abilityName:%{public}s, uri:%{public}s.", + want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), + want.GetUriString().c_str()); + return abms->ConnectAbilityCommon(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::DATASHARE, userId); } ErrCode AbilityManagerClient::ConnectExtensionAbility(const Want &want, const sptr &connect, @@ -256,14 +258,14 @@ ErrCode AbilityManagerClient::ConnectExtensionAbility(const Want &want, const sp HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); auto abms = GetAbilityManager(); if (abms == nullptr) { - HILOG_ERROR("Connect extension ability failed, bundleName:%{public}s, abilityName:%{public}s", + HILOG_ERROR("Connect failed, bundleName:%{public}s, abilityName:%{public}s", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str()); return ABILITY_SERVICE_NOT_CONNECTED; } - HILOG_INFO("Connect extension ability, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", + HILOG_INFO("Connect called, bundleName:%{public}s, abilityName:%{public}s, userId:%{public}d.", want.GetElement().GetBundleName().c_str(), want.GetElement().GetAbilityName().c_str(), userId); - return abms->ConnectAbility(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::UNSPECIFIED, userId); + return abms->ConnectAbilityCommon(want, connect, nullptr, AppExecFwk::ExtensionAbilityType::UNSPECIFIED, userId); } ErrCode AbilityManagerClient::DisconnectAbility(const sptr &connect) diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index af8788a582d..dc07a42ffea 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -424,14 +424,13 @@ int AbilityManagerProxy::CloseAbility(const sptr &token, int resu int AbilityManagerProxy::ConnectAbility( const Want &want, const sptr &connect, const sptr &callerToken, int32_t userId) { - return ConnectAbility(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); + return ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } -int AbilityManagerProxy::ConnectAbility( +int AbilityManagerProxy::ConnectAbilityCommon( const Want &want, const sptr &connect, const sptr &callerToken, AppExecFwk::ExtensionAbilityType extensionType, int32_t userId) { - int error; MessageParcel data; MessageParcel reply; MessageOption option; @@ -477,7 +476,10 @@ int AbilityManagerProxy::ConnectAbility( HILOG_ERROR("extensionType write failed."); return INNER_ERR; } - error = Remote()->SendRequest(IAbilityManager::CONNECT_ABILITY_WITH_TYPE, data, reply, option); + if (Remote() == nullptr) { + return INNER_ERR; + } + int error = Remote()->SendRequest(IAbilityManager::CONNECT_ABILITY_WITH_TYPE, data, reply, option); if (error != NO_ERROR) { HILOG_ERROR("Send request error: %{public}d", error); return error; diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 0f30d4e1550..47a50df510d 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -1419,10 +1419,10 @@ int AbilityManagerService::MinimizeAbility(const sptr &token, boo int AbilityManagerService::ConnectAbility( const Want &want, const sptr &connect, const sptr &callerToken, int32_t userId) { - return ConnectAbility(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); + return ConnectAbilityCommon(want, connect, callerToken, AppExecFwk::ExtensionAbilityType::SERVICE, userId); } -int AbilityManagerService::ConnectAbility( +int AbilityManagerService::ConnectAbilityCommon( const Want &want, const sptr &connect, const sptr &callerToken, AppExecFwk::ExtensionAbilityType extensionType, int32_t userId) { @@ -1558,14 +1558,8 @@ int AbilityManagerService::ConnectLocalAbility(const Want &want, const int32_t u if (abilityRequest.abilityInfo.isStageBasedModel) { bool isService = (abilityRequest.abilityInfo.extensionAbilityType == AppExecFwk::ExtensionAbilityType::SERVICE); - bool isData = (abilityRequest.abilityInfo.extensionAbilityType == AppExecFwk::ExtensionAbilityType::DATASHARE); - if (extensionType == AppExecFwk::ExtensionAbilityType::DATASHARE && !isData) { - HILOG_ERROR("Not data extension type, please don't use ConnectDataShareExtensionAbility."); - return ERR_WRONG_INTERFACE_CALL; - } - - if (extensionType == AppExecFwk::ExtensionAbilityType::UNSPECIFIED && (isData || isService)) { - HILOG_ERROR("Data or service extension type, please don't use ConnectExtensionAbility."); + if (isService && extensionType != AppExecFwk::ExtensionAbilityType::SERVICE) { + HILOG_ERROR("Service extension type, please use ConnectAbility."); return ERR_WRONG_INTERFACE_CALL; } } diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 1273f0c53fa..318bf8c3824 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -453,7 +453,7 @@ int AbilityManagerStub::ConnectAbilityInner(MessageParcel &data, MessageParcel & token = data.ReadRemoteObject(); } int32_t userId = data.ReadInt32(); - int32_t result = ConnectAbility(*want, callback, token, AppExecFwk::ExtensionAbilityType::SERVICE, userId); + int32_t result = ConnectAbilityCommon(*want, callback, token, AppExecFwk::ExtensionAbilityType::SERVICE, userId); reply.WriteInt32(result); if (want != nullptr) { delete want; @@ -478,7 +478,7 @@ int AbilityManagerStub::ConnectAbilityWithTypeInner(MessageParcel &data, Message } int32_t userId = data.ReadInt32(); AppExecFwk::ExtensionAbilityType extensionType = static_cast(data.ReadInt32()); - int32_t result = ConnectAbility(*want, callback, token, extensionType, userId); + int32_t result = ConnectAbilityCommon(*want, callback, token, extensionType, userId); reply.WriteInt32(result); if (want != nullptr) { delete want; diff --git a/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp b/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp index cac9f721eb9..4d566c56fd6 100644 --- a/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp +++ b/test/unittest/ability_manager_proxy_test/ability_manager_proxy_test.cpp @@ -224,7 +224,7 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_005, TestSize.Level1) sptr connect = new AbilityConnectCallback(); int res1 = proxy_->ConnectAbility(want, connect, callerToken); EXPECT_EQ(res1, NO_ERROR); - EXPECT_EQ(IAbilityManager::CONNECT_ABILITY, mock_->code_); + EXPECT_EQ(IAbilityManager::CONNECT_ABILITY_WITH_TYPE, mock_->code_); } /* @@ -245,7 +245,7 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_006, TestSize.Level1) sptr connect = new AbilityConnectCallback(); int res = proxy_->ConnectAbility(want, connect, callerToken); - EXPECT_EQ(IAbilityManager::CONNECT_ABILITY, mock_->code_); + EXPECT_EQ(IAbilityManager::CONNECT_ABILITY_WITH_TYPE, mock_->code_); EXPECT_NE(res, NO_ERROR); } -- Gitee