1 /*
2  * Copyright (c) 2022-2023 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 "bundle_manager_adapter.h"
16 #include "account_log_wrapper.h"
17 
18 namespace OHOS {
19 namespace AccountSA {
20 namespace {
21 const std::string STRING_BUNDLE_NAME_NOT_INSTALLED = "com.example.not_installed";
22 const std::string STRING_OWNER = "com.example.owner";
23 const std::string STRING_NORMAL_BUNDLENAME = "com.example.normal.bundle";
24 const std::string STRING_BUNDLEINFO_WITH_NO_VALID_EXTENSION = "com.bundleInfo.noExtension";
25 const std::string STRING_BUNDLEINFO_WITH_NO_VALID_TYPE_EXTENSION = "com.bundleInfo.noValidTypeExtension";
26 const std::string STRING_BUNDLEINFO_WITH_MULTIPLE_VALID_EXTENSION = "com.bundleInfo.noExtension";
27 const std::string STRING_ABILITY_NAME = "com.example.owner.MainAbility";
28 const std::string STRING_ABILITY_NAME_TWO = "com.example.owner.MainAbility2";
29 const std::string STRING_ABILITY_NAME_WITH_NO_INFO = "com.example.owner.MainAbilityWithNoInfo";
30 const std::string STRING_ABILITY_NAME_WITH_CONNECT_FAILED = "com.example.MainAbilityWithConnectFailed";
31 const std::string STRING_ABILITY_NAME_WITH_NO_PROXY = "com.example.MainAbilityWithNoProxy";
32 }  // namespace
33 
GetInstance()34 BundleManagerAdapter *BundleManagerAdapter::GetInstance()
35 {
36     static BundleManagerAdapter *instance = new (std::nothrow) BundleManagerAdapter();
37     return instance;
38 }
39 
BundleManagerAdapter()40 BundleManagerAdapter::BundleManagerAdapter()
41 {
42     ACCOUNT_LOGI("create BundleManagerAdapter mock");
43 }
44 
~BundleManagerAdapter()45 BundleManagerAdapter::~BundleManagerAdapter()
46 {
47     ACCOUNT_LOGI("destroy BundleManagerAdapter mock");
48 }
49 
CreateNewUser(int32_t userId,const std::vector<std::string> & disallowedHapList)50 ErrCode BundleManagerAdapter::CreateNewUser(int32_t userId, const std::vector<std::string> &disallowedHapList)
51 {
52     ACCOUNT_LOGI("CreateNewUser mock");
53     return ERR_OK;
54 }
55 
RemoveUser(int32_t userId)56 ErrCode BundleManagerAdapter::RemoveUser(int32_t userId)
57 {
58     ACCOUNT_LOGI("RemoveUser mock");
59     return ERR_OK;
60 }
61 
GetNameForUid(const int uid,std::string & bundleName)62 ErrCode BundleManagerAdapter::GetNameForUid(const int uid, std::string &bundleName)
63 {
64     ACCOUNT_LOGI("mock enter, uid = %{public}d", uid);
65     bundleName = STRING_OWNER;
66     ACCOUNT_LOGI("mock bundleName = %{public}s", bundleName.c_str());
67     return ERR_OK;
68 }
69 
GetBundleInfo(const std::string & bundleName,const AppExecFwk::BundleFlag flag,AppExecFwk::BundleInfo & bundleInfo,int32_t userId)70 bool BundleManagerAdapter::GetBundleInfo(const std::string &bundleName, const AppExecFwk::BundleFlag flag,
71     AppExecFwk::BundleInfo &bundleInfo, int32_t userId)
72 {
73     ACCOUNT_LOGI("mock enter, bundleName = %{public}s", bundleName.c_str());
74     if (bundleName == STRING_BUNDLE_NAME_NOT_INSTALLED) {
75         return false;
76     }
77     if (bundleName == STRING_NORMAL_BUNDLENAME) {
78         AppExecFwk::ExtensionAbilityInfo extensionInfo;
79         extensionInfo.name = STRING_ABILITY_NAME;
80         extensionInfo.type = AppExecFwk::ExtensionAbilityType::APP_ACCOUNT_AUTHORIZATION;
81         bundleInfo.extensionInfos.emplace_back(extensionInfo);
82         return true;
83     }
84     if (bundleName == STRING_BUNDLEINFO_WITH_NO_VALID_EXTENSION) {
85         return true;
86     }
87     if (bundleName == STRING_BUNDLEINFO_WITH_NO_VALID_TYPE_EXTENSION) {
88         AppExecFwk::ExtensionAbilityInfo extensionInfo;
89         extensionInfo.name = STRING_ABILITY_NAME;
90         bundleInfo.extensionInfos.emplace_back(extensionInfo);
91         return true;
92     }
93     if (bundleName == STRING_BUNDLEINFO_WITH_MULTIPLE_VALID_EXTENSION) {
94         AppExecFwk::ExtensionAbilityInfo extensionInfo1;
95         extensionInfo1.name = STRING_ABILITY_NAME;
96         extensionInfo1.type = AppExecFwk::ExtensionAbilityType::APP_ACCOUNT_AUTHORIZATION;
97         bundleInfo.extensionInfos.emplace_back(extensionInfo1);
98         AppExecFwk::ExtensionAbilityInfo extensionInfo2;
99         extensionInfo2.name = STRING_ABILITY_NAME_TWO;
100         extensionInfo2.type = AppExecFwk::ExtensionAbilityType::APP_ACCOUNT_AUTHORIZATION;
101         bundleInfo.extensionInfos.emplace_back(extensionInfo2);
102         return true;
103     }
104     return true;
105 }
106 
QueryAbilityInfos(const AAFwk::Want & want,int32_t flags,int32_t userId,std::vector<AppExecFwk::AbilityInfo> & abilityInfos)107 bool BundleManagerAdapter::QueryAbilityInfos(const AAFwk::Want &want, int32_t flags, int32_t userId,
108     std::vector<AppExecFwk::AbilityInfo> &abilityInfos)
109 {
110     ACCOUNT_LOGI("mock enter, userId = %{public}d", userId);
111     return false;
112 }
113 
QueryExtensionAbilityInfos(const AAFwk::Want & want,const int32_t & flag,const int32_t & userId,std::vector<AppExecFwk::ExtensionAbilityInfo> & extensionInfos)114 bool BundleManagerAdapter::QueryExtensionAbilityInfos(const AAFwk::Want &want, const int32_t &flag,
115     const int32_t &userId, std::vector<AppExecFwk::ExtensionAbilityInfo> &extensionInfos)
116 {
117     ACCOUNT_LOGI("mock enter, userId = %{public}d", userId);
118     return false;
119 }
120 
QueryExtensionAbilityInfos(const AAFwk::Want & want,const AppExecFwk::ExtensionAbilityType & extensionType,const int32_t & flag,const int32_t & userId,std::vector<AppExecFwk::ExtensionAbilityInfo> & extensionInfos)121 bool BundleManagerAdapter::QueryExtensionAbilityInfos(
122     const AAFwk::Want &want, const AppExecFwk::ExtensionAbilityType &extensionType,
123     const int32_t &flag, const int32_t &userId, std::vector<AppExecFwk::ExtensionAbilityInfo> &extensionInfos)
124 {
125     ACCOUNT_LOGI("mock enter, userId = %{public}d", userId);
126     AppExecFwk::ElementName element = want.GetElement();
127     std::string abilityName = element.GetAbilityName();
128     ACCOUNT_LOGI("mock enter, abilityName = %{public}s", abilityName.c_str());
129     if ((abilityName == STRING_ABILITY_NAME) || (abilityName == STRING_ABILITY_NAME_WITH_CONNECT_FAILED) ||
130         (abilityName == STRING_ABILITY_NAME_WITH_NO_PROXY)) {
131         AppExecFwk::ExtensionAbilityInfo extensionInfo;
132         extensionInfo.name = abilityName;
133         extensionInfo.type = AppExecFwk::ExtensionAbilityType::APP_ACCOUNT_AUTHORIZATION;
134         extensionInfos.emplace_back(extensionInfo);
135         return true;
136     }
137     if (abilityName == STRING_ABILITY_NAME_WITH_NO_INFO) {
138         return true;
139     }
140     return false;
141 }
142 
GetUidByBundleName(const std::string & bundleName,const int userId)143 int BundleManagerAdapter::GetUidByBundleName(const std::string &bundleName, const int userId)
144 {
145     ACCOUNT_LOGI("mock enter, bundleName = %{public}s, userId = %{public}d.", bundleName.c_str(), userId);
146     return -1;
147 }
148 }  // namespace AccountSA
149 }  // namespace OHOS