• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 #include "form_share_mgr.h"
16 #include "form_ams_helper.h"
17 #include "form_bms_helper.h"
18 #include "form_constants.h"
19 #include "form_data_mgr.h"
20 #include "form_event_handler.h"
21 #include "form_mgr_errors.h"
22 #include "form_host_interface.h"
23 #include "form_provider_interface.h"
24 #include "form_serial_queue.h"
25 #include "form_share_connection.h"
26 #include "form_supply_callback.h"
27 #include "form_util.h"
28 #include "in_process_call_wrapper.h"
29 #include "nlohmann/json.hpp"
30 #include "string_wrapper.h"
31 
32 namespace OHOS {
33 namespace AppExecFwk {
34 namespace {
35 constexpr int64_t FORM_SHARE_INFO_DELAY_TIMER = 50000;
36 constexpr int64_t FORM_PACKAGE_FREE_INSTALL_TIMER = 40000;
37 constexpr const char* ACTION_SHARE_FORM = "action.form.share";
38 }
39 
FormShareMgr()40 FormShareMgr::FormShareMgr()
41 {
42     HILOG_DEBUG("FormShareMgr is created");
43 };
44 
~FormShareMgr()45 FormShareMgr::~FormShareMgr()
46 {
47     HILOG_DEBUG("FormShareMgr is destroyed");
48     if (eventHandler_ != nullptr) {
49         eventHandler_->UnregisterEventTimeoutObserver(shared_from_this());
50     }
51 };
52 
ShareForm(int64_t formId,const std::string & deviceId,const sptr<IRemoteObject> & callerToken,int64_t requestCode)53 int32_t FormShareMgr::ShareForm(int64_t formId, const std::string &deviceId, const sptr<IRemoteObject> &callerToken,
54     int64_t requestCode)
55 {
56     HILOG_DEBUG("%{public}s called.", __func__);
57     FormRecord formRecord;
58     bool isFormRecExist = FormDataMgr::GetInstance().GetFormRecord(formId, formRecord);
59     if (!isFormRecExist) {
60         HILOG_ERROR("form share info get formRecord failed.");
61         return ERR_APPEXECFWK_FORM_GET_INFO_FAILED;
62     }
63 
64     {
65         std::unique_lock<std::shared_mutex> guard(requestMapMutex_);
66         requestMap_.emplace(requestCode, callerToken);
67     }
68 
69     sptr<FormShareConnection> formShareConnection = new (std::nothrow) FormShareConnection(
70         formId, formRecord.bundleName, formRecord.abilityName, deviceId, requestCode);
71     if (formShareConnection == nullptr) {
72         HILOG_ERROR("failed to create formShareConnection.");
73         return ERR_APPEXECFWK_FORM_COMMON_CODE;
74     }
75     Want want;
76     want.SetElementName(formRecord.bundleName, formRecord.abilityName);
77     want.AddFlags(Want::FLAG_ABILITY_FORM_ENABLED);
78     ErrCode errorCode = FormAmsHelper::GetInstance().ConnectServiceAbility(want, formShareConnection);
79     if (errorCode != ERR_OK) {
80         HILOG_ERROR("ConnectServiceAbility failed.");
81         std::unique_lock<std::shared_mutex> guard(requestMapMutex_);
82         requestMap_.erase(requestCode);
83         return ERR_APPEXECFWK_FORM_BIND_PROVIDER_FAILED;
84     }
85 
86     return ERR_OK;
87 }
88 
RecvFormShareInfoFromRemote(const FormShareInfo & info)89 int32_t FormShareMgr::RecvFormShareInfoFromRemote(const FormShareInfo &info)
90 {
91     HILOG_DEBUG("%{public}s called.", __func__);
92 
93     if (serialQueue_ == nullptr) {
94         HILOG_ERROR("serialQueue_ is nullptr");
95         return ERR_APPEXECFWK_FORM_COMMON_CODE;
96     }
97 
98     auto task = [info]() {
99         DelayedSingleton<FormShareMgr>::GetInstance()->HandleRecvFormShareInfoFromRemoteTask(info);
100     };
101     serialQueue_->ScheduleTask(0, task);
102 
103     return ERR_OK;
104 }
105 
HandleRecvFormShareInfoFromRemoteTask(const FormShareInfo & info)106 int32_t FormShareMgr::HandleRecvFormShareInfoFromRemoteTask(const FormShareInfo &info)
107 {
108     HILOG_DEBUG("%{public}s called.", __func__);
109 
110     if (!CheckFormShareInfo(info)) {
111         HILOG_ERROR("form share info check failed.");
112         return ERR_APPEXECFWK_FORM_SHARE_INFO_CHECK_FAILED;
113     }
114 
115     AbilityInfo abilityInfo;
116     ExtensionAbilityInfo extensionAbilityInfo;
117     int32_t userId = FormUtil::GetCurrentAccountId();
118     if (!FormBmsHelper::GetInstance().GetAbilityInfoByAction(
119         ACTION_SHARE_FORM, userId, abilityInfo, extensionAbilityInfo)) {
120         HILOG_ERROR("get ability info by action failed.");
121         return ERR_APPEXECFWK_FORM_FORM_USER_NOT_EXIST;
122     }
123     if (abilityInfo.name.empty() && extensionAbilityInfo.name.empty()) {
124         HILOG_ERROR("form user is not exist.");
125         return ERR_APPEXECFWK_FORM_FORM_USER_NOT_EXIST;
126     }
127 
128     auto formShareInfoKey = MakeFormShareInfoKey(info);
129     {
130         std::unique_lock<std::shared_mutex> guard(shareInfoMapMutex_);
131         if (shareInfo_.find(formShareInfoKey) != shareInfo_.end()) {
132             HILOG_ERROR("form is sharing.");
133             return ERR_APPEXECFWK_FORM_SHARING;
134         }
135 
136         shareInfo_.emplace(formShareInfoKey, info);
137     }
138     {
139         std::unique_lock<std::shared_mutex> guard(eventMapMutex_);
140         auto eventId = FormEventHandler::GetEventId();
141         eventMap_.emplace(eventId, formShareInfoKey);
142         if (eventHandler_ != nullptr) {
143             eventHandler_->ProcessEvent(MSG::FORM_SHARE_INFO_DELAY_MSG, eventId, FORM_SHARE_INFO_DELAY_TIMER);
144         }
145     }
146     auto ret = CheckFormPackage(info, formShareInfoKey);
147     if (ret == ERR_APPEXECFWK_FORM_FREE_INSTALLATION) {
148         return ERR_OK;
149     }
150     if (ret != ERR_OK) {
151         return ret;
152     }
153     StartFormUser(info);
154     return ERR_OK;
155 }
156 
CheckFormPackage(const FormShareInfo & info,const std::string & formShareInfoKey)157 int32_t FormShareMgr::CheckFormPackage(const FormShareInfo &info, const std::string &formShareInfoKey)
158 {
159     if (IsExistFormPackage(info.bundleName, info.moduleName)) {
160         return ERR_OK;
161     }
162 
163     if (serialQueue_ == nullptr) {
164         HILOG_ERROR("serialQueue_ is nullptr.");
165         return ERR_APPEXECFWK_FORM_COMMON_CODE;
166     }
167 
168     if (eventHandler_ == nullptr) {
169         HILOG_ERROR("eventHandler_ is nullptr.");
170         return ERR_APPEXECFWK_FORM_COMMON_CODE;
171     }
172 
173     std::shared_ptr<FormFreeInstallOperator> freeInstallOperator =
174         std::make_shared<FormFreeInstallOperator>(formShareInfoKey, serialQueue_);
175     auto eventId = FormEventHandler::GetEventId();
176     HILOG_DEBUG("free install operator send event, eventId:%{public}" PRId64 ", key: %{public}s",
177         eventId, formShareInfoKey.c_str());
178     eventHandler_->ProcessEvent(
179         MSG::FORM_PACKAGE_FREE_INSTALL_DELAY_MSG, eventId, FORM_PACKAGE_FREE_INSTALL_TIMER);
180 
181     {
182         std::unique_lock<std::shared_mutex> guard(freeInstallMapMutex_);
183         freeInstallOperatorMap_.emplace(eventId, freeInstallOperator);
184     }
185 
186     auto ret = freeInstallOperator->StartFreeInstall(info.bundleName, info.moduleName, info.abilityName);
187     if (ret != ERR_OK) {
188         HILOG_ERROR("free install failed.");
189         RemoveFormShareInfo(formShareInfoKey);
190         FinishFreeInstallTask(freeInstallOperator);
191         return ERR_APPEXECFWK_FORM_FREE_INSTALL_FAILED;
192     }
193     return ERR_APPEXECFWK_FORM_FREE_INSTALLATION;
194 }
195 
CheckFormShareInfo(const FormShareInfo & info)196 bool FormShareMgr::CheckFormShareInfo(const FormShareInfo &info)
197 {
198     return !(info.bundleName.empty() ||
199             info.moduleName.empty() ||
200             info.abilityName.empty() ||
201             info.formName.empty() ||
202             info.deviceId.empty());
203 }
204 
MakeFormShareInfoKey(const FormShareInfo & info)205 std::string FormShareMgr::MakeFormShareInfoKey(const FormShareInfo &info)
206 {
207     return (info.bundleName + info.moduleName + info.abilityName + info.formName);
208 }
209 
MakeFormShareInfoKey(const Want & want)210 std::string FormShareMgr::MakeFormShareInfoKey(const Want &want)
211 {
212     std::string bundleName = want.GetElement().GetBundleName();
213     std::string abilityName = want.GetElement().GetAbilityName();
214     std::string moduleName = want.GetStringParam(Constants::PARAM_MODULE_NAME_KEY);
215     std::string formName = want.GetStringParam(Constants::PARAM_FORM_NAME_KEY);
216     return (bundleName + moduleName + abilityName + formName);
217 }
218 
StartFormUser(const FormShareInfo & info)219 void FormShareMgr::StartFormUser(const FormShareInfo &info)
220 {
221     HILOG_DEBUG("%{public}s called.", __func__);
222     AbilityInfo abilityInfo;
223     ExtensionAbilityInfo extensionAbilityInfo;
224     int32_t userId = FormUtil::GetCurrentAccountId();
225     if (!FormBmsHelper::GetInstance().GetAbilityInfoByAction(
226         ACTION_SHARE_FORM, userId, abilityInfo, extensionAbilityInfo)) {
227         HILOG_ERROR("get ability info by action failed.");
228         return;
229     }
230 
231     Want want;
232     if (!abilityInfo.name.empty()) {
233         want.SetElementName(abilityInfo.bundleName, abilityInfo.name);
234     } else if (!extensionAbilityInfo.name.empty()) {
235         want.SetElementName(extensionAbilityInfo.bundleName, extensionAbilityInfo.name);
236     } else {
237         HILOG_ERROR("form user is not exist.");
238         return;
239     }
240 
241     want.SetAction(ACTION_SHARE_FORM);
242     want.SetParam(Constants::PARAM_BUNDLE_NAME_KEY, info.bundleName);
243     want.SetParam(Constants::PARAM_MODULE_NAME_KEY, info.moduleName);
244     want.SetParam(Constants::PARAM_ABILITY_NAME_KEY, info.abilityName);
245     want.SetParam(Constants::PARAM_FORM_NAME_KEY, info.formName);
246     want.SetParam(Constants::PARAM_FORM_TEMPORARY_KEY, info.formTempFlag);
247     want.SetParam(Constants::PARAM_FORM_DIMENSION_KEY, info.dimensionId);
248 
249     auto errorCode = FormAmsHelper::GetInstance().StartAbility(want, userId);
250     if (errorCode != ERR_OK) {
251         HILOG_ERROR("start ability failed.");
252         RemoveFormShareInfo(MakeFormShareInfoKey(info));
253     }
254 }
255 
IsExistFormPackage(const std::string & bundleName,const std::string & moduleName)256 bool FormShareMgr::IsExistFormPackage(const std::string &bundleName, const std::string &moduleName)
257 {
258     HILOG_DEBUG("%{public}s called.", __func__);
259     BundleInfo bundleInfo;
260     auto userId = FormUtil::GetCurrentAccountId();
261     if (!FormBmsHelper::GetInstance().GetBundleInfo(bundleName, userId, bundleInfo)) {
262         HILOG_ERROR("get bundle info failed");
263         return false;
264     }
265 
266     for (const auto &moduleInfo : bundleInfo.moduleNames) {
267         if (moduleInfo.compare(moduleName) == 0) {
268             HILOG_DEBUG("module name is exist, moduleName:%{public}s", moduleInfo.c_str());
269             return true;
270         }
271     }
272 
273     HILOG_ERROR("module name is not exist, moduleName: %{public}s", moduleName.c_str());
274     return false;
275 }
276 
RemoveFormShareInfo(const std::string & formShareInfoKey)277 void FormShareMgr::RemoveFormShareInfo(const std::string &formShareInfoKey)
278 {
279     HILOG_DEBUG("%{public}s called.", __func__);
280     {
281         std::unique_lock<std::shared_mutex> guard(eventMapMutex_);
282         int64_t eventId = 0;
283         for (auto iter = eventMap_.begin(); iter != eventMap_.end(); iter++) {
284             if (iter->second == formShareInfoKey) {
285                 eventId = iter->first;
286                 break;
287             }
288         }
289 
290         if (eventId != 0) {
291             eventMap_.erase(eventId);
292             if (serialQueue_ != nullptr) {
293                 serialQueue_->CancelDelayTask(std::make_pair(MSG::FORM_SHARE_INFO_DELAY_MSG, eventId));
294             }
295         }
296     }
297 
298     {
299         std::unique_lock<std::shared_mutex> guard(shareInfoMapMutex_);
300         shareInfo_.erase(formShareInfoKey);
301     }
302 }
303 
FinishFreeInstallTask(const std::shared_ptr<FormFreeInstallOperator> & freeInstallOperator)304 void FormShareMgr::FinishFreeInstallTask(const std::shared_ptr<FormFreeInstallOperator> &freeInstallOperator)
305 {
306     HILOG_DEBUG("%{public}s called.", __func__);
307     std::unique_lock<std::shared_mutex> guard(freeInstallMapMutex_);
308 
309     int64_t eventId = 0;
310     for (auto iter = freeInstallOperatorMap_.begin(); iter != freeInstallOperatorMap_.end(); iter++) {
311         if (iter->second == freeInstallOperator) {
312             eventId = iter->first;
313             break;
314         }
315     }
316 
317     if (eventId != 0) {
318         freeInstallOperatorMap_.erase(eventId);
319         if (serialQueue_ != nullptr) {
320             serialQueue_->CancelDelayTask(std::make_pair(MSG::FORM_PACKAGE_FREE_INSTALL_DELAY_MSG, eventId));
321         }
322     }
323 }
324 
OnInstallFinished(const std::shared_ptr<FormFreeInstallOperator> & freeInstallOperator,int32_t resultCode,const std::string & formShareInfoKey)325 void FormShareMgr::OnInstallFinished(const std::shared_ptr<FormFreeInstallOperator> &freeInstallOperator,
326     int32_t resultCode, const std::string &formShareInfoKey)
327 {
328     HILOG_DEBUG("%{public}s called.", __func__);
329 
330     FinishFreeInstallTask(freeInstallOperator);
331 
332     if (resultCode != ERR_OK) {
333         HILOG_ERROR("free install failed.");
334         RemoveFormShareInfo(formShareInfoKey);
335         return;
336     }
337 
338     FormShareInfo info;
339     {
340         std::shared_lock<std::shared_mutex> guard(shareInfoMapMutex_);
341         auto it = shareInfo_.find(formShareInfoKey);
342         if (it == shareInfo_.end()) {
343             HILOG_ERROR("form share info is not found.");
344             return;
345         }
346 
347         it->second.isFreeInstall = true;
348         info = it->second;
349     }
350 
351     StartFormUser(info);
352 }
353 
HandleFormShareInfoTimeout(int64_t eventId)354 void FormShareMgr::HandleFormShareInfoTimeout(int64_t eventId)
355 {
356     HILOG_DEBUG("%{public}s called, eventId:%{public}" PRId64 "", __func__, eventId);
357 
358     std::string formShareInfoKey;
359     {
360         std::unique_lock<std::shared_mutex> guard(eventMapMutex_);
361         auto it = eventMap_.find(eventId);
362         if (it == eventMap_.end()) {
363             HILOG_ERROR("event id is not find.");
364             return;
365         }
366         formShareInfoKey = it->second;
367         eventMap_.erase(eventId);
368     }
369     HILOG_DEBUG("form share info timeout, key: %{public}s", formShareInfoKey.c_str());
370 
371     RemoveFormShareInfo(formShareInfoKey);
372 }
373 
HandleFreeInstallTimeout(int64_t eventId)374 void FormShareMgr::HandleFreeInstallTimeout(int64_t eventId)
375 {
376     HILOG_DEBUG("%{public}s called, eventId:%{public}" PRId64 "", __func__, eventId);
377     std::unique_lock<std::shared_mutex> guard(freeInstallMapMutex_);
378     freeInstallOperatorMap_.erase(eventId);
379 }
380 
AddProviderData(const Want & want,WantParams & wantParams)381 void FormShareMgr::AddProviderData(const Want &want, WantParams &wantParams)
382 {
383     HILOG_DEBUG("%{public}s called.", __func__);
384 
385     auto formShareInfoKey = MakeFormShareInfoKey(want);
386     std::string deviceId;
387     std::string bundleName;
388     std::string moduleName;
389     bool isFreeInstall = false;
390     std::map<std::string, sptr<IInterface>> providerWantParams;
391     {
392         std::shared_lock<std::shared_mutex> guard(shareInfoMapMutex_);
393         auto it = shareInfo_.find(formShareInfoKey);
394         if (it == shareInfo_.end()) {
395             HILOG_DEBUG("No shared provider data.");
396             return;
397         }
398 
399         providerWantParams = it->second.providerShareData.GetParams();
400         deviceId = it->second.deviceId;
401         bundleName = it->second.bundleName;
402         moduleName = it->second.moduleName;
403         isFreeInstall = it->second.isFreeInstall;
404     }
405 
406     if (!wantParams.HasParam(Constants::PARAM_DEVICE_ID_KEY)) {
407         wantParams.SetParam(Constants::PARAM_DEVICE_ID_KEY, AAFwk::String::Box(deviceId));
408     }
409     for (auto iter = providerWantParams.begin(); iter != providerWantParams.end(); iter++) {
410         wantParams.SetParam(iter->first, iter->second);
411     }
412 
413     if (isFreeInstall) {
414         FormBmsHelper::GetInstance().NotifyModuleNotRemovable(bundleName, moduleName);
415         HILOG_INFO("notify module not removable, bundleName: %{public}s, moduleName: %{public}s",
416             bundleName.c_str(), moduleName.c_str());
417     }
418 
419     RemoveFormShareInfo(formShareInfoKey);
420 }
421 
AcquireShareFormData(int64_t formId,const std::string & remoteDeviceId,const Want & want,const sptr<IRemoteObject> & remoteObject)422 void FormShareMgr::AcquireShareFormData(int64_t formId, const std::string &remoteDeviceId,
423     const Want &want, const sptr<IRemoteObject> &remoteObject)
424 {
425     HILOG_DEBUG("%{public}s called.", __func__);
426     int64_t requestCode = static_cast<int64_t>(want.GetLongParam(Constants::FORM_SHARE_REQUEST_CODE, 0));
427     auto connectId = want.GetIntParam(Constants::FORM_CONNECT_ID, 0);
428     sptr<IFormProvider> formProviderProxy = iface_cast<IFormProvider>(remoteObject);
429 
430     if (formProviderProxy == nullptr) {
431         FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
432         SendResponse(requestCode, ERR_APPEXECFWK_FORM_COMMON_CODE);
433         HILOG_ERROR("failed to get formProviderProxy.");
434         return;
435     }
436 
437     int32_t error = formProviderProxy->AcquireShareFormData(formId, remoteDeviceId,
438         FormSupplyCallback::GetInstance(), requestCode);
439     if (error != ERR_OK) {
440         SendResponse(requestCode, error);
441         HILOG_ERROR("failed to get acquire provider form info.");
442     }
443 
444     FormSupplyCallback::GetInstance()->RemoveConnection(connectId);
445 }
446 
HandleProviderShareData(int64_t formId,const std::string & remoteDeviceId,const AAFwk::WantParams & wantParams,int64_t requestCode,const bool & result)447 void FormShareMgr::HandleProviderShareData(int64_t formId, const std::string &remoteDeviceId,
448     const AAFwk::WantParams &wantParams, int64_t requestCode, const bool &result)
449 {
450     HILOG_DEBUG("%{public}s called.", __func__);
451 
452     FormRecord formRecord;
453     bool isFormRecExist = FormDataMgr::GetInstance().GetFormRecord(formId, formRecord);
454     if (!isFormRecExist) {
455         HILOG_ERROR("form share info get formRecord failed.");
456         SendResponse(requestCode, ERR_APPEXECFWK_FORM_GET_INFO_FAILED);
457         return;
458     }
459 
460     if (!result) {
461         HILOG_ERROR("Failed to parse shared data.");
462         SendResponse(requestCode, ERR_APPEXECFWK_FORM_COMMON_CODE);
463         return;
464     }
465 
466     FormShareInfo formShareInfo;
467     formShareInfo.formId = formRecord.formId;
468     formShareInfo.formName = formRecord.formName;
469     formShareInfo.bundleName = formRecord.bundleName;
470     formShareInfo.moduleName = formRecord.moduleName;
471     formShareInfo.abilityName = formRecord.abilityName;
472     formShareInfo.formTempFlag = formRecord.formTempFlag;
473     formShareInfo.dimensionId = formRecord.specification;
474     formShareInfo.providerShareData = wantParams;
475 
476     if (formDmsClient_ == nullptr) {
477         formDmsClient_ = std::make_shared<FormDistributedClient>();
478     }
479     int32_t retval = formDmsClient_->ShareForm(remoteDeviceId, formShareInfo);
480     if (retval != ERR_OK) {
481         HILOG_ERROR("failed to share form from DMS retval = %{public}d.", retval);
482         SendResponse(requestCode, ERR_APPEXECFWK_FORM_DISTRIBUTED_SCHEDULE_FAILED);
483         return;
484     }
485     SendResponse(requestCode, ERR_OK);
486 }
487 
SendResponse(int64_t requestCode,int32_t result)488 void FormShareMgr::SendResponse(int64_t requestCode, int32_t result)
489 {
490     HILOG_DEBUG("FormMgrService SendResponse called, requestCode:%{public}" PRId64 " result:%{public}d",
491         requestCode, result);
492     std::unique_lock<std::shared_mutex> guard(requestMapMutex_);
493     auto iter = requestMap_.find(requestCode);
494     if (iter == requestMap_.end()) {
495         HILOG_DEBUG("No form shared request.");
496         return;
497     }
498 
499     sptr<IFormHost> remoteFormHost = iface_cast<IFormHost>(iter->second);
500     if (remoteFormHost == nullptr) {
501         HILOG_ERROR("failed to get form host proxy.");
502         return;
503     }
504     remoteFormHost->OnShareFormResponse(requestCode, result);
505     requestMap_.erase(requestCode);
506 }
507 
IsShareForm(const Want & want)508 bool FormShareMgr::IsShareForm(const Want &want)
509 {
510     HILOG_DEBUG("%{public}s called.", __func__);
511     auto formShareInfoKey = MakeFormShareInfoKey(want);
512     HILOG_DEBUG("formShareInfoKey: %{public}s", formShareInfoKey.c_str());
513 
514     std::shared_lock<std::shared_mutex> guard(shareInfoMapMutex_);
515     auto it = shareInfo_.find(formShareInfoKey);
516     if (it == shareInfo_.end()) {
517         HILOG_DEBUG("This form is not a shared form");
518         return false;
519     }
520     return true;
521 }
522 
OnEventTimeoutResponse(int64_t msg,int64_t eventId)523 void FormShareMgr::OnEventTimeoutResponse(int64_t msg, int64_t eventId)
524 {
525     HILOG_DEBUG("%{public}s called.", __func__);
526     switch (msg) {
527         case MSG::FORM_SHARE_INFO_DELAY_MSG: {
528             HandleFormShareInfoTimeout(eventId);
529             break;
530         }
531         case MSG::FORM_PACKAGE_FREE_INSTALL_DELAY_MSG: {
532             HandleFreeInstallTimeout(eventId);
533             break;
534         }
535         default: {
536             break;
537         }
538     }
539 }
540 } // namespace AppExecFwk
541 } // namespace OHOS
542