From 623208762038f03c1f43dd8a68e47ce22d10049f Mon Sep 17 00:00:00 2001 From: chennian Date: Wed, 28 May 2025 15:02:40 +0800 Subject: [PATCH] test Signed-off-by: chennian Change-Id: Ib48c67da85026365d0c028985e8dd8df2ad37730 --- .../innerkits/privacy/include/privacy_error.h | 1 + .../record/permission_record_manager.h | 9 +++- .../src/record/permission_record_manager.cpp | 41 +++++++++++++++++-- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/interfaces/innerkits/privacy/include/privacy_error.h b/interfaces/innerkits/privacy/include/privacy_error.h index dc98690a6..d89d2469d 100644 --- a/interfaces/innerkits/privacy/include/privacy_error.h +++ b/interfaces/innerkits/privacy/include/privacy_error.h @@ -66,6 +66,7 @@ enum PrivacyError { ERR_FIRST_CALLER_NOT_EDM, ERR_ADD_DEATH_RECIPIENT_FAILED, PRIVACY_TOGGELE_RESTRICTED, + ERR_PERMISSION_NOT_ALLOW_USING }; } // namespace AccessToken } // namespace Security diff --git a/services/privacymanager/include/record/permission_record_manager.h b/services/privacymanager/include/record/permission_record_manager.h index 17f738733..0be5e6898 100644 --- a/services/privacymanager/include/record/permission_record_manager.h +++ b/services/privacymanager/include/record/permission_record_manager.h @@ -15,7 +15,7 @@ #ifndef PERMISSION_RECORD_MANAGER_H #define PERMISSION_RECORD_MANAGER_H - +#include #include #include #include @@ -180,6 +180,9 @@ private: const PermissionUsedType type); void AddDataValueToResults(const GenericValues value, std::vector& results); + void AddCameraRecordToDB(); + void AddCameraRecord(const PermissionRecord& record); + #ifdef CAMERA_FLOAT_WINDOW_ENABLE bool HasUsingCamera(); void ClearWindowShowing(); @@ -222,6 +225,10 @@ private: bool isCamMixMute_ = false; bool isCamLoad_ = false; + std::mutex camRecordQueueMtx; + bool isWritingDB = false; + std::queue camRecordQueue; + // appState std::mutex appStateMutex_; sptr appStateCallback_ = nullptr; diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 36fac081b..f699fd8b6 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #ifndef APP_SECURITY_PRIVACY_SERVICE @@ -308,10 +309,6 @@ void PermissionRecordManager::UpdatePermRecImmediately() int32_t PermissionRecordManager::GetPermissionRecord(const AddPermParamInfo& info, PermissionRecord& record) { - if (AccessTokenKit::GetTokenTypeFlag(info.tokenId) != TOKEN_HAP) { - LOGE(PRI_DOMAIN, PRI_TAG, "Not hap(%{public}d).", info.tokenId); - return PrivacyError::ERR_PARAM_INVALID; - } int32_t opCode; if (!Constant::TransferPermissionToOpcode(info.permissionName, opCode)) { LOGE(PRI_DOMAIN, PRI_TAG, "Invalid perm(%{public}s)", info.permissionName.c_str()); @@ -438,6 +435,10 @@ int32_t PermissionRecordManager::AddPermissionUsedRecord(const AddPermParamInfo& return result; } + if (record.opCode == Constant::OP_CAMERA) { + AddCameraRecord(record); + return RET_SUCCESS; + } result = AddRecord(record); if (result != Constant::SUCCESS) { return result; @@ -447,6 +448,35 @@ int32_t PermissionRecordManager::AddPermissionUsedRecord(const AddPermParamInfo& info.tokenId, record.opCode, info.type) ? Constant::SUCCESS : Constant::FAILURE; } +void PermissionRecordManager::AddCameraRecordToDB() +{ + LOGI(PRI_DOMAIN, PRI_TAG, "camRecordQueue siize is (%{public}zu).", camRecordQueue.size()); + while (!camRecordQueue.empty()) { + PermissionRecord record = camRecordQueue.front(); + camRecordQueue.pop(); + int32_t result = AddRecord(record); + if (result != Constant::SUCCESS) { + LOGI(PRI_DOMAIN, PRI_TAG, "Fail to add camera record, err(%{public}d).", result); + continue; + } + if (!AddOrUpdateUsedTypeIfNeeded(record.tokenId, record.opCode, record.type)) { + LOGI(PRI_DOMAIN, PRI_TAG, "Fail to add usedType for camera."); + continue; + } + } + isWritingDB = false; +} + +void PermissionRecordManager::AddCameraRecord(const PermissionRecord& record) +{ + std::lock_guard lock(camRecordQueueMtx); + camRecordQueue.push(record); + if (!isWritingDB) { + isWritingDB = true; + std::async(std::launch::async, &PermissionRecordManager::AddCameraRecordToDB, this); + } +} + int32_t PermissionRecordManager::SetPermissionUsedRecordToggleStatus(int32_t userID, bool status) { if (userID == 0) { @@ -1340,6 +1370,9 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn LOGD(PRI_DOMAIN, PRI_TAG, "Token(%{public}u), perm(%{public}s).", tokenId, permissionName.c_str()); return PrivacyError::ERR_PARAM_INVALID; } + if (!IsAllowedUsingCamera(tokenId, info.pid)) { + return PrivacyError::ERR_PERMISSION_NOT_ALLOW_USING; + } InitializeMuteState(permissionName); if (GetMuteStatus(permissionName, EDM)) { -- Gitee