From 9c16c1c6e6520179e767d30de2d4a057aa6e3d72 Mon Sep 17 00:00:00 2001 From: wangbing Date: Thu, 11 Sep 2025 16:41:36 +0800 Subject: [PATCH] support kiosk openlink Signed-off-by: wangbing --- .../include/interceptor/kiosk_interceptor.h | 1 + services/abilitymgr/include/kiosk_manager.h | 8 +- .../src/ability_manager_service.cpp | 4 +- .../src/implicit_start_processor.cpp | 2 + .../src/interceptor/kiosk_interceptor.cpp | 13 +- services/abilitymgr/src/kiosk_manager.cpp | 43 +++- .../ability_manager_service_twelfth_test.cpp | 2 +- .../kiosk_manager_test/kiosk_manager_test.cpp | 236 +++++++++++++++++- .../mock/src/mock_ipc_skeleton.cpp | 3 +- 9 files changed, 295 insertions(+), 17 deletions(-) diff --git a/services/abilitymgr/include/interceptor/kiosk_interceptor.h b/services/abilitymgr/include/interceptor/kiosk_interceptor.h index bab7d13f0dd..6edd86ee4fe 100644 --- a/services/abilitymgr/include/interceptor/kiosk_interceptor.h +++ b/services/abilitymgr/include/interceptor/kiosk_interceptor.h @@ -15,6 +15,7 @@ #ifndef OHOS_KIOSK_INTERCEPTOR_H #define OHOS_KIOSK_INTERCEPTOR_H + #include "ability_interceptor_interface.h" namespace OHOS { diff --git a/services/abilitymgr/include/kiosk_manager.h b/services/abilitymgr/include/kiosk_manager.h index 620498d01f6..c46c38083a2 100644 --- a/services/abilitymgr/include/kiosk_manager.h +++ b/services/abilitymgr/include/kiosk_manager.h @@ -25,6 +25,7 @@ #include "interceptor/ability_interceptor_executer.h" #include "kiosk_status.h" #include "nocopyable.h" +#include "system_dialog_scheduler.h" namespace OHOS { namespace AAFwk { @@ -33,16 +34,19 @@ public: static KioskManager &GetInstance(); int32_t UpdateKioskApplicationList(const std::vector &appList); int32_t EnterKioskMode(sptr callerToken); - int32_t ExitKioskMode(sptr callerToken); + int32_t ExitKioskMode(sptr callerToken, bool isFoundation); int32_t GetKioskStatus(KioskStatus &kioskStatus); bool IsInKioskMode(); bool IsInWhiteList(const std::string &bundleName); void OnAppStop(const AppInfo &info); + void FilterDialogAppInfos(std::vector &dialogAppInfos); + void FilterAbilityInfos(std::vector &abilityInfos); private: KioskManager() = default; DISALLOW_COPY_AND_MOVE(KioskManager); - int32_t ExitKioskModeInner(const std::string &bundleName, sptr callerToken); + int32_t ExitKioskModeInner(const std::string &bundleName, sptr callerToken, + bool isFoundation); bool IsInKioskModeInner(); void NotifyKioskModeChanged(bool isInKioskMode); bool IsInWhiteListInner(const std::string &bundleName); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 807545a1d63..ed50b722290 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -7569,7 +7569,7 @@ void AbilityManagerService::OnAbilityDied(std::shared_ptr ability FreezeUtil::GetInstance().DeleteLifecycleEvent(abilityRecord->GetToken()->AsObject()); if (KioskManager::GetInstance().IsInKioskMode() && KioskManager::GetInstance().IsInWhiteList(abilityRecord->GetAbilityInfo().bundleName)) { - KioskManager::GetInstance().ExitKioskMode(abilityRecord->GetToken()->AsObject()); + KioskManager::GetInstance().ExitKioskMode(abilityRecord->GetToken()->AsObject(), true); } } FreezeUtil::GetInstance().DeleteAppLifecycleEvent(abilityRecord->GetPid()); @@ -14954,7 +14954,7 @@ int32_t AbilityManagerService::ExitKioskMode(sptr callerToken) TAG_LOGE(AAFwkTag::ABILITYMGR, "not self call"); return CHECK_PERMISSION_FAILED; } - return KioskManager::GetInstance().ExitKioskMode(callerToken); + return KioskManager::GetInstance().ExitKioskMode(callerToken, false); } int32_t AbilityManagerService::GetKioskStatus(KioskStatus &kioskStatus) diff --git a/services/abilitymgr/src/implicit_start_processor.cpp b/services/abilitymgr/src/implicit_start_processor.cpp index ad43e1d57d8..86ba39861cd 100644 --- a/services/abilitymgr/src/implicit_start_processor.cpp +++ b/services/abilitymgr/src/implicit_start_processor.cpp @@ -503,6 +503,7 @@ int ImplicitStartProcessor::GenerateAbilityRequestByAction(int32_t userId, Abili "ImplicitQueryInfos, abilityInfo size : %{public}zu, extensionInfos size: %{public}zu", abilityInfos.size(), extensionInfos.size()); + KioskManager::GetInstance().FilterAbilityInfos(abilityInfos); if (appLinkingOnly && abilityInfos.size() == 0) { TAG_LOGE(AAFwkTag::ABILITYMGR, "not match app"); return ERR_IMPLICIT_START_ABILITY_FAIL; @@ -611,6 +612,7 @@ int ImplicitStartProcessor::GenerateAbilityRequestByAction(int32_t userId, Abili dialogAppInfo.multiAppMode = info.applicationInfo.multiAppMode; dialogAppInfos.emplace_back(dialogAppInfo); } + KioskManager::GetInstance().FilterDialogAppInfos(dialogAppInfos); return ERR_OK; } diff --git a/services/abilitymgr/src/interceptor/kiosk_interceptor.cpp b/services/abilitymgr/src/interceptor/kiosk_interceptor.cpp index ac3d1e25796..54391e471b6 100644 --- a/services/abilitymgr/src/interceptor/kiosk_interceptor.cpp +++ b/services/abilitymgr/src/interceptor/kiosk_interceptor.cpp @@ -13,6 +13,10 @@ * limitations under the License. */ +#include "ability_util.h" +#ifdef SUPPORT_GRAPHICS +#include "implicit_start_processor.h" +#endif #include "interceptor/kiosk_interceptor.h" #include "kiosk_manager.h" @@ -20,11 +24,18 @@ namespace OHOS { namespace AAFwk { int KioskInterceptor::DoProcess(AbilityInterceptorParam param) { - auto bundleName = param.want.GetElement().GetBundleName(); +#ifdef SUPPORT_SCREEN + if (ImplicitStartProcessor::IsImplicitStartAction(param.want)) { + TAG_LOGD(AAFwkTag::ABILITYMGR, "is implicit start action"); + return ERR_OK; + } +#endif + auto& kioskManager = KioskManager::GetInstance(); if (!kioskManager.IsInKioskMode()) { return ERR_OK; } + auto bundleName = param.want.GetElement().GetBundleName(); if (!kioskManager.IsInWhiteList(bundleName)) { return ERR_KIOSK_MODE_NOT_IN_WHITELIST; } diff --git a/services/abilitymgr/src/kiosk_manager.cpp b/services/abilitymgr/src/kiosk_manager.cpp index 32d7d6a88b6..1b1b032158a 100644 --- a/services/abilitymgr/src/kiosk_manager.cpp +++ b/services/abilitymgr/src/kiosk_manager.cpp @@ -51,7 +51,7 @@ void KioskManager::OnAppStop(const AppInfo &info) info.bundleName.c_str(), static_cast(info.state)); std::lock_guard lock(kioskManagermutex_); if (IsInKioskModeInner() && (info.bundleName == kioskStatus_.kioskBundleName_)) { - ExitKioskModeInner(info.bundleName, kioskStatus_.kioskToken_); + ExitKioskModeInner(info.bundleName, kioskStatus_.kioskToken_, true); } } @@ -76,7 +76,7 @@ int32_t KioskManager::UpdateKioskApplicationList(const std::vector if (IsInKioskModeInner()) { auto it = std::find(appList.begin(), appList.end(), kioskStatus_.kioskBundleName_); if (it == appList.end()) { - auto ret = ExitKioskModeInner(kioskStatus_.kioskBundleName_, kioskStatus_.kioskToken_); + auto ret = ExitKioskModeInner(kioskStatus_.kioskBundleName_, kioskStatus_.kioskToken_, true); if (ret != ERR_OK) { return ret; } @@ -129,7 +129,7 @@ int32_t KioskManager::EnterKioskMode(sptr callerToken) return ERR_OK; } -int32_t KioskManager::ExitKioskMode(sptr callerToken) +int32_t KioskManager::ExitKioskMode(sptr callerToken, bool isFoundation) { if (!system::GetBoolParameter(KIOSK_MODE_ENABLED, false)) { TAG_LOGE(AAFwkTag::ABILITYMGR, "Disabled config"); @@ -141,10 +141,11 @@ int32_t KioskManager::ExitKioskMode(sptr callerToken) return INVALID_PARAMETERS_ERR; } std::lock_guard lock(kioskManagermutex_); - return ExitKioskModeInner(record->GetAbilityInfo().bundleName, callerToken); + return ExitKioskModeInner(record->GetAbilityInfo().bundleName, callerToken, isFoundation); } -int32_t KioskManager::ExitKioskModeInner(const std::string &bundleName, sptr callerToken) +int32_t KioskManager::ExitKioskModeInner(const std::string &bundleName, sptr callerToken, + bool isFoundation) { if (!IsInWhiteListInner(bundleName)) { return ERR_KIOSK_MODE_NOT_IN_WHITELIST; @@ -153,6 +154,12 @@ int32_t KioskManager::ExitKioskModeInner(const std::string &bundleName, sptr &dialogAppInfos) +{ + if (!IsInKioskModeInner()) { + return; + } + + auto newEnd = std::remove_if(dialogAppInfos.begin(), dialogAppInfos.end(), + [this](const DialogAppInfo &appInfo) { + return !IsInWhiteListInner(appInfo.bundleName); + }); + dialogAppInfos.erase(newEnd, dialogAppInfos.end()); +} + +void KioskManager::FilterAbilityInfos(std::vector &abilityInfos) +{ + if (!IsInKioskModeInner()) { + return; + } + + auto newEnd = std::remove_if(abilityInfos.begin(), abilityInfos.end(), + [this](const AppExecFwk::AbilityInfo &abilityInfo) { + return !IsInWhiteListInner(abilityInfo.bundleName); + }); + abilityInfos.erase(newEnd, abilityInfos.end()); +} + bool KioskManager::IsInKioskMode() { std::lock_guard lock(kioskManagermutex_); diff --git a/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp b/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp index 1fad5b98907..c5d39caba38 100644 --- a/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp +++ b/test/unittest/ability_manager_service_twelfth_test/ability_manager_service_twelfth_test.cpp @@ -1166,7 +1166,7 @@ HWTEST_F(AbilityManagerServiceTwelfthTest, KioskManager_EnterKioskMode_Fail_01, */ HWTEST_F(AbilityManagerServiceTwelfthTest, KioskManager_ExitKioskMode_Fail_01, TestSize.Level1) { auto callerToken = MockToken(AbilityType::PAGE); - auto result = KioskManager::GetInstance().ExitKioskMode(callerToken); + auto result = KioskManager::GetInstance().ExitKioskMode(callerToken, false); if (!system::GetBoolParameter(KIOSK_MODE_ENABLED, false)) { ASSERT_EQ(result, ERR_CAPABILITY_NOT_SUPPORT); } else { diff --git a/test/unittest/kiosk_manager_test/kiosk_manager_test.cpp b/test/unittest/kiosk_manager_test/kiosk_manager_test.cpp index ff16b5d20d8..5cc6c4e3414 100644 --- a/test/unittest/kiosk_manager_test/kiosk_manager_test.cpp +++ b/test/unittest/kiosk_manager_test/kiosk_manager_test.cpp @@ -193,7 +193,7 @@ HWTEST_F(KioskManagerTest, IsInWhiteList_002, TestSize.Level1) { HWTEST_F(KioskManagerTest, ExitKioskMode_001, TestSize.Level1) { MyStatus::GetInstance().paramGetBoolParameter_ = false; auto callerToken = MockToken(AbilityType::PAGE); - auto result = KioskManager::GetInstance().ExitKioskMode(callerToken); + auto result = KioskManager::GetInstance().ExitKioskMode(callerToken, false); EXPECT_EQ(result, ERR_CAPABILITY_NOT_SUPPORT); } @@ -205,10 +205,118 @@ HWTEST_F(KioskManagerTest, ExitKioskMode_001, TestSize.Level1) { */ HWTEST_F(KioskManagerTest, ExitKioskMode_002, TestSize.Level1) { MyStatus::GetInstance().paramGetBoolParameter_ = true; - auto result = KioskManager::GetInstance().ExitKioskMode(nullptr); + auto result = KioskManager::GetInstance().ExitKioskMode(nullptr, false); EXPECT_EQ(result, INVALID_PARAMETERS_ERR); } +/* + * Feature: KioskManager + * Function: ExitKioskMode + * SubFunction: NA + * FunctionPoints: KioskManager ExitKioskMode + */ +HWTEST_F(KioskManagerTest, ExitKioskMode_003, TestSize.Level1) { + MyStatus::GetInstance().paramGetBoolParameter_ = true; + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + auto callerToken = MockToken(AbilityType::PAGE); + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_; + auto result = KioskManager::GetInstance().ExitKioskMode(callerToken, false); + EXPECT_EQ(result, ERR_KIOSK_MODE_NOT_IN_WHITELIST); +} + +/* + * Feature: KioskManager + * Function: ExitKioskMode + * SubFunction: NA + * FunctionPoints: KioskManager ExitKioskMode + */ +HWTEST_F(KioskManagerTest, ExitKioskMode_004, TestSize.Level1) { + MyStatus::GetInstance().paramGetBoolParameter_ = true; + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + auto callerToken = MockToken(AbilityType::PAGE); + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_; + auto result = KioskManager::GetInstance().ExitKioskMode(callerToken, true); + EXPECT_EQ(result, ERR_KIOSK_MODE_NOT_IN_WHITELIST); +} + +/* + * Feature: KioskManager + * Function: FilterDialogAppInfos + * SubFunction: NA + * FunctionPoints: KioskManager FilterDialogAppInfos + */ +HWTEST_F(KioskManagerTest, FilterDialogAppInfos_001, TestSize.Level1) { + MyStatus::GetInstance().paramGetBoolParameter_ = true; + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = false; + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.emplace(bundleName); + std::vector dialogAppInfos; + DialogAppInfo dialogAppInfo; + dialogAppInfo.bundleName = bundleName; + dialogAppInfos.emplace_back(dialogAppInfo); + uint32_t size = dialogAppInfos.size(); + KioskManager::GetInstance().FilterDialogAppInfos(dialogAppInfos); + EXPECT_EQ(dialogAppInfos.size(), size); +} + +/* + * Feature: KioskManager + * Function: FilterDialogAppInfos + * SubFunction: NA + * FunctionPoints: KioskManager FilterDialogAppInfos + */ +HWTEST_F(KioskManagerTest, FilterDialogAppInfos_002, TestSize.Level1) { + MyStatus::GetInstance().paramGetBoolParameter_ = true; + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.clear(); + std::vector dialogAppInfos; + DialogAppInfo dialogAppInfo; + dialogAppInfo.bundleName = bundleName; + dialogAppInfos.emplace_back(dialogAppInfo); + KioskManager::GetInstance().FilterDialogAppInfos(dialogAppInfos); + EXPECT_TRUE(dialogAppInfos.empty()); +} + +/* + * Feature: KioskManager + * Function: FilterAbilityInfos + * SubFunction: NA + * FunctionPoints: KioskManager FilterAbilityInfos + */ +HWTEST_F(KioskManagerTest, FilterAbilityInfos_001, TestSize.Level1) { + MyStatus::GetInstance().paramGetBoolParameter_ = true; + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = false; + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.emplace(bundleName); + std::vector abilityInfos; + AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.bundleName = bundleName; + abilityInfos.emplace_back(abilityInfo); + uint32_t size = abilityInfos.size(); + KioskManager::GetInstance().FilterAbilityInfos(abilityInfos); + EXPECT_EQ(abilityInfos.size(), size); +} + +/* + * Feature: KioskManager + * Function: FilterAbilityInfos + * SubFunction: NA + * FunctionPoints: KioskManager FilterAbilityInfos + */ +HWTEST_F(KioskManagerTest, FilterAbilityInfos_002, TestSize.Level1) { + MyStatus::GetInstance().paramGetBoolParameter_ = true; + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.clear(); + std::vector abilityInfos; + AppExecFwk::AbilityInfo abilityInfo; + abilityInfo.bundleName = bundleName; + abilityInfos.emplace_back(abilityInfo); + KioskManager::GetInstance().FilterAbilityInfos(abilityInfos); + EXPECT_TRUE(abilityInfos.empty()); +} + /* * Feature: KioskManager * Function: ExitKioskMode @@ -219,7 +327,8 @@ HWTEST_F(KioskManagerTest, ExitKioskModeInner_001, TestSize.Level1) { KioskManager::GetInstance().kioskStatus_.isKioskMode_ = false; auto callerToken = MockToken(AbilityType::PAGE); std::string bundleName = "com.test.example"; - auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken); + KioskManager::GetInstance().whitelist_.emplace(bundleName); + auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken, false); EXPECT_EQ(result, ERR_NOT_IN_KIOSK_MODE); } @@ -369,6 +478,9 @@ HWTEST_F(KioskManagerTest, KioskInterceptor_001, TestSize.Level1) { auto kioskInterceptor = std::make_shared(); Want want; + want.SetElementName("com.example.test", "MainAbility"); + want.SetParam(AAFwk::SCREEN_MODE_KEY, ScreenMode::IDLE_SCREEN_MODE); + want.SetAction("com.example.myapplication"); auto shouldBlockFunc = []() { return false; }; AbilityInterceptorParam param = AbilityInterceptorParam(want, 0, 0, false, nullptr, shouldBlockFunc); @@ -387,6 +499,9 @@ HWTEST_F(KioskManagerTest, KioskInterceptor_002, TestSize.Level1) { auto kioskInterceptor = std::make_shared(); Want want; + want.SetElementName("com.example.test", "MainAbility"); + want.SetParam(AAFwk::SCREEN_MODE_KEY, ScreenMode::IDLE_SCREEN_MODE); + want.SetAction("com.example.myapplication"); auto shouldBlockFunc = []() { return false; }; AbilityInterceptorParam param = AbilityInterceptorParam(want, 0, 0, false, nullptr, shouldBlockFunc); @@ -407,7 +522,9 @@ HWTEST_F(KioskManagerTest, KioskInterceptor_003, TestSize.Level1) auto kioskInterceptor = std::make_shared(); Want want; std::string bundleName = "com.test.example"; - want.SetElementName(bundleName, ""); + want.SetElementName(bundleName, "MainAbility"); + want.SetParam(AAFwk::SCREEN_MODE_KEY, ScreenMode::IDLE_SCREEN_MODE); + want.SetAction("com.example.myapplication"); auto shouldBlockFunc = []() { return false; }; AbilityInterceptorParam param = AbilityInterceptorParam(want, 0, 0, false, nullptr, shouldBlockFunc); @@ -417,6 +534,46 @@ HWTEST_F(KioskManagerTest, KioskInterceptor_003, TestSize.Level1) EXPECT_EQ(result, ERR_OK); } +/* + * Feature: KioskManager + * Function: KioskInterceptor + * SubFunction: NA + * FunctionPoints: KioskInterceptor DoProcess + */ +HWTEST_F(KioskManagerTest, KioskInterceptor_004, TestSize.Level1) +{ + auto kioskInterceptor = std::make_shared(); + Want want; + std::string bundleName = ""; + want.SetElementName(bundleName, "MainAbility"); + want.SetParam(AAFwk::SCREEN_MODE_KEY, ScreenMode::IDLE_SCREEN_MODE); + want.SetAction("com.example.myapplication"); + auto shouldBlockFunc = []() { return false; }; + AbilityInterceptorParam param = AbilityInterceptorParam(want, 0, 0, false, nullptr, + shouldBlockFunc); + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + int32_t result = kioskInterceptor->DoProcess(param); + EXPECT_EQ(result, ERR_KIOSK_MODE_NOT_IN_WHITELIST); +} + +/* + * Feature: KioskManager + * Function: KioskInterceptor + * SubFunction: NA + * FunctionPoints: KioskInterceptor DoProcess + */ +HWTEST_F(KioskManagerTest, KioskInterceptor_005, TestSize.Level1) +{ + auto kioskInterceptor = std::make_shared(); + Want want; + std::string bundleName = "com.test.example"; + auto shouldBlockFunc = []() { return false; }; + AbilityInterceptorParam param = AbilityInterceptorParam(want, 0, 0, false, nullptr, + shouldBlockFunc); + int32_t result = kioskInterceptor->DoProcess(param); + EXPECT_EQ(result, ERR_OK); +} + /* * Feature: KioskManager * Function: AddKioskInterceptor @@ -537,8 +694,77 @@ HWTEST_F(KioskManagerTest, ExitKioskModeInner_002, TestSize.Level1) { appInfo.bundleName = bundleName; appInfo.state = AppState::BEGIN; KioskManager::GetInstance().OnAppStop(appInfo); - auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken); + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_; + auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken, false); EXPECT_EQ(result, INNER_ERR); } + +/* + * Feature: KioskManager + * Function: ExitKioskMode + * SubFunction: NA + * FunctionPoints: KioskManager ExitKioskModeInner + */ +HWTEST_F(KioskManagerTest, ExitKioskModeInner_003, TestSize.Level1) { + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + auto callerToken = MockToken(AbilityType::PAGE); + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.emplace(bundleName); + KioskManager::GetInstance().kioskStatus_.kioskBundleName_ = bundleName; + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_ + 1; + auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken, false); + EXPECT_EQ(result, ERR_NOT_IN_KIOSK_MODE); +} + +/* + * Feature: KioskManager + * Function: ExitKioskMode + * SubFunction: NA + * FunctionPoints: KioskManager ExitKioskModeInner + */ +HWTEST_F(KioskManagerTest, ExitKioskModeInner_004, TestSize.Level1) { + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + auto callerToken = MockToken(AbilityType::PAGE); + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.emplace(bundleName); + KioskManager::GetInstance().kioskStatus_.kioskBundleName_ = bundleName; + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_; + auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken, false); + EXPECT_NE(result, ERR_NOT_IN_KIOSK_MODE); +} + +/* + * Feature: KioskManager + * Function: ExitKioskMode + * SubFunction: NA + * FunctionPoints: KioskManager ExitKioskModeInner + */ +HWTEST_F(KioskManagerTest, ExitKioskModeInner_005, TestSize.Level1) { + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + auto callerToken = MockToken(AbilityType::PAGE); + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.emplace(bundleName); + KioskManager::GetInstance().kioskStatus_.kioskBundleName_ = bundleName; + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_ + 1; + auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken, true); + EXPECT_NE(result, ERR_NOT_IN_KIOSK_MODE); +} + +/* + * Feature: KioskManager + * Function: ExitKioskMode + * SubFunction: NA + * FunctionPoints: KioskManager ExitKioskModeInner + */ +HWTEST_F(KioskManagerTest, ExitKioskModeInner_006, TestSize.Level1) { + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + auto callerToken = MockToken(AbilityType::PAGE); + std::string bundleName = "com.test.demo"; + KioskManager::GetInstance().whitelist_.emplace(bundleName); + KioskManager::GetInstance().kioskStatus_.kioskBundleName_ = bundleName; + MyStatus::GetInstance().ipcGetCallingUid_ = KioskManager::GetInstance().kioskStatus_.kioskBundleUid_; + auto result = KioskManager::GetInstance().ExitKioskModeInner(bundleName, callerToken, true); + EXPECT_NE(result, ERR_NOT_IN_KIOSK_MODE); +} } // namespace AAFwk } // namespace OHOS diff --git a/test/unittest/kiosk_manager_test/mock/src/mock_ipc_skeleton.cpp b/test/unittest/kiosk_manager_test/mock/src/mock_ipc_skeleton.cpp index 16d9640ef95..947b2ed3868 100644 --- a/test/unittest/kiosk_manager_test/mock/src/mock_ipc_skeleton.cpp +++ b/test/unittest/kiosk_manager_test/mock/src/mock_ipc_skeleton.cpp @@ -14,6 +14,7 @@ */ #include "mock_ipc_skeleton.h" +#include "mock_my_status.h" namespace OHOS { #ifdef CONFIG_IPC_SINGLE @@ -25,7 +26,7 @@ pid_t tokenId_ = 0; pid_t IPCSkeleton::GetCallingUid() { - return uid_; + return static_cast(AAFwk::MyStatus::GetInstance().ipcGetCallingUid_); } pid_t IPCSkeleton::GetCallingPid() -- Gitee