From 3675c9d83f4f04fdb3b681c0720e22ff30625dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=96=BB=E5=BF=97=E5=8B=87?= Date: Thu, 14 Aug 2025 16:00:28 +0800 Subject: [PATCH] =?UTF-8?q?OnSurfaceCreate=E9=80=9A=E7=9F=A5=E6=97=B6?= =?UTF-8?q?=E6=97=A0=E9=9C=80=E5=B0=86=E5=8D=A1=E7=89=87=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 喻志勇 --- .../form_render/src/form_renderer.cpp | 17 ++++++++-- .../form_render/form_render_test.cpp | 32 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/interfaces/inner_api/form_render/src/form_renderer.cpp b/interfaces/inner_api/form_render/src/form_renderer.cpp index 59ec646db06..f3c42a388d7 100644 --- a/interfaces/inner_api/form_render/src/form_renderer.cpp +++ b/interfaces/inner_api/form_render/src/form_renderer.cpp @@ -349,7 +349,14 @@ void FormRenderer::OnSurfaceCreate(const OHOS::AppExecFwk::FormJsInfo& formJsInf isRecoverFormToHandleClickEvent); auto rsSurfaceNode = uiContent_->GetFormRootNode(); HILOG_INFO("Form OnSurfaceCreate!"); - int32_t ret = formRendererDelegate_->OnSurfaceCreate(rsSurfaceNode, formJsInfo, newWant); + + int32_t ret = ERR_OK; + if (formJsInfo.uiSyntax == OHOS::AppExecFwk::FormType::ETS) { + OHOS::AppExecFwk::FormJsInfo newFormJsInfo = formJsInfo.CopyFormJsInfoWithoutFormData(); + ret = formRendererDelegate_->OnSurfaceCreate(rsSurfaceNode, newFormJsInfo, newWant); + } else { + ret = formRendererDelegate_->OnSurfaceCreate(rsSurfaceNode, formJsInfo, newWant); + } if (ret == ERR_OK) { FormRenderEventReport::StopTimer(formJsInfo.formId); } @@ -373,7 +380,13 @@ void FormRenderer::OnSurfaceReuse(const OHOS::AppExecFwk::FormJsInfo& formJsInfo OHOS::AAFwk::Want newWant; newWant.SetParam(FORM_RENDERER_DISPATCHER, formRendererDispatcherImpl_->AsObject()); HILOG_INFO("Form OnSurfaceReuse."); - int32_t ret = formRendererDelegate_->OnSurfaceReuse(rsSurfaceNode->GetId(), formJsInfo, newWant); + int32_t ret = ERR_OK; + 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); + } formRendererDelegate_->OnFormLinkInfoUpdate(cachedInfos_); if (ret == ERR_OK) { FormRenderEventReport::StopTimer(formJsInfo.formId); diff --git a/test/unittest/interfaces/form_render/form_render_test.cpp b/test/unittest/interfaces/form_render/form_render_test.cpp index 9d5928ca6f2..06d8ba0f38a 100644 --- a/test/unittest/interfaces/form_render/form_render_test.cpp +++ b/test/unittest/interfaces/form_render/form_render_test.cpp @@ -810,4 +810,36 @@ HWTEST_F(FormRenderTest, FormRenderTest032, TestSize.Level1) FormRenderEventReport::waitSurfaceNodeTimerMap_.end()); } +HWTEST_F(FormRenderTest, FormRenderTest033, TestSize.Level1) +{ + auto eventRunner = OHOS::AppExecFwk::EventRunner::Create("FormRenderTest033"); + ASSERT_TRUE(eventRunner); + auto eventHandler = std::make_shared(eventRunner); + auto formRendererGroup = FormRendererGroup::Create(nullptr, nullptr, eventHandler); + EXPECT_TRUE(formRendererGroup); + OHOS::AAFwk::Want want; + want.SetParam(FORM_RENDERER_COMP_ID, FORM_COMPONENT_ID_1); + want.SetParam(FORM_RENDERER_ALLOW_UPDATE, false); + want.SetParam(FORM_RENDER_STATE, true); + sptr renderDelegate = new FormRendererDelegateImpl(); + want.SetParam(FORM_RENDERER_PROCESS_ON_ADD_SURFACE, renderDelegate->AsObject()); + OHOS::AppExecFwk::FormJsInfo formJsInfo; + formRendererGroup->AddForm(want, formJsInfo); + auto formRenderer = formRendererGroup->formRenderer_;; + EXPECT_TRUE(formRenderer); + formRenderer->uiContent_ = UIContent::Create(nullptr, nullptr); + 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; }; + renderDelegate->SetSurfaceCreateEventHandler(std::move(onSurfaceCreate)); + + formJsInfo.uiSyntax = OHOS::AppExecFwk::FormType::ETS; + formJsInfo.formData = "testData"; + formJsInfo.formId = 10; + formRenderer->OnSurfaceCreate(formJsInfo, false); + EXPECT_EQ(newFormJsInfo.formData, ""); +} } // namespace OHOS::Ace \ No newline at end of file -- Gitee