diff --git a/services/privacymanager/include/service/privacy_manager_service.h b/services/privacymanager/include/service/privacy_manager_service.h index 7c4b2f6d3c256a056e282d6d2c1f0a1ba04b3ecc..41dcd8f85d7a3cf2093f66bf2fb9526750f2dfc9 100644 --- a/services/privacymanager/include/service/privacy_manager_service.h +++ b/services/privacymanager/include/service/privacy_manager_service.h @@ -88,6 +88,7 @@ private: #endif std::mutex deathHandlerMutex_; std::shared_ptr proxyDeathHandler_; + std::mutex stateMutex_; }; } // namespace AccessToken } // namespace Security diff --git a/services/privacymanager/sa_profile/3505.json b/services/privacymanager/sa_profile/3505.json index d8f3c203d7d53844a5ec77fb28cf677a7c787ca1..167e74f3b20adca182148b786a32e75986b70c9a 100644 --- a/services/privacymanager/sa_profile/3505.json +++ b/services/privacymanager/sa_profile/3505.json @@ -5,9 +5,7 @@ "name": 3505, "libpath": "libprivacy_manager_service.z.so", "run-on-create": true, - "depend_time_out": 60000, "distributed": false, - "depend": [ 3503 ], "dump_level": 1 } ] diff --git a/services/privacymanager/src/service/privacy_manager_service.cpp b/services/privacymanager/src/service/privacy_manager_service.cpp index 0a6f51d5396f6b23c7c3af328480afc68046100b..23da941bae0fd2aa67d894023ecb11317aa674b1 100644 --- a/services/privacymanager/src/service/privacy_manager_service.cpp +++ b/services/privacymanager/src/service/privacy_manager_service.cpp @@ -77,17 +77,9 @@ void PrivacyManagerService::OnStart() LOGE(PRI_DOMAIN, PRI_TAG, "Failed to initialize"); return; } - + AddSystemAbilityListener(ACCESS_TOKEN_MANAGER_SERVICE_ID); AddSystemAbilityListener(COMMON_EVENT_SERVICE_ID); AddSystemAbilityListener(SCREENLOCK_SERVICE_ID); - - state_ = ServiceRunningState::STATE_RUNNING; - bool ret = Publish(DelayedSingleton::GetInstance().get()); - if (!ret) { - LOGE(PRI_DOMAIN, PRI_TAG, "Failed to publish service!"); - return; - } - LOGI(PRI_DOMAIN, PRI_TAG, "Congratulations, PrivacyManagerService start successfully!"); } void PrivacyManagerService::OnStop() @@ -502,6 +494,18 @@ void PrivacyManagerService::OnAddSystemAbility(int32_t systemAbilityId, const st PermissionRecordManager::GetInstance().SetLockScreenStatus(lockScreenStatus); return; } + + std::lock_guard lock(stateMutex_); + if (systemAbilityId == ACCESS_TOKEN_MANAGER_SERVICE_ID && state_ != ServiceRunningState::STATE_RUNNING) { + bool ret = Publish(DelayedSingleton::GetInstance().get()); + if (!ret) { + LOGE(PRI_DOMAIN, PRI_TAG, "Failed to publish service!"); + return; + } + state_ = ServiceRunningState::STATE_RUNNING; + LOGI(PRI_DOMAIN, PRI_TAG, "Congratulations, PrivacyManagerService start successfully!"); + return; + } } bool PrivacyManagerService::Initialize() diff --git a/services/privacymanager/test/unittest/privacy_manager_service_test.cpp b/services/privacymanager/test/unittest/privacy_manager_service_test.cpp index 859f491ddf4e06b5d38c3be74d1104583075253e..7b32b7ef248f6cf33f8c50745f6bde149a3a2800 100644 --- a/services/privacymanager/test/unittest/privacy_manager_service_test.cpp +++ b/services/privacymanager/test/unittest/privacy_manager_service_test.cpp @@ -46,6 +46,7 @@ constexpr const char* CAMERA_PERMISSION_NAME = "ohos.permission.CAMERA"; constexpr const char* MICROPHONE_PERMISSION_NAME = "ohos.permission.MICROPHONE"; constexpr const char* LOCATION_PERMISSION_NAME = "ohos.permission.LOCATION"; static const uint32_t PERM_LIST_SIZE_MAX = 1024; +static constexpr int32_t ACCESS_TOKEN_MANAGER_SERVICE_ID = 3503; static constexpr int32_t COMMON_EVENT_SERVICE_ID = 3299; static constexpr int32_t SCREENLOCK_SERVICE_ID = 3704; static constexpr int32_t INVALID_CODE = 999; @@ -1240,6 +1241,7 @@ HWTEST_F(PrivacyManagerServiceTest, GetProxyDeathHandle001, TestSize.Level0) auto handler2 = privacyManagerService_->GetProxyDeathHandler(); ASSERT_NE(nullptr, handler2); + privacyManagerService_->OnAddSystemAbility(ACCESS_TOKEN_MANAGER_SERVICE_ID, "123"); privacyManagerService_->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, "123"); privacyManagerService_->OnAddSystemAbility(SCREENLOCK_SERVICE_ID, "123"); privacyManagerService_->OnAddSystemAbility(INVALID_CODE, "123");