From 9a893236e2c4b717c3ff82cab824ecd8b3c97a0a Mon Sep 17 00:00:00 2001 From: zhouyan Date: Fri, 1 Aug 2025 10:13:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E7=9B=B8=E6=9C=BA=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=E4=BC=A0pid=E4=BB=85=E7=94=A8=E4=BA=8E=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: Ica9df061f65fec220bc0936b4d8375ee9e2fbd8e --- .../privacy/src/privacy_manager_client.cpp | 2 +- .../test/unittest/src/privacy_kit_test.cpp | 26 +++++++++++++++++++ .../record/permission_record_manager.h | 3 ++- .../src/record/permission_record_manager.cpp | 12 ++++----- .../permission_record_manager_test.cpp | 5 ++-- 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/interfaces/innerkits/privacy/src/privacy_manager_client.cpp b/interfaces/innerkits/privacy/src/privacy_manager_client.cpp index 3467c65d1..cc196ab00 100644 --- a/interfaces/innerkits/privacy/src/privacy_manager_client.cpp +++ b/interfaces/innerkits/privacy/src/privacy_manager_client.cpp @@ -165,7 +165,7 @@ int32_t PrivacyManagerClient::StartUsingPermission(AccessTokenID tokenId, int32_ } sptr callbackWrap = nullptr; - uint64_t id = GetUniqueId(tokenId, pid); + uint64_t id = GetUniqueId(tokenId, -1); int32_t result = CreateStateChangeCbk(id, callback, callbackWrap); if (result != RET_SUCCESS) { return result; diff --git a/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp b/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp index e863945cd..cacd0b9a6 100644 --- a/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp +++ b/interfaces/innerkits/privacy/test/unittest/src/privacy_kit_test.cpp @@ -54,6 +54,7 @@ static MockHapToken* g_mock = nullptr; static bool g_isMicMute = false; #endif static constexpr uint32_t RANDOM_TOKENID = 123; +static constexpr uint32_t RANDOM_PID = 123; static constexpr int32_t INVALID_PERMISSIONAME_LENGTH = 257; static constexpr int32_t FIRST_INDEX = 0; static constexpr int32_t SECOND_INDEX = 1; @@ -2026,6 +2027,31 @@ HWTEST_F(PrivacyKitTest, StopUsingPermission008, TestSize.Level0) EXPECT_EQ(PrivacyError::ERR_PARAM_INVALID, PrivacyKit::StopUsingPermission(g_shellToken, permissionName)); } +/** + * @tc.name: StopUsingPermission009 + * @tc.desc: StopUsingPermission test with different pid. + * @tc.type: FUNC + * @tc.require: + */ +HWTEST_F(PrivacyKitTest, StopUsingPermission009, TestSize.Level0) +{ + auto callbackPtr = std::make_shared(); + ASSERT_EQ(0, PrivacyKit::StartUsingPermission(g_tokenIdE, "ohos.permission.CAMERA", callbackPtr)); + ASSERT_EQ(0, PrivacyKit::StopUsingPermission(g_tokenIdE, "ohos.permission.CAMERA")); + ASSERT_EQ(0, PrivacyKit::StartUsingPermission(g_tokenIdE, "ohos.permission.CAMERA", callbackPtr, RANDOM_PID)); + ASSERT_EQ(0, PrivacyKit::StopUsingPermission(g_tokenIdE, "ohos.permission.CAMERA")); + + ASSERT_EQ(0, PrivacyKit::StartUsingPermission(g_tokenIdE, "ohos.permission.MICROPHONE")); + ASSERT_EQ(0, PrivacyKit::StopUsingPermission(g_tokenIdE, "ohos.permission.MICROPHONE")); + ASSERT_EQ(0, PrivacyKit::StartUsingPermission(g_tokenIdE, "ohos.permission.MICROPHONE", RANDOM_PID)); + ASSERT_EQ(0, PrivacyKit::StopUsingPermission(g_tokenIdE, "ohos.permission.MICROPHONE", RANDOM_PID)); + + ASSERT_EQ(0, PrivacyKit::StartUsingPermission(g_tokenIdE, "ohos.permission.CAMERA")); + ASSERT_EQ(0, PrivacyKit::StopUsingPermission(g_tokenIdE, "ohos.permission.CAMERA")); + ASSERT_EQ(0, PrivacyKit::StartUsingPermission(g_tokenIdE, "ohos.permission.CAMERA", RANDOM_PID)); + ASSERT_EQ(0, PrivacyKit::StopUsingPermission(g_tokenIdE, "ohos.permission.CAMERA", RANDOM_PID)); +} + class TestCallBack1 : public StateChangeCallbackStub { public: TestCallBack1() = default; diff --git a/services/privacymanager/include/record/permission_record_manager.h b/services/privacymanager/include/record/permission_record_manager.h index 2398c1e48..f2d213e5f 100644 --- a/services/privacymanager/include/record/permission_record_manager.h +++ b/services/privacymanager/include/record/permission_record_manager.h @@ -160,7 +160,8 @@ private: #endif int32_t RemoveRecordFromStartList(AccessTokenID tokenId, int32_t pid, const std::string& permissionName, int32_t callerPid); - int32_t AddRecordToStartList(const PermissionUsedTypeInfo& info, int32_t status, int32_t callerPid); + int32_t AddRecordToStartList(const PermissionUsedTypeInfo& info, int32_t status, int32_t callerPid, + bool isCamera = false); void PermListToString(const std::vector& permList); bool GetGlobalSwitchStatus(const std::string& permissionName); diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 7b164fd86..c1e0f3ef2 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -950,7 +950,7 @@ int32_t PermissionRecordManager::DeletePermissionRecord(int32_t days) } int32_t PermissionRecordManager::AddRecordToStartList( - const PermissionUsedTypeInfo &info, int32_t status, int32_t callerPid) + const PermissionUsedTypeInfo &info, int32_t status, int32_t callerPid, bool isCamera) { int32_t opCode; int ret = Constant::SUCCESS; @@ -964,7 +964,7 @@ int32_t PermissionRecordManager::AddRecordToStartList( .tokenId = info.tokenId, .opCode = opCode, .status = status, - .pid = info.pid, + .pid = (isCamera ? -1 : info.pid), .callerPid = callerPid, }; @@ -977,9 +977,9 @@ int32_t PermissionRecordManager::AddRecordToStartList( } if (ret != PrivacyError::ERR_PERMISSION_ALREADY_START_USING) { startRecordList_.emplace(newRecord); + newRecord.pid = info.pid; + CallbackExecute(newRecord, permissionName, info.type); } - - CallbackExecute(newRecord, permissionName, info.type); return ret; } @@ -1391,9 +1391,9 @@ int32_t PermissionRecordManager::StartUsingPermission(const PermissionUsedTypeIn status = PERM_INACTIVE; } #endif - uint64_t id = GetUniqueId(tokenId, info.pid); + uint64_t id = GetUniqueId(tokenId, -1); cameraCallbackMap_.EnsureInsert(id, callback); - int32_t ret = AddRecordToStartList(info, status, callerPid); + int32_t ret = AddRecordToStartList(info, status, callerPid, true); if (ret != RET_SUCCESS) { cameraCallbackMap_.Erase(id); } diff --git a/services/privacymanager/test/unittest/permission_record_manager_test.cpp b/services/privacymanager/test/unittest/permission_record_manager_test.cpp index 8850dd115..0044434d0 100644 --- a/services/privacymanager/test/unittest/permission_record_manager_test.cpp +++ b/services/privacymanager/test/unittest/permission_record_manager_test.cpp @@ -606,8 +606,9 @@ HWTEST_F(PermissionRecordManagerTest, StartUsingPermissionTest009, TestSize.Leve ASSERT_EQ(RET_SUCCESS, PermissionRecordManager::GetInstance().StartUsingPermission( MakeInfo(tokenId, TEST_PID_1, permissionName), callbackWrap1->AsObject(), CALLER_PID)); - ASSERT_EQ(RET_SUCCESS, PermissionRecordManager::GetInstance().StartUsingPermission( - MakeInfo(tokenId, TEST_PID_2, permissionName), callbackWrap2->AsObject(), CALLER_PID)); + ASSERT_EQ(PrivacyError::ERR_PERMISSION_ALREADY_START_USING, + PermissionRecordManager::GetInstance().StartUsingPermission(MakeInfo(tokenId, TEST_PID_2, permissionName), + callbackWrap2->AsObject(), CALLER_PID)); } /* -- Gitee