From 9204d89b2a5b7e18284f7a0013c3578faffcf284 Mon Sep 17 00:00:00 2001 From: rookiiie Date: Tue, 24 Dec 2024 09:28:47 +0000 Subject: [PATCH 1/5] =?UTF-8?q?UIExtension=E7=AA=97=E5=8F=A3=E4=BE=A7?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E8=83=BD=E5=8A=9B=E5=AE=9E=E7=8E=B0=201.=20e?= =?UTF-8?q?xtension=5Fdata=5Fhandler=E9=80=9A=E7=94=A8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=AE=9E=E7=8E=B0=202.=20session=E5=92=8Cses?= =?UTF-8?q?sion=5Fstage=E7=9A=84proxy=E5=92=8Cstub=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rookiiie --- .../innerkits/wm/data_handler_interface.h | 2 +- window_scene/common/BUILD.gn | 2 + .../common/include/extension_data_handler.h | 13 +- .../common/src/extension_data_handler.cpp | 274 ++++++++++++++++++ .../include/zidl/session_stage_proxy.h | 4 + .../include/zidl/session_stage_stub.h | 3 + .../src/zidl/session_stage_proxy.cpp | 17 ++ .../container/src/zidl/session_stage_stub.cpp | 9 + .../session/host/include/zidl/session_proxy.h | 4 + .../session/host/include/zidl/session_stub.h | 2 + .../session/host/src/zidl/session_proxy.cpp | 18 ++ .../session/host/src/zidl/session_stub.cpp | 9 + window_scene/test/unittest/BUILD.gn | 2 + .../test/unittest/ui_extension/BUILD.gn | 34 +++ .../extension_data_handler_mock.h | 37 +++ .../extension_data_handler_test.cpp | 262 +++++++++++++++++ 16 files changed, 687 insertions(+), 5 deletions(-) create mode 100644 window_scene/common/src/extension_data_handler.cpp create mode 100644 window_scene/test/unittest/ui_extension/BUILD.gn create mode 100644 window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h create mode 100644 window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_test.cpp diff --git a/interfaces/innerkits/wm/data_handler_interface.h b/interfaces/innerkits/wm/data_handler_interface.h index 52c30ef4df..38b7093d24 100644 --- a/interfaces/innerkits/wm/data_handler_interface.h +++ b/interfaces/innerkits/wm/data_handler_interface.h @@ -47,7 +47,7 @@ enum class DataHandlerErr : uint32_t { }; using DataConsumeCallback = - std::function reply)>; + std::function& reply)>; /** * @class IDataHandler diff --git a/window_scene/common/BUILD.gn b/window_scene/common/BUILD.gn index 513787407c..92238cd98a 100644 --- a/window_scene/common/BUILD.gn +++ b/window_scene/common/BUILD.gn @@ -23,6 +23,7 @@ config("window_scene_common_public_config") { "${window_base_path}/utils/include", "${window_base_path}/interfaces/innerkits/wm", "${window_base_path}/interfaces/innerkits/dm", + "${window_base_path}/interfaces/innerkits/extension", ] } @@ -39,6 +40,7 @@ ohos_shared_library("window_scene_common") { "src/session_permission.cpp", "src/task_scheduler.cpp", "src/window_session_property.cpp", + "src/extension_data_handler.cpp", ] public_configs = [ ":window_scene_common_public_config" ] diff --git a/window_scene/common/include/extension_data_handler.h b/window_scene/common/include/extension_data_handler.h index c8c9ed8d3a..ac326640d4 100644 --- a/window_scene/common/include/extension_data_handler.h +++ b/window_scene/common/include/extension_data_handler.h @@ -43,21 +43,25 @@ using Task = std::function; class DataHandler : public IDataHandler { public: - explicit DataHandler(const std::shared_ptr& eventHandler) : eventHandler_(eventHandler) {} + DataHandler() = default; virtual ~DataHandler() = default; DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data, - AAFwk::Want& reply) override; + AAFwk::Want& reply) override; DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) override; DataHandlerErr SendDataAsync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) override; DataHandlerErr RegisterDataConsumer(SubSystemId dataId, DataConsumeCallback&& callback) override; void UnregisterDataConsumer(SubSystemId dataId) override; - DataHandlerErr NotifyDataConsumer(AAFwk::Want&& data, std::optional reply, - const DataTransferConfig& config); + void NotifyDataConsumer(MessageParcel& data, MessageParcel& reply); + void SetEventHandler(const std::shared_ptr& eventHandler); + void SetRemoteProxyObject(const sptr& remoteObject); protected: + DataHandlerErr NotifyDataConsumer(AAFwk::Want&& data, std::optional& reply, + const DataTransferConfig& config); virtual DataHandlerErr SendData(AAFwk::Want& data, AAFwk::Want& reply, const DataTransferConfig& config) = 0; DataHandlerErr PrepareData(MessageParcel& data, AAFwk::Want& toSend, const DataTransferConfig& config); + virtual bool WriteInterfaceToken(MessageParcel& data) = 0; DataHandlerErr ParseReply(MessageParcel& data, AAFwk::Want& reply, const DataTransferConfig& config); void PostAsyncTask(Task&& task, const std::string& name, int64_t delayTime); @@ -65,6 +69,7 @@ protected: mutable std::mutex mutex_; std::unordered_map consumers_; std::shared_ptr eventHandler_; + sptr remoteProxy_; }; } // namespace OHOS::Rosen::Extension diff --git a/window_scene/common/src/extension_data_handler.cpp b/window_scene/common/src/extension_data_handler.cpp new file mode 100644 index 0000000000..00a299702a --- /dev/null +++ b/window_scene/common/src/extension_data_handler.cpp @@ -0,0 +1,274 @@ +/* + * Copyright (c) 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 "common/include/extension_data_handler.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "window_manager_hilog.h" + +namespace OHOS::Rosen::Extension { + +bool DataTransferConfig::Marshalling(Parcel& parcel) const +{ + return parcel.WriteUint8(static_cast(subSystemId)) && parcel.WriteUint32(customId) && + parcel.WriteBool(needReply) && parcel.WriteBool(needSyncSend); +} + +DataTransferConfig* DataTransferConfig::Unmarshalling(Parcel& parcel) +{ + auto config = new (std::nothrow) DataTransferConfig(); + uint8_t subSystemIdValue = static_cast(SubSystemId::INVALID); + parcel.ReadUint8(subSystemIdValue); + if (subSystemIdValue >= static_cast(SubSystemId::INVALID)) { + delete config; + return nullptr; + } + if (!parcel.ReadUint32(config->customId) || !parcel.ReadBool(config->needReply) || + !parcel.ReadBool(config->needSyncSend)) { + delete config; + return nullptr; + } + config->subSystemId = static_cast(subSystemIdValue); + return config; +} + +std::string DataTransferConfig::ToString() const +{ + std::stringstream ss; + ss << "subSystemId: " << static_cast(subSystemId) << ", customId: " << customId + << ", needReply: " << needReply << ", needSyncSend: " << needSyncSend; + return ss.str(); +} + +DataHandlerErr DataHandler::RegisterDataConsumer(SubSystemId subSystemId, DataConsumeCallback&& callback) +{ + std::lock_guard lock(mutex_); + auto it = consumers_.find(subSystemId); + if (it != consumers_.end()) { + // A consumer already exists for this SubSystemId + TLOGE(WmsLogTag::WMS_UIEXT, "Consumer already exists for subSystemId: %{public}hhu", subSystemId); + return DataHandlerErr::DUPLICATE_REGISTRATION; + } + + consumers_[subSystemId] = std::move(callback); + return DataHandlerErr::OK; +} + +void DataHandler::UnregisterDataConsumer(SubSystemId subSystemId) +{ + std::lock_guard lock(mutex_); + consumers_.erase(subSystemId); + TLOGI(WmsLogTag::WMS_UIEXT, "Unregister consumer for subSystemId: %{public}hhu", subSystemId); +} + +DataHandlerErr DataHandler::PrepareData(MessageParcel& data, AAFwk::Want& toSend, const DataTransferConfig& config) +{ + if (!WriteInterfaceToken(data)) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::WRITE_PARCEL_ERROR; + } + + if (!data.WriteParcelable(&config)) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::WRITE_PARCEL_ERROR; + } + + if (!data.WriteParcelable(&toSend)) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::WRITE_PARCEL_ERROR; + } + return DataHandlerErr::OK; +} + +DataHandlerErr DataHandler::ParseReply(MessageParcel& replyParcel, AAFwk::Want& reply, const DataTransferConfig& config) +{ + if (!config.needReply) { + return DataHandlerErr::OK; + } + + uint32_t replayCode = 0; + if (!replyParcel.ReadUint32(replayCode)) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::READ_PARCEL_ERROR; + } + + if (config.needReply) { + auto response = replyParcel.ReadParcelable(); + if (!response) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::READ_PARCEL_ERROR; + } + reply = *response; + } + + return static_cast(replayCode); +} + +// process data from peer +void DataHandler::NotifyDataConsumer(MessageParcel& data, MessageParcel& replyParcel) +{ + auto config = data.ReadParcelable(); + if (config == nullptr) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed"); + replyParcel.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); + return; + } + + auto want = data.ReadParcelable(); + if (want == nullptr) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed"); + replyParcel.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); + return; + } + + std::optional reply; + if (config->needReply) { + reply = std::make_optional(); + } + + auto ret = NotifyDataConsumer(std::move(*want), reply, *config); + replyParcel.WriteUint32(static_cast(ret)); + if (config->needReply && reply) { + replyParcel.WriteParcelable(&(reply.value())); + } + + return; +} + +void DataHandler::SetEventHandler(const std::shared_ptr& eventHandler) +{ + eventHandler_ = eventHandler; +} + +void DataHandler::SetRemoteProxyObject(const sptr& remoteObject) +{ + if (!remoteObject || !remoteObject->IsProxyObject()) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, not proxy object"); + return; + } + + std::lock_guard lock(mutex_); + remoteProxy_ = remoteObject; +} + +DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data, + AAFwk::Want& reply) +{ + DataTransferConfig config; + config.needSyncSend = true; + config.needReply = true; + config.subSystemId = subSystemId; + config.customId = customId; + return SendData(data, reply, config); +} + +DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) +{ + DataTransferConfig config; + config.needSyncSend = true; + config.subSystemId = subSystemId; + config.customId = customId; + AAFwk::Want reply; + return SendData(data, reply, config); +} + +DataHandlerErr DataHandler::SendDataAsync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) +{ + DataTransferConfig config; + config.subSystemId = subSystemId; + config.customId = customId; + AAFwk::Want reply; + return SendData(data, reply, config); +} + +DataHandlerErr DataHandler::NotifyDataConsumer(AAFwk::Want&& data, std::optional& reply, + const DataTransferConfig& config) +{ + DataConsumeCallback callback; + { + std::lock_guard lock(mutex_); + auto it = consumers_.find(config.subSystemId); + if (it == consumers_.end()) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::NO_CONSUME_CALLBACK; + } + callback = it->second; + } + + if (!callback) { + TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + return DataHandlerErr::INVALID_CALLBACK; + } + + // sync mode + if (config.needSyncSend) { + auto ret = callback(config.subSystemId, config.customId, std::move(data), reply); + TLOGI(WmsLogTag::WMS_UIEXT, "subSystemId: %{public}hhu, customId: %{public}u, ret: %{public}d", + config.subSystemId, config.customId, ret); + return DataHandlerErr::OK; + } + + // async mode + auto task = [input = std::move(data), subSystemId = config.subSystemId, customId = config.customId, + func = callback]() mutable { + std::optional reply; + auto ret = func(subSystemId, customId, std::move(input), reply); + TLOGNI(WmsLogTag::WMS_UIEXT, "subSystemId: %{public}hhu, customId: %{public}u, ret: %{public}d", subSystemId, + customId, ret); + }; + + std::stringstream ss; + ss << "NotifyDataConsumer_" << static_cast(config.subSystemId) << "_" << config.customId; + PostAsyncTask(std::move(task), ss.str(), 0); + return DataHandlerErr::OK; +} + +void DataHandler::PostAsyncTask(Task&& task, const std::string& name, int64_t delayTime) +{ + if (!eventHandler_) { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "s:%s", name.c_str()); + task(); + return; + } + + auto runner = eventHandler_->GetEventRunner(); + if (!runner || runner->IsCurrentRunnerThread()) { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "s:%s", name.c_str()); + task(); + return; + } + + auto localTask = [task = std::move(task), name] { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "s:%s", name.c_str()); + task(); + }; + + auto ret = eventHandler_->PostTask(std::move(localTask), "uiext:" + name, delayTime, + AppExecFwk::EventQueue::Priority::IMMEDIATE); + if (!ret) { + TLOGE(WmsLogTag::WMS_UIEXT, "Post task failed, name: %{public}s", name.c_str()); + } +} +} // namespace OHOS::Rosen::Extension \ No newline at end of file diff --git a/window_scene/session/container/include/zidl/session_stage_proxy.h b/window_scene/session/container/include/zidl/session_stage_proxy.h index 3732aa171e..689b27b71f 100644 --- a/window_scene/session/container/include/zidl/session_stage_proxy.h +++ b/window_scene/session/container/include/zidl/session_stage_proxy.h @@ -73,7 +73,11 @@ public: WSError NotifyCompatibleModeEnableInPad(bool enable) override; void SetUniqueVirtualPixelRatio(bool useUniqueDensity, float virtualPixelRatio) override; void NotifySessionFullScreen(bool fullScreen) override; + + // UI Extension WSError NotifyDumpInfo(const std::vector& params, std::vector& info) override; + WSError SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply); + WSError SetSplitButtonVisible(bool isVisible) override; WSError SetEnableDragBySystem(bool dragEnable) override; WSError SetFullScreenWaterfallMode(bool isWaterfallMode) override; diff --git a/window_scene/session/container/include/zidl/session_stage_stub.h b/window_scene/session/container/include/zidl/session_stage_stub.h index 29152e8068..63a525c0d4 100644 --- a/window_scene/session/container/include/zidl/session_stage_stub.h +++ b/window_scene/session/container/include/zidl/session_stage_stub.h @@ -74,6 +74,9 @@ private: int HandleSetUniqueVirtualPixelRatio(MessageParcel& data, MessageParcel& reply); int HandleNotifySessionFullScreen(MessageParcel& data, MessageParcel& reply); int HandleNotifyDumpInfo(MessageParcel& data, MessageParcel& reply); + int HandleExtensionHostData(MessageParcel& data, MessageParcel& reply); + virtual void NotifyDataConsumer(MessageParcel& data, MessageParcel& reply) {} + int HandleSetSplitButtonVisible(MessageParcel& data, MessageParcel& reply); int HandleSetEnableDragBySystem(MessageParcel& data, MessageParcel& reply); int HandleSetFullScreenWaterfallMode(MessageParcel& data, MessageParcel& reply); diff --git a/window_scene/session/container/src/zidl/session_stage_proxy.cpp b/window_scene/session/container/src/zidl/session_stage_proxy.cpp index e4350f5c3b..f3301cfde5 100644 --- a/window_scene/session/container/src/zidl/session_stage_proxy.cpp +++ b/window_scene/session/container/src/zidl/session_stage_proxy.cpp @@ -1320,6 +1320,23 @@ WSError SessionStageProxy::NotifyDumpInfo(const std::vector& params return static_cast(ret); } +WSError SessionStageProxy::SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply) +{ + sptr remote = Remote(); + if (remote == nullptr) { + TLOGE(WmsLogTag::WMS_UIEXT, "remote is nullptr"); + return WSError::WS_ERROR_NULLPTR; + } + + auto ret = remote->SendRequest(static_cast(SessionStageInterfaceCode::TRANS_ID_SEND_EXTENSION_DATA), data, + reply, option); + if (ret != ERR_NONE) { + TLOGE(WmsLogTag::WMS_UIEXT, "SendRequest failed, ret: %{public}d", ret); + return WSError::WS_ERROR_IPC_FAILED; + } + return WSError::WS_OK; +} + WSError SessionStageProxy::SetSplitButtonVisible(bool isVisible) { MessageParcel data; diff --git a/window_scene/session/container/src/zidl/session_stage_stub.cpp b/window_scene/session/container/src/zidl/session_stage_stub.cpp index e40a886364..d1d9f281de 100644 --- a/window_scene/session/container/src/zidl/session_stage_stub.cpp +++ b/window_scene/session/container/src/zidl/session_stage_stub.cpp @@ -184,6 +184,8 @@ int SessionStageStub::OnRemoteRequest(uint32_t code, MessageParcel& data, Messag return HandleSetFullScreenWaterfallMode(data, reply); case static_cast(SessionStageInterfaceCode::TRANS_ID_SET_SUPPORT_ENTER_WATERFALL_MODE): return HandleSetSupportEnterWaterfallMode(data, reply); + case static_cast(SessionStageInterfaceCode::TRANS_ID_SEND_EXTENSION_DATA): + return HandleExtensionHostData(data, reply); default: WLOGFE("Failed to find function handler!"); return IPCObjectStub::OnRemoteRequest(code, data, reply, option); @@ -703,4 +705,11 @@ int SessionStageStub::HandleNotifyDumpInfo(MessageParcel& data, MessageParcel& r return ERR_NONE; } + +int SessionStageStub::HandleExtensionHostData(MessageParcel& data, MessageParcel& reply) +{ + TLOGD(WmsLogTag::WMS_UIEXT, "in"); + NotifyDataConsumer(data, reply); + return ERR_NONE; +} } // namespace OHOS::Rosen diff --git a/window_scene/session/host/include/zidl/session_proxy.h b/window_scene/session/host/include/zidl/session_proxy.h index 5a853ab1d9..a75c584e89 100644 --- a/window_scene/session/host/include/zidl/session_proxy.h +++ b/window_scene/session/host/include/zidl/session_proxy.h @@ -73,6 +73,9 @@ public: WSError RaiseAboveTarget(int32_t subWindowId) override; WSError RaiseAppMainWindowToTop() override; + /** + * UI Extension + */ WSError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) override; WSError TransferExtensionData(const AAFwk::WantParams& wantParams) override; WSError TransferAccessibilityEvent(const Accessibility::AccessibilityEventInfo& info, @@ -83,6 +86,7 @@ public: void NotifyExtensionTimeout(int32_t errorCode) override; void TriggerBindModalUIExtension() override; void NotifyExtensionEventAsync(uint32_t notifyEvent) override; + WSError SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply); void NotifyPiPWindowPrepareClose() override; WSError UpdatePiPRect(const Rect& rect, SizeChangeReason reason) override; diff --git a/window_scene/session/host/include/zidl/session_stub.h b/window_scene/session/host/include/zidl/session_stub.h index 882dd65e14..fc3edffc39 100644 --- a/window_scene/session/host/include/zidl/session_stub.h +++ b/window_scene/session/host/include/zidl/session_stub.h @@ -99,6 +99,8 @@ private: int HandleTransferAccessibilityEvent(MessageParcel& data, MessageParcel& reply); int HandleNotifyExtensionEventAsync(MessageParcel& data, MessageParcel& reply); int HandleNotifyExtensionDetachToDisplay(MessageParcel& data, MessageParcel& reply); + int HandleExtensionProviderData(MessageParcel& data, MessageParcel& reply); + virtual void NotifyDataConsumer(MessageParcel& data, MessageParcel& reply) {} // PictureInPicture int HandleNotifyPiPWindowPrepareClose(MessageParcel& data, MessageParcel& reply); diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index 808510d4b0..fa34d97c54 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -2032,6 +2032,24 @@ void SessionProxy::NotifyExtensionEventAsync(uint32_t notifyEvent) } } +WSError SessionProxy::SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply) +{ + sptr remote = Remote(); + if (remote == nullptr) { + TLOGE(WmsLogTag::WMS_UIEXT, "remote is null"); + return WSError::WS_ERROR_IPC_FAILED; + } + + auto ret = remote->SendRequest(static_cast(SessionInterfaceCode::TRANS_ID_SEND_EXTENSION_DATA), data, + reply, option); + if (ret != ERR_NONE) { + TLOGE(WmsLogTag::WMS_UIEXT, "SendRequest failed, ret code: %{public}u", ret); + return WSError::WS_ERROR_IPC_FAILED; + } + + return WSError::WS_OK; +} + WSError SessionProxy::RequestFocus(bool isFocused) { MessageParcel data; diff --git a/window_scene/session/host/src/zidl/session_stub.cpp b/window_scene/session/host/src/zidl/session_stub.cpp index 42bbd2f169..db753c0717 100644 --- a/window_scene/session/host/src/zidl/session_stub.cpp +++ b/window_scene/session/host/src/zidl/session_stub.cpp @@ -230,6 +230,8 @@ int SessionStub::ProcessRemoteRequest(uint32_t code, MessageParcel& data, Messag return HandleNotifyExtensionDetachToDisplay(data, reply); case static_cast(SessionInterfaceCode::TRANS_ID_SET_SUPPORT_WINDOW_MODES): return HandleSetSupportWindowModes(data, reply); + case static_cast(SessionInterfaceCode::TRANS_ID_SEND_EXTENSION_DATA): + return HandleExtensionProviderData(data, reply); default: WLOGFE("Failed to find function handler!"); return IPCObjectStub::OnRemoteRequest(code, data, reply, option); @@ -1281,6 +1283,13 @@ int SessionStub::HandleNotifyExtensionDetachToDisplay(MessageParcel& data, Messa return ERR_NONE; } +int SessionStub::HandleExtensionProviderData(MessageParcel& data, MessageParcel& reply) +{ + TLOGD(WmsLogTag::WMS_UIEXT, "in"); + NotifyDataConsumer(data, reply); + return ERR_NONE; +} + int SessionStub::HandleRequestFocus(MessageParcel& data, MessageParcel& reply) { TLOGD(WmsLogTag::WMS_FOCUS, "in"); diff --git a/window_scene/test/unittest/BUILD.gn b/window_scene/test/unittest/BUILD.gn index 29ce45aa97..93bb0dffe8 100644 --- a/window_scene/test/unittest/BUILD.gn +++ b/window_scene/test/unittest/BUILD.gn @@ -102,6 +102,7 @@ group("unittest") { ":ws_window_scene_config_test", ":ws_window_session_property_test", "window_pattern:window_pattern_snapshot_test", + "ui_extension:unittest" ] if (window_manager_use_sceneboard) { @@ -1669,6 +1670,7 @@ ohos_static_library("ws_unittest_common") { visibility = [ ":*", "window_pattern:*", + "ui_extension:*", ] testonly = true diff --git a/window_scene/test/unittest/ui_extension/BUILD.gn b/window_scene/test/unittest/ui_extension/BUILD.gn new file mode 100644 index 0000000000..28bea755b0 --- /dev/null +++ b/window_scene/test/unittest/ui_extension/BUILD.gn @@ -0,0 +1,34 @@ +# Copyright (c) 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. + +import("//build/test.gni") +import("../../../../windowmanager_aafwk.gni") + + +group("unittest") { + testonly = true + deps = [ + ":extension_data_handler_test" + ] +} + +module_out_path = "window_manager/window_scene/ui_extension" +ws_unittest_common = "../:ws_unittest_common" + +ohos_unittest("extension_data_handler_test") { + module_out_path = module_out_path + sources = [ "data_handler/extension_data_handler_test.cpp" ] + include_dirs = [ "${window_base_path}/window_scene/session/host/include" ] + deps = [ ws_unittest_common ] + external_deps = [ "c_utils:utils" ] +} diff --git a/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h new file mode 100644 index 0000000000..40daf8306f --- /dev/null +++ b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 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. + */ + +#ifndef OHOS_ROSEN_EXTENSION_DATA_HANDLE_MOCK_H +#define OHOS_ROSEN_EXTENSION_DATA_HANDLE_MOCK_H + +#include + +#include "common/include/extension_data_handler.h" + +namespace OHOS::Rosen::Extension { +class MockDataHandler : public DataHandler { +public: + MockDataHandler() = default; + ~MockDataHandler() override = default; + + MOCK_METHOD(DataHandlerErr, SendData, (AAFwk::Want & data, AAFwk::Want& reply, const DataTransferConfig& config), + (override)); + MOCK_METHOD(bool, WriteInterfaceToken, (MessageParcel & data), (override)); + + // Helper methods to expose protected methods for testing + using DataHandler::NotifyDataConsumer; +}; +} // namespace OHOS::Rosen::Extension +#endif // OHOS_ROSEN_EXTENSION_DATA_HANDLE_MOCK_H diff --git a/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_test.cpp b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_test.cpp new file mode 100644 index 0000000000..fe9b6427cd --- /dev/null +++ b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_test.cpp @@ -0,0 +1,262 @@ +/* + * Copyright (c) 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 "common/include/extension_data_handler.h" + +#include +#include +#include + +#include "extension_data_handler_mock.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Rosen::Extension { +class ExtensionDataHandlerTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: DataTransferConfigMarshalling01 + * @tc.desc: Test DataTransferConfig Marshalling with valid data + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, DataTransferConfigMarshalling01, Function | SmallTest | Level2) +{ + DataTransferConfig config; + config.subSystemId = SubSystemId::WM_UIEXT; + config.customId = 123; + config.needReply = true; + config.needSyncSend = false; + + MessageParcel parcel; + ASSERT_TRUE(config.Marshalling(parcel)); +} + +/** + * @tc.name: DataTransferConfigUnmarshalling01 + * @tc.desc: Test DataTransferConfig Unmarshalling with valid data + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, DataTransferConfigUnmarshalling01, Function | SmallTest | Level2) +{ + MessageParcel parcel; + parcel.WriteUint8(static_cast(SubSystemId::WM_UIEXT)); + parcel.WriteUint32(123); + parcel.WriteBool(true); + parcel.WriteBool(false); + + auto config = DataTransferConfig::Unmarshalling(parcel); + ASSERT_NE(nullptr, config); + ASSERT_EQ(SubSystemId::WM_UIEXT, config->subSystemId); + ASSERT_EQ(123u, config->customId); + ASSERT_TRUE(config->needReply); + ASSERT_FALSE(config->needSyncSend); + delete config; +} + +/** + * @tc.name: DataTransferConfigUnmarshalling02 + * @tc.desc: Test DataTransferConfig Unmarshalling with invalid subSystemId + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, DataTransferConfigUnmarshalling02, Function | SmallTest | Level2) +{ + MessageParcel parcel; + parcel.WriteUint8(static_cast(SubSystemId::INVALID)); + parcel.WriteUint32(123); + parcel.WriteBool(true); + parcel.WriteBool(false); + + auto config = DataTransferConfig::Unmarshalling(parcel); + ASSERT_EQ(nullptr, config); +} + +/** + * @tc.name: RegisterDataConsumer01 + * @tc.desc: Test RegisterDataConsumer with valid callback + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, RegisterDataConsumer01, Function | SmallTest | Level2) +{ + MockDataHandler handler; + auto callback = [](SubSystemId id, uint32_t customId, AAFwk::Want&& data, + std::optional& reply) -> int32_t { + return 0; + }; + + auto ret = handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback)); + ASSERT_EQ(DataHandlerErr::OK, ret); +} + +/** + * @tc.name: RegisterDataConsumer02 + * @tc.desc: Test RegisterDataConsumer with duplicate registration + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, RegisterDataConsumer02, Function | SmallTest | Level2) +{ + MockDataHandler handler; + auto callback = [](SubSystemId id, uint32_t customId, AAFwk::Want&& data, + std::optional& reply) -> int32_t { + return 0; + }; + auto callback1 = callback; + auto ret = handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback)); + ASSERT_EQ(ret, DataHandlerErr::OK); + + ret = handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback1)); + ASSERT_EQ(ret, DataHandlerErr::DUPLICATE_REGISTRATION); +} + +/** + * @tc.name: UnregisterDataConsumer01 + * @tc.desc: Test UnregisterDataConsumer with registered consumer + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, UnregisterDataConsumer01, Function | SmallTest | Level2) +{ + MockDataHandler handler; + auto callback = [](SubSystemId id, uint32_t customId, AAFwk::Want&& data, + std::optional& reply) -> int32_t { + return 0; + }; + auto callback1 = callback; + + ASSERT_EQ(DataHandlerErr::OK, handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback))); + handler.UnregisterDataConsumer(SubSystemId::WM_UIEXT); + + // Verify unregistration by trying to register again + ASSERT_EQ(DataHandlerErr::OK, handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback1))); +} + +/** + * @tc.name: SendDataTest01 + * @tc.desc: Test SendDataSync with mocked behavior + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, SendDataTest01, Function | SmallTest | Level2) +{ + MockDataHandler handler; + AAFwk::Want data; + AAFwk::Want reply; + + // Set up expectations + EXPECT_CALL(handler, SendData(testing::_, testing::_, testing::_)).WillOnce(testing::Return(DataHandlerErr::OK)); + + // Test SendDataSync + ASSERT_EQ(DataHandlerErr::OK, handler.SendDataSync(SubSystemId::WM_UIEXT, 123, data, reply)); +} + +/** + * @tc.name: NotifyDataConsumer01 + * @tc.desc: Test NotifyDataConsumer with sync mode and valid callback + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, NotifyDataConsumer01, Function | SmallTest | Level2) +{ + MockDataHandler handler; + bool callbackCalled = false; + + auto callback = [&callbackCalled](SubSystemId id, uint32_t customId, AAFwk::Want&& data, + std::optional& reply) -> int32_t { + callbackCalled = true; + EXPECT_EQ(SubSystemId::WM_UIEXT, id); + EXPECT_EQ(123u, customId); + if (reply.has_value()) { + reply->SetParam("test", 1); + } + return 0; + }; + + // Register consumer + auto ret = handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback)); + ASSERT_EQ(DataHandlerErr::OK, ret); + + // Prepare test data + AAFwk::Want data; + std::optional reply = std::make_optional(); + DataTransferConfig config; + config.needSyncSend = true; + config.needReply = true; + config.subSystemId = SubSystemId::WM_UIEXT; + config.customId = 123; + + // Test NotifyDataConsumer + ret = handler.NotifyDataConsumer(std::move(data), reply, config); + ASSERT_EQ(DataHandlerErr::OK, ret); + ASSERT_TRUE(callbackCalled); + ASSERT_TRUE(reply.has_value()); + ASSERT_EQ(1, reply->GetIntParam("test", 0)); +} + +/** + * @tc.name: NotifyDataConsumer02 + * @tc.desc: Test NotifyDataConsumer with async mode + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, NotifyDataConsumer02, Function | SmallTest | Level2) +{ + MockDataHandler handler; + bool callbackCalled = false; + + auto callback = [&callbackCalled](SubSystemId id, uint32_t customId, AAFwk::Want&& data, + std::optional& reply) -> int32_t { + callbackCalled = true; + EXPECT_EQ(SubSystemId::WM_UIEXT, id); + EXPECT_EQ(123u, customId); + return 0; + }; + + // Register consumer + ASSERT_EQ(DataHandlerErr::OK, handler.RegisterDataConsumer(SubSystemId::WM_UIEXT, std::move(callback))); + + // Prepare test data + AAFwk::Want data; + std::optional reply; + DataTransferConfig config; + config.needSyncSend = false; + config.subSystemId = SubSystemId::WM_UIEXT; + config.customId = 123; + + // Test NotifyDataConsumer + auto ret = handler.NotifyDataConsumer(std::move(data), reply, config); + ASSERT_EQ(DataHandlerErr::OK, ret); +} + +/** + * @tc.name: NotifyDataConsumer03 + * @tc.desc: Test NotifyDataConsumer with unregistered consumer + * @tc.type: FUNC + */ +HWTEST_F(ExtensionDataHandlerTest, NotifyDataConsumer03, Function | SmallTest | Level2) +{ + MockDataHandler handler; + AAFwk::Want data; + std::optional reply; + DataTransferConfig config; + config.subSystemId = SubSystemId::WM_UIEXT; + config.customId = 123; + + // Test NotifyDataConsumer without registering consumer + auto ret = handler.NotifyDataConsumer(std::move(data), reply, config); + ASSERT_EQ(DataHandlerErr::NO_CONSUME_CALLBACK, ret); +} +} // namespace OHOS::Rosen::Extension -- Gitee From 39646702d94b54662253881bdfe1227a43f1a3f2 Mon Sep 17 00:00:00 2001 From: rookiiie Date: Thu, 26 Dec 2024 05:47:24 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rookiiie --- window_scene/common/BUILD.gn | 2 +- .../common/src/extension_data_handler.cpp | 44 ++++++++++--------- .../session/host/include/zidl/session_proxy.h | 2 +- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/window_scene/common/BUILD.gn b/window_scene/common/BUILD.gn index 92238cd98a..2b04ddc9af 100644 --- a/window_scene/common/BUILD.gn +++ b/window_scene/common/BUILD.gn @@ -37,10 +37,10 @@ ohos_shared_library("window_scene_common") { debug = false } sources = [ + "src/extension_data_handler.cpp", "src/session_permission.cpp", "src/task_scheduler.cpp", "src/window_session_property.cpp", - "src/extension_data_handler.cpp", ] public_configs = [ ":window_scene_common_public_config" ] diff --git a/window_scene/common/src/extension_data_handler.cpp b/window_scene/common/src/extension_data_handler.cpp index 00a299702a..2d9aa268f8 100644 --- a/window_scene/common/src/extension_data_handler.cpp +++ b/window_scene/common/src/extension_data_handler.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include "window_manager_hilog.h" @@ -38,10 +39,9 @@ bool DataTransferConfig::Marshalling(Parcel& parcel) const DataTransferConfig* DataTransferConfig::Unmarshalling(Parcel& parcel) { - auto config = new (std::nothrow) DataTransferConfig(); + auto config = new DataTransferConfig(); uint8_t subSystemIdValue = static_cast(SubSystemId::INVALID); - parcel.ReadUint8(subSystemIdValue); - if (subSystemIdValue >= static_cast(SubSystemId::INVALID)) { + if (!parcel.ReadUint8(subSystemIdValue) || subSystemIdValue >= static_cast(SubSystemId::INVALID)) { delete config; return nullptr; } @@ -56,10 +56,15 @@ DataTransferConfig* DataTransferConfig::Unmarshalling(Parcel& parcel) std::string DataTransferConfig::ToString() const { - std::stringstream ss; - ss << "subSystemId: " << static_cast(subSystemId) << ", customId: " << customId - << ", needReply: " << needReply << ", needSyncSend: " << needSyncSend; - return ss.str(); + std::string str; + constexpr int BUFFER_SIZE = 128; + char buffer[BUFFER_SIZE] = { 0 }; + if (snprintf_s(buffer, sizeof(buffer), sizeof(buffer) - 1, + "subSystemId: %hu, customId: %u, needReply: %d, needSyncSend: %d", + static_cast(subSystemId), customId, needReply, needSyncSend) > 0) { + str.append(buffer); + } + return str; } DataHandlerErr DataHandler::RegisterDataConsumer(SubSystemId subSystemId, DataConsumeCallback&& callback) @@ -108,8 +113,8 @@ DataHandlerErr DataHandler::ParseReply(MessageParcel& replyParcel, AAFwk::Want& return DataHandlerErr::OK; } - uint32_t replayCode = 0; - if (!replyParcel.ReadUint32(replayCode)) { + uint32_t replyCode = 0; + if (!replyParcel.ReadUint32(replyCode)) { TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::READ_PARCEL_ERROR; } @@ -123,7 +128,7 @@ DataHandlerErr DataHandler::ParseReply(MessageParcel& replyParcel, AAFwk::Want& reply = *response; } - return static_cast(replayCode); + return static_cast(replyCode); } // process data from peer @@ -153,8 +158,6 @@ void DataHandler::NotifyDataConsumer(MessageParcel& data, MessageParcel& replyPa if (config->needReply && reply) { replyParcel.WriteParcelable(&(reply.value())); } - - return; } void DataHandler::SetEventHandler(const std::shared_ptr& eventHandler) @@ -232,36 +235,35 @@ DataHandlerErr DataHandler::NotifyDataConsumer(AAFwk::Want&& data, std::optional // async mode auto task = [input = std::move(data), subSystemId = config.subSystemId, customId = config.customId, - func = callback]() mutable { + func = std::move(callback)]() mutable { std::optional reply; auto ret = func(subSystemId, customId, std::move(input), reply); TLOGNI(WmsLogTag::WMS_UIEXT, "subSystemId: %{public}hhu, customId: %{public}u, ret: %{public}d", subSystemId, customId, ret); }; - std::stringstream ss; - ss << "NotifyDataConsumer_" << static_cast(config.subSystemId) << "_" << config.customId; - PostAsyncTask(std::move(task), ss.str(), 0); + std::stringstream oss; + oss << "NotifyDataConsumer_" << static_cast(config.subSystemId) << "_" << config.customId; + PostAsyncTask(std::move(task), oss.str(), 0); return DataHandlerErr::OK; } void DataHandler::PostAsyncTask(Task&& task, const std::string& name, int64_t delayTime) { if (!eventHandler_) { - HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "s:%s", name.c_str()); + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "uiext:%s", name.c_str()); task(); return; } - auto runner = eventHandler_->GetEventRunner(); - if (!runner || runner->IsCurrentRunnerThread()) { - HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "s:%s", name.c_str()); + if (auto runner = eventHandler_->GetEventRunner(); !runner || runner->IsCurrentRunnerThread()) { + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "uiext:%s", name.c_str()); task(); return; } auto localTask = [task = std::move(task), name] { - HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "s:%s", name.c_str()); + HITRACE_METER_FMT(HITRACE_TAG_WINDOW_MANAGER, "uiext:%s", name.c_str()); task(); }; diff --git a/window_scene/session/host/include/zidl/session_proxy.h b/window_scene/session/host/include/zidl/session_proxy.h index a75c584e89..10a0926466 100644 --- a/window_scene/session/host/include/zidl/session_proxy.h +++ b/window_scene/session/host/include/zidl/session_proxy.h @@ -73,7 +73,7 @@ public: WSError RaiseAboveTarget(int32_t subWindowId) override; WSError RaiseAppMainWindowToTop() override; - /** + /* * UI Extension */ WSError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) override; -- Gitee From b121026b849dfbb9e04ff23e34b22f413f3c7c36 Mon Sep 17 00:00:00 2001 From: rookiiie Date: Thu, 26 Dec 2024 05:47:24 +0000 Subject: [PATCH 3/5] =?UTF-8?q?=E6=A3=80=E8=A7=86=E6=84=8F=E8=A7=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rookiiie --- window_scene/test/unittest/BUILD.gn | 4 ++-- window_scene/test/unittest/ui_extension/BUILD.gn | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/window_scene/test/unittest/BUILD.gn b/window_scene/test/unittest/BUILD.gn index 93bb0dffe8..3e0e9d09fc 100644 --- a/window_scene/test/unittest/BUILD.gn +++ b/window_scene/test/unittest/BUILD.gn @@ -101,8 +101,8 @@ group("unittest") { ":ws_window_event_channel_test", ":ws_window_scene_config_test", ":ws_window_session_property_test", + "ui_extension:unittest", "window_pattern:window_pattern_snapshot_test", - "ui_extension:unittest" ] if (window_manager_use_sceneboard) { @@ -1669,8 +1669,8 @@ config("ws_unittest_common_public_config") { ohos_static_library("ws_unittest_common") { visibility = [ ":*", - "window_pattern:*", "ui_extension:*", + "window_pattern:*", ] testonly = true diff --git a/window_scene/test/unittest/ui_extension/BUILD.gn b/window_scene/test/unittest/ui_extension/BUILD.gn index 28bea755b0..0a2943989e 100644 --- a/window_scene/test/unittest/ui_extension/BUILD.gn +++ b/window_scene/test/unittest/ui_extension/BUILD.gn @@ -14,12 +14,9 @@ import("//build/test.gni") import("../../../../windowmanager_aafwk.gni") - group("unittest") { testonly = true - deps = [ - ":extension_data_handler_test" - ] + deps = [ ":extension_data_handler_test" ] } module_out_path = "window_manager/window_scene/ui_extension" -- Gitee From d2b280ed9a2146bfc5bfbd3c5d066bcfe7718233 Mon Sep 17 00:00:00 2001 From: rookiiie Date: Fri, 27 Dec 2024 12:01:33 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1review=E6=84=8F?= =?UTF-8?q?=E8=A7=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rookiiie --- .../common/include/extension_data_handler.h | 2 +- .../common/src/extension_data_handler.cpp | 65 +++++++++---------- .../include/zidl/session_stage_proxy.h | 4 +- .../include/zidl/session_stage_stub.h | 3 +- .../src/zidl/session_stage_proxy.cpp | 2 +- .../container/src/zidl/session_stage_stub.cpp | 2 +- .../session/host/include/zidl/session_proxy.h | 4 +- .../session/host/include/zidl/session_stub.h | 2 +- .../session/host/src/zidl/session_proxy.cpp | 2 +- .../session/host/src/zidl/session_stub.cpp | 2 +- .../extension_data_handler_mock.h | 4 +- 11 files changed, 43 insertions(+), 49 deletions(-) diff --git a/window_scene/common/include/extension_data_handler.h b/window_scene/common/include/extension_data_handler.h index ac326640d4..1d05a6334a 100644 --- a/window_scene/common/include/extension_data_handler.h +++ b/window_scene/common/include/extension_data_handler.h @@ -60,7 +60,7 @@ protected: DataHandlerErr NotifyDataConsumer(AAFwk::Want&& data, std::optional& reply, const DataTransferConfig& config); virtual DataHandlerErr SendData(AAFwk::Want& data, AAFwk::Want& reply, const DataTransferConfig& config) = 0; - DataHandlerErr PrepareData(MessageParcel& data, AAFwk::Want& toSend, const DataTransferConfig& config); + DataHandlerErr PrepareSendData(MessageParcel& data, const DataTransferConfig& config, const AAFwk::Want& toSend); virtual bool WriteInterfaceToken(MessageParcel& data) = 0; DataHandlerErr ParseReply(MessageParcel& data, AAFwk::Want& reply, const DataTransferConfig& config); void PostAsyncTask(Task&& task, const std::string& name, int64_t delayTime); diff --git a/window_scene/common/src/extension_data_handler.cpp b/window_scene/common/src/extension_data_handler.cpp index 2d9aa268f8..d4bc90d055 100644 --- a/window_scene/common/src/extension_data_handler.cpp +++ b/window_scene/common/src/extension_data_handler.cpp @@ -15,11 +15,7 @@ #include "common/include/extension_data_handler.h" -#include -#include #include -#include -#include #include #include @@ -60,8 +56,8 @@ std::string DataTransferConfig::ToString() const constexpr int BUFFER_SIZE = 128; char buffer[BUFFER_SIZE] = { 0 }; if (snprintf_s(buffer, sizeof(buffer), sizeof(buffer) - 1, - "subSystemId: %hu, customId: %u, needReply: %d, needSyncSend: %d", - static_cast(subSystemId), customId, needReply, needSyncSend) > 0) { + "subSystemId: %hhu, customId: %u, needReply: %d, needSyncSend: %d", subSystemId, customId, needReply, + needSyncSend) > 0) { str.append(buffer); } return str; @@ -70,14 +66,12 @@ std::string DataTransferConfig::ToString() const DataHandlerErr DataHandler::RegisterDataConsumer(SubSystemId subSystemId, DataConsumeCallback&& callback) { std::lock_guard lock(mutex_); - auto it = consumers_.find(subSystemId); - if (it != consumers_.end()) { - // A consumer already exists for this SubSystemId + if (consumers_.find(subSystemId) != consumers_.end()) { + // A consumer already exists for this subSystemId TLOGE(WmsLogTag::WMS_UIEXT, "Consumer already exists for subSystemId: %{public}hhu", subSystemId); return DataHandlerErr::DUPLICATE_REGISTRATION; } - - consumers_[subSystemId] = std::move(callback); + consumers_.emplace(subSystemId, std::move(callback)); return DataHandlerErr::OK; } @@ -88,20 +82,21 @@ void DataHandler::UnregisterDataConsumer(SubSystemId subSystemId) TLOGI(WmsLogTag::WMS_UIEXT, "Unregister consumer for subSystemId: %{public}hhu", subSystemId); } -DataHandlerErr DataHandler::PrepareData(MessageParcel& data, AAFwk::Want& toSend, const DataTransferConfig& config) +DataHandlerErr DataHandler::PrepareSendData(MessageParcel& data, const DataTransferConfig& config, + const AAFwk::Want& toSend) { if (!WriteInterfaceToken(data)) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "write interface token failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::WRITE_PARCEL_ERROR; } if (!data.WriteParcelable(&config)) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "write config failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::WRITE_PARCEL_ERROR; } if (!data.WriteParcelable(&toSend)) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "write toSend failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::WRITE_PARCEL_ERROR; } return DataHandlerErr::OK; @@ -115,14 +110,14 @@ DataHandlerErr DataHandler::ParseReply(MessageParcel& replyParcel, AAFwk::Want& uint32_t replyCode = 0; if (!replyParcel.ReadUint32(replyCode)) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "read replyCode failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::READ_PARCEL_ERROR; } if (config.needReply) { - auto response = replyParcel.ReadParcelable(); + sptr response = replyParcel.ReadParcelable(); if (!response) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "read response failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::READ_PARCEL_ERROR; } reply = *response; @@ -132,31 +127,31 @@ DataHandlerErr DataHandler::ParseReply(MessageParcel& replyParcel, AAFwk::Want& } // process data from peer -void DataHandler::NotifyDataConsumer(MessageParcel& data, MessageParcel& replyParcel) +void DataHandler::NotifyDataConsumer(MessageParcel& data, MessageParcel& reply) { - auto config = data.ReadParcelable(); + sptr config = data.ReadParcelable(); if (config == nullptr) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed"); - replyParcel.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); + TLOGE(WmsLogTag::WMS_UIEXT, "read config failed"); + reply.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); return; } - auto want = data.ReadParcelable(); - if (want == nullptr) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed"); - replyParcel.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); + sptr sendWant = data.ReadParcelable(); + if (sendWant == nullptr) { + TLOGE(WmsLogTag::WMS_UIEXT, "read want failed"); + reply.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); return; } - std::optional reply; + std::optional replyWant; if (config->needReply) { - reply = std::make_optional(); + replyWant = std::make_optional(); } - auto ret = NotifyDataConsumer(std::move(*want), reply, *config); - replyParcel.WriteUint32(static_cast(ret)); - if (config->needReply && reply) { - replyParcel.WriteParcelable(&(reply.value())); + auto ret = NotifyDataConsumer(std::move(*sendWant), replyWant, *config); + reply.WriteUint32(static_cast(ret)); + if (config->needReply) { + reply.WriteParcelable(&(replyWant.value())); } } @@ -214,14 +209,14 @@ DataHandlerErr DataHandler::NotifyDataConsumer(AAFwk::Want&& data, std::optional std::lock_guard lock(mutex_); auto it = consumers_.find(config.subSystemId); if (it == consumers_.end()) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "not found, %{public}s", config.ToString().c_str()); return DataHandlerErr::NO_CONSUME_CALLBACK; } callback = it->second; } if (!callback) { - TLOGE(WmsLogTag::WMS_UIEXT, "failed, %{public}s", config.ToString().c_str()); + TLOGE(WmsLogTag::WMS_UIEXT, "not callable, %{public}s", config.ToString().c_str()); return DataHandlerErr::INVALID_CALLBACK; } @@ -242,7 +237,7 @@ DataHandlerErr DataHandler::NotifyDataConsumer(AAFwk::Want&& data, std::optional customId, ret); }; - std::stringstream oss; + std::ostringstream oss; oss << "NotifyDataConsumer_" << static_cast(config.subSystemId) << "_" << config.customId; PostAsyncTask(std::move(task), oss.str(), 0); return DataHandlerErr::OK; diff --git a/window_scene/session/container/include/zidl/session_stage_proxy.h b/window_scene/session/container/include/zidl/session_stage_proxy.h index 689b27b71f..61935f2952 100644 --- a/window_scene/session/container/include/zidl/session_stage_proxy.h +++ b/window_scene/session/container/include/zidl/session_stage_proxy.h @@ -74,9 +74,9 @@ public: void SetUniqueVirtualPixelRatio(bool useUniqueDensity, float virtualPixelRatio) override; void NotifySessionFullScreen(bool fullScreen) override; - // UI Extension + // UIExtension WSError NotifyDumpInfo(const std::vector& params, std::vector& info) override; - WSError SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply); + WSError SendExtensionData(MessageParcel& data, MessageParcel& reply, MessageOption& option); WSError SetSplitButtonVisible(bool isVisible) override; WSError SetEnableDragBySystem(bool dragEnable) override; diff --git a/window_scene/session/container/include/zidl/session_stage_stub.h b/window_scene/session/container/include/zidl/session_stage_stub.h index 63a525c0d4..9c2f766b65 100644 --- a/window_scene/session/container/include/zidl/session_stage_stub.h +++ b/window_scene/session/container/include/zidl/session_stage_stub.h @@ -75,8 +75,7 @@ private: int HandleNotifySessionFullScreen(MessageParcel& data, MessageParcel& reply); int HandleNotifyDumpInfo(MessageParcel& data, MessageParcel& reply); int HandleExtensionHostData(MessageParcel& data, MessageParcel& reply); - virtual void NotifyDataConsumer(MessageParcel& data, MessageParcel& reply) {} - + virtual void NotifyExtensionDataConsumer(MessageParcel& data, MessageParcel& reply) {} int HandleSetSplitButtonVisible(MessageParcel& data, MessageParcel& reply); int HandleSetEnableDragBySystem(MessageParcel& data, MessageParcel& reply); int HandleSetFullScreenWaterfallMode(MessageParcel& data, MessageParcel& reply); diff --git a/window_scene/session/container/src/zidl/session_stage_proxy.cpp b/window_scene/session/container/src/zidl/session_stage_proxy.cpp index f3301cfde5..97fbaf28a4 100644 --- a/window_scene/session/container/src/zidl/session_stage_proxy.cpp +++ b/window_scene/session/container/src/zidl/session_stage_proxy.cpp @@ -1320,7 +1320,7 @@ WSError SessionStageProxy::NotifyDumpInfo(const std::vector& params return static_cast(ret); } -WSError SessionStageProxy::SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply) +WSError SessionStageProxy::SendExtensionData(MessageParcel& data, MessageParcel& reply, MessageOption& option) { sptr remote = Remote(); if (remote == nullptr) { diff --git a/window_scene/session/container/src/zidl/session_stage_stub.cpp b/window_scene/session/container/src/zidl/session_stage_stub.cpp index d1d9f281de..d3f27e94d0 100644 --- a/window_scene/session/container/src/zidl/session_stage_stub.cpp +++ b/window_scene/session/container/src/zidl/session_stage_stub.cpp @@ -709,7 +709,7 @@ int SessionStageStub::HandleNotifyDumpInfo(MessageParcel& data, MessageParcel& r int SessionStageStub::HandleExtensionHostData(MessageParcel& data, MessageParcel& reply) { TLOGD(WmsLogTag::WMS_UIEXT, "in"); - NotifyDataConsumer(data, reply); + NotifyExtensionDataConsumer(data, reply); return ERR_NONE; } } // namespace OHOS::Rosen diff --git a/window_scene/session/host/include/zidl/session_proxy.h b/window_scene/session/host/include/zidl/session_proxy.h index 10a0926466..cc2f2c62b6 100644 --- a/window_scene/session/host/include/zidl/session_proxy.h +++ b/window_scene/session/host/include/zidl/session_proxy.h @@ -74,7 +74,7 @@ public: WSError RaiseAppMainWindowToTop() override; /* - * UI Extension + * UIExtension */ WSError TransferAbilityResult(uint32_t resultCode, const AAFwk::Want& want) override; WSError TransferExtensionData(const AAFwk::WantParams& wantParams) override; @@ -86,7 +86,7 @@ public: void NotifyExtensionTimeout(int32_t errorCode) override; void TriggerBindModalUIExtension() override; void NotifyExtensionEventAsync(uint32_t notifyEvent) override; - WSError SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply); + WSError SendExtensionData(MessageParcel& data, MessageParcel& reply, MessageOption& option); void NotifyPiPWindowPrepareClose() override; WSError UpdatePiPRect(const Rect& rect, SizeChangeReason reason) override; diff --git a/window_scene/session/host/include/zidl/session_stub.h b/window_scene/session/host/include/zidl/session_stub.h index fc3edffc39..d65aabcf60 100644 --- a/window_scene/session/host/include/zidl/session_stub.h +++ b/window_scene/session/host/include/zidl/session_stub.h @@ -100,7 +100,7 @@ private: int HandleNotifyExtensionEventAsync(MessageParcel& data, MessageParcel& reply); int HandleNotifyExtensionDetachToDisplay(MessageParcel& data, MessageParcel& reply); int HandleExtensionProviderData(MessageParcel& data, MessageParcel& reply); - virtual void NotifyDataConsumer(MessageParcel& data, MessageParcel& reply) {} + virtual void NotifyExtensionDataConsumer(MessageParcel& data, MessageParcel& reply) {} // PictureInPicture int HandleNotifyPiPWindowPrepareClose(MessageParcel& data, MessageParcel& reply); diff --git a/window_scene/session/host/src/zidl/session_proxy.cpp b/window_scene/session/host/src/zidl/session_proxy.cpp index fa34d97c54..ecb3bab9be 100644 --- a/window_scene/session/host/src/zidl/session_proxy.cpp +++ b/window_scene/session/host/src/zidl/session_proxy.cpp @@ -2032,7 +2032,7 @@ void SessionProxy::NotifyExtensionEventAsync(uint32_t notifyEvent) } } -WSError SessionProxy::SendExtensionData(MessageParcel& data, MessageOption& option, MessageParcel& reply) +WSError SessionProxy::SendExtensionData(MessageParcel& data, MessageParcel& reply, MessageOption& option) { sptr remote = Remote(); if (remote == nullptr) { diff --git a/window_scene/session/host/src/zidl/session_stub.cpp b/window_scene/session/host/src/zidl/session_stub.cpp index db753c0717..46c8a4aedf 100644 --- a/window_scene/session/host/src/zidl/session_stub.cpp +++ b/window_scene/session/host/src/zidl/session_stub.cpp @@ -1286,7 +1286,7 @@ int SessionStub::HandleNotifyExtensionDetachToDisplay(MessageParcel& data, Messa int SessionStub::HandleExtensionProviderData(MessageParcel& data, MessageParcel& reply) { TLOGD(WmsLogTag::WMS_UIEXT, "in"); - NotifyDataConsumer(data, reply); + NotifyExtensionDataConsumer(data, reply); return ERR_NONE; } diff --git a/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h index 40daf8306f..9683fe813a 100644 --- a/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h +++ b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h @@ -26,9 +26,9 @@ public: MockDataHandler() = default; ~MockDataHandler() override = default; - MOCK_METHOD(DataHandlerErr, SendData, (AAFwk::Want & data, AAFwk::Want& reply, const DataTransferConfig& config), + MOCK_METHOD(DataHandlerErr, SendData, (AAFwk::Want& data, AAFwk::Want& reply, const DataTransferConfig& config), (override)); - MOCK_METHOD(bool, WriteInterfaceToken, (MessageParcel & data), (override)); + MOCK_METHOD(bool, WriteInterfaceToken, (MessageParcel& data), (override)); // Helper methods to expose protected methods for testing using DataHandler::NotifyDataConsumer; -- Gitee From 0ab9742097af58a125c03de5a1845e1215a07e70 Mon Sep 17 00:00:00 2001 From: rookiiie Date: Sat, 28 Dec 2024 19:25:04 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1review=E6=84=8F?= =?UTF-8?q?=E8=A7=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rookiiie --- .../innerkits/wm/data_handler_interface.h | 14 ++++++------- .../common/include/extension_data_handler.h | 17 ++++++++-------- .../common/src/extension_data_handler.cpp | 20 +++++++++---------- .../extension_data_handler_mock.h | 4 ++-- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/interfaces/innerkits/wm/data_handler_interface.h b/interfaces/innerkits/wm/data_handler_interface.h index 38b7093d24..57d585df3d 100644 --- a/interfaces/innerkits/wm/data_handler_interface.h +++ b/interfaces/innerkits/wm/data_handler_interface.h @@ -67,32 +67,32 @@ public: * * @param subSystemId The identifier of the target subsystem. * @param customId A custom identifier for the data being sent. - * @param data The Want object containing the data to be sent. + * @param toSend The Want object containing the data to be sent. * @param reply A reference to a Want object that will be filled with the reply data. * @return DataHandlerErr::OK if the data was successfully sent and a reply was received, other errcode otherwise. */ - virtual DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data, - AAFwk::Want& reply) = 0; + virtual DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend, + AAFwk::Want& reply) = 0; /** * @brief Sends data synchronously to a specified subsystem without reply. * * @param subSystemId The identifier of the target subsystem. * @param customId A custom identifier for the data being sent. - * @param data The Want object containing the data to be sent. + * @param toSend The Want object containing the data to be sent. * @return DataHandlerErr::OK if the data was successfully sent, other errcode otherwise. */ - virtual DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) = 0; + virtual DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend) = 0; /** * @brief Sends data asynchronously to a specified subsystem without reply. * * @param subSystemId The identifier of the target subsystem. * @param customId A custom identifier for the data being sent. - * @param data The Want object containing the data to be sent. + * @param toSend The Want object containing the data to be sent. * @return DataHandlerErr::OK if the data was successfully sent, other errcode otherwise. */ - virtual DataHandlerErr SendDataAsync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) = 0; + virtual DataHandlerErr SendDataAsync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend) = 0; /** * @brief Registers a data consumer for a specific subsystemId. diff --git a/window_scene/common/include/extension_data_handler.h b/window_scene/common/include/extension_data_handler.h index 1d05a6334a..4c0e9d6ac1 100644 --- a/window_scene/common/include/extension_data_handler.h +++ b/window_scene/common/include/extension_data_handler.h @@ -46,23 +46,24 @@ public: DataHandler() = default; virtual ~DataHandler() = default; - DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data, + DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend, AAFwk::Want& reply) override; - DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) override; - DataHandlerErr SendDataAsync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) override; - DataHandlerErr RegisterDataConsumer(SubSystemId dataId, DataConsumeCallback&& callback) override; - void UnregisterDataConsumer(SubSystemId dataId) override; - void NotifyDataConsumer(MessageParcel& data, MessageParcel& reply); + DataHandlerErr SendDataSync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend) override; + DataHandlerErr SendDataAsync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend) override; + DataHandlerErr RegisterDataConsumer(SubSystemId subSystemId, DataConsumeCallback&& callback) override; + void UnregisterDataConsumer(SubSystemId subSystemId) override; + void NotifyDataConsumer(MessageParcel& recieved, MessageParcel& reply); void SetEventHandler(const std::shared_ptr& eventHandler); void SetRemoteProxyObject(const sptr& remoteObject); protected: DataHandlerErr NotifyDataConsumer(AAFwk::Want&& data, std::optional& reply, const DataTransferConfig& config); - virtual DataHandlerErr SendData(AAFwk::Want& data, AAFwk::Want& reply, const DataTransferConfig& config) = 0; + virtual DataHandlerErr SendData(const AAFwk::Want& toSend, AAFwk::Want& reply, + const DataTransferConfig& config) = 0; DataHandlerErr PrepareSendData(MessageParcel& data, const DataTransferConfig& config, const AAFwk::Want& toSend); virtual bool WriteInterfaceToken(MessageParcel& data) = 0; - DataHandlerErr ParseReply(MessageParcel& data, AAFwk::Want& reply, const DataTransferConfig& config); + DataHandlerErr ParseReply(MessageParcel& recieved, AAFwk::Want& reply, const DataTransferConfig& config); void PostAsyncTask(Task&& task, const std::string& name, int64_t delayTime); protected: diff --git a/window_scene/common/src/extension_data_handler.cpp b/window_scene/common/src/extension_data_handler.cpp index d4bc90d055..8de635177e 100644 --- a/window_scene/common/src/extension_data_handler.cpp +++ b/window_scene/common/src/extension_data_handler.cpp @@ -120,23 +120,23 @@ DataHandlerErr DataHandler::ParseReply(MessageParcel& replyParcel, AAFwk::Want& TLOGE(WmsLogTag::WMS_UIEXT, "read response failed, %{public}s", config.ToString().c_str()); return DataHandlerErr::READ_PARCEL_ERROR; } - reply = *response; + reply = std::move(*response); } return static_cast(replyCode); } // process data from peer -void DataHandler::NotifyDataConsumer(MessageParcel& data, MessageParcel& reply) +void DataHandler::NotifyDataConsumer(MessageParcel& recieved, MessageParcel& reply) { - sptr config = data.ReadParcelable(); + sptr config = recieved.ReadParcelable(); if (config == nullptr) { TLOGE(WmsLogTag::WMS_UIEXT, "read config failed"); reply.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); return; } - sptr sendWant = data.ReadParcelable(); + sptr sendWant = recieved.ReadParcelable(); if (sendWant == nullptr) { TLOGE(WmsLogTag::WMS_UIEXT, "read want failed"); reply.WriteUint32(static_cast(DataHandlerErr::READ_PARCEL_ERROR)); @@ -171,7 +171,7 @@ void DataHandler::SetRemoteProxyObject(const sptr& remoteObject) remoteProxy_ = remoteObject; } -DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data, +DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend, AAFwk::Want& reply) { DataTransferConfig config; @@ -179,26 +179,26 @@ DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t custo config.needReply = true; config.subSystemId = subSystemId; config.customId = customId; - return SendData(data, reply, config); + return SendData(toSend, reply, config); } -DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) +DataHandlerErr DataHandler::SendDataSync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend) { DataTransferConfig config; config.needSyncSend = true; config.subSystemId = subSystemId; config.customId = customId; AAFwk::Want reply; - return SendData(data, reply, config); + return SendData(toSend, reply, config); } -DataHandlerErr DataHandler::SendDataAsync(SubSystemId subSystemId, uint32_t customId, AAFwk::Want& data) +DataHandlerErr DataHandler::SendDataAsync(SubSystemId subSystemId, uint32_t customId, const AAFwk::Want& toSend) { DataTransferConfig config; config.subSystemId = subSystemId; config.customId = customId; AAFwk::Want reply; - return SendData(data, reply, config); + return SendData(toSend, reply, config); } DataHandlerErr DataHandler::NotifyDataConsumer(AAFwk::Want&& data, std::optional& reply, diff --git a/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h index 9683fe813a..c73ea9d925 100644 --- a/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h +++ b/window_scene/test/unittest/ui_extension/data_handler/extension_data_handler_mock.h @@ -26,8 +26,8 @@ public: MockDataHandler() = default; ~MockDataHandler() override = default; - MOCK_METHOD(DataHandlerErr, SendData, (AAFwk::Want& data, AAFwk::Want& reply, const DataTransferConfig& config), - (override)); + MOCK_METHOD(DataHandlerErr, SendData, + (const AAFwk::Want& data, AAFwk::Want& reply, const DataTransferConfig& config), (override)); MOCK_METHOD(bool, WriteInterfaceToken, (MessageParcel& data), (override)); // Helper methods to expose protected methods for testing -- Gitee