1 /*
2 * Copyright (c) 2023-2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "form_render_impl.h"
17 #include "form_render_service_mgr.h"
18 #include "form_render_service_extension.h"
19 #include "form_constants.h"
20 #include "fms_log_wrapper.h"
21 #include "status_mgr_center/form_render_status_mgr.h"
22
23 namespace OHOS {
24 namespace AppExecFwk {
25 namespace FormRender {
26 using namespace AbilityRuntime;
27 using namespace OHOS::AAFwk::GlobalConfigurationKey;
28
FormRenderServiceCreator(const std::unique_ptr<Runtime> & runtime)29 static OHOS::AbilityRuntime::ServiceExtension *FormRenderServiceCreator(const std::unique_ptr<Runtime> &runtime)
30 {
31 HILOG_DEBUG("Create FormRenderServiceExtension");
32 return FormRenderServiceExtension::Create(runtime);
33 }
34
RegisterServiceExtensionCreator()35 __attribute__((constructor)) void RegisterServiceExtensionCreator()
36 {
37 HILOG_DEBUG("Set FormRenderServiceExtension creator");
38 OHOS::AbilityRuntime::ServiceExtension::SetCreator(FormRenderServiceCreator);
39 }
40
FormRenderImpl()41 FormRenderImpl::FormRenderImpl()
42 {}
43
44 FormRenderImpl::~FormRenderImpl() = default;
45
RenderForm(const FormJsInfo & formJsInfo,const Want & want,sptr<IRemoteObject> callerToken)46 int32_t FormRenderImpl::RenderForm(const FormJsInfo &formJsInfo, const Want &want, sptr<IRemoteObject> callerToken)
47 {
48 HILOG_INFO("formId:%{public}" PRId64, formJsInfo.formId);
49 auto renderForm = [formJsInfo, want, callerToken] {
50 return FormRenderServiceMgr::GetInstance().RenderForm(formJsInfo, want, callerToken);
51 };
52
53 return FormRenderStatusMgr::GetInstance().PostFormEvent(formJsInfo.formId, FormFsmEvent::RENDER_FORM, renderForm);
54 }
55
StopRenderingForm(const FormJsInfo & formJsInfo,const Want & want,const sptr<IRemoteObject> & callerToken)56 int32_t FormRenderImpl::StopRenderingForm(
57 const FormJsInfo &formJsInfo, const Want &want, const sptr<IRemoteObject> &callerToken)
58 {
59 HILOG_INFO("formId:%{public}" PRId64, formJsInfo.formId);
60 auto deleteForm = [formJsInfo, want, callerToken] {
61 return FormRenderServiceMgr::GetInstance().StopRenderingForm(formJsInfo, want, callerToken);
62 };
63
64 return FormRenderStatusMgr::GetInstance().PostFormEvent(formJsInfo.formId, FormFsmEvent::DELETE_FORM, deleteForm);
65 }
66
ReleaseRenderer(int64_t formId,const std::string & compId,const std::string & uid,const Want & want)67 int32_t FormRenderImpl::ReleaseRenderer(
68 int64_t formId, const std::string &compId, const std::string &uid, const Want &want)
69 {
70 HILOG_INFO("formId:%{public}" PRId64, formId);
71 auto releaseForm = [formId, compId, uid, want] {
72 return FormRenderServiceMgr::GetInstance().ReleaseRenderer(formId, compId, uid, want);
73 };
74
75 return FormRenderStatusMgr::GetInstance().PostFormEvent(formId, FormFsmEvent::RECYCLE_FORM, releaseForm);
76 }
77
CleanFormHost(const sptr<IRemoteObject> & hostToken)78 int32_t FormRenderImpl::CleanFormHost(const sptr<IRemoteObject> &hostToken)
79 {
80 return FormRenderServiceMgr::GetInstance().CleanFormHost(hostToken);
81 }
82
ReloadForm(const std::vector<FormJsInfo> && formJsInfos,const Want & want)83 int32_t FormRenderImpl::ReloadForm(const std::vector<FormJsInfo> &&formJsInfos, const Want &want)
84 {
85 return FormRenderServiceMgr::GetInstance().ReloadForm(std::move(formJsInfos), want);
86 }
87
OnUnlock()88 int32_t FormRenderImpl::OnUnlock()
89 {
90 return FormRenderServiceMgr::GetInstance().OnUnlock();
91 }
92
SetVisibleChange(const int64_t & formId,bool isVisible,const Want & want)93 int32_t FormRenderImpl::SetVisibleChange(const int64_t &formId, bool isVisible, const Want &want)
94 {
95 return FormRenderServiceMgr::GetInstance().SetVisibleChange(formId, isVisible, want);
96 }
97
RunCachedConfigurationUpdated()98 void FormRenderImpl::RunCachedConfigurationUpdated()
99 {
100 FormRenderServiceMgr::GetInstance().RunCachedConfigurationUpdated();
101 }
102
RecycleForm(const int64_t & formId,const Want & want)103 int32_t FormRenderImpl::RecycleForm(const int64_t &formId, const Want &want)
104 {
105 HILOG_INFO("formId:%{public}" PRId64, formId);
106 auto recoverForm = [formId, want] { return FormRenderServiceMgr::GetInstance().RecycleForm(formId, want); };
107
108 return FormRenderStatusMgr::GetInstance().PostFormEvent(formId, FormFsmEvent::RECYCLE_DATA, recoverForm);
109 }
110
RecoverForm(const FormJsInfo & formJsInfo,const Want & want)111 int32_t FormRenderImpl::RecoverForm(const FormJsInfo &formJsInfo, const Want &want)
112 {
113 HILOG_INFO("formId:%{public}" PRId64, formJsInfo.formId);
114 auto recoverForm = [formJsInfo, want] { return FormRenderServiceMgr::GetInstance().RecoverForm(formJsInfo, want); };
115
116 return FormRenderStatusMgr::GetInstance().PostFormEvent(formJsInfo.formId, FormFsmEvent::RECOVER_FORM, recoverForm);
117 }
118
UpdateFormSize(const int64_t & formId,float width,float height,float borderWidth,const std::string & uid)119 int32_t FormRenderImpl::UpdateFormSize(
120 const int64_t &formId, float width, float height, float borderWidth, const std::string &uid)
121 {
122 return FormRenderServiceMgr::GetInstance().UpdateFormSize(formId, width, height, borderWidth, uid);
123 }
124
CheckIsFoundationCall()125 bool FormRenderImpl::CheckIsFoundationCall()
126 {
127 return IPCSkeleton::GetCallingUid() == FormConstants::FOUNDATION_UID;
128 }
129
CheckPermission()130 int32_t FormRenderImpl::CheckPermission()
131 {
132 if (!CheckIsFoundationCall()) {
133 HILOG_ERROR("Caller not foundation");
134 return ERR_APPEXECFWK_FORM_PERMISSION_DENY;
135 }
136 return ERR_OK;
137 }
138 } // namespace FormRender
139 } // namespace AppExecFwk
140 } // namespace OHOS
141