From 586512af3546951f140e9336d529b64fffbab6cd Mon Sep 17 00:00:00 2001 From: 18795846185 Date: Wed, 28 May 2025 11:13:04 +0800 Subject: [PATCH] clm2025528-IAcquireShareDataCallback Signed-off-by: 18795846185 Change-Id: Ib6c558b7cfe48e93e740eade093c903700f1b019 --- frameworks/js/napi/ability_manager/BUILD.gn | 6 +- interfaces/inner_api/ability_manager/BUILD.gn | 200 +++++++++++++++++- ...erface.h => IAcquireShareDataCallback.idl} | 56 ++--- .../include/ability_manager_interface.h | 2 +- .../acquire_share_data_callback_proxy.h | 31 +-- .../acquire_share_data_callback_stub.h | 96 ++++----- .../include/iacquire_share_data_callback.h | 49 +++++ services/abilitymgr/BUILD.gn | 5 +- .../include/ability_manager_service.h | 2 +- .../src/ability_manager_service.cpp | 3 +- .../src/acquire_share_data_callback_proxy.cpp | 60 +++--- .../src/acquire_share_data_callback_stub.cpp | 183 ++++++++-------- .../ability_manager_proxy_second_test.cpp | 4 +- ...acquire_share_data_callback_proxy_test.cpp | 6 +- 14 files changed, 470 insertions(+), 233 deletions(-) rename interfaces/inner_api/ability_manager/{include/iacquire_share_data_callback_interface.h => IAcquireShareDataCallback.idl} (43%) create mode 100644 interfaces/inner_api/ability_manager/include/iacquire_share_data_callback.h diff --git a/frameworks/js/napi/ability_manager/BUILD.gn b/frameworks/js/napi/ability_manager/BUILD.gn index 78bdffd1e0e..57650a67595 100644 --- a/frameworks/js/napi/ability_manager/BUILD.gn +++ b/frameworks/js/napi/ability_manager/BUILD.gn @@ -22,7 +22,9 @@ template("abilitymanager") { if (defined(invoker.defines)) { defines += invoker.defines } - + configs = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager_idl_config", + ] sources = [ "ability_manager_module.cpp", "js_ability_foreground_state_observer.cpp", @@ -35,6 +37,8 @@ template("abilitymanager") { deps = [ "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/ability_manager:ability_start_options", + #"${ability_runtime_innerkits_path}/ability_manager:acquire_share_data_callback_proxy", + "${ability_runtime_innerkits_path}/ability_manager:acquire_share_data_callback_stub", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/napi_base_context:napi_base_context", "${ability_runtime_innerkits_path}/runtime:runtime", diff --git a/interfaces/inner_api/ability_manager/BUILD.gn b/interfaces/inner_api/ability_manager/BUILD.gn index 0c0c0c6e71d..2339e2a336a 100644 --- a/interfaces/inner_api/ability_manager/BUILD.gn +++ b/interfaces/inner_api/ability_manager/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2023 Huawei Device Co., Ltd. +# Copyright (c) 2023~2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -11,8 +11,29 @@ # See the License for the specific language governing permissions and # limitations under the License. +import("//build/config/components/idl_tool/idl.gni") import("//build/ohos.gni") import("//foundation/ability/ability_runtime/ability_runtime.gni") +idl_gen_interface("ability_manager_interface") { + sources = [ + "IAcquireShareDataCallback.idl" + ] + sources_common = [ + + ] + log_domainid = "0xD001336" + log_tag = "AbilityMgr" + subsystem_name = "ability" + part_name = "ability_runtime" +} + +config("ability_manager_idl_config") { + include_dirs = [ + "${ability_runtime_innerkits_path}/dataobs_manager/include", + "${target_gen_dir}", + "include/", + ] +} config("ability_manager_public_config") { visibility = [ ":*" ] @@ -61,7 +82,175 @@ config("ability_manager_public_config") { } } +ohos_source_set("acquire_share_data_callback_proxy") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + + output_values = get_target_outputs(":ability_manager_interface") + source_values = [ + "*acquire_share_data_callback_proxy.cpp", + ] + sources = filter_include(output_values, source_values) + + public_configs = [ + ":ability_manager_idl_config", + "${ability_runtime_services_path}/abilitymgr:abilityms_config", + ] + + public_deps = [ ":ability_connect_callback_stub" ] + + deps = [ + ":ability_manager_interface", + ":ability_start_options", + ":ability_start_setting", + ":mission_info", + ":process_options", + ":start_window_option", + "${ability_runtime_innerkits_path}/app_manager:app_manager", + "${ability_runtime_path}/utils/global/freeze:freeze_util", + "${ability_runtime_services_path}/abilitymgr:wantagent_manager", + ] + + external_deps = [ + "bundle_framework:libappexecfwk_common", + "c_utils:utils", + "common_event_service:cesfwk_innerkits", + "eventhandler:libeventhandler", + "hilog:libhilog", + "hisysevent:libhisysevent", + "hitrace:hitrace_meter", + "ipc:ipc_core", + "ipc:ipc_napi", + "jsoncpp:jsoncpp", + "relational_store:native_dataability", + "samgr:samgr_proxy", + ] + + if (host_cpu != "arm64") { + external_deps += [ "relational_store:native_rdb" ] + } + + public_external_deps = [ + "ability_base:base", + "ability_base:configuration", + "ability_base:session_info", + "ability_base:want", + "ability_base:zuri", + "background_task_mgr:bgtaskmgr_innerkits", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "init:libbegetutil", + "jsoncpp:jsoncpp", + "relational_store:native_dataability", + "relational_store:native_rdb", + ] + + if (ability_runtime_graphics) { + deps += [] + external_deps += [ + "ability_base:session_info", + "image_framework:image_native", + "window_manager:libwsutils", + "window_manager:session_manager_lite", + ] + public_external_deps += [ "graphic_2d:color_manager" ] + } + subsystem_name = "ability" + part_name = "ability_runtime" +} + +ohos_source_set("acquire_share_data_callback_stub") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + + output_values = get_target_outputs(":ability_manager_interface") + #sources = [ + # "${output_values}/acquire_share_data_callback_stub.cpp" + #] + source_values = [ + "*acquire_share_data_callback_stub.cpp", + ] + sources = filter_include(output_values, source_values) + + public_configs = [ + ":ability_manager_idl_config", + "${ability_runtime_services_path}/abilitymgr:abilityms_config", + ] + + public_deps = [ ":ability_connect_callback_stub" ] + + deps = [ + ":ability_manager_interface", + ":ability_start_options", + ":ability_start_setting", + ":mission_info", + ":process_options", + ":start_window_option", + "${ability_runtime_innerkits_path}/app_manager:app_manager", + "${ability_runtime_path}/utils/global/freeze:freeze_util", + "${ability_runtime_services_path}/abilitymgr:wantagent_manager", + ] + + external_deps = [ + "bundle_framework:libappexecfwk_common", + "c_utils:utils", + "common_event_service:cesfwk_innerkits", + "eventhandler:libeventhandler", + "hilog:libhilog", + "hisysevent:libhisysevent", + "hitrace:hitrace_meter", + "ipc:ipc_core", + "ipc:ipc_napi", + "jsoncpp:jsoncpp", + "relational_store:native_dataability", + "samgr:samgr_proxy", + ] + + if (host_cpu != "arm64") { + external_deps += [ "relational_store:native_rdb" ] + } + + public_external_deps = [ + "ability_base:base", + "ability_base:configuration", + "ability_base:session_info", + "ability_base:want", + "ability_base:zuri", + "background_task_mgr:bgtaskmgr_innerkits", + "bundle_framework:appexecfwk_base", + "bundle_framework:appexecfwk_core", + "init:libbegetutil", + "jsoncpp:jsoncpp", + "relational_store:native_dataability", + "relational_store:native_rdb", + ] + + if (ability_runtime_graphics) { + deps += [] + external_deps += [ + "ability_base:session_info", + "image_framework:image_native", + "window_manager:libwsutils", + "window_manager:session_manager_lite", + ] + public_external_deps += [ "graphic_2d:color_manager" ] + } + subsystem_name = "ability" + part_name = "ability_runtime" +} + ohos_shared_library("ability_manager") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } use_exceptions = true branch_protector_ret = "pac_ret" @@ -76,8 +265,6 @@ ohos_shared_library("ability_manager") { "${ability_runtime_services_path}/abilitymgr/src/ability_manager_proxy.cpp", "${ability_runtime_services_path}/abilitymgr/src/ability_running_info.cpp", "${ability_runtime_services_path}/abilitymgr/src/ability_scheduler_stub.cpp", - "${ability_runtime_services_path}/abilitymgr/src/acquire_share_data_callback_proxy.cpp", - "${ability_runtime_services_path}/abilitymgr/src/acquire_share_data_callback_stub.cpp", "${ability_runtime_services_path}/abilitymgr/src/auto_startup_info.cpp", "${ability_runtime_services_path}/abilitymgr/src/caller_info.cpp", "${ability_runtime_services_path}/abilitymgr/src/dialog_session/dialog_session_info.cpp", @@ -125,6 +312,7 @@ ohos_shared_library("ability_manager") { public_configs = [ ":ability_manager_public_config", + ":ability_manager_idl_config", "${ability_runtime_services_path}/abilitymgr:abilityms_config", ] @@ -132,6 +320,8 @@ ohos_shared_library("ability_manager") { deps = [ ":ability_start_options", + ":acquire_share_data_callback_proxy", + ":acquire_share_data_callback_stub", ":ability_start_setting", ":mission_info", ":process_options", @@ -419,6 +609,8 @@ ohos_shared_library("ability_connect_callback_stub") { "bundle_framework:appexecfwk_base", "bundle_framework:appexecfwk_core", "jsoncpp:jsoncpp", + "relational_store:native_dataability", + "relational_store:native_rdb", ] if (ability_runtime_graphics) { external_deps += [ "graphic_2d:color_manager" ] @@ -431,4 +623,4 @@ ohos_shared_library("ability_connect_callback_stub") { ] subsystem_name = "ability" part_name = "ability_runtime" -} +} \ No newline at end of file diff --git a/interfaces/inner_api/ability_manager/include/iacquire_share_data_callback_interface.h b/interfaces/inner_api/ability_manager/IAcquireShareDataCallback.idl similarity index 43% rename from interfaces/inner_api/ability_manager/include/iacquire_share_data_callback_interface.h rename to interfaces/inner_api/ability_manager/IAcquireShareDataCallback.idl index 00ef5ecb9b1..4548ed6c9b0 100644 --- a/interfaces/inner_api/ability_manager/include/iacquire_share_data_callback_interface.h +++ b/interfaces/inner_api/ability_manager/IAcquireShareDataCallback.idl @@ -1,36 +1,20 @@ -/* - * Copyright (c) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_INTERFACE_H -#define OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_INTERFACE_H - -#include "iremote_broker.h" -#include "iremote_object.h" -#include "want_params.h" - -namespace OHOS { -namespace AAFwk { -class IAcquireShareDataCallback : public OHOS::IRemoteBroker { -public: - DECLARE_INTERFACE_DESCRIPTOR(u"ohos.aafwk.acquireShareDataCallback"); - virtual int32_t AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) = 0; - enum { - ACQUIRE_SHARE_DATA_DONE, - CODE_MAX - }; -}; -} // namespace AbilityRuntime -} // namespace OHOS -#endif // OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_INTERFACE_H +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +sequenceable OHOS.AAFwk.WantParams; + +interface OHOS.AAFwk.IAcquireShareDataCallback { + int AcquireShareDataDone([in] int resultCode, [in] WantParams wantParam); +} \ No newline at end of file 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 e6a593210c5..a8415afb688 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -36,7 +36,7 @@ #include "free_install_observer_interface.h" #include "iability_controller.h" #include "iability_manager_collaborator.h" -#include "iacquire_share_data_callback_interface.h" +#include "iacquire_share_data_callback.h" #include "insight_intent/insight_intent_execute_param.h" #include "insight_intent/insight_intent_execute_result.h" #include "insight_intent/insight_intent_info_for_query.h" diff --git a/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_proxy.h b/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_proxy.h index eb70f631f70..06fe8471fc4 100644 --- a/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_proxy.h +++ b/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_proxy.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -13,30 +13,33 @@ * limitations under the License. */ -#ifndef OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_PROXY_H -#define OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_PROXY_H +#ifndef OHOS_AAFWK_ACQUIRESHAREDATACALLBACKPROXY_H +#define OHOS_AAFWK_ACQUIRESHAREDATACALLBACKPROXY_H -#include "iremote_proxy.h" -#include "iacquire_share_data_callback_interface.h" -#include "want_params.h" +#include +#include "iacquire_share_data_callback.h" namespace OHOS { namespace AAFwk { + class AcquireShareDataCallbackProxy : public IRemoteProxy { public: - explicit AcquireShareDataCallbackProxy - (const sptr &impl) : IRemoteProxy(impl) {} - - virtual ~AcquireShareDataCallbackProxy() {} + explicit AcquireShareDataCallbackProxy( + const sptr& remote) + : IRemoteProxy(remote) + {} - virtual int32_t AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) override; + virtual ~AcquireShareDataCallbackProxy() + {} -private: - bool WriteInterfaceToken(MessageParcel &data); + ErrCode AcquireShareDataDone( + int32_t resultCode, + const WantParams& wantParam, + int32_t& funcResult) override; private: static inline BrokerDelegator delegator_; }; } // namespace AAFwk } // namespace OHOS -#endif // OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_PROXY_H \ No newline at end of file +#endif // OHOS_AAFWK_ACQUIRESHAREDATACALLBACKPROXY_H \ No newline at end of file diff --git a/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_stub.h b/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_stub.h index f661afb6ed6..42a2fdbdabd 100644 --- a/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_stub.h +++ b/interfaces/inner_api/ability_manager/include/acquire_share_data_callback_stub.h @@ -1,48 +1,48 @@ -/* - * Copyright (c) 2023 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_STUB_H -#define OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_STUB_H - -#include "event_handler.h" -#include "iacquire_share_data_callback_interface.h" -#include -#include "want_params.h" - -namespace OHOS { -namespace AAFwk { - -using ShareRuntimeTask = std::function; - -class AcquireShareDataCallbackStub : public IRemoteStub { -public: - AcquireShareDataCallbackStub(); - virtual ~AcquireShareDataCallbackStub(); - virtual int32_t OnRemoteRequest( - uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override; - virtual int32_t AcquireShareDataDoneInner(MessageParcel &data, MessageParcel &reply); - virtual int32_t AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) override; - void SetHandler(std::shared_ptr handler); - void SetShareRuntimeTask(ShareRuntimeTask &shareRuntimeTask); - -private: - DISALLOW_COPY_AND_MOVE(AcquireShareDataCallbackStub); - - ShareRuntimeTask shareRuntimeTask_; - std::shared_ptr handler_; -}; -} // namespace AAFwk -} // namespace OHOS -#endif // OHOS_ABILITY_RUNTIME_ACQUIRE_SHARE_DATA_CALLBACK_STUB_H \ No newline at end of file +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_AAFWK_ACQUIRESHAREDATACALLBACKSTUB_H +#define OHOS_AAFWK_ACQUIRESHAREDATACALLBACKSTUB_H + +#include +#include "event_handler.h" +#include "iacquire_share_data_callback.h" +#include "want_params.h" + +namespace OHOS { +namespace AAFwk { + +using ShareRuntimeTask = std::function; + +class AcquireShareDataCallbackStub : public IRemoteStub { +public: + AcquireShareDataCallbackStub(); + virtual ~AcquireShareDataCallbackStub(); + virtual int32_t OnRemoteRequest( + uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override; + virtual int32_t AcquireShareDataDoneInner(MessageParcel &data, MessageParcel &reply); + virtual int32_t AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) override; + void SetHandler(std::shared_ptr handler); + void SetShareRuntimeTask(ShareRuntimeTask &shareRuntimeTask); +private: + DISALLOW_COPY_AND_MOVE(AcquireShareDataCallbackStub); + + ShareRuntimeTask shareRuntimeTask_; + std::shared_ptr handler_; +}; +} // namespace AAFwk +} // namespace OHOS +#endif // OHOS_AAFWK_ACQUIRESHAREDATACALLBACKSTUB_H + diff --git a/interfaces/inner_api/ability_manager/include/iacquire_share_data_callback.h b/interfaces/inner_api/ability_manager/include/iacquire_share_data_callback.h new file mode 100644 index 00000000000..7f585588563 --- /dev/null +++ b/interfaces/inner_api/ability_manager/include/iacquire_share_data_callback.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OHOS_AAFWK_IACQUIRESHAREDATACALLBACK_H +#define OHOS_AAFWK_IACQUIRESHAREDATACALLBACK_H + +#include +#include +#include +#include "want_params.h" + +using OHOS::AAFwk::WantParams; + +namespace OHOS { +namespace AAFwk { + +enum class IAcquireShareDataCallbackIpcCode { + COMMAND_ACQUIRE_SHARE_DATA_DONE = MIN_TRANSACTION_ID, +}; + +class IAcquireShareDataCallback : public IRemoteBroker { +public: + DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.AAFwk.IAcquireShareDataCallback"); + + virtual ErrCode AcquireShareDataDone( + int32_t resultCode, + const WantParams &wantParam, + int32_t &funcResult) = 0; +protected: + const int VECTOR_MAX_SIZE = 102400; + const int LIST_MAX_SIZE = 102400; + const int MAP_MAX_SIZE = 102400; +}; +} // namespace AAFwk +} // namespace OHOS +#endif // OHOS_AAFWK_IACQUIRESHAREDATACALLBACK_H + diff --git a/services/abilitymgr/BUILD.gn b/services/abilitymgr/BUILD.gn index af8b5ab776e..e0233f14ee9 100644 --- a/services/abilitymgr/BUILD.gn +++ b/services/abilitymgr/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2024 Huawei Device Co., Ltd. +# Copyright (c) 2021-2025 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -119,6 +119,7 @@ ohos_shared_library("abilityms") { configs = [ ":abilityms_config", ":abilityms_exception_config", + "${ability_runtime_innerkits_path}/ability_manager:ability_manager_idl_config", ] include_dirs = [ "${ability_runtime_services_path}/appdfr/include", @@ -131,6 +132,8 @@ ohos_shared_library("abilityms") { "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/ability_manager:ability_start_options", "${ability_runtime_innerkits_path}/ability_manager:ability_start_setting", + "${ability_runtime_innerkits_path}/ability_manager:acquire_share_data_callback_proxy", + "${ability_runtime_innerkits_path}/ability_manager:acquire_share_data_callback_stub", "${ability_runtime_innerkits_path}/ability_manager:mission_info", "${ability_runtime_innerkits_path}/ability_manager:process_options", "${ability_runtime_innerkits_path}/ability_manager:start_window_option", diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 74fc609f241..9851a71177c 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -50,7 +50,7 @@ #include "deeplink_reserve/deeplink_reserve_config.h" #include "event_report.h" #include "free_install_manager.h" -#include "iacquire_share_data_callback_interface.h" +#include "iacquire_share_data_callback.h" #include "interceptor/ability_interceptor_executer.h" #include "iremote_object.h" #include "mission_list_manager_interface.h" diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index be09d794a0e..2dfc2ca02f0 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -7445,7 +7445,8 @@ int32_t AbilityManagerService::GetShareDataPairAndReturnData(std::shared_ptrAcquireShareDataDone(resultCode, wantParam); + int32_t ret = 0; + callback->AcquireShareDataDone(resultCode, wantParam, ret); iAcquireShareDataMap_.erase(it); return ret; } diff --git a/services/abilitymgr/src/acquire_share_data_callback_proxy.cpp b/services/abilitymgr/src/acquire_share_data_callback_proxy.cpp index 59fc7726813..fa4fa6050b8 100644 --- a/services/abilitymgr/src/acquire_share_data_callback_proxy.cpp +++ b/services/abilitymgr/src/acquire_share_data_callback_proxy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -15,50 +15,46 @@ #include "acquire_share_data_callback_proxy.h" -#include "ability_manager_errors.h" -#include "hilog_tag_wrapper.h" - namespace OHOS { namespace AAFwk { -bool AcquireShareDataCallbackProxy::WriteInterfaceToken(MessageParcel &data) -{ - if (!data.WriteInterfaceToken(AcquireShareDataCallbackProxy::GetDescriptor())) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "write interface tokern failed"); - return false; - } - return true; -} -int32_t AcquireShareDataCallbackProxy::AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) +ErrCode AcquireShareDataCallbackProxy::AcquireShareDataDone( + int32_t resultCode, + const WantParams& wantParam, + int32_t& funcResult) { - TAG_LOGI(AAFwkTag::ABILITYMGR, "call"); MessageParcel data; MessageParcel reply; - MessageOption option(MessageOption::TF_ASYNC); - if (!WriteInterfaceToken(data)) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "write interface token failed"); - return INNER_ERR; + MessageOption option(MessageOption::TF_SYNC); + + if (!data.WriteInterfaceToken(GetDescriptor())) { + return ERR_INVALID_VALUE; } if (!data.WriteInt32(resultCode)) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "resultCode write failed"); - return INNER_ERR; + return ERR_INVALID_DATA; } if (!data.WriteParcelable(&wantParam)) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "wantParam write failed"); - return INNER_ERR; + return ERR_INVALID_DATA; } - auto remote = Remote(); + + sptr remote = Remote(); if (!remote) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "remote object null"); - return INNER_ERR; + return ERR_INVALID_DATA; } - int32_t ret = remote->SendRequest(IAcquireShareDataCallback::ACQUIRE_SHARE_DATA_DONE, data, reply, option); - if (ret != NO_ERROR) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "fail, err: %{public}d", ret); + int32_t result = remote->SendRequest( + static_cast(IAcquireShareDataCallbackIpcCode::COMMAND_ACQUIRE_SHARE_DATA_DONE), data, reply, option); + if (FAILED(result)) { + return result; } - TAG_LOGI(AAFwkTag::ABILITYMGR, "end"); - return ret; -} + + ErrCode errCode = reply.ReadInt32(); + if (FAILED(errCode)) { + return errCode; + } + + funcResult = reply.ReadInt32(); + return ERR_OK; } -} \ No newline at end of file +} // namespace AAFwk +} // namespace OHOS \ No newline at end of file diff --git a/services/abilitymgr/src/acquire_share_data_callback_stub.cpp b/services/abilitymgr/src/acquire_share_data_callback_stub.cpp index 2b966b9c0c9..53bd15cfaff 100644 --- a/services/abilitymgr/src/acquire_share_data_callback_stub.cpp +++ b/services/abilitymgr/src/acquire_share_data_callback_stub.cpp @@ -1,90 +1,93 @@ -/* - * Copyright (c) 2023-2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "acquire_share_data_callback_stub.h" - -#include "hilog_tag_wrapper.h" - -namespace OHOS { -namespace AAFwk { - -AcquireShareDataCallbackStub::AcquireShareDataCallbackStub() {} - -AcquireShareDataCallbackStub::~AcquireShareDataCallbackStub() -{ - TAG_LOGI(AAFwkTag::ABILITYMGR, "call"); -} - -int32_t AcquireShareDataCallbackStub::OnRemoteRequest( - uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) -{ - std::u16string descriptor = AcquireShareDataCallbackStub::GetDescriptor(); - std::u16string remoteDescriptor = data.ReadInterfaceToken(); - if (descriptor != remoteDescriptor) { - TAG_LOGI(AAFwkTag::ABILITYMGR, "descriptor not equal to remote"); - return ERR_INVALID_STATE; - } - - if (code < IAcquireShareDataCallback::CODE_MAX) { - if (code == ACQUIRE_SHARE_DATA_DONE) { - return AcquireShareDataDoneInner(data, reply); - } - } - return IPCObjectStub::OnRemoteRequest(code, data, reply, option); -} - -int32_t AcquireShareDataCallbackStub::AcquireShareDataDoneInner(MessageParcel &data, MessageParcel &reply) -{ - int32_t resultCode = data.ReadInt32(); - std::shared_ptr wantParam(data.ReadParcelable()); - if (wantParam == nullptr) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "null wantParam"); - return ERR_INVALID_VALUE; - } - return AcquireShareDataDone(resultCode, *wantParam); -} - -int32_t AcquireShareDataCallbackStub::AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) -{ - TAG_LOGI(AAFwkTag::ABILITYMGR, "resultCode:%{public}d, wantParam size:%{public}d", resultCode, wantParam.Size()); - if (resultCode || wantParam.IsEmpty()) { - TAG_LOGI(AAFwkTag::ABILITYMGR, "invaild param"); - } - auto task = [resultCode, wantParam, shareRuntimeTask = shareRuntimeTask_]() { - if (shareRuntimeTask) { - shareRuntimeTask(resultCode, wantParam); - } - }; - TAG_LOGI(AAFwkTag::ABILITYMGR, "acquireShareDataDone shareRuntimeTask start"); - if (!handler_) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "null handler_ object"); - return OBJECT_NULL; - } - handler_->PostTask(task, "AcquieShareDataDone."); - TAG_LOGI(AAFwkTag::ABILITYMGR, "acquireShareDataDone shareRuntimeTask end"); - return NO_ERROR; -} - -void AcquireShareDataCallbackStub::SetHandler(std::shared_ptr handler) -{ - handler_ = handler; -} - -void AcquireShareDataCallbackStub::SetShareRuntimeTask(ShareRuntimeTask &shareRuntimeTask) -{ - shareRuntimeTask_ = shareRuntimeTask; -} -} -} \ No newline at end of file +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "acquire_share_data_callback_stub.h" + +namespace OHOS { +namespace AAFwk { + +AcquireShareDataCallbackStub::AcquireShareDataCallbackStub() {} + +AcquireShareDataCallbackStub::~AcquireShareDataCallbackStub() +{ + TAG_LOGI(AAFwkTag::ABILITYMGR, "call"); +} + +int32_t AcquireShareDataCallbackStub::OnRemoteRequest( + uint32_t code, + MessageParcel& data, + MessageParcel& reply, + MessageOption& option) +{ + std::u16string localDescriptor = GetDescriptor(); + std::u16string remoteDescriptor = data.ReadInterfaceToken(); + if (localDescriptor != remoteDescriptor) { + return ERR_TRANSACTION_FAILED; + } + switch (static_cast(code)) { + case IAcquireShareDataCallbackIpcCode::COMMAND_ACQUIRE_SHARE_DATA_DONE: { + int32_t resultCode = data.ReadInt32(); + std::unique_ptr wantParam(data.ReadParcelable()); + if (!wantParam) { + return ERR_INVALID_DATA; + } + + int32_t result = 0; + ErrCode errCode = AcquireShareDataDone(resultCode, *wantParam, result); + if (SUCCEEDED(errCode)) { + if (!reply.WriteInt32(errCode)) { + return ERR_INVALID_DATA; + } + } + return ERR_NONE; + } + default: + return IPCObjectStub::OnRemoteRequest(code, data, reply, option); + } + + return ERR_TRANSACTION_FAILED; +} +ErrCode AcquireShareDataCallbackStub::AcquireShareDataDone(int32_t resultCode, const WantParams &wantParam, int32_t &funcResult) +{ + TAG_LOGI(AAFwkTag::ABILITYMGR, "resultCode:%{public}d, wantParam size:%{public}d", resultCode, wantParam.Size()); + if (resultCode || wantParam.IsEmpty()) { + TAG_LOGI(AAFwkTag::ABILITYMGR, "invaild param"); + } + auto task = [resultCode, wantParam, shareRuntimeTask = shareRuntimeTask_]() { + if (shareRuntimeTask) { + shareRuntimeTask(resultCode, wantParam); + } + }; + TAG_LOGI(AAFwkTag::ABILITYMGR, "acquireShareDataDone shareRuntimeTask start"); + if (!handler_) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "null handler_ object"); + return funcResult = OBJECT_NULL; + } + handler_->PostTask(task, "AcquieShareDataDone."); + TAG_LOGI(AAFwkTag::ABILITYMGR, "acquireShareDataDone shareRuntimeTask end"); + return funcResult = NO_ERROR; +} + +void AcquireShareDataCallbackStub::SetHandler(std::shared_ptr handler) +{ + handler_ = handler; +} + +void AcquireShareDataCallbackStub::SetShareRuntimeTask(ShareRuntimeTask &shareRuntimeTask) +{ + shareRuntimeTask_ = shareRuntimeTask; +} +} // namespace AAFwk +} // namespace OHOS \ No newline at end of file diff --git a/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp b/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp index 330b999a455..291ecf83a8e 100644 --- a/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp +++ b/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp @@ -17,7 +17,7 @@ #include "ability_manager_proxy.h" #include "free_install_observer_manager.h" -#include "iacquire_share_data_callback_interface.h" +#include "iacquire_share_data_callback.h" #include "iability_manager_collaborator.h" #include "status_bar_delegate_interface.h" @@ -70,7 +70,7 @@ class IAcquireShareDataCallbackMock : public IAcquireShareDataCallback { public: IAcquireShareDataCallbackMock() = default; virtual ~IAcquireShareDataCallbackMock() = default; - int32_t AcquireShareDataDone(int32_t resultCode, WantParams &wantParam) override { return 0; }; + int32_t AcquireShareDataDone(int32_t resultCode, WantParams &wantParam, int32_t& funcResult) override { return 0; }; sptr AsObject() override { AbilityRequest abilityRequest; diff --git a/test/unittest/acquire_share_data_callback_proxy_test/acquire_share_data_callback_proxy_test.cpp b/test/unittest/acquire_share_data_callback_proxy_test/acquire_share_data_callback_proxy_test.cpp index 958c3095ebe..a58b480b9fb 100644 --- a/test/unittest/acquire_share_data_callback_proxy_test/acquire_share_data_callback_proxy_test.cpp +++ b/test/unittest/acquire_share_data_callback_proxy_test/acquire_share_data_callback_proxy_test.cpp @@ -105,7 +105,8 @@ HWTEST_F(AcquireShareDataCallbackProxyTest, acquire_share_data_callback_proxy_op OHOS::sptr impl = nullptr; sptr acquireShareDataCallbackProxy = new AcquireShareDataCallbackProxy(impl); WantParams wantParam; - int32_t ret = acquireShareDataCallbackProxy->AcquireShareDataDone(1, wantParam); + int32_t ret = 0; + acquireShareDataCallbackProxy->AcquireShareDataDone(1, wantParam, ret); EXPECT_EQ(ret, INNER_ERR); } @@ -122,7 +123,8 @@ HWTEST_F(AcquireShareDataCallbackProxyTest, acquire_share_data_callback_proxy_op OHOS::sptr impl = new IRemoteObjectMocker(); sptr acquireShareDataCallbackProxy = new AcquireShareDataCallbackProxy(impl); WantParams wantParam; - int32_t ret = acquireShareDataCallbackProxy->AcquireShareDataDone(1, wantParam); + int32_t ret = 0; + acquireShareDataCallbackProxy->AcquireShareDataDone(1, wantParam, ret); EXPECT_EQ(ret, ERR_OK); } } // namespace AAFwk -- Gitee