• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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