1 /*
2 * Copyright (c) 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_refresh/strategy/refresh_check_mgr.h"
17
18 #include "fms_log_wrapper.h"
19 #include "form_refresh/check_mgr/system_app_checker.h"
20 #include "form_refresh/check_mgr/self_form_checker.h"
21 #include "form_refresh/check_mgr/calling_user_checker.h"
22 #include "form_refresh/check_mgr/calling_bundle_checker.h"
23 #include "form_refresh/check_mgr/active_user_checker.h"
24 #include "form_refresh/check_mgr/add_finish_checker.h"
25 #include "form_refresh/check_mgr/untrust_app_checker.h"
26
27 namespace OHOS {
28 namespace AppExecFwk {
29
RefreshCheckMgr()30 RefreshCheckMgr::RefreshCheckMgr() {}
~RefreshCheckMgr()31 RefreshCheckMgr::~RefreshCheckMgr() {}
32
33 const static std::map<int32_t, IBaseChecker *> checkerMap = {
34 { TYPE_SYSTEM_APP, &SystemAppChecker::GetInstance() },
35 { TYPE_SELF_FORM, &SelfFormChecker::GetInstance() },
36 { TYPE_CALLING_USER, &CallingUserChecker::GetInstance() },
37 { TYPE_CALLING_BUNDLE, &CallingBundleChecker::GetInstance() },
38 { TYPE_ACTIVE_USER, &ActiveUserChecker::GetInstance() },
39 { TYPE_ADD_FINISH, &AddFinishChecker::GetInstance() },
40 { TYPE_UNTRUST_APP, &UntrustAppChecker::GetInstance() },
41 };
42
IsBaseValidPass(const std::vector<int32_t> & types,const CheckValidFactor & factor)43 int RefreshCheckMgr::IsBaseValidPass(const std::vector<int32_t> &types, const CheckValidFactor &factor)
44 {
45 if (types.empty()) {
46 HILOG_INFO("the refresh task need't check valid, formId:%{public}" PRId64, factor.formId);
47 return ERR_OK;
48 }
49
50 int ret = ERR_OK;
51 for (const auto type : types) {
52 ret = HandleCheckValid(factor, type);
53 if (ret != ERR_OK) {
54 // If a check fails, return directly.
55 return ret;
56 }
57 }
58 return ret;
59 }
60
HandleCheckValid(const CheckValidFactor & factor,const int32_t checkType)61 int RefreshCheckMgr::HandleCheckValid(const CheckValidFactor &factor, const int32_t checkType)
62 {
63 HILOG_DEBUG("checkType:%{public}d, formId:%{public}" PRId64, checkType, factor.formId);
64 auto it = checkerMap.find(checkType);
65 if (it != checkerMap.end()) {
66 return it->second->CheckValid(factor);
67 } else {
68 HILOG_ERROR("invalid checkType");
69 return ERR_APPEXECFWK_FORM_INVALID_PARAM;
70 }
71 }
72
73 } // namespace AppExecFwk
74 } // namespace OHOS