From 5a0e94b51e51af786a76f640a53add8b7186ca15 Mon Sep 17 00:00:00 2001 From: openharmony_ci <120357966@qq.com> Date: Mon, 25 Aug 2025 04:48:21 +0000 Subject: [PATCH 1/3] =?UTF-8?q?!70299=20=E5=BB=BA=E5=8D=A1=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E7=BB=B4=E6=B5=8B=E5=A2=9E=E5=BC=BA=20Merge=20pull=20?= =?UTF-8?q?request=20!70299=20from=20xiangcong/master?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../declarative_frontend/jsview/js_form.cpp | 3 +- .../form/resource/form_manager_delegate.cpp | 41 +- .../form/resource/form_manager_delegate.h | 2 +- .../pattern/form/form_pattern.cpp | 13 +- interfaces/inner_api/form_render/BUILD.gn | 1 - .../form_render/include/form_renderer.h | 11 +- .../include/form_renderer_delegate_impl.h | 4 +- .../include/form_renderer_event_report.h | 43 -- .../form_render/src/form_renderer.cpp | 144 ++++--- .../src/form_renderer_delegate_impl.cpp | 18 +- .../src/form_renderer_delegate_proxy.cpp | 32 +- .../src/form_renderer_delegate_stub.cpp | 16 +- .../src/form_renderer_dispatcher_impl.cpp | 1 + .../src/form_renderer_event_report.cpp | 79 ---- .../form_render/src/form_renderer_group.cpp | 29 +- test/unittest/core/pattern/BUILD.gn | 5 +- test/unittest/core/pattern/form/BUILD.gn | 10 + test/unittest/interfaces/BUILD.gn | 361 +---------------- test/unittest/interfaces/form_render/BUILD.gn | 376 ++++++++++++++++++ .../form_render_delegate_impl_test.cpp | 9 +- .../form_render/form_render_test.cpp | 45 +-- 21 files changed, 592 insertions(+), 651 deletions(-) delete mode 100644 interfaces/inner_api/form_render/include/form_renderer_event_report.h delete mode 100644 interfaces/inner_api/form_render/src/form_renderer_event_report.cpp create mode 100644 test/unittest/interfaces/form_render/BUILD.gn diff --git a/frameworks/bridge/declarative_frontend/jsview/js_form.cpp b/frameworks/bridge/declarative_frontend/jsview/js_form.cpp index a28088cb491..deaa3de2280 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_form.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_form.cpp @@ -61,7 +61,8 @@ bool ParseFormId(RequestFormInfo formInfo, JSRef id) } int64_t inputFormId = StringUtils::StringToLongInt(id->ToString().c_str(), -1); if (inputFormId == -1) { - TAG_LOGE(AceLogTag::ACE_FORM, "StringToLongInt failed : %{public}s", id->ToString().c_str()); + TAG_LOGE( + AceLogTag::ACE_FORM, "StringToLongInt failed, invalid formId : %{public}s", id->ToString().c_str()); return false; } formInfo.id = inputFormId; diff --git a/frameworks/core/components/form/resource/form_manager_delegate.cpp b/frameworks/core/components/form/resource/form_manager_delegate.cpp index f5dc7d702e6..2a02f066f49 100644 --- a/frameworks/core/components/form/resource/form_manager_delegate.cpp +++ b/frameworks/core/components/form/resource/form_manager_delegate.cpp @@ -34,6 +34,7 @@ #include "render_service_client/core/ui/rs_ui_context.h" #ifdef OHOS_STANDARD_SYSTEM +#include "form_mgr_errors.h" #include "form_callback_client.h" #include "form_host_client.h" #include "form_info.h" @@ -174,19 +175,19 @@ void FormManagerDelegate::SetRSUIContext(std::shared_ptr& rs rsUIContext_ = rsUIContext; } -void FormManagerDelegate::OnSurfaceCreate(const AppExecFwk::FormJsInfo& formInfo, +int32_t FormManagerDelegate::OnSurfaceCreate(const AppExecFwk::FormJsInfo& formInfo, const std::shared_ptr& rsSurfaceNode, const AAFwk::Want& want) { TAG_LOGI(AceLogTag::ACE_FORM, "Form OnSurfaceCreate formId: %{public}s, isDynamic: %{public}d", std::to_string(formInfo.formId).c_str(), formInfo.isDynamic); if (!rsSurfaceNode) { TAG_LOGE(AceLogTag::ACE_FORM, "rsSurfaceNode is null"); - return; + return ERR_APPEXECFWK_FORM_INVALID_PARAM; } if (!onFormSurfaceNodeCallback_) { TAG_LOGE(AceLogTag::ACE_FORM, "onFormSurfaceNodeCallback is null"); - return; + return ERR_APPEXECFWK_FORM_COMMON_CODE; } bool needHandleCachedClick = @@ -218,6 +219,7 @@ void FormManagerDelegate::OnSurfaceCreate(const AppExecFwk::FormJsInfo& formInfo if (formRendererDispatcher_) { formRendererDispatcher_->SetMultiInstanceEnabled(SystemProperties::GetMultiInstanceEnabled()); } + return ERR_OK; } void FormManagerDelegate::CheckWhetherSurfaceChangeFailed() @@ -439,7 +441,7 @@ void FormManagerDelegate::AddActionEventHandle(const ActionEventHandle& callback { TAG_LOGI(AceLogTag::ACE_FORM, "EventHandle - AddActionEventHandle"); if (!callback || state_ == State::RELEASED) { - TAG_LOGI(AceLogTag::ACE_FORM, "EventHandle - ,state_ is RELEASED"); + TAG_LOGI(AceLogTag::ACE_FORM, "EventHandle - state_ is RELEASED"); return; } actionEventHandle_ = callback; @@ -558,30 +560,39 @@ void FormManagerDelegate::AddRenderDelegate() void FormManagerDelegate::RegisterRenderDelegateEvent() { CHECK_NULL_VOID(renderDelegate_); - auto&& surfaceCreateEventHandler = [weak = WeakClaim(this)]( - const std::shared_ptr& surfaceNode, - const OHOS::AppExecFwk::FormJsInfo& formInfo, const AAFwk::Want& want) { + auto &&surfaceCreateEventHandler = [weak = WeakClaim(this)]( + const std::shared_ptr &surfaceNode, + const OHOS::AppExecFwk::FormJsInfo &formInfo, + const AAFwk::Want &want) -> int32_t { auto formManagerDelegate = weak.Upgrade(); - CHECK_NULL_VOID(formManagerDelegate); - formManagerDelegate->OnSurfaceCreate(formInfo, surfaceNode, want); + if (!formManagerDelegate) { + TAG_LOGE(AceLogTag::ACE_FORM, + "SurfaceCreateEventHandle - formManagerDelegate is null, formId:%{public}" PRId64, formInfo.formId); + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; + } + return formManagerDelegate->OnSurfaceCreate(formInfo, surfaceNode, want); }; renderDelegate_->SetSurfaceCreateEventHandler(std::move(surfaceCreateEventHandler)); auto&& actionEventHandler = [weak = WeakClaim(this)](const std::string& action) { auto formManagerDelegate = weak.Upgrade(); - TAG_LOGI(AceLogTag::ACE_FORM, "EventHandle - AddActionEventHandle"); + TAG_LOGI(AceLogTag::ACE_FORM, "ActionEventHandle - AddActionEventHandle"); if (!formManagerDelegate) { - TAG_LOGE(AceLogTag::ACE_FORM, "EventHandle - ,formManagerDelegate is null"); + TAG_LOGE(AceLogTag::ACE_FORM, "ActionEventHandle - formManagerDelegate is null"); return; } formManagerDelegate->OnActionEventHandle(action); }; renderDelegate_->SetActionEventHandler(std::move(actionEventHandler)); - auto&& onErrorEventHandler = [weak = WeakClaim(this)](const std::string& code, const std::string& msg) { + auto&& onErrorEventHandler = [weak = WeakClaim(this)](const std::string& code, const std::string& msg) -> int32_t { auto formManagerDelegate = weak.Upgrade(); - CHECK_NULL_VOID(formManagerDelegate); + if (!formManagerDelegate) { + TAG_LOGE(AceLogTag::ACE_FORM, "ErrorEventHandle - formManagerDelegate is null"); + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; + } formManagerDelegate->OnFormError(code, msg); + return ERR_OK; }; renderDelegate_->SetErrorEventHandler(std::move(onErrorEventHandler)); @@ -616,7 +627,7 @@ void FormManagerDelegate::RegisterRenderDelegateEvent() auto &&onCheckManagerDelegate = [weak = WeakClaim(this)](bool &checkFlag) { auto formManagerDelegate = weak.Upgrade(); if (!formManagerDelegate) { - TAG_LOGE(AceLogTag::ACE_FORM, "EventHandle - onCheckManagerDelegate formManagerDelegate is null"); + TAG_LOGE(AceLogTag::ACE_FORM, "CheckManagerDelegateEventHandle - formManagerDelegate is null"); checkFlag = false; } }; @@ -625,7 +636,7 @@ void FormManagerDelegate::RegisterRenderDelegateEvent() auto &&onUpdateFormDoneEventHandler = [weak = WeakClaim(this)](const int64_t formId) { auto formManagerDelegate = weak.Upgrade(); CHECK_NULL_VOID(formManagerDelegate); - TAG_LOGD(AceLogTag::ACE_FORM, "EventHandle - onUpdateFormDoneEventHandler, formId:%{public}" PRId64, formId); + TAG_LOGD(AceLogTag::ACE_FORM, "UpdateFormEventHandle - formId:%{public}" PRId64, formId); formManagerDelegate->OnFormUpdateDone(formId); }; renderDelegate_->SetUpdateFormEventHandler(onUpdateFormDoneEventHandler); diff --git a/frameworks/core/components/form/resource/form_manager_delegate.h b/frameworks/core/components/form/resource/form_manager_delegate.h index 2ec541d4612..146505413ea 100644 --- a/frameworks/core/components/form/resource/form_manager_delegate.h +++ b/frameworks/core/components/form/resource/form_manager_delegate.h @@ -152,7 +152,7 @@ public: void ProcessFormUninstall(const int64_t formId); void OnDeathReceived(); void SetFormUtils(const std::shared_ptr& formUtils); - void OnSurfaceCreate(const AppExecFwk::FormJsInfo& formInfo, + int32_t OnSurfaceCreate(const AppExecFwk::FormJsInfo& formInfo, const std::shared_ptr& rsSurfaceNode, const AAFwk::Want& want); void OnFormSurfaceChange(float width, float height, float borderWidth = 0.0); void OnFormSurfaceDetach(); diff --git a/frameworks/core/components_ng/pattern/form/form_pattern.cpp b/frameworks/core/components_ng/pattern/form/form_pattern.cpp index 9c9552d733c..d84b450d2e5 100644 --- a/frameworks/core/components_ng/pattern/form/form_pattern.cpp +++ b/frameworks/core/components_ng/pattern/form/form_pattern.cpp @@ -506,7 +506,7 @@ void FormPattern::SetNonTransparentAfterRecover() auto host = GetHost(); CHECK_NULL_VOID(host); host->MarkDirtyNode(PROPERTY_UPDATE_LAYOUT); - TAG_LOGI(AceLogTag::ACE_FORM, "setOpacity:1"); + TAG_LOGI(AceLogTag::ACE_FORM, "surfaceNode setOpacity:1"); } else { TAG_LOGW(AceLogTag::ACE_FORM, "has forbidden node"); } @@ -592,6 +592,7 @@ void FormPattern::UpdateImageNode() externalContext->SetVisible(true); if (formChildrenNodeMap_.find(FormChildNodeType::FORM_FORBIDDEN_ROOT_NODE) != formChildrenNodeMap_.end()) { + TAG_LOGI(AceLogTag::ACE_FORM, "imageNode SetOpacity:0"); externalContext->SetOpacity(TRANSPARENT_VAL); } imageNode->MarkModifyDone(); @@ -1591,8 +1592,14 @@ void FormPattern::AttachRSNode(const std::shared_ptr& node boundHeight = size.Height() - cardInfo_.borderWidth * DOUBLE; } TAG_LOGI(AceLogTag::ACE_FORM, - "attach rs node, id: %{public}" PRId64 " width: %{public}f height: %{public}f borderWidth: %{public}f", - cardInfo_.id, boundWidth, boundHeight, cardInfo_.borderWidth); + "attach rs node, id: %{public}" PRId64 + " width: %{public}f height: %{public}f borderWidth: %{public}f boundWidth: %{public}f boundHeight: %{public}f", + cardInfo_.id, + cardInfo_.width.Value(), + cardInfo_.height.Value(), + cardInfo_.borderWidth, + boundWidth, + boundHeight); externalRenderContext->SetBounds(round(cardInfo_.borderWidth), round(cardInfo_.borderWidth), round(boundWidth), round(boundHeight)); diff --git a/interfaces/inner_api/form_render/BUILD.gn b/interfaces/inner_api/form_render/BUILD.gn index d468578c442..ce63fe24cca 100644 --- a/interfaces/inner_api/form_render/BUILD.gn +++ b/interfaces/inner_api/form_render/BUILD.gn @@ -43,7 +43,6 @@ ohos_shared_library("ace_form_render") { "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp", ] configs = [ diff --git a/interfaces/inner_api/form_render/include/form_renderer.h b/interfaces/inner_api/form_render/include/form_renderer.h index affb520a416..b158bf5a954 100644 --- a/interfaces/inner_api/form_render/include/form_renderer.h +++ b/interfaces/inner_api/form_render/include/form_renderer.h @@ -43,9 +43,9 @@ public: std::weak_ptr eventHandler); ~FormRenderer(); - void AddForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); + int32_t AddForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void PreInitAddForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); - void RunFormPage(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); + int32_t RunFormPage(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void UpdateForm(const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void ReloadForm(const std::string& url); void Destroy(); @@ -53,15 +53,15 @@ public: void SetAllowUpdate(bool allowUpdate); bool IsAllowUpdate(); - void OnSurfaceCreate(const OHOS::AppExecFwk::FormJsInfo& formJsInfo, bool isRecoverFormToHandleClickEvent); - void OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsInfo); + int32_t OnSurfaceCreate(const OHOS::AppExecFwk::FormJsInfo& formJsInfo, bool isRecoverFormToHandleClickEvent); + int32_t OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void OnSurfaceDetach(); void OnActionEvent(const std::string& action); void OnError(const std::string& code, const std::string& msg); void OnSurfaceChange(float width, float height, float borderWidth = 0.0); void OnFormLinkInfoUpdate(const std::vector& formLinkInfos); void UpdateConfiguration(const std::shared_ptr& config); - void AttachForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); + int32_t AttachForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void RecycleForm(std::string& statusData); void RecoverForm(const std::string& statusData); void GetRectRelativeToWindow(AccessibilityParentRectInfo& parentRectInfo) const; @@ -77,6 +77,7 @@ private: void PreInitUIContent(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void RunFormPageInner(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo); void RemoveFormDeathRecipient(); + std::shared_ptr GetSurfaceNode(); bool allowUpdate_ = true; bool obscurationMode_ = false; diff --git a/interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h b/interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h index 4b3032f3428..7fa8b0657a2 100644 --- a/interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h +++ b/interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h @@ -68,7 +68,7 @@ public: int32_t OnUpdateFormDone(const int64_t formId) override; - void SetSurfaceCreateEventHandler(std::function&, + void SetSurfaceCreateEventHandler(std::function&, const OHOS::AppExecFwk::FormJsInfo&, const AAFwk::Want&)>&& listener); void SetActionEventHandler(std::function&& listener); void SetErrorEventHandler(std::function&& listener); @@ -79,7 +79,7 @@ public: void SetCheckManagerDelegate(std::function&& listener); void SetUpdateFormEventHandler(std::function&& listener); private: - std::function&, const OHOS::AppExecFwk::FormJsInfo&, const AAFwk::Want&)> surfaceCreateEventHandler_; std::function actionEventHandler_; diff --git a/interfaces/inner_api/form_render/include/form_renderer_event_report.h b/interfaces/inner_api/form_render/include/form_renderer_event_report.h deleted file mode 100644 index 6457a8181a1..00000000000 --- a/interfaces/inner_api/form_render/include/form_renderer_event_report.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 FOUNDATION_ACE_INTERFACE_INNERKITS_FORM_RENDERER_EVENT_REPORT_H -#define FOUNDATION_ACE_INTERFACE_INNERKITS_FORM_RENDERER_EVENT_REPORT_H - -#include -#include -#include - -#include "hisysevent.h" - -using HiSysEventType = OHOS::HiviewDFX::HiSysEvent::EventType; -using HiSysEvent = OHOS::HiviewDFX::HiSysEvent; - -namespace OHOS::Ace { - -class FormRenderEventReport { -public: - static void StartSurfaceNodeTimeoutReportTimer(int64_t formId, const std::string &bundleName, - const std::string &formName); - static void StopTimer(int64_t formId); - -private: - static std::unordered_map waitSurfaceNodeTimerMap_; - static std::mutex timerMutex_; -}; - -} // namespace OHOS::Ace - -#endif // FOUNDATION_ACE_INTERFACE_INNERKITS_FORM_RENDERER_GROUP_EVENT_REPORT_H diff --git a/interfaces/inner_api/form_render/src/form_renderer.cpp b/interfaces/inner_api/form_render/src/form_renderer.cpp index f3c42a388d7..0631b762968 100644 --- a/interfaces/inner_api/form_render/src/form_renderer.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer.cpp @@ -15,8 +15,9 @@ #include "form_renderer.h" +#include "form_mgr_errors.h" #include "form_renderer_hilog.h" -#include "form_renderer_event_report.h" +#include "form_event_report.h" #include "base/utils/utils.h" namespace OHOS { @@ -27,8 +28,6 @@ constexpr char FORM_RENDERER_DISPATCHER[] = "ohos.extra.param.key.process_on_for constexpr char FORM_RENDERER_PROCESS_ON_ADD_SURFACE[] = "ohos.extra.param.key.process_on_add_surface"; constexpr char TRANSPARENT_COLOR[] = "#00FFFFFF"; constexpr int32_t DOUBLE = 2; -constexpr int32_t RSSURFACENODE_PROPERTIES_WIDTH_INDEX = 2; -constexpr int32_t RSSURFACENODE_PROPERTIES_HEIGHT_INDEX = 3; } // namespace using EventHandler = OHOS::AppExecFwk::EventHandler; @@ -70,6 +69,15 @@ void FormRenderer::PreInitUIContent(const OHOS::AAFwk::Want& want, const OHOS::A if (!backgroundColor_.empty()) { uiContent_->SetFormBackgroundColor(backgroundColor_); } + if (!uiContent_->GetFormRootNode()) { + HILOG_ERROR("PreInitUIContent failed to PreInitializeForm, rsSurfaceNode is null"); + AppExecFwk::FormEventReport::SendFormFailedEvent(AppExecFwk::FormEventName::FORM_NODE_ERROR, + formJsInfo.formId, + formJsInfo.bundleName, + formJsInfo.formName, + static_cast(AppExecFwk::AddFormFailedErrorType::UI_CONTENT_INIT_FAILED), + 0); + } } void FormRenderer::RunFormPageInner(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) @@ -112,8 +120,9 @@ void FormRenderer::RunFormPageInner(const OHOS::AAFwk::Want& want, const OHOS::A uiContent_->SetFormLinkInfoUpdateHandler(formLinkInfoUpdateHandler); } - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - if (rsSurfaceNode == nullptr) { + auto surfaceNode = GetSurfaceNode(); + if (!surfaceNode) { + HILOG_ERROR("rsSurfaceNode is nullptr."); return; } if (renderingMode_ == AppExecFwk::Constants::RenderingMode::SINGLE_COLOR || enableBlurBackground_) { @@ -146,11 +155,11 @@ void FormRenderer::ParseWant(const OHOS::AAFwk::Want& want) obscurationMode_ = want.GetBoolParam(OHOS::AppExecFwk::Constants::PARAM_FORM_OBSCURED_KEY, false); } -void FormRenderer::AddForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) +int32_t FormRenderer::AddForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) { if (uiContent_ == nullptr) { HILOG_ERROR("uiContent is null!"); - return; + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } formRendererDispatcherImpl_ = new FormRendererDispatcherImpl(uiContent_, shared_from_this(), eventHandler_); ParseWant(want); @@ -160,7 +169,7 @@ void FormRenderer::AddForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk std::string statusData = want.GetStringParam(OHOS::AppExecFwk::Constants::FORM_STATUS_DATA); RecoverForm(statusData); } - OnSurfaceCreate(formJsInfo, want.GetBoolParam( + return OnSurfaceCreate(formJsInfo, want.GetBoolParam( OHOS::AppExecFwk::Constants::FORM_IS_RECOVER_FORM_TO_HANDLE_CLICK_EVENT, false)); } @@ -175,11 +184,11 @@ void FormRenderer::PreInitAddForm(const OHOS::AAFwk::Want& want, const OHOS::App PreInitUIContent(want, formJsInfo); } -void FormRenderer::RunFormPage(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) +int32_t FormRenderer::RunFormPage(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) { if (uiContent_ == nullptr) { HILOG_ERROR("uiContent is null!"); - return; + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } ParseWant(want); RunFormPageInner(want, formJsInfo); @@ -188,7 +197,7 @@ void FormRenderer::RunFormPage(const OHOS::AAFwk::Want& want, const OHOS::AppExe std::string statusData = want.GetStringParam(OHOS::AppExecFwk::Constants::FORM_STATUS_DATA); RecoverForm(statusData); } - OnSurfaceCreate(formJsInfo, want.GetBoolParam( + return OnSurfaceCreate(formJsInfo, want.GetBoolParam( OHOS::AppExecFwk::Constants::FORM_IS_RECOVER_FORM_TO_HANDLE_CLICK_EVENT, false)); } @@ -260,11 +269,11 @@ void FormRenderer::RemoveFormDeathRecipient() void FormRenderer::Destroy() { HILOG_INFO("Destroy FormRenderer start."); - if (formRendererDelegate_ != nullptr && uiContent_ != nullptr) { - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - if (rsSurfaceNode != nullptr) { - HILOG_INFO("Form OnSurfaceRelease!"); - formRendererDelegate_->OnSurfaceRelease(rsSurfaceNode->GetId()); + if (formRendererDelegate_ != nullptr) { + auto surfaceNode = GetSurfaceNode(); + if (surfaceNode) { + HILOG_INFO("Form OnSurfaceRelease, id: %{public}" PRIu64, surfaceNode->GetId()); + formRendererDelegate_->OnSurfaceRelease(surfaceNode->GetId()); } } @@ -287,11 +296,6 @@ void FormRenderer::UpdateFormSize(float width, float height, float borderWidth) HILOG_ERROR("uiContent_ is null"); return; } - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - if (rsSurfaceNode == nullptr) { - HILOG_ERROR("rsSurfaceNode is nullptr."); - return; - } float resizedWidth = width - borderWidth * DOUBLE; float resizedHeight = height - borderWidth * DOUBLE; if (!NearEqual(width, width_) || !NearEqual(height, height_) || !NearEqual(borderWidth, lastBorderWidth_)) { @@ -302,9 +306,7 @@ void FormRenderer::UpdateFormSize(float width, float height, float borderWidth) uiContent_->SetFormHeight(resizedHeight); lastBorderWidth_ = borderWidth_; std::shared_ptr eventHandler = eventHandler_.lock(); - HILOG_INFO("UpdateFormSize after set uiContent, width: %{public}f, height: %{public}f", - rsSurfaceNode->GetStagingProperties().GetBounds().data_[RSSURFACENODE_PROPERTIES_WIDTH_INDEX], - rsSurfaceNode->GetStagingProperties().GetBounds().data_[RSSURFACENODE_PROPERTIES_HEIGHT_INDEX]); + HILOG_INFO("UpdateFormSize after set uiContent, width: %{public}f, height: %{public}f", width, height); if (!eventHandler) { HILOG_ERROR("eventHandler is null"); return; @@ -332,23 +334,28 @@ void FormRenderer::OnSurfaceChange(float width, float height, float borderWidth) borderWidth_ = borderWidth; } -void FormRenderer::OnSurfaceCreate(const OHOS::AppExecFwk::FormJsInfo& formJsInfo, +int32_t FormRenderer::OnSurfaceCreate(const OHOS::AppExecFwk::FormJsInfo& formJsInfo, bool isRecoverFormToHandleClickEvent) { if (!formRendererDispatcherImpl_) { HILOG_ERROR("form renderer dispatcher is null!"); - return; + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } if (!formRendererDelegate_) { HILOG_ERROR("form renderer delegate is null!"); - return; + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } OHOS::AAFwk::Want newWant; newWant.SetParam(FORM_RENDERER_DISPATCHER, formRendererDispatcherImpl_->AsObject()); newWant.SetParam(OHOS::AppExecFwk::Constants::FORM_IS_RECOVER_FORM_TO_HANDLE_CLICK_EVENT, isRecoverFormToHandleClickEvent); - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - HILOG_INFO("Form OnSurfaceCreate!"); + + auto rsSurfaceNode = GetSurfaceNode(); + if (!rsSurfaceNode) { + HILOG_ERROR("OnSurfaceCreate rsSurfaceNode is nullptr."); + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; + } + HILOG_INFO("Form OnSurfaceCreate, id: %{public}" PRIu64, rsSurfaceNode->GetId()); int32_t ret = ERR_OK; if (formJsInfo.uiSyntax == OHOS::AppExecFwk::FormType::ETS) { @@ -357,29 +364,30 @@ void FormRenderer::OnSurfaceCreate(const OHOS::AppExecFwk::FormJsInfo& formJsInf } else { ret = formRendererDelegate_->OnSurfaceCreate(rsSurfaceNode, formJsInfo, newWant); } - if (ret == ERR_OK) { - FormRenderEventReport::StopTimer(formJsInfo.formId); + if (ret != ERR_OK) { + HILOG_ERROR("Form OnSurfaceCreate failed, code:%{public}d", ret); } + return ret; } -void FormRenderer::OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsInfo) +int32_t FormRenderer::OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsInfo) { if (!formRendererDispatcherImpl_) { - HILOG_ERROR("form renderer dispatcher is null!"); - return; + HILOG_ERROR("Form OnSurfaceReuse, dispatcher is null!"); + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } if (!formRendererDelegate_) { - HILOG_ERROR("form renderer delegate is null!"); - return; + HILOG_ERROR("Form OnSurfaceReuse, delegate is null!"); + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - if (rsSurfaceNode == nullptr) { - HILOG_ERROR("form renderer rsSurfaceNode is null!"); - return; + auto rsSurfaceNode = GetSurfaceNode(); + if (!rsSurfaceNode) { + HILOG_ERROR("Form OnSurfaceReuse, rsSurfaceNode is null!"); + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } OHOS::AAFwk::Want newWant; newWant.SetParam(FORM_RENDERER_DISPATCHER, formRendererDispatcherImpl_->AsObject()); - HILOG_INFO("Form OnSurfaceReuse."); + HILOG_INFO("Form OnSurfaceReuse, id: %{public}" PRIu64, rsSurfaceNode->GetId()); int32_t ret = ERR_OK; if (formJsInfo.uiSyntax == OHOS::AppExecFwk::FormType::ETS) { OHOS::AppExecFwk::FormJsInfo newFormJsInfo = formJsInfo.CopyFormJsInfoWithoutFormData(); @@ -388,24 +396,28 @@ void FormRenderer::OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsInfo ret = formRendererDelegate_->OnSurfaceReuse(rsSurfaceNode->GetId(), formJsInfo, newWant); } formRendererDelegate_->OnFormLinkInfoUpdate(cachedInfos_); - if (ret == ERR_OK) { - FormRenderEventReport::StopTimer(formJsInfo.formId); + if (ret != ERR_OK) { + HILOG_ERROR("Form OnSurfaceReuse failed, code:%{public}d", ret); } + return ret; } void FormRenderer::OnSurfaceDetach() { if (!formRendererDelegate_) { - HILOG_ERROR("form renderer delegate is null!"); + HILOG_ERROR("Form OnSurfaceDetach, delegate is null!"); return; } - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - if (rsSurfaceNode == nullptr) { - HILOG_ERROR("form renderer rsSurfaceNode is null!"); + auto surfaceNode = GetSurfaceNode(); + if (!surfaceNode) { + HILOG_ERROR("Form OnSurfaceDetach, rsSurfaceNode is null!"); return; } - HILOG_INFO("Form OnSurfaceDetach."); - formRendererDelegate_->OnSurfaceDetach(rsSurfaceNode->GetId()); + HILOG_INFO("Form OnSurfaceDetach, id: %{public}" PRIu64, surfaceNode->GetId()); + int32_t ret = formRendererDelegate_->OnSurfaceDetach(surfaceNode->GetId()); + if (ret != ERR_OK) { + HILOG_ERROR("Form OnSurfaceDetach failed, code:%{public}d", ret); + } } void FormRenderer::OnActionEvent(const std::string& action) @@ -420,11 +432,17 @@ void FormRenderer::OnActionEvent(const std::string& action) void FormRenderer::OnError(const std::string& code, const std::string& msg) { + auto rsSurfaceNode = GetSurfaceNode(); + if (rsSurfaceNode) { + HILOG_INFO("Form OnError, id: %{public}" PRIu64, rsSurfaceNode->GetId()); + } else { + HILOG_ERROR("Form OnError, rsSurfaceNode is null"); + } if (!formRendererDelegate_) { HILOG_ERROR("formRendererDelegate is null!"); return; } - + HILOG_INFO("Form OnError, code: %{public}s, msg: %{public}s", code.c_str(), msg.c_str()); formRendererDelegate_->OnError(code, msg); } @@ -457,7 +475,7 @@ void FormRenderer::SetRenderDelegate(const sptr& remoteObj) if (checkFlag) { formRendererDelegate_ = renderRemoteObj; } else { - HILOG_ERROR("EventHandle - SetRenderDelegate error checkFlag is false"); + HILOG_ERROR("EventHandle - SetRenderDelegate error checkFlag is false"); } } @@ -518,17 +536,17 @@ void FormRenderDelegateRecipient::OnRemoteDied(const wptr& remote } } -void FormRenderer::AttachForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) +int32_t FormRenderer::AttachForm(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) { if (uiContent_ == nullptr) { HILOG_ERROR("uiContent is null!"); - return; + return ERR_APPEXECFWK_FORM_FORM_NODE_RELEASED; } ParseWant(want); OnSurfaceDetach(); AttachUIContent(want, formJsInfo); SetRenderDelegate(proxy_); - OnSurfaceReuse(formJsInfo); + return OnSurfaceReuse(formJsInfo); } void FormRenderer::AttachUIContent(const OHOS::AAFwk::Want& want, const OHOS::AppExecFwk::FormJsInfo& formJsInfo) @@ -536,11 +554,6 @@ void FormRenderer::AttachUIContent(const OHOS::AAFwk::Want& want, const OHOS::Ap HILOG_INFO("AttachUIContent width = %{public}f , height = %{public}f, borderWidth_ = %{public}f.", width_, height_, borderWidth_); SetAllowUpdate(allowUpdate_); - auto rsSurfaceNode = uiContent_->GetFormRootNode(); - if (rsSurfaceNode == nullptr) { - HILOG_ERROR("rsSurfaceNode is nullptr."); - return; - } float width = width_ - borderWidth_ * DOUBLE; float height = height_ - borderWidth_ * DOUBLE; if (!NearEqual(width, uiContent_->GetFormWidth()) || !NearEqual(height, uiContent_->GetFormHeight()) @@ -549,9 +562,7 @@ void FormRenderer::AttachUIContent(const OHOS::AAFwk::Want& want, const OHOS::Ap uiContent_->SetFormHeight(height); lastBorderWidth_ = borderWidth_; uiContent_->OnFormSurfaceChange(width, height); - HILOG_INFO("AttachUIContent after set uiContent, width: %{public}f, height: %{public}f", - rsSurfaceNode->GetStagingProperties().GetBounds().data_[RSSURFACENODE_PROPERTIES_WIDTH_INDEX], - rsSurfaceNode->GetStagingProperties().GetBounds().data_[RSSURFACENODE_PROPERTIES_HEIGHT_INDEX]); + HILOG_INFO("AttachUIContent after set uiContent, width: %{public}f, height: %{public}f", width, height); } auto backgroundColor = want.GetStringParam(OHOS::AppExecFwk::Constants::PARAM_FORM_TRANSPARENCY_KEY); if (backgroundColor_ != backgroundColor) { @@ -620,5 +631,14 @@ bool FormRenderer::IsManagerDelegateValid(const OHOS::AAFwk::Want& want) HILOG_INFO("checkFlag:%{public}d", checkFlag); return checkFlag; } + +std::shared_ptr FormRenderer::GetSurfaceNode() +{ + if (!uiContent_) { + HILOG_ERROR("uiContent_ is null"); + return nullptr; + } + return uiContent_->GetFormRootNode(); +} } // namespace Ace } // namespace OHOS diff --git a/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp b/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp index 877e50f49b4..2dfbe00eed4 100644 --- a/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp @@ -14,6 +14,7 @@ */ #include "form_renderer_delegate_impl.h" +#include "form_mgr_errors.h" #include "form_renderer_hilog.h" namespace OHOS { @@ -24,20 +25,19 @@ int32_t FormRendererDelegateImpl::OnSurfaceCreate(const std::shared_ptr&, const OHOS::AppExecFwk::FormJsInfo&, + std::function&, const OHOS::AppExecFwk::FormJsInfo&, const AAFwk::Want&)>&& listener) { surfaceCreateEventHandler_ = std::move(listener); diff --git a/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp b/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp index 28b02d8547e..507577bfdda 100644 --- a/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp @@ -14,8 +14,10 @@ */ #include "form_renderer_delegate_proxy.h" -#include "form_renderer_hilog.h" #include "core/accessibility/accessibility_manager.h" +#include "appexecfwk_errors.h" +#include "form_mgr_errors.h" +#include "form_renderer_hilog.h" namespace OHOS { namespace Ace { @@ -29,23 +31,23 @@ int32_t FormRendererDelegateProxy::OnSurfaceCreate(const std::shared_ptrMarshalling(data)) { HILOG_ERROR("%{public}s fail, write surfaceNode error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } if (!data.WriteParcelable(&formJsInfo)) { HILOG_ERROR("%{public}s fail, write formJsInfo error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } if (!data.WriteParcelable(&want)) { HILOG_ERROR("%{public}s fail, write want error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } HILOG_INFO("Proxy create surfaceNode:%{public}s", std::to_string(surfaceNode->GetId()).c_str()); @@ -67,16 +69,16 @@ int32_t FormRendererDelegateProxy::OnSurfaceReuse( MessageParcel data; if (!WriteInterfaceToken(data)) { HILOG_ERROR("%{public}s, failed to write interface token", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } data.WriteUint64(surfaceId); if (!data.WriteParcelable(&formJsInfo)) { HILOG_ERROR("%{public}s fail, write formJsInfo error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } if (!data.WriteParcelable(&want)) { HILOG_ERROR("%{public}s fail, write want error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } HILOG_INFO("Proxy reuse surfaceNode:%{public}s", std::to_string(surfaceId).c_str()); @@ -97,7 +99,7 @@ int32_t FormRendererDelegateProxy::OnSurfaceDetach(uint64_t surfaceId) MessageParcel data; if (!WriteInterfaceToken(data)) { HILOG_ERROR("%{public}s, failed to write interface token", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } data.WriteUint64(surfaceId); HILOG_INFO("Proxy detach surfaceNode:%{public}s", std::to_string(surfaceId).c_str()); @@ -119,7 +121,7 @@ int32_t FormRendererDelegateProxy::OnSurfaceRelease(uint64_t surfaceId) MessageParcel data; if (!WriteInterfaceToken(data)) { HILOG_ERROR("%{public}s, failed to write interface token", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } data.WriteUint64(surfaceId); HILOG_INFO("Proxy release surfaceNode:%{public}s", std::to_string(surfaceId).c_str()); @@ -166,17 +168,17 @@ int32_t FormRendererDelegateProxy::OnError(const std::string& code, const std::s MessageParcel data; if (!WriteInterfaceToken(data)) { HILOG_ERROR("%{public}s, failed to write interface token", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } if (!data.WriteString(code)) { HILOG_ERROR("%{public}s, write code error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } if (!data.WriteString(msg)) { HILOG_ERROR("%{public}s, write msg error", __func__); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } MessageParcel reply; @@ -322,7 +324,7 @@ int32_t FormRendererDelegateProxy::SendRequest(uint32_t code, MessageParcel &dat sptr remote = Remote(); if (remote == nullptr) { HILOG_ERROR("remote is null"); - return IPC_PROXY_ERR; + return ERR_APPEXECFWK_SERVICE_NOT_CONNECTED; } return remote->SendRequest(code, data, reply, option); } diff --git a/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp b/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp index 66117814188..4314a98c75a 100644 --- a/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp @@ -14,8 +14,10 @@ */ #include "form_renderer_delegate_stub.h" -#include "form_renderer_hilog.h" #include "core/accessibility/accessibility_manager.h" +#include "appexecfwk_errors.h" +#include "form_mgr_errors.h" +#include "form_renderer_hilog.h" namespace OHOS { namespace Ace { @@ -80,7 +82,7 @@ int FormRendererDelegateStub::HandleOnSurfaceCreate(MessageParcel& data, Message auto surfaceNode = Rosen::RSSurfaceNode::Unmarshalling(data); if (surfaceNode == nullptr) { HILOG_ERROR("surfaceNode is nullptr"); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } { std::lock_guard lock(g_surfaceNodeMutex_); @@ -90,13 +92,13 @@ int FormRendererDelegateStub::HandleOnSurfaceCreate(MessageParcel& data, Message std::unique_ptr formJsInfo(data.ReadParcelable()); if (formJsInfo == nullptr) { HILOG_ERROR("formJsInfo is nullptr"); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } std::shared_ptr want(data.ReadParcelable()); if (want == nullptr) { HILOG_ERROR("want is nullptr"); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } int32_t errCode = OnSurfaceCreate(surfaceNode, *formJsInfo, *want); @@ -118,20 +120,20 @@ int32_t FormRendererDelegateStub::HandleOnSurfaceReuse(MessageParcel& data, Mess } if (surfaceNode == nullptr) { HILOG_ERROR("surfaceNode:%{public}s is nullptr", std::to_string(id).c_str()); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND; } HILOG_INFO("Stub reuse surfaceNode:%{public}s", std::to_string(id).c_str()); std::unique_ptr formJsInfo(data.ReadParcelable()); if (formJsInfo == nullptr) { HILOG_ERROR("formJsInfo is nullptr"); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } std::shared_ptr want(data.ReadParcelable()); if (want == nullptr) { HILOG_ERROR("want is nullptr"); - return ERR_INVALID_VALUE; + return ERR_APPEXECFWK_PARCEL_ERROR; } int32_t errCode = OnSurfaceCreate(surfaceNode, *formJsInfo, *want); diff --git a/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp b/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp index e83ca9e2a16..a10c8e9fa4b 100644 --- a/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp @@ -145,6 +145,7 @@ void FormRendererDispatcherImpl::DispatchSurfaceChangeEvent(float width, float h auto formRenderer = formRenderer_.lock(); if (!formRenderer) { + HILOG_WARN("formRenderer is nullptr"); return; } formRenderer->OnSurfaceChange(width, height, borderWidth); diff --git a/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp b/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp deleted file mode 100644 index e14ee644e4d..00000000000 --- a/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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 "form_renderer_event_report.h" - -#include -#include -#include - -#include "hisysevent.h" -#include "xcollie/xcollie.h" -#include "xcollie/xcollie_define.h" -#include "form_renderer_hilog.h" - -namespace OHOS::Ace { -namespace { - constexpr const char *FORM_NODE_ERROR = "FORM_NODE_ERROR"; - constexpr const char *EVENT_KEY_FORM_ID = "FORM_ID"; - constexpr const char *EVENT_KEY_BUNDLE_NAME = "BUNDLE_NAME"; - constexpr const char *EVENT_KEY_FORM_NAME = "FORM_NAME"; - constexpr const char *EVENT_KEY_ERROR_NAME = "ERROR_NAME"; - constexpr const char *EVENT_KEY_ERROR_TYPE = "ERROR_TYPE"; - constexpr const char *EVENT_KEY_ERROR_CODE = "ERROR_CODE"; - constexpr int32_t SURFACE_NODE_CREATE_FAILED = 2; - constexpr uint32_t SURFACE_NODE_CREATE_TIMEOUT = 10; -} - -std::unordered_map FormRenderEventReport::waitSurfaceNodeTimerMap_ = {}; -std::mutex FormRenderEventReport::timerMutex_; - -void FormRenderEventReport::StartSurfaceNodeTimeoutReportTimer(int64_t formId, const std::string &bundleName, - const std::string &formName) -{ - auto timeoutCallback = [formId, bundleName, formName](void *) { - HILOG_INFO("wait surface node create timeout, formId: %{public}" PRId64, formId); - HiSysEventWrite( - OHOS::HiviewDFX::HiSysEvent::Domain::FORM_MANAGER, - "FORM_ERROR", - OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, - EVENT_KEY_FORM_ID, formId, - EVENT_KEY_BUNDLE_NAME, bundleName, - EVENT_KEY_FORM_NAME, formName, - EVENT_KEY_ERROR_NAME, FORM_NODE_ERROR, - EVENT_KEY_ERROR_TYPE, SURFACE_NODE_CREATE_FAILED, - EVENT_KEY_ERROR_CODE, 0); - }; - FormRenderEventReport::StopTimer(formId); - std::string taskName = "FRS_WaitSurfaceNodeCreate_" + std::to_string(formId); - int32_t timerId = OHOS::HiviewDFX::XCollie::GetInstance().SetTimer( - taskName, SURFACE_NODE_CREATE_TIMEOUT, timeoutCallback, nullptr, HiviewDFX::XCOLLIE_FLAG_NOOP); - HILOG_INFO("wait surface node create start, formId: %{public}" PRId64 "timerId: %{public}d", formId, timerId); - std::lock_guard lock(FormRenderEventReport::timerMutex_); - FormRenderEventReport::waitSurfaceNodeTimerMap_.emplace(formId, timerId); -} - -void FormRenderEventReport::StopTimer(int64_t formId) -{ - std::lock_guard lock(FormRenderEventReport::timerMutex_); - auto iter = FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId); - if (iter != FormRenderEventReport::waitSurfaceNodeTimerMap_.end()) { - int32_t timerId = iter->second; - HILOG_INFO("surface node create completed, formId:%{public}" PRId64 "timerId: %{public}d", formId, timerId); - OHOS::HiviewDFX::XCollie::GetInstance().CancelTimer(timerId); - FormRenderEventReport::waitSurfaceNodeTimerMap_.erase(iter); - } -} -} // namespace OHOS::Ace diff --git a/interfaces/inner_api/form_render/src/form_renderer_group.cpp b/interfaces/inner_api/form_render/src/form_renderer_group.cpp index 0d63d6c9457..3492a312086 100644 --- a/interfaces/inner_api/form_render/src/form_renderer_group.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer_group.cpp @@ -15,9 +15,9 @@ #include "form_renderer_group.h" +#include "form_event_report.h" #include "form_renderer.h" #include "form_renderer_hilog.h" -#include "form_renderer_event_report.h" namespace OHOS { namespace Ace { @@ -129,8 +129,8 @@ void FormRendererGroup::InnerAddForm(const FormRequest& formRequest) auto compId = formRequest.compId; OHOS::AAFwk::Want want = formRequest.want; AppExecFwk::FormJsInfo formJsInfo = formRequest.formJsInfo; - FormRenderEventReport::StartSurfaceNodeTimeoutReportTimer(formJsInfo.formId, formJsInfo.bundleName, - formJsInfo.formName); + int32_t errCode = ERR_OK; + AppExecFwk::AddFormFailedErrorType errType; if (formRenderer_ == nullptr || initState_ == FormRendererInitState::UNINITIALIZED) { formRenderer_ = std::make_shared(context_, runtime_, eventHandler_); if (!formRenderer_) { @@ -141,22 +141,35 @@ void FormRendererGroup::InnerAddForm(const FormRequest& formRequest) compId.c_str(), std::to_string(formJsInfo.formId).c_str(), formJsInfo.formData.size()); - formRenderer_->AddForm(want, formJsInfo); + errCode = formRenderer_->AddForm(want, formJsInfo); initState_ = FormRendererInitState::INITIALIZED; + errType = AppExecFwk::AddFormFailedErrorType::SURFACE_NODE_CREATE_FAILED; } else if (initState_ == FormRendererInitState::PRE_INITIALIZED) { HILOG_INFO("RunFormPage compId is %{public}s. formId is %{public}s, formJsInfo.formData.size is %{public}zu", compId.c_str(), std::to_string(formJsInfo.formId).c_str(), formJsInfo.formData.size()); - formRenderer_->RunFormPage(want, formJsInfo); + errCode = formRenderer_->RunFormPage(want, formJsInfo); initState_ = FormRendererInitState::INITIALIZED; + errType = AppExecFwk::AddFormFailedErrorType::SURFACE_NODE_CREATE_FAILED; } else { // initState_ == FormRendererInitState::INITIALIZED - HILOG_INFO("AttachForm compId is %{public}s, formRequests size is %{public}s, \ - formJsInfo.formData.size is %{public}zu", + HILOG_INFO("AttachForm compId: %{public}s, currentCompId_: %{public}s, formRequests size is %{public}s, " + "formJsInfo.formData.size is %{public}zu", compId.c_str(), + currentCompId_.c_str(), std::to_string(formRequests_.size()).c_str(), formJsInfo.formData.size()); - formRenderer_->AttachForm(want, formJsInfo); + errCode = formRenderer_->AttachForm(want, formJsInfo); + errType = AppExecFwk::AddFormFailedErrorType::SURFACE_NODE_REUSE_FAILED; + } + + if (errCode != ERR_OK) { + AppExecFwk::FormEventReport::SendFormFailedEvent(AppExecFwk::FormEventName::FORM_NODE_ERROR, + formJsInfo.formId, + formJsInfo.bundleName, + formJsInfo.formName, + static_cast(errType), + errCode); } } diff --git a/test/unittest/core/pattern/BUILD.gn b/test/unittest/core/pattern/BUILD.gn index 07efd398811..24da7d1fb40 100644 --- a/test/unittest/core/pattern/BUILD.gn +++ b/test/unittest/core/pattern/BUILD.gn @@ -42,10 +42,7 @@ group("core_pattern_unittest") { "divider:divider_test_ng", "flex:flex_test_ng", "folder_stack:folder_stack_test_ng", - "form:form_node_test", - "form:form_pattern_test", - "form:form_test_ng", - "form:form_special_style_test", + "form:ace_form_test", "form_link:form_link_test", "gauge:gauge_test_ng", "grid:grid_test_ng", diff --git a/test/unittest/core/pattern/form/BUILD.gn b/test/unittest/core/pattern/form/BUILD.gn index f7c36310f3e..c705fdf8ec4 100644 --- a/test/unittest/core/pattern/form/BUILD.gn +++ b/test/unittest/core/pattern/form/BUILD.gn @@ -180,4 +180,14 @@ ohos_unittest("form_special_style_test") { "bundle_framework:appexecfwk_base", "form_fwk:fmskit_native", ] +} + +group("ace_form_test") { + testonly = true + deps = [ + ":form_node_test", + ":form_pattern_test", + ":form_test_ng", + ":form_special_style_test" + ] } \ No newline at end of file diff --git a/test/unittest/interfaces/BUILD.gn b/test/unittest/interfaces/BUILD.gn index 4fe37a8dd6f..093ed091fe8 100644 --- a/test/unittest/interfaces/BUILD.gn +++ b/test/unittest/interfaces/BUILD.gn @@ -57,359 +57,6 @@ ohos_unittest("ui_content_test") { configs = [ "$ace_root/test/unittest:ace_unittest_config" ] } -ohos_unittest("form_render_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp", - "$ace_root/test/mock/interfaces/mock_uicontent_creator.cpp", - "form_render/form_render_test.cpp", - "form_render/form_renderer_dispatcher_proxy_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [ - "$ace_root/test/unittest:ace_base", - "$ace_root/test/unittest:ace_components_base", - "$ace_root/test/unittest:ace_components_event", - "$ace_root/test/unittest:ace_components_gestures", - "$ace_root/test/unittest:ace_components_layout", - "$ace_root/test/unittest:ace_components_manager", - "$ace_root/test/unittest:ace_components_mock", - "$ace_root/test/unittest:ace_components_pattern", - "$ace_root/test/unittest:ace_components_property", - "$ace_root/test/unittest:ace_components_render", - "$ace_root/test/unittest:ace_components_syntax", - "$ace_root/test/unittest:ace_core_animation", - "$ace_root/test/unittest:ace_core_extra", - "$ace_root/test/unittest:ace_engine_unittest_flutter_deps", - "$ace_root/test/unittest:ace_unittest_log", - ] - - external_deps = [ - "ability_base:want", - "ability_runtime:ability_context_native", - "ability_runtime:ability_manager", - "ability_runtime:runtime", - "accessibility:accessibility_common", - "ace_engine:ace_uicontent", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "input:libmmi-client", - "ipc:ipc_core", - "napi:ace_napi", - "window_manager:libwm", - "hisysevent:libhisysevent", - "hicollie:libhicollie", - ] -} - -ohos_unittest("form_render_group_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp", - "$ace_root/test/mock/base/mock_ace_performance_check.cpp", - "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", - "$ace_root/test/mock/base/mock_engine_helper.cpp", - "$ace_root/test/mock/base/mock_frame_report.cpp", - "$ace_root/test/mock/base/mock_frame_trace_adapter.cpp", - "$ace_root/test/mock/base/mock_lifecycle_checkable.cpp", - "$ace_root/test/mock/base/mock_ressched_report.cpp", - "$ace_root/test/mock/base/mock_system_properties.cpp", - "$ace_root/test/mock/core/common/mock_ace_application_info.cpp", - "$ace_root/test/mock/core/common/mock_container.cpp", - "$ace_root/test/mock/core/common/mock_raw_recognizer.cpp", - "$ace_root/test/mock/core/image_provider/mock_image_source_info.cpp", - "$ace_root/test/mock/core/package/mock_package_event_proxy.cpp", - "$ace_root/test/mock/core/pipeline/mock_element_register.cpp", - "$ace_root/test/mock/core/pipeline/mock_pipeline_context.cpp", - "$ace_root/test/mock/core/render/mock_animation_utils.cpp", - "$ace_root/test/mock/core/render/mock_modifier_adapter.cpp", - "$ace_root/test/mock/core/render/mock_render_context_creator.cpp", - "$ace_root/test/mock/interfaces/mock_uicontent_creator.cpp", - "form_render/form_render_group_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [ - "$ace_root/test/unittest:ace_base", - "$ace_root/test/unittest:ace_components_base", - "$ace_root/test/unittest:ace_components_event", - "$ace_root/test/unittest:ace_components_gestures", - "$ace_root/test/unittest:ace_components_layout", - "$ace_root/test/unittest:ace_components_manager", - "$ace_root/test/unittest:ace_components_pattern", - "$ace_root/test/unittest:ace_components_property", - "$ace_root/test/unittest:ace_components_render", - "$ace_root/test/unittest:ace_components_syntax", - "$ace_root/test/unittest:ace_core_animation", - "$ace_root/test/unittest:ace_core_extra", - "$ace_root/test/unittest:ace_engine_unittest_flutter_deps", - "$ace_root/test/unittest:ace_unittest_log", - "$ace_root/test/unittest:ace_unittest_trace", - ] - - external_deps = [ - "ability_base:configuration", - "ability_base:want", - "ability_runtime:ability_context_native", - "ability_runtime:ability_manager", - "ability_runtime:runtime", - "accessibility:accessibility_common", - "ace_engine:ace_uicontent", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "input:libmmi-client", - "ipc:ipc_core", - "napi:ace_napi", - "window_manager:libwm", - "hisysevent:libhisysevent", - "hicollie:libhicollie", - ] -} - -ohos_unittest("form_render_delegate_proxy_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", - "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", - "$ace_root/test/mock/base/mock_system_properties.cpp", - "$ace_root/test/mock/core/common/mock_container.cpp", - "form_render/form_render_delegate_proxy_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [] - - external_deps = [ - "ability_base:want", - "ability_runtime:ability_context_native", - "ability_runtime:ability_manager", - "ability_runtime:runtime", - "accessibility:accessibility_common", - "ace_engine:ace_uicontent", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "input:libmmi-client", - "ipc:ipc_core", - "napi:ace_napi", - ] -} - -ohos_unittest("form_render_delegate_stub_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", - "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", - "$ace_root/test/mock/base/mock_system_properties.cpp", - "$ace_root/test/mock/core/common/mock_container.cpp", - "form_render/form_render_delegate_stub_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [] - - external_deps = [ - "ability_base:want", - "bundle_framework:appexecfwk_core", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "ipc:ipc_core", - "napi:ace_napi", - ] -} - -ohos_unittest("form_render_dispatcher_stub_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/frameworks/core/pipeline_ng/ui_task_scheduler.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp", - "$ace_root/test/mock/base/mock_ace_performance_check.cpp", - "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", - "$ace_root/test/mock/base/mock_engine_helper.cpp", - "$ace_root/test/mock/base/mock_frame_report.cpp", - "$ace_root/test/mock/base/mock_frame_trace_adapter.cpp", - "$ace_root/test/mock/base/mock_ressched_report.cpp", - "$ace_root/test/mock/base/mock_system_properties.cpp", - "$ace_root/test/mock/core/common/mock_ace_application_info.cpp", - "$ace_root/test/mock/core/common/mock_container.cpp", - "$ace_root/test/mock/core/common/mock_raw_recognizer.cpp", - "$ace_root/test/mock/core/event/mock_touch_event.cpp", - "$ace_root/test/mock/core/image_provider/mock_image_source_info.cpp", - "$ace_root/test/mock/core/pipeline/mock_element_register.cpp", - "$ace_root/test/mock/core/pipeline/mock_pipeline_context.cpp", - "$ace_root/test/mock/core/render/mock_animation_utils.cpp", - "$ace_root/test/mock/core/render/mock_modifier_adapter.cpp", - "$ace_root/test/mock/core/render/mock_render_context_creator.cpp", - "$ace_root/test/mock/interfaces/mock_uicontent_creator.cpp", - "form_render/form_render_dispatcher_stub_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [] - - external_deps = [ - "ability_base:want", - "ability_runtime:ability_context_native", - "ability_runtime:ability_manager", - "ability_runtime:runtime", - "accessibility:accessibility_common", - "ace_engine:ace_uicontent", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "input:libmmi-client", - "ipc:ipc_core", - "napi:ace_napi", - "window_manager:libwm", - "hisysevent:libhisysevent", - "hicollie:libhicollie", - ] -} - -ohos_unittest("form_render_delegate_impl_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", - "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", - "$ace_root/test/mock/base/mock_system_properties.cpp", - "$ace_root/test/mock/core/common/mock_container.cpp", - "form_render/form_render_delegate_impl_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [] - - external_deps = [ - "ability_base:want", - "bundle_framework:appexecfwk_core", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "ipc:ipc_core", - "napi:ace_napi", - ] -} - -ohos_unittest("form_render_dispatcher_impl_test") { - module_out_path = interface_test_output_path - include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] - sources = [ - "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", - "$ace_root/interfaces/inner_api/form_render/src/form_renderer_event_report.cpp", - "form_render/form_render_dispatcher_impl_test.cpp", - ] - - configs = [ "$ace_root/test/unittest:ace_unittest_config" ] - - deps = [] - - external_deps = [ - "ability_base:want", - "ability_runtime:ability_context_native", - "ability_runtime:ability_manager", - "ability_runtime:runtime", - "accessibility:accessibility_common", - "ace_engine:ace_uicontent", - "cJSON:cjson", - "c_utils:utils", - "eventhandler:libeventhandler", - "form_fwk:form_manager", - "googletest:gmock_main", - "graphic_2d:librender_service_base", - "graphic_2d:librender_service_client", - "graphic_surface:surface", - "hilog:libhilog", - "input:libmmi-client", - "ipc:ipc_core", - "napi:ace_napi", - "window_manager:libwm", - "hisysevent:libhisysevent", - "hicollie:libhicollie", - ] -} - ohos_unittest("drawable_descriptor_test") { module_out_path = interface_test_output_path @@ -1346,13 +993,6 @@ group("interfaces_unittest") { ":drag_and_drop_test", ":drawable_descriptor_test", ":extension_custom_node_test_ng", - ":form_render_delegate_impl_test", - ":form_render_delegate_proxy_test", - ":form_render_delegate_stub_test", - ":form_render_dispatcher_impl_test", - ":form_render_dispatcher_stub_test", - ":form_render_group_test", - ":form_render_test", ":js_drawable_descriptor_test", ":native_key_event_test", ":native_node_napi_test", @@ -1373,5 +1013,6 @@ group("interfaces_unittest") { "ace_ui_input_event:ui_input_event_test", "ace_key_event:key_event_test", "napi:arkui_napi_test", + "form_render:ace_form_render_test", ] } diff --git a/test/unittest/interfaces/form_render/BUILD.gn b/test/unittest/interfaces/form_render/BUILD.gn new file mode 100644 index 00000000000..62eb34cae68 --- /dev/null +++ b/test/unittest/interfaces/form_render/BUILD.gn @@ -0,0 +1,376 @@ +# 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. + +import("//foundation/arkui/ace_engine/test/unittest/ace_unittest.gni") + +ohos_unittest("form_render_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", + "$ace_root/test/mock/interfaces/mock_uicontent_creator.cpp", + "form_render_test.cpp", + "form_renderer_dispatcher_proxy_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [ + "$ace_root/test/unittest:ace_base", + "$ace_root/test/unittest:ace_components_base", + "$ace_root/test/unittest:ace_components_event", + "$ace_root/test/unittest:ace_components_gestures", + "$ace_root/test/unittest:ace_components_layout", + "$ace_root/test/unittest:ace_components_manager", + "$ace_root/test/unittest:ace_components_mock", + "$ace_root/test/unittest:ace_components_pattern", + "$ace_root/test/unittest:ace_components_property", + "$ace_root/test/unittest:ace_components_render", + "$ace_root/test/unittest:ace_components_syntax", + "$ace_root/test/unittest:ace_core_animation", + "$ace_root/test/unittest:ace_core_extra", + "$ace_root/test/unittest:ace_engine_unittest_flutter_deps", + "$ace_root/test/unittest:ace_unittest_log", + ] + + external_deps = [ + "ability_base:want", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "accessibility:accessibility_common", + "ace_engine:ace_uicontent", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "input:libmmi-client", + "ipc:ipc_core", + "napi:ace_napi", + "window_manager:libwm", + "hisysevent:libhisysevent", + "hicollie:libhicollie", + ] +} + +ohos_unittest("form_render_group_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", + "$ace_root/test/mock/base/mock_ace_performance_check.cpp", + "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", + "$ace_root/test/mock/base/mock_engine_helper.cpp", + "$ace_root/test/mock/base/mock_frame_report.cpp", + "$ace_root/test/mock/base/mock_frame_trace_adapter.cpp", + "$ace_root/test/mock/base/mock_lifecycle_checkable.cpp", + "$ace_root/test/mock/base/mock_ressched_report.cpp", + "$ace_root/test/mock/base/mock_system_properties.cpp", + "$ace_root/test/mock/core/common/mock_ace_application_info.cpp", + "$ace_root/test/mock/core/common/mock_container.cpp", + "$ace_root/test/mock/core/common/mock_raw_recognizer.cpp", + "$ace_root/test/mock/core/image_provider/mock_image_source_info.cpp", + "$ace_root/test/mock/core/package/mock_package_event_proxy.cpp", + "$ace_root/test/mock/core/pipeline/mock_element_register.cpp", + "$ace_root/test/mock/core/pipeline/mock_pipeline_context.cpp", + "$ace_root/test/mock/core/render/mock_animation_utils.cpp", + "$ace_root/test/mock/core/render/mock_modifier_adapter.cpp", + "$ace_root/test/mock/core/render/mock_render_context_creator.cpp", + "$ace_root/test/mock/interfaces/mock_uicontent_creator.cpp", + "form_render_group_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [ + "$ace_root/test/unittest:ace_base", + "$ace_root/test/unittest:ace_components_base", + "$ace_root/test/unittest:ace_components_event", + "$ace_root/test/unittest:ace_components_gestures", + "$ace_root/test/unittest:ace_components_layout", + "$ace_root/test/unittest:ace_components_manager", + "$ace_root/test/unittest:ace_components_pattern", + "$ace_root/test/unittest:ace_components_property", + "$ace_root/test/unittest:ace_components_render", + "$ace_root/test/unittest:ace_components_syntax", + "$ace_root/test/unittest:ace_core_animation", + "$ace_root/test/unittest:ace_core_extra", + "$ace_root/test/unittest:ace_engine_unittest_flutter_deps", + "$ace_root/test/unittest:ace_unittest_log", + "$ace_root/test/unittest:ace_unittest_trace", + ] + + external_deps = [ + "ability_base:configuration", + "ability_base:want", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "accessibility:accessibility_common", + "ace_engine:ace_uicontent", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "input:libmmi-client", + "ipc:ipc_core", + "napi:ace_napi", + "window_manager:libwm", + "hisysevent:libhisysevent", + "hicollie:libhicollie", + ] +} + +ohos_unittest("form_render_delegate_proxy_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", + "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", + "$ace_root/test/mock/base/mock_system_properties.cpp", + "$ace_root/test/mock/core/common/mock_container.cpp", + "form_render_delegate_proxy_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [] + + external_deps = [ + "ability_base:want", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "accessibility:accessibility_common", + "ace_engine:ace_uicontent", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "input:libmmi-client", + "ipc:ipc_core", + "napi:ace_napi", + ] +} + +ohos_unittest("form_render_delegate_stub_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", + "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", + "$ace_root/test/mock/base/mock_system_properties.cpp", + "$ace_root/test/mock/core/common/mock_container.cpp", + "form_render_delegate_stub_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [] + + external_deps = [ + "ability_base:want", + "bundle_framework:appexecfwk_core", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "ipc:ipc_core", + "napi:ace_napi", + ] +} + +ohos_unittest("form_render_dispatcher_stub_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/frameworks/core/pipeline_ng/ui_task_scheduler.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_proxy.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_group.cpp", + "$ace_root/test/mock/base/mock_ace_performance_check.cpp", + "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", + "$ace_root/test/mock/base/mock_engine_helper.cpp", + "$ace_root/test/mock/base/mock_frame_report.cpp", + "$ace_root/test/mock/base/mock_frame_trace_adapter.cpp", + "$ace_root/test/mock/base/mock_ressched_report.cpp", + "$ace_root/test/mock/base/mock_system_properties.cpp", + "$ace_root/test/mock/core/common/mock_ace_application_info.cpp", + "$ace_root/test/mock/core/common/mock_container.cpp", + "$ace_root/test/mock/core/common/mock_raw_recognizer.cpp", + "$ace_root/test/mock/core/event/mock_touch_event.cpp", + "$ace_root/test/mock/core/image_provider/mock_image_source_info.cpp", + "$ace_root/test/mock/core/pipeline/mock_element_register.cpp", + "$ace_root/test/mock/core/pipeline/mock_pipeline_context.cpp", + "$ace_root/test/mock/core/render/mock_animation_utils.cpp", + "$ace_root/test/mock/core/render/mock_modifier_adapter.cpp", + "$ace_root/test/mock/core/render/mock_render_context_creator.cpp", + "$ace_root/test/mock/interfaces/mock_uicontent_creator.cpp", + "form_render_dispatcher_stub_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [] + + external_deps = [ + "ability_base:want", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "accessibility:accessibility_common", + "ace_engine:ace_uicontent", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "input:libmmi-client", + "ipc:ipc_core", + "napi:ace_napi", + "window_manager:libwm", + "hisysevent:libhisysevent", + "hicollie:libhicollie", + ] +} + +ohos_unittest("form_render_delegate_impl_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_delegate_stub.cpp", + "$ace_root/test/mock/base/mock_ace_performance_monitor.cpp", + "$ace_root/test/mock/base/mock_system_properties.cpp", + "$ace_root/test/mock/core/common/mock_container.cpp", + "form_render_delegate_impl_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [] + + external_deps = [ + "ability_base:want", + "bundle_framework:appexecfwk_core", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "ipc:ipc_core", + "napi:ace_napi", + ] +} + +ohos_unittest("form_render_dispatcher_impl_test") { + module_out_path = interface_test_output_path + include_dirs = [ "$ace_root/interfaces/inner_api/form_render/include" ] + sources = [ + "$ace_root/interfaces/inner_api/form_render/src/form_renderer.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_impl.cpp", + "$ace_root/interfaces/inner_api/form_render/src/form_renderer_dispatcher_stub.cpp", + "form_render_dispatcher_impl_test.cpp", + ] + + configs = [ "$ace_root/test/unittest:ace_unittest_config" ] + + deps = [] + + external_deps = [ + "ability_base:want", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:runtime", + "accessibility:accessibility_common", + "ace_engine:ace_uicontent", + "cJSON:cjson", + "c_utils:utils", + "eventhandler:libeventhandler", + "form_fwk:form_manager", + "googletest:gmock_main", + "graphic_2d:librender_service_base", + "graphic_2d:librender_service_client", + "graphic_surface:surface", + "hilog:libhilog", + "input:libmmi-client", + "ipc:ipc_core", + "napi:ace_napi", + "window_manager:libwm", + "hisysevent:libhisysevent", + "hicollie:libhicollie", + ] +} + +group("ace_form_render_test") { + testonly = true + deps = [ + ":form_render_delegate_impl_test", + ":form_render_delegate_proxy_test", + ":form_render_delegate_stub_test", + ":form_render_dispatcher_impl_test", + ":form_render_dispatcher_stub_test", + ":form_render_group_test", + ":form_render_test" + ] +} \ No newline at end of file diff --git a/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp b/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp index 76078071e52..f88527ca97a 100644 --- a/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp @@ -80,9 +80,12 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_001, TestSize.Le EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, want), ERR_INVALID_DATA); std::string onSurfaceCreateKey; - auto onSurfaceCreate = [&onSurfaceCreateKey](const std::shared_ptr& /* surfaceNode */, - const OHOS::AppExecFwk::FormJsInfo& /* info */, - const AAFwk::Want& /* want */) { onSurfaceCreateKey = CHECK_KEY; }; + auto onSurfaceCreate = [&onSurfaceCreateKey](const std::shared_ptr & /* surfaceNode */, + const OHOS::AppExecFwk::FormJsInfo & /* info */, + const AAFwk::Want & /* want */) -> int32_t { + onSurfaceCreateKey = CHECK_KEY; + return ERR_OK; + }; renderDelegate->SetSurfaceCreateEventHandler(std::move(onSurfaceCreate)); EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, want), ERR_OK); GTEST_LOG_(INFO) << "FormRenderDelegateImplTest_001 end"; diff --git a/test/unittest/interfaces/form_render/form_render_test.cpp b/test/unittest/interfaces/form_render/form_render_test.cpp index 06d8ba0f38a..dfb22f67b02 100644 --- a/test/unittest/interfaces/form_render/form_render_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_test.cpp @@ -23,7 +23,6 @@ #include "interfaces/inner_api/form_render/include/form_renderer.h" #include "interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h" #include "interfaces/inner_api/form_render/include/form_renderer_group.h" -#include "interfaces/inner_api/form_render/include/form_renderer_event_report.h" #include "interfaces/inner_api/ace/serialized_gesture.h" #include "test/mock/core/pipeline/mock_pipeline_context.h" @@ -228,9 +227,12 @@ HWTEST_F(FormRenderTest, FormRenderTest002, TestSize.Level1) * @tc.steps: step2. register callback for rendererDelegate */ std::string onSurfaceCreateKey; - auto onSurfaceCreate = [&onSurfaceCreateKey](const std::shared_ptr& /* surfaceNode */, - const OHOS::AppExecFwk::FormJsInfo& /* info */, - const AAFwk::Want& /* want */) { onSurfaceCreateKey = CHECK_KEY; }; + auto onSurfaceCreate = [&onSurfaceCreateKey](const std::shared_ptr & /* surfaceNode */, + const OHOS::AppExecFwk::FormJsInfo & /* info */, + const AAFwk::Want & /* want */) -> int32_t { + onSurfaceCreateKey = CHECK_KEY; + return ERR_OK; + }; renderDelegate->SetSurfaceCreateEventHandler(std::move(onSurfaceCreate)); std::string onActionEventKey; @@ -784,32 +786,6 @@ HWTEST_F(FormRenderTest, FormRenderTest030, TestSize.Level1) EXPECT_EQ(res, true); } -HWTEST_F(FormRenderTest, FormRenderTest031, TestSize.Level1) -{ - int64_t formId = 100; - std::string bundleName = "testBundleName"; - std::string formName = "testFormName"; - FormRenderEventReport::StartSurfaceNodeTimeoutReportTimer(formId, bundleName, formName); - EXPECT_NE(FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId), - FormRenderEventReport::waitSurfaceNodeTimerMap_.end()); - - FormRenderEventReport::StopTimer(formId); - EXPECT_EQ(FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId), - FormRenderEventReport::waitSurfaceNodeTimerMap_.end()); -} - -HWTEST_F(FormRenderTest, FormRenderTest032, TestSize.Level1) -{ - int64_t formId = 100; - std::string bundleName = "testBundleName"; - std::string formName = "testFormName"; - - FormRenderEventReport::waitSurfaceNodeTimerMap_[formId] = 100; - FormRenderEventReport::StopTimer(formId); - EXPECT_EQ(FormRenderEventReport::waitSurfaceNodeTimerMap_.find(formId), - FormRenderEventReport::waitSurfaceNodeTimerMap_.end()); -} - HWTEST_F(FormRenderTest, FormRenderTest033, TestSize.Level1) { auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderTest033"); @@ -831,9 +807,12 @@ HWTEST_F(FormRenderTest, FormRenderTest033, TestSize.Level1) EXPECT_TRUE(formRenderer->uiContent_); OHOS::AppExecFwk::FormJsInfo newFormJsInfo; - auto onSurfaceCreate = [&newFormJsInfo](const std::shared_ptr& /* surfaceNode */, - const OHOS::AppExecFwk::FormJsInfo& info, - const AAFwk::Want& /* want */) { newFormJsInfo = info; }; + auto onSurfaceCreate = [&newFormJsInfo](const std::shared_ptr & /* surfaceNode */, + const OHOS::AppExecFwk::FormJsInfo &info, + const AAFwk::Want & /* want */) -> int32_t { + newFormJsInfo = info; + return ERR_OK; + }; renderDelegate->SetSurfaceCreateEventHandler(std::move(onSurfaceCreate)); formJsInfo.uiSyntax = OHOS::AppExecFwk::FormType::ETS; -- Gitee From 7296f7a4ab0829212f9bbabef213d979cc5dfbc1 Mon Sep 17 00:00:00 2001 From: openharmony_ci <120357966@qq.com> Date: Fri, 5 Sep 2025 04:36:38 +0000 Subject: [PATCH 2/3] =?UTF-8?q?!71008=20=E4=BF=AE=E5=A4=8Dtdd=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E5=A4=B1=E8=B4=A5=20Merge=20pull=20request=20!71008?= =?UTF-8?q?=20from=20xiangcong/master?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/mock/interfaces/mock_uicontent.h | 1 + .../core/pattern/form/form_pattern_test.cpp | 7 ---- .../core/pattern/form/form_test_ng.cpp | 5 --- .../form_render_delegate_impl_test.cpp | 26 +++++++------- .../form_render_delegate_proxy_test.cpp | 6 ++-- .../form_render_delegate_stub_test.cpp | 14 ++++---- .../form_render/form_render_test.cpp | 35 ++++++++++++------- 7 files changed, 48 insertions(+), 46 deletions(-) diff --git a/test/mock/interfaces/mock_uicontent.h b/test/mock/interfaces/mock_uicontent.h index 711e1e7a67e..2793f3bb985 100644 --- a/test/mock/interfaces/mock_uicontent.h +++ b/test/mock/interfaces/mock_uicontent.h @@ -67,6 +67,7 @@ public: MOCK_METHOD1(SetIgnoreViewSafeArea, void(bool ignoreViewSafeArea)); MOCK_METHOD0(GetBackgroundColor, uint32_t()); MOCK_METHOD1(SetBackgroundColor, void(uint32_t color)); + MOCK_METHOD1(SetFormBackgroundColor, void(const std::string& color)); MOCK_METHOD2(SetWindowContainerColor, void(uint32_t activeColor, uint32_t inactiveColor)); MOCK_METHOD2(DumpInfo, void(const std::vector& params, std::vector& info)); MOCK_METHOD1(SetNextFrameLayoutCallback, void(std::function&& callback)); diff --git a/test/unittest/core/pattern/form/form_pattern_test.cpp b/test/unittest/core/pattern/form/form_pattern_test.cpp index 6bfb017ceae..bbce337be73 100644 --- a/test/unittest/core/pattern/form/form_pattern_test.cpp +++ b/test/unittest/core/pattern/form/form_pattern_test.cpp @@ -644,13 +644,6 @@ HWTEST_F(FormPatternTest, FormPatternTest_020, TestSize.Level1) pattern->OnRebuildFrame(); EXPECT_EQ(num, 0); formNode->renderContext_ = renderContext; - - std::shared_ptr pixelMap = std::make_shared(); - pattern->OnSnapshot(pixelMap); - pattern->HandleOnSnapshot(pixelMap); - pattern->OnRebuildFrame(); - EXPECT_EQ(pattern->isSnapshot_, true); - EXPECT_EQ(renderContext->GetHost()->GetChildren().size(), 1); } /** diff --git a/test/unittest/core/pattern/form/form_test_ng.cpp b/test/unittest/core/pattern/form/form_test_ng.cpp index 310ac24aa18..c640345d421 100644 --- a/test/unittest/core/pattern/form/form_test_ng.cpp +++ b/test/unittest/core/pattern/form/form_test_ng.cpp @@ -1324,11 +1324,6 @@ HWTEST_F(FormTestNg, FormPatternTest007, TestSize.Level1) pattern->OnSnapshot(pixelMap); pattern->HandleOnSnapshot(pixelMap); ASSERT_EQ(pattern->isSnapshot_, false); - - pixelMap = std::make_shared(); - pattern->OnSnapshot(pixelMap); - pattern->HandleOnSnapshot(pixelMap); - ASSERT_EQ(pattern->isSnapshot_, true); } /** diff --git a/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp b/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp index f88527ca97a..5cf8df807ef 100644 --- a/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_delegate_impl_test.cpp @@ -14,6 +14,8 @@ */ #include "gtest/gtest.h" +#include "appexecfwk_errors.h" +#include "form_mgr_errors.h" #include "interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h" using namespace testing; @@ -69,15 +71,15 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_001, TestSize.Le formJsInfo.bundleName = "bundleName"; formJsInfo.moduleName = "moduleName"; formJsInfo.formId = -1; - EXPECT_EQ(renderDelegate->OnSurfaceCreate(nullptr, formJsInfo, want), ERR_NULL_OBJECT); + EXPECT_EQ(renderDelegate->OnSurfaceCreate(nullptr, formJsInfo, want), ERR_APPEXECFWK_FORM_INVALID_PARAM); std::string surfaceNodeName = "ArkTSCardNode"; struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; std::shared_ptr rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true); - EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, want), ERR_INVALID_DATA); + EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, want), ERR_APPEXECFWK_FORM_INVALID_PARAM); formJsInfo.formId = 1; - EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, want), ERR_INVALID_DATA); + EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, want), ERR_APPEXECFWK_FORM_COMMON_CODE); std::string onSurfaceCreateKey; auto onSurfaceCreate = [&onSurfaceCreateKey](const std::shared_ptr & /* surfaceNode */, @@ -118,7 +120,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_003, TestSize.Le { GTEST_LOG_(INFO) << "FormRenderDelegateImplTest_003 start"; sptr renderDelegate = new FormRendererDelegateImpl(); - EXPECT_EQ(renderDelegate->OnError("", ""), ERR_INVALID_DATA); + EXPECT_EQ(renderDelegate->OnError("", ""), ERR_APPEXECFWK_FORM_COMMON_CODE); std::string onErrorEventKey; auto onError = [&onErrorEventKey]( @@ -157,7 +159,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_005, TestSize.Le GTEST_LOG_(INFO) << "FormRenderDelegateImplTest_005 start"; sptr renderDelegate = new FormRendererDelegateImpl(); uint16_t surfaceId= 11111; - EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_INVALID_DATA); + EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_APPEXECFWK_FORM_COMMON_CODE); std::string onSurfaceDetachEventKey; auto onSurfaceDetach = [&onSurfaceDetachEventKey]() { onSurfaceDetachEventKey = CHECK_KEY; }; @@ -247,7 +249,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_009, TestSize.Le MessageParcel reply; MessageOption option; auto ans = renderDelegate->OnRemoteRequest(code, data, reply, option); - EXPECT_EQ(ans, ERR_INVALID_VALUE); + EXPECT_EQ(ans, ERR_APPEXECFWK_PARCEL_ERROR); } /** @@ -269,7 +271,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_010, TestSize.Le MessageParcel reply; MessageOption option; auto ans = renderDelegate->OnRemoteRequest(code, data, reply, option); - EXPECT_EQ(ans, ERR_INVALID_VALUE); + EXPECT_EQ(ans, ERR_APPEXECFWK_PARCEL_ERROR); } /** @@ -293,7 +295,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_011, TestSize.Le MessageParcel reply; MessageOption option; auto ans = renderDelegate->OnRemoteRequest(code, data, reply, option); - EXPECT_EQ(ans, ERR_INVALID_VALUE); + EXPECT_EQ(ans, ERR_APPEXECFWK_PARCEL_ERROR); } /** @@ -317,7 +319,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_012, TestSize.Le MessageParcel reUseReply; MessageOption reUseOption; auto reUseAns = renderDelegate->OnRemoteRequest(reUseCode, reUseData, reUseReply, reUseOption); - EXPECT_EQ(reUseAns, ERR_INVALID_VALUE); + EXPECT_EQ(reUseAns, ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND); } /** @@ -337,7 +339,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_013, TestSize.Le MessageParcel reUseReply; MessageOption reUseOption; auto reUseAns = renderDelegate->OnRemoteRequest(reUseCode, reUseData, reUseReply, reUseOption); - EXPECT_EQ(reUseAns, ERR_INVALID_VALUE); + EXPECT_EQ(reUseAns, ERR_APPEXECFWK_PARCEL_ERROR); } /** @@ -359,7 +361,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_014, TestSize.Le MessageParcel reUseReply; MessageOption reUseOption; auto reUseAns = renderDelegate->OnRemoteRequest(reUseCode, reUseData, reUseReply, reUseOption); - EXPECT_EQ(reUseAns, ERR_INVALID_VALUE); + EXPECT_EQ(reUseAns, ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND); } /** @@ -381,7 +383,7 @@ HWTEST_F(FormRenderDelegateImplTest, FormRenderDelegateImplTest_015, TestSize.Le MessageParcel reUseReply; MessageOption reUseOption; auto reUseAns = renderDelegate->OnRemoteRequest(reUseCode, reUseData, reUseReply, reUseOption); - EXPECT_EQ(reUseAns, ERR_INVALID_VALUE); + EXPECT_EQ(reUseAns, ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND); } /** diff --git a/test/unittest/interfaces/form_render/form_render_delegate_proxy_test.cpp b/test/unittest/interfaces/form_render/form_render_delegate_proxy_test.cpp index 57095af68af..7663973a234 100644 --- a/test/unittest/interfaces/form_render/form_render_delegate_proxy_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_delegate_proxy_test.cpp @@ -55,7 +55,7 @@ HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_001, TestSize. formJsInfo.moduleName = "moduleName"; formJsInfo.formId = 1; EXPECT_EQ(formJsInfo.formId, 1); - EXPECT_EQ(renderDelegate->OnSurfaceCreate(nullptr, formJsInfo, newWant), ERR_INVALID_VALUE); + EXPECT_EQ(renderDelegate->OnSurfaceCreate(nullptr, formJsInfo, newWant), ERR_APPEXECFWK_PARCEL_ERROR); std::string surfaceNodeName = "ArkTSCardNode"; struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; @@ -64,8 +64,8 @@ HWTEST_F(FormRenderDelegateProxyTest, FormRenderDelegateProxyTest_001, TestSize. EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_OK)); EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, newWant), ERR_OK); - EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_INVALID_VALUE)); - EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, newWant), ERR_INVALID_VALUE); + EXPECT_CALL(*iremoteObject, SendRequest(_, _, _, _)).Times(1).WillRepeatedly(Return(ERR_APPEXECFWK_PARCEL_ERROR)); + EXPECT_EQ(renderDelegate->OnSurfaceCreate(rsNode, formJsInfo, newWant), ERR_APPEXECFWK_PARCEL_ERROR); } /* diff --git a/test/unittest/interfaces/form_render/form_render_delegate_stub_test.cpp b/test/unittest/interfaces/form_render/form_render_delegate_stub_test.cpp index 859aaf26279..70a9889164b 100644 --- a/test/unittest/interfaces/form_render/form_render_delegate_stub_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_delegate_stub_test.cpp @@ -16,6 +16,8 @@ #define private public #include "interfaces/inner_api/form_render/include/form_renderer_delegate_impl.h" #undef private +#include "appexecfwk_errors.h" +#include "form_mgr_errors.h" #include "interfaces/inner_api/form_render/include/form_renderer_delegate_stub.h" #include "test/mock/interfaces/mock_form_render_delegate_stub.h" #include "test/mock/interfaces/mock_i_remote_object_form.h" @@ -70,17 +72,17 @@ HWTEST_F(FormRenderDelegateStubTest, FormRenderDelegateStubTest_002, TestSize.Le MockFormRenderDelegateStub renderDelegate; MessageParcel data; MessageParcel reply; - EXPECT_EQ(renderDelegate.HandleOnSurfaceCreate(data, reply), ERR_INVALID_VALUE); - EXPECT_EQ(renderDelegate.HandleOnSurfaceReuse(data, reply), ERR_INVALID_VALUE); + EXPECT_EQ(renderDelegate.HandleOnSurfaceCreate(data, reply), ERR_APPEXECFWK_PARCEL_ERROR); + EXPECT_EQ(renderDelegate.HandleOnSurfaceReuse(data, reply), ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND); std::string surfaceNodeName = "ArkTSCardNode"; struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; std::shared_ptr rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true); ASSERT_NE(rsNode, nullptr); rsNode->Marshalling(data); - EXPECT_EQ(renderDelegate.HandleOnSurfaceCreate(data, reply), ERR_INVALID_VALUE); + EXPECT_EQ(renderDelegate.HandleOnSurfaceCreate(data, reply), ERR_APPEXECFWK_PARCEL_ERROR); data.WriteUint64(rsNode->GetId()); - EXPECT_EQ(renderDelegate.HandleOnSurfaceReuse(data, reply), ERR_INVALID_VALUE); + EXPECT_EQ(renderDelegate.HandleOnSurfaceReuse(data, reply), ERR_APPEXECFWK_PARCEL_ERROR); GTEST_LOG_(INFO) << "FormRenderDelegateStubTest_002 end"; } @@ -106,12 +108,12 @@ HWTEST_F(FormRenderDelegateStubTest, FormRenderDelegateStubTest_003, TestSize.Le formJsInfo.bundleName = "bundleName"; formJsInfo.moduleName = "moduleName"; data.WriteParcelable(&formJsInfo); - EXPECT_EQ(renderDelegate.HandleOnSurfaceCreate(data, reply), ERR_INVALID_VALUE); + EXPECT_EQ(renderDelegate.HandleOnSurfaceCreate(data, reply), ERR_APPEXECFWK_PARCEL_ERROR); data.WriteUint64(rsNode->GetId()); formJsInfo.bundleName = "bundleName"; formJsInfo.moduleName = "moduleName"; data.WriteParcelable(&formJsInfo); - EXPECT_EQ(renderDelegate.HandleOnSurfaceReuse(data, reply), ERR_INVALID_VALUE); + EXPECT_EQ(renderDelegate.HandleOnSurfaceReuse(data, reply), ERR_APPEXECFWK_PARCEL_ERROR); GTEST_LOG_(INFO) << "FormRenderDelegateStubTest_003 end"; } diff --git a/test/unittest/interfaces/form_render/form_render_test.cpp b/test/unittest/interfaces/form_render/form_render_test.cpp index dfb22f67b02..2d2c98ba6c3 100644 --- a/test/unittest/interfaces/form_render/form_render_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_test.cpp @@ -16,6 +16,7 @@ #include #include #include "gtest/gtest.h" +#include "form_mgr_errors.h" #include "test/mock/interfaces/mock_uicontent.h" #include "ui_content.h" @@ -123,8 +124,8 @@ HWTEST_F(FormRenderTest, FormRenderTest001, TestSize.Level1) EXPECT_TRUE(formRenderer); formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr); EXPECT_TRUE(formRenderer->uiContent_); - EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormWidth(FORM_WIDTH)).WillOnce(Return()); - EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormHeight(FORM_HEIGHT)).WillOnce(Return()); + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormWidth(FORM_WIDTH)).Times(Exactly(2)); + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormHeight(FORM_HEIGHT)).Times(Exactly(2)); EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormSharedImage(_)).WillOnce(Return()); EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), UpdateFormData(_)).WillOnce(Return()); @@ -134,7 +135,12 @@ HWTEST_F(FormRenderTest, FormRenderTest001, TestSize.Level1) EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetActionEventHandler(_)).WillOnce(Return()); EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetErrorEventHandler(_)).WillOnce(Return()); - EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).Times(Exactly(2)); + std::string surfaceNodeName = "ArkTSCardNode"; + struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; + std::shared_ptr rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true); + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()) + .Times(Exactly(3)) + .WillOnce(Return(rsNode)); // call AddForm manually formRenderer->AddForm(want, formJsInfo); EXPECT_EQ(formRenderer->allowUpdate_, true); @@ -267,10 +273,8 @@ HWTEST_F(FormRenderTest, FormRenderTest002, TestSize.Level1) std::string surfaceNodeName = "ArkTSCardNode"; struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; std::shared_ptr rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true); - EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()) - .WillOnce(Return(rsNode)) - .WillOnce(Return(rsNode)) - .WillOnce(Return(rsNode)); + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).Times(Exactly(5)) + .WillRepeatedly(Return(rsNode)); EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), Foreground()).WillOnce(Return()); formRenderer->AddForm(want, formJsInfo); EXPECT_EQ(onSurfaceCreateKey, CHECK_KEY); @@ -352,7 +356,7 @@ HWTEST_F(FormRenderTest, FormRenderTest004, TestSize.Level1) auto fun = [](const std::string&, const std::string&) {}; sptr renderDelegate = new FormRendererDelegateImpl(); renderDelegate->SetErrorEventHandler(nullptr); - EXPECT_EQ(renderDelegate->OnError(code, msg), ERR_INVALID_DATA); + EXPECT_EQ(renderDelegate->OnError(code, msg), ERR_APPEXECFWK_FORM_COMMON_CODE); renderDelegate->SetErrorEventHandler(fun); EXPECT_EQ(renderDelegate->OnError(code, msg), ERR_OK); } @@ -389,7 +393,7 @@ HWTEST_F(FormRenderTest, FormRenderTest006, TestSize.Level1) auto fun = []() {}; sptr renderDelegate = new FormRendererDelegateImpl(); renderDelegate->SetSurfaceDetachEventHandler(nullptr); - EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_INVALID_DATA); + EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_APPEXECFWK_FORM_COMMON_CODE); renderDelegate->SetSurfaceDetachEventHandler(fun); EXPECT_EQ(renderDelegate->OnSurfaceDetach(surfaceId), ERR_OK); } @@ -640,10 +644,15 @@ HWTEST_F(FormRenderTest, FormRenderTest020, TestSize.Level1) want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject()); formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr); EXPECT_TRUE(formRenderer->uiContent_); - std::string surfaceNodeName = "ArkTSCardNode"; - struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; - std::shared_ptr rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true); - EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).WillOnce(Return(rsNode)); + + std::string transparentColor = "#00000000"; + std::string transparentColor1 = "#00FFFFFF"; + want.SetParam(OHOS::AppExecFwk::Constants::PARAM_FORM_TRANSPARENCY_KEY, transparentColor); + formRenderer->backgroundColor_ = transparentColor1; + formRenderer->renderingMode_ = OHOS::AppExecFwk::Constants::RenderingMode::SINGLE_COLOR; + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormBackgroundColor(transparentColor)).Times(1); + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), SetFormBackgroundColor(transparentColor1)) + .Times(1); formRenderer->AttachUIContent(want, formJsInfo); } -- Gitee From 2aba759927f22fc911c73b0c4c87349b7434db0f Mon Sep 17 00:00:00 2001 From: openharmony_ci <120357966@qq.com> Date: Tue, 9 Sep 2025 10:01:26 +0000 Subject: [PATCH 3/3] =?UTF-8?q?!71672=20FRS=E5=A4=8D=E7=94=A8SurfaceNode?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96=20Merge=20pull=20request?= =?UTF-8?q?=20!71672=20from=20xiangcong/master=5F20250904?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form_render/src/form_renderer.cpp | 21 ++++++++++++++----- .../mock_form_render_delegate_stub.h | 2 ++ .../form_render/form_render_test.cpp | 16 ++++++++++++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/interfaces/inner_api/form_render/src/form_renderer.cpp b/interfaces/inner_api/form_render/src/form_renderer.cpp index 0631b762968..5d69a5aa2ac 100644 --- a/interfaces/inner_api/form_render/src/form_renderer.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer.cpp @@ -388,12 +388,19 @@ int32_t FormRenderer::OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsI OHOS::AAFwk::Want newWant; newWant.SetParam(FORM_RENDERER_DISPATCHER, formRendererDispatcherImpl_->AsObject()); HILOG_INFO("Form OnSurfaceReuse, id: %{public}" PRIu64, rsSurfaceNode->GetId()); - int32_t ret = ERR_OK; + OHOS::AppExecFwk::FormJsInfo newFormJsInfo = formJsInfo; if (formJsInfo.uiSyntax == OHOS::AppExecFwk::FormType::ETS) { - OHOS::AppExecFwk::FormJsInfo newFormJsInfo = formJsInfo.CopyFormJsInfoWithoutFormData(); - ret = formRendererDelegate_->OnSurfaceReuse(rsSurfaceNode->GetId(), newFormJsInfo, newWant); - } else { - ret = formRendererDelegate_->OnSurfaceReuse(rsSurfaceNode->GetId(), formJsInfo, newWant); + newFormJsInfo = formJsInfo.CopyFormJsInfoWithoutFormData(); + } + int32_t ret = formRendererDelegate_->OnSurfaceReuse(rsSurfaceNode->GetId(), newFormJsInfo, newWant); + if (ret != ERR_OK) { + HILOG_ERROR("Form OnSurfaceReuse failed, code:%{public}d", ret); + } + if (ret == ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND) { + int32_t result = formRendererDelegate_->OnSurfaceCreate(rsSurfaceNode, newFormJsInfo, newWant); + if (result != ERR_OK) { + HILOG_ERROR("Form OnSurfaceCreate failed, code:%{public}d", result); + } } formRendererDelegate_->OnFormLinkInfoUpdate(cachedInfos_); if (ret != ERR_OK) { @@ -508,6 +515,10 @@ void FormRenderer::SetRenderDelegate(const sptr& remoteObj) void FormRenderer::ResetRenderDelegate() { + if (formRendererDelegate_ && !formRendererDelegate_->AsObject()->IsObjectDead()) { + HILOG_WARN("ResetRenderDelegate formRendererDelegate_ has been replaced."); + return; + } HILOG_INFO("ResetRenderDelegate."); RemoveFormDeathRecipient(); renderDelegateDeathRecipient_ = nullptr; diff --git a/test/mock/interfaces/mock_form_render_delegate_stub.h b/test/mock/interfaces/mock_form_render_delegate_stub.h index 754997d0af4..55f310791fb 100644 --- a/test/mock/interfaces/mock_form_render_delegate_stub.h +++ b/test/mock/interfaces/mock_form_render_delegate_stub.h @@ -20,6 +20,8 @@ #include "iremote_broker.h" #include "iremote_object.h" +#include "form_js_info.h" +#include "interfaces/inner_api/form_render/include/form_renderer_delegate_stub.h" namespace OHOS { namespace Ace { diff --git a/test/unittest/interfaces/form_render/form_render_test.cpp b/test/unittest/interfaces/form_render/form_render_test.cpp index 2d2c98ba6c3..b4947a1207a 100644 --- a/test/unittest/interfaces/form_render/form_render_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_test.cpp @@ -18,6 +18,7 @@ #include "gtest/gtest.h" #include "form_mgr_errors.h" #include "test/mock/interfaces/mock_uicontent.h" +#include "test/mock/interfaces/mock_form_render_delegate_stub.h" #include "ui_content.h" #define private public @@ -687,8 +688,19 @@ HWTEST_F(FormRenderTest, FormRenderTest021, TestSize.Level1) std::string surfaceNodeName = "ArkTSCardNode"; struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceNodeName }; std::shared_ptr rsNode = OHOS::Rosen::RSSurfaceNode::Create(surfaceNodeConfig, true); - EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).Times(Exactly(2)) - .WillOnce(Return(rsNode)); + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).WillOnce(Return(rsNode)); + formRenderer->OnSurfaceReuse(formJsInfo); + + sptr renderDelegateStub = new MockFormRenderDelegateStub(); + formRenderer->formRendererDelegate_ = renderDelegateStub; + EXPECT_CALL(*((MockUIContent*)(formRenderer->uiContent_.get())), GetFormRootNode()).WillRepeatedly(Return(rsNode)); + EXPECT_CALL(*renderDelegateStub, OnSurfaceReuse(_, _, _)).WillOnce(Return(ERR_OK)); + EXPECT_CALL(*renderDelegateStub, OnSurfaceCreate(_, _, _)).Times(0); + formRenderer->OnSurfaceReuse(formJsInfo); + + EXPECT_CALL(*renderDelegateStub, OnSurfaceReuse(_, _, _)) + .WillOnce(Return(ERR_APPEXECFWK_FORM_SURFACE_NODE_NOT_FOUND)); + EXPECT_CALL(*renderDelegateStub, OnSurfaceCreate(_, _, _)).Times(1); formRenderer->OnSurfaceReuse(formJsInfo); } -- Gitee