diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 87192be9a16ba880e2089033df01afb0a76897d6..96373c395f601d8b258c70470f35ce0dfae6a24d 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -7162,8 +7162,15 @@ void AbilityManagerService::OnAbilityDied(std::shared_ptr ability TAG_LOGI(AAFwkTag::ABILITYMGR, "On ability died: %{public}s, %{public}d, %{public}" PRId64, abilityRecord->GetURI().c_str(), abilityRecord->GetRecordId(), abilityRecord->GetAbilityRecordId()); + TAG_LOGI(AAFwkTag::ABILITYMGR, "ttt call 1."); if (abilityRecord->GetToken()) { + TAG_LOGI(AAFwkTag::ABILITYMGR, "ttt call 2.%{public}s", abilityRecord->GetAbilityInfo().bundleName.c_str()); FreezeUtil::GetInstance().DeleteLifecycleEvent(abilityRecord->GetToken()->AsObject()); + if (KioskManager::GetInstance().IsInKioskMode() && + KioskManager::GetInstance().IsInWhiteList(abilityRecord->GetAbilityInfo().bundleName)) { + TAG_LOGI(AAFwkTag::ABILITYMGR, "ttt call 3."); + KioskManager::GetInstance().ExitKioskMode(abilityRecord->GetToken()->AsObject()); + } } FreezeUtil::GetInstance().DeleteAppLifecycleEvent(abilityRecord->GetPid()); if (Rosen::SceneBoardJudgement::IsSceneBoardEnabled()) { diff --git a/services/abilitymgr/src/kiosk_manager.cpp b/services/abilitymgr/src/kiosk_manager.cpp index dac983486c6b46f926638ae5c79cd0a73a73b334..20c7b38e0e17767522f40d7097690d8fa6b44d5e 100644 --- a/services/abilitymgr/src/kiosk_manager.cpp +++ b/services/abilitymgr/src/kiosk_manager.cpp @@ -179,12 +179,24 @@ int32_t KioskManager::GetKioskStatus(KioskStatus &kioskStatus) bool KioskManager::IsInKioskMode() { std::lock_guard lock(kioskManagermutex_); + if (IsInKioskModeInner()) { + TAG_LOGI(AAFwkTag::TEST, "ttt IsInKioskMode---------- if "); + } else { + TAG_LOGI(AAFwkTag::TEST, "ttt IsInKioskMode---------- else"); + } return IsInKioskModeInner(); } bool KioskManager::IsInWhiteList(const std::string &bundleName) { + TAG_LOGI(AAFwkTag::TEST, "ttt -----%{public}s", bundleName.c_str()); std::lock_guard lock(kioskManagermutex_); + TAG_LOGI(AAFwkTag::TEST, "ttt ---2--%{public}s", bundleName.c_str()); + if (IsInWhiteListInner(bundleName)) { + TAG_LOGI(AAFwkTag::TEST, "ttt IsInWhiteList===== if "); + } else { + TAG_LOGI(AAFwkTag::TEST, "ttt IsInWhiteList===== else"); + } return IsInWhiteListInner(bundleName); } 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 e0b8a83a8f59f8cdcc20c0bcbbace2fdccdc8ed9..65456711961b907ed4fd7803c488afbd8a5b6214 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 @@ -1249,5 +1249,40 @@ HWTEST_F(AbilityManagerServiceTwelfthTest, ResumeExtensionAbility_001, TestSize. TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest ResumeExtensionAbility_001 end"); } + +/* + * Feature: AbilityManagerService + * Function: OnAbilityDied + * SubFunction: NA + * FunctionPoints: AbilityManagerService OnAbilityDied + */ +HWTEST_F(AbilityManagerServiceTwelfthTest, OnAbilityDied_001, TestSize.Level1) +{ + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest OnAbilityDied_001 start"); + auto abilityMs = std::make_shared(); + sptr token = MockToken(AbilityType::PAGE); + std::shared_ptr abilityRecord = MockAbilityRecord(AbilityType::PAGE); + EXPECT_NE(abilityRecord, nullptr); + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = false; + abilityMs->OnAbilityDied(abilityRecord); + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + abilityMs->OnAbilityDied(abilityRecord); + EXPECT_NE(abilityRecord->GetToken(), nullptr); + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = false; + abilityRecord->abilityInfo_.bundleName = "com.test.demo"; + TAG_LOGI(AAFwkTag::TEST, "ttt %{public}s", abilityRecord->GetAbilityInfo().bundleName.c_str()); + KioskManager::GetInstance().whitelist_.emplace(abilityRecord->GetAbilityInfo().bundleName); + abilityMs->OnAbilityDied(abilityRecord); + KioskManager::GetInstance().kioskStatus_.isKioskMode_ = true; + abilityMs->OnAbilityDied(abilityRecord); + KioskManager::GetInstance().kioskStatus_.kioskBundleName_ = "com.test.demo"; + if (system::GetBoolParameter(KIOSK_MODE_ENABLED, false)) { + TAG_LOGI(AAFwkTag::TEST, "ttt -=-"); + EXPECT_FALSE(KioskManager::GetInstance().kioskStatus_.isKioskMode_); + EXPECT_EQ(KioskManager::GetInstance().kioskStatus_.kioskBundleName_, ""); + } + EXPECT_FALSE(abilityMs->VerificationToken(token)); + TAG_LOGI(AAFwkTag::TEST, "AbilityManagerServiceTwelfthTest OnAbilityDied_001 end"); +} } // namespace AAFwk } // namespace OHOS