From 69be9580f19f4da38b6980ee50405c2a14e8ebbe Mon Sep 17 00:00:00 2001 From: lihehe Date: Tue, 2 Sep 2025 09:51:18 +0800 Subject: [PATCH 1/4] fix loop deps again Signed-off-by: lihehe --- .../src/napi_request_permission.cpp | 3 +- .../include/napi_request_permission.h | 4 +++ .../json_parse/src/json_parse_loader.cpp | 19 +++++++++--- .../include/device/device_info_manager.h | 8 ++--- .../include/remote/soft_bus_manager.h | 16 ++++++++++ .../src/device/device_info_manager.cpp | 28 +++++------------- .../src/remote/remote_command_manager.cpp | 3 +- .../soft_bus_device_connection_listener.cpp | 8 ++--- .../src/remote/soft_bus_manager.cpp | 29 +++++++++++++++++++ .../token_sync_service_coverage_test.cpp | 8 ++--- .../test/unittest/token_sync_service_test.cpp | 24 +++++++-------- 11 files changed, 97 insertions(+), 53 deletions(-) diff --git a/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp b/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp index 81f65d718..37a96aa45 100644 --- a/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp +++ b/frameworks/js/napi/accesstoken/src/napi_request_permission.cpp @@ -858,7 +858,8 @@ void NapiRequestPermission::GetPermissionsStatusExecute(napi_env env, void* data LOGD(ATM_DOMAIN, ATM_TAG, "PermList size: %{public}zu, asyncContext->permissionList size: %{public}zu.", permList.size(), asyncContext->permissionList.size()); - asyncContext->result.errorCode = AccessTokenKit::GetPermissionsStatus(asyncContext->tokenId, permList); + asyncContext->SetErrorCode(AccessTokenKit::GetPermissionsStatus(asyncContext->tokenId, permList)); + for (const auto& permState : permList) { LOGD(ATM_DOMAIN, ATM_TAG, "Permission: %{public}s", permState.permissionName.c_str()); asyncContext->permissionQueryResults.emplace_back(permState.state); diff --git a/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h b/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h index 45cd3f390..8f605b3b9 100644 --- a/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h +++ b/interfaces/kits/js/napi/accesstoken/include/napi_request_permission.h @@ -56,6 +56,10 @@ struct RequestAsyncContext : public AtManagerAsyncWorkData { #ifdef EVENTHANDLER_ENABLE std::shared_ptr handler_ = nullptr; #endif + void SetErrorCode(int32_t errcode) + { + result.errorCode = errcode; + } }; struct RequestAsyncContextHandle { diff --git a/services/common/json_parse/src/json_parse_loader.cpp b/services/common/json_parse/src/json_parse_loader.cpp index 0c4bd78bc..76a51844d 100644 --- a/services/common/json_parse/src/json_parse_loader.cpp +++ b/services/common/json_parse/src/json_parse_loader.cpp @@ -495,15 +495,16 @@ static bool IsPermissionReqValid(int32_t tokenApl, const std::string& permission return false; } -std::string ConfigPolicLoader::DumpNativeTokenInfo(const NativeTokenInfoBase& native) +static void AddNativeTokenInfo(CJsonUnique& j, const NativeTokenInfoBase& native) { - CJsonUnique j = CreateJson(); (void)AddUnsignedIntToJson(j, "tokenID", native.tokenID); (void)AddStringToJson(j, "processName", native.processName); (void)AddIntToJson(j, "apl", native.apl); +} - CJsonUnique permStateListJson = CreateJsonArray(); - CJsonUnique invalidPermStringJson = CreateJsonArray(); +static void AddPermStateListInNativeTokenInfo(const NativeTokenInfoBase& native, + CJsonUnique& permStateListJson, CJsonUnique& invalidPermStringJson) +{ for (auto iter = native.permStateList.begin(); iter != native.permStateList.end(); ++iter) { if (!IsPermissionReqValid(native.apl, iter->permissionName, native.nativeAcls)) { CJsonUnique tmpJson = CreateJsonString(iter->permissionName); @@ -516,6 +517,16 @@ std::string ConfigPolicLoader::DumpNativeTokenInfo(const NativeTokenInfoBase& na (void)AddUnsignedIntToJson(permStateJson, "grantFlag", iter->grantFlag); (void)AddObjToArray(permStateListJson, permStateJson); } +} + +std::string ConfigPolicLoader::DumpNativeTokenInfo(const NativeTokenInfoBase& native) +{ + CJsonUnique j = CreateJson(); + AddNativeTokenInfo(j, native); + + CJsonUnique permStateListJson = CreateJsonArray(); + CJsonUnique invalidPermStringJson = CreateJsonArray(); + AddPermStateListInNativeTokenInfo(native, permStateListJson, invalidPermStringJson); (void)AddObjToJson(j, "permStateList", permStateListJson); (void)AddObjToJson(j, "invalidPermList", invalidPermStringJson); diff --git a/services/tokensyncmanager/include/device/device_info_manager.h b/services/tokensyncmanager/include/device/device_info_manager.h index 6dd2bfc88..8c1087d6e 100644 --- a/services/tokensyncmanager/include/device/device_info_manager.h +++ b/services/tokensyncmanager/include/device/device_info_manager.h @@ -79,17 +79,17 @@ public: * Convert nodeId to deviceId(UUID) if possible. * * @param nodeId which is considered as indefinite id, maybe deviceId(UUID) or networkId. - * @return The deviceId if local or device online, otherwise return empty string. + * @return The deviceId if device online, otherwise return empty string. */ - std::string ConvertToUniversallyUniqueIdOrFetch(const std::string &nodeId) const; + std::string ConvertToUniversallyUniqueId(const std::string &nodeId) const; /** * Convert nodeId to deviceId(UDID) if possible. * * @param nodeId which is considered as indefinite id, maybe deviceId(UDID) or networkId. - * @return The deviceId if local or device online, otherwise return empty string. + * @return The deviceId if device online, otherwise return empty string. */ - std::string ConvertToUniqueDeviceIdOrFetch(const std::string &nodeId) const; + std::string ConvertToUniqueDeviceId(const std::string &nodeId, bool& isFoundDevice) const; /** * Check nodeId is uuid or not. diff --git a/services/tokensyncmanager/include/remote/soft_bus_manager.h b/services/tokensyncmanager/include/remote/soft_bus_manager.h index d53e94e62..a6f780816 100644 --- a/services/tokensyncmanager/include/remote/soft_bus_manager.h +++ b/services/tokensyncmanager/include/remote/soft_bus_manager.h @@ -100,6 +100,22 @@ public: */ std::string GetUniqueDeviceIdByNodeId(const std::string &networkId); + /** + * Convert nodeId to deviceId(UUID) if possible. + * + * @param nodeId which is considered as indefinite id, maybe deviceId(UUID) or networkId. + * @return The deviceId if local or device online, otherwise return empty string. + */ + std::string ConvertToUniversallyUniqueIdOrFetch(const std::string &nodeId); + + /** + * Convert nodeId to deviceId(UDID) if possible. + * + * @param nodeId which is considered as indefinite id, maybe deviceId(UDID) or networkId. + * @return The deviceId if local or device online, otherwise return empty string. + */ + std::string ConvertToUniqueDeviceIdOrFetch(const std::string &nodeId); + bool GetNetworkIdBySocket(const int32_t socket, std::string& networkId); int32_t GetRepeatTimes(); diff --git a/services/tokensyncmanager/src/device/device_info_manager.cpp b/services/tokensyncmanager/src/device/device_info_manager.cpp index 6c32c4e17..d357adde4 100644 --- a/services/tokensyncmanager/src/device/device_info_manager.cpp +++ b/services/tokensyncmanager/src/device/device_info_manager.cpp @@ -86,11 +86,11 @@ void DeviceInfoManager::RemoveRemoteDeviceInfo(const std::string &nodeId, Device } } -std::string DeviceInfoManager::ConvertToUniversallyUniqueIdOrFetch(const std::string &nodeId) const +std::string DeviceInfoManager::ConvertToUniversallyUniqueId(const std::string &nodeId) const { std::string result; if (!DataValidator::IsDeviceIdValid(nodeId)) { - LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniversallyUniqueIdOrFetch: nodeId is invalid."); + LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniversallyUniqueId: nodeId is invalid."); return result; } DeviceInfo deviceInfo; @@ -100,31 +100,19 @@ std::string DeviceInfoManager::ConvertToUniversallyUniqueIdOrFetch(const std::st return deviceInfo.deviceId.universallyUniqueId; } -std::string DeviceInfoManager::ConvertToUniqueDeviceIdOrFetch(const std::string &nodeId) const +std::string DeviceInfoManager::ConvertToUniqueDeviceId(const std::string &nodeId, bool& isFoundDevice) const { + isFoundDevice = false; std::string result; if (!DataValidator::IsDeviceIdValid(nodeId)) { - LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniqueDeviceIdOrFetch: nodeId is invalid."); + LOGE(ATM_DOMAIN, ATM_TAG, "ConvertToUniqueDeviceId: nodeId is invalid."); return result; } DeviceInfo deviceInfo; if (DeviceInfoRepository::GetInstance().FindDeviceInfo(nodeId, DeviceIdType::UNKNOWN, deviceInfo)) { - std::string uniqueDeviceId = deviceInfo.deviceId.uniqueDeviceId; - if (uniqueDeviceId.empty()) { - std::string udid = SoftBusManager::GetInstance().GetUniqueDeviceIdByNodeId(nodeId); - if (!udid.empty()) { - result = udid; - } else { - LOGD(ATM_DOMAIN, ATM_TAG, - "FindDeviceInfo succeed, udid and local udid is empty, nodeId(%{public}s)", - ConstantCommon::EncryptDevId(nodeId).c_str()); - } - } else { - LOGD(ATM_DOMAIN, ATM_TAG, - "FindDeviceInfo succeed, udid is empty, nodeId(%{public}s) ", - ConstantCommon::EncryptDevId(nodeId).c_str()); - result = uniqueDeviceId; - } + LOGD(ATM_DOMAIN, ATM_TAG, "FindDeviceInfo succeed, nodeId(%{public}s)", nodeId.c_str()); + isFoundDevice = true; + return deviceInfo.deviceId.uniqueDeviceId; } else { LOGD(ATM_DOMAIN, ATM_TAG, "FindDeviceInfo failed, nodeId(%{public}s)", ConstantCommon::EncryptDevId(nodeId).c_str()); diff --git a/services/tokensyncmanager/src/remote/remote_command_manager.cpp b/services/tokensyncmanager/src/remote/remote_command_manager.cpp index c50dbfc9e..fc942fdd3 100644 --- a/services/tokensyncmanager/src/remote/remote_command_manager.cpp +++ b/services/tokensyncmanager/src/remote/remote_command_manager.cpp @@ -20,6 +20,7 @@ #endif #include "device_info_manager.h" #include "remote_command_factory.h" +#include "soft_bus_manager.h" #include "token_sync_manager_service.h" #include "accesstoken_kit.h" #include "constant_common.h" @@ -265,7 +266,7 @@ std::shared_ptr RemoteCommandManager::GetOrCreateRemoteCo std::shared_ptr RemoteCommandManager::GetExecutorChannel(const std::string &nodeId) { LOGD(ATM_DOMAIN, ATM_TAG, "Convert udid start, nodeId:%{public}s", ConstantCommon::EncryptDevId(nodeId).c_str()); - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); if (!DataValidator::IsDeviceIdValid(udid)) { LOGW(ATM_DOMAIN, ATM_TAG, "Converted udid is invalid, nodeId:%{public}s", ConstantCommon::EncryptDevId(nodeId).c_str()); diff --git a/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp b/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp index b1fed6a56..601c0c6a3 100644 --- a/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp +++ b/services/tokensyncmanager/src/remote/soft_bus_device_connection_listener.cpp @@ -20,6 +20,7 @@ #include "device_info_manager.h" #include "device_manager.h" #include "iservice_registry.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "system_ability_definition.h" #include "constant_common.h" @@ -85,11 +86,8 @@ void SoftBusDeviceConnectionListener::UnloadTokensyncService() void SoftBusDeviceConnectionListener::OnDeviceOffline(const DistributedHardware::DmDeviceInfo &info) { std::string networkId = std::string(info.networkId); - std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); - if (uuid.empty()) { - uuid = SoftBusManager::GetInstance().GetUniversallyUniqueIdByNodeId(networkId); - } - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); + std::string uuid = SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); if ((uuid == "") || (udid == "")) { LOGE(ATM_DOMAIN, ATM_TAG, "Uuid or udid is empty, offline failed."); return; diff --git a/services/tokensyncmanager/src/remote/soft_bus_manager.cpp b/services/tokensyncmanager/src/remote/soft_bus_manager.cpp index 39d9aba5f..3f6cdf622 100644 --- a/services/tokensyncmanager/src/remote/soft_bus_manager.cpp +++ b/services/tokensyncmanager/src/remote/soft_bus_manager.cpp @@ -28,6 +28,7 @@ #include "libraryloader.h" #include "remote_command_manager.h" #include "soft_bus_device_connection_listener.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "token_setproc.h" @@ -543,6 +544,34 @@ int SoftBusManager::FulfillLocalDeviceInfo() fulfillMutex_.unlock(); return Constant::SUCCESS; } + +std::string SoftBusManager::ConvertToUniversallyUniqueIdOrFetch(const std::string& nodeId) +{ + std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueId(nodeId); + if (uuid.empty()) { + uuid = GetUniversallyUniqueIdByNodeId(nodeId); + } + return uuid; +} + +std::string SoftBusManager::ConvertToUniqueDeviceIdOrFetch(const std::string& nodeId) +{ + bool isFoundDevice = false; + std::string uniqueDeviceId = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceId(nodeId, isFoundDevice); + LOGE(ATM_DOMAIN, ATM_TAG, "nodeId %{public}d", isFoundDevice); + if (uniqueDeviceId.empty() && isFoundDevice) { + std::string udid = GetUniqueDeviceIdByNodeId(nodeId); + if (!udid.empty()) { + uniqueDeviceId = udid; + LOGD(ATM_DOMAIN, ATM_TAG, + "udid is empty, use local udid, nodeId(%{public}s)", ConstantCommon::EncryptDevId(nodeId).c_str()); + } else { + LOGD(ATM_DOMAIN, ATM_TAG, + "Udid and local udid is empty, nodeId(%{public}s)", ConstantCommon::EncryptDevId(nodeId).c_str()); + } + } + return uniqueDeviceId; +} } // namespace AccessToken } // namespace Security } // namespace OHOS diff --git a/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp b/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp index 5ac876c52..75b0c33c0 100644 --- a/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp +++ b/services/tokensyncmanager/test/coverage/token_sync_service_coverage_test.cpp @@ -44,6 +44,7 @@ #include "remote_command_manager.h" #include "socket.h" #include "soft_bus_device_connection_listener.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "test_common.h" #include "token_setproc.h" @@ -134,11 +135,8 @@ void TokenSyncServiceTest::TearDown() void TokenSyncServiceTest::OnDeviceOffline(const DistributedHardware::DmDeviceInfo &info) { std::string networkId = info.networkId; - std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); - if (uuid.empty()) { - uuid = SoftBusManager::GetInstance().GetUniversallyUniqueIdByNodeId(networkId); - } - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); + std::string uuid = SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); LOGI(ATM_DOMAIN, ATM_TAG, "networkId: %{public}s, uuid: %{public}s, udid: %{public}s", diff --git a/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp b/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp index 081c8fef8..ec1a4674a 100644 --- a/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp +++ b/services/tokensyncmanager/test/unittest/token_sync_service_test.cpp @@ -45,6 +45,7 @@ #undef private #include "socket.h" #include "soft_bus_device_connection_listener.h" +#include "soft_bus_manager.h" #include "soft_bus_socket_listener.h" #include "test_common.h" #include "token_setproc.h" @@ -143,11 +144,8 @@ void TokenSyncServiceTest::TearDown() void TokenSyncServiceTest::OnDeviceOffline(const DistributedHardware::DmDeviceInfo &info) { std::string networkId = info.networkId; - std::string uuid = DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); - if (uuid.empty()) { - uuid = SoftBusManager::GetInstance().GetUniversallyUniqueIdByNodeId(networkId); - } - std::string udid = DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); + std::string uuid = SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(networkId); + std::string udid = SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(networkId); LOGI(ATM_DOMAIN, ATM_TAG, "networkId: %{public}s, uuid: %{public}s, udid: %{public}s", @@ -1020,18 +1018,18 @@ HWTEST_F(TokenSyncServiceTest, RemoveRemoteDeviceInfo001, TestSize.Level0) /** * @tc.name: ConvertToUniversallyUniqueIdOrFetch001 - * @tc.desc: DeviceInfoManager::ConvertToUniversallyUniqueIdOrFetch function test + * @tc.desc: SoftBusManager::ConvertToUniversallyUniqueIdOrFetch function test * @tc.type: FUNC * @tc.require: */ HWTEST_F(TokenSyncServiceTest, ConvertToUniversallyUniqueIdOrFetch001, TestSize.Level0) { std::string nodeId; - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); // nodeId invalid + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); // nodeId invalid nodeId = "123"; // FindDeviceInfo false - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId)); std::string networkId = "123"; std::string universallyUniqueId = "123"; @@ -1043,7 +1041,7 @@ HWTEST_F(TokenSyncServiceTest, ConvertToUniversallyUniqueIdOrFetch001, TestSize. nodeId = "123"; // FindDeviceInfo true + universallyUniqueId is not empty - DeviceInfoManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId); + SoftBusManager::GetInstance().ConvertToUniversallyUniqueIdOrFetch(nodeId); nodeId = uniqueDeviceId; // FindDeviceInfo true + uniqueDeviceId != localDevice false @@ -1057,18 +1055,18 @@ HWTEST_F(TokenSyncServiceTest, ConvertToUniversallyUniqueIdOrFetch001, TestSize. /** * @tc.name: ConvertToUniqueDeviceIdOrFetch001 - * @tc.desc: DeviceInfoManager::ConvertToUniqueDeviceIdOrFetch function test + * @tc.desc: SoftBusManager::ConvertToUniqueDeviceIdOrFetch function test * @tc.type: FUNC * @tc.require: */ HWTEST_F(TokenSyncServiceTest, ConvertToUniqueDeviceIdOrFetch001, TestSize.Level0) { std::string nodeId; - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); // nodeId invalid + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); // nodeId invalid nodeId = "123"; // FindDeviceInfo false - ASSERT_EQ("", DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); + ASSERT_EQ("", SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId)); std::string networkId = "123"; std::string universallyUniqueId = "123"; @@ -1080,7 +1078,7 @@ HWTEST_F(TokenSyncServiceTest, ConvertToUniqueDeviceIdOrFetch001, TestSize.Level nodeId = "123"; // FindDeviceInfo true + universallyUniqueId is not empty - DeviceInfoManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); + SoftBusManager::GetInstance().ConvertToUniqueDeviceIdOrFetch(nodeId); nodeId = uniqueDeviceId; // FindDeviceInfo true + uniqueDeviceId != localDevice false From 0e28a54f3ed058e4973b27c9512e1b4fe90ef13b Mon Sep 17 00:00:00 2001 From: zZjuN Date: Wed, 3 Sep 2025 19:01:23 +0800 Subject: [PATCH 2/4] add CAPTURE_SCREEN_ALL permission Signed-off-by: zZjuN --- .../accesstokenmanager/permission_definitions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/services/accesstokenmanager/permission_definitions.json b/services/accesstokenmanager/permission_definitions.json index d40b4d9b0..17d014b24 100644 --- a/services/accesstokenmanager/permission_definitions.json +++ b/services/accesstokenmanager/permission_definitions.json @@ -7543,6 +7543,17 @@ "provisionEnable": true, "distributedSceneEnable": false, "deviceTypes": ["2in1"] + }, + { + "name": "ohos.permission.CAPTURE_SCREEN_ALL", + "grantMode": "system_grant", + "availableLevel": "system_core", + "availableType": "SYSTEM", + "since": 21, + "deprecated": "", + "provisionEnable": true, + "distributedSceneEnable": false, + "deviceTypes": ["general"] } ] } From 5272acb711926472d39a3450e6853cdfbd7ed1ba Mon Sep 17 00:00:00 2001 From: yn Date: Mon, 1 Sep 2025 21:22:49 +0800 Subject: [PATCH 3/4] add ohos.permission.CUSTOM_SCREEN_RECORDING Signed-off-by: yn --- .../accesstokenmanager/permission_definitions.json | 11 +++++++++++ services/privacymanager/include/common/constant.h | 1 + services/privacymanager/src/common/constant.cpp | 2 ++ 3 files changed, 14 insertions(+) diff --git a/services/accesstokenmanager/permission_definitions.json b/services/accesstokenmanager/permission_definitions.json index 17d014b24..a3ff86aa8 100644 --- a/services/accesstokenmanager/permission_definitions.json +++ b/services/accesstokenmanager/permission_definitions.json @@ -7554,6 +7554,17 @@ "provisionEnable": true, "distributedSceneEnable": false, "deviceTypes": ["general"] + }, + { + "name": "ohos.permission.CUSTOM_SCREEN_RECORDING", + "grantMode": "manual_settings", + "availableLevel": "system_basic", + "availableType": "NORMAL", + "since": 22, + "deprecated": "", + "provisionEnable": true, + "distributedSceneEnable": false, + "deviceTypes": ["2in1"] } ] } diff --git a/services/privacymanager/include/common/constant.h b/services/privacymanager/include/common/constant.h index d265b35d8..7fab65ad5 100644 --- a/services/privacymanager/include/common/constant.h +++ b/services/privacymanager/include/common/constant.h @@ -71,6 +71,7 @@ public: SHORT_TERM_WRITE_IMAGEVIDEO = 42, CAMERA_BACKGROUND = 43, OP_CUSTOM_SCREEN_CAPTURE = 44, + OP_CUSTOM_SCREEN_RECORDING = 45, // 以下声明仅用于下载 桌面 文档文件夹权限的访问记录使用,需要和普通权限做区分 OP_READ_WRITE_DOWNLOAD_DIRECTORY_MEDIA_READ = 100, OP_READ_WRITE_DOWNLOAD_DIRECTORY_MEDIA_WRITE = 101, diff --git a/services/privacymanager/src/common/constant.cpp b/services/privacymanager/src/common/constant.cpp index 40dd5c5f1..1d72fbb82 100644 --- a/services/privacymanager/src/common/constant.cpp +++ b/services/privacymanager/src/common/constant.cpp @@ -103,6 +103,8 @@ const std::map Constant::PERMISSION_OPCODE_MAP = { Constant::OP_READ_WRITE_DESKTOP_DIRECTORY_OTHER_READ), std::map::value_type("ohos.permission.READ_WRITE_DESKTOP_DIRECTORY_OTHER_WRITE", Constant::OP_READ_WRITE_DESKTOP_DIRECTORY_OTHER_WRITE), + std::map::value_type("ohos.permission.CUSTOM_SCREEN_RECORDING", + Constant::OP_CUSTOM_SCREEN_RECORDING), }; bool Constant::TransferPermissionToOpcode(const std::string& permissionName, int32_t& opCode) From a79decfb7f5ac96a52cae29b40562305421fb55a Mon Sep 17 00:00:00 2001 From: zhouyan Date: Thu, 4 Sep 2025 15:45:01 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=9B=B8=E6=9C=BAOpenCamera=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0hitrace=E5=92=8C?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhouyan Change-Id: I9142a5b2a38cc5b468c730ee8ff62d189a8b2189 --- services/privacymanager/BUILD.gn | 6 ++++ .../src/record/permission_record_manager.cpp | 4 +-- .../src/service/privacy_manager_service.cpp | 33 ++++++++++++++----- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/services/privacymanager/BUILD.gn b/services/privacymanager/BUILD.gn index 7b6242978..fa3f66446 100644 --- a/services/privacymanager/BUILD.gn +++ b/services/privacymanager/BUILD.gn @@ -250,5 +250,11 @@ if (is_standard_system && ability_base_enable == true) { include_dirs += [ "${access_token_path}/services/common/ability_manager/include" ] } + + if (hiviewdfx_hitrace_native_enable == true) { + cflags_cc += [ "-DHITRACE_NATIVE_ENABLE" ] + + external_deps += [ "hitrace:hitrace_meter" ] + } } } diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index cf616549f..0e0fcb2c1 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -1466,7 +1466,7 @@ bool PermissionRecordManager::IsAllowedUsingCamera(AccessTokenID tokenId, int32_ // allow foregound application or background application with CAMERA_BACKGROUND permission use camera int32_t status = GetAppStatus(tokenId, pid); - LOGI(PRI_DOMAIN, PRI_TAG, "Id %{public}d, appStatus %{public}d(1-foreground 2-background).", tokenId, status); + LOGI(PRI_DOMAIN, PRI_TAG, "Id %{public}d, pid %{public}d, status %{public}d(1-fore 2-back).", tokenId, pid, status); if (status == ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND) { return true; } @@ -1477,7 +1477,7 @@ bool PermissionRecordManager::IsAllowedUsingCamera(AccessTokenID tokenId, int32_ bool PermissionRecordManager::IsAllowedUsingMicrophone(AccessTokenID tokenId, int32_t pid) { int32_t status = GetAppStatus(tokenId, pid); - LOGI(PRI_DOMAIN, PRI_TAG, "Id %{public}d, status is %{public}d(1-foreground 2-background).", tokenId, status); + LOGI(PRI_DOMAIN, PRI_TAG, "Id %{public}d, pid %{public}d, status %{public}d(1-fore 2-back).", tokenId, pid, status); if (status == ActiveChangeType::PERM_ACTIVE_IN_FOREGROUND) { return true; } diff --git a/services/privacymanager/src/service/privacy_manager_service.cpp b/services/privacymanager/src/service/privacy_manager_service.cpp index 23da941ba..898eca7c0 100644 --- a/services/privacymanager/src/service/privacy_manager_service.cpp +++ b/services/privacymanager/src/service/privacy_manager_service.cpp @@ -37,6 +37,11 @@ #include "string_ex.h" #include "tokenid_kit.h" +#ifdef HITRACE_NATIVE_ENABLE +#include "hitrace_meter.h" +#define PRIVACY_SYNC_TRACE HITRACE_METER_NAME(HITRACE_TAG_ACCESS_CONTROL, __PRETTY_FUNCTION__) +#endif + namespace OHOS { namespace Security { namespace AccessToken { @@ -90,6 +95,11 @@ void PrivacyManagerService::OnStop() int32_t PrivacyManagerService::AddPermissionUsedRecord(const AddPermParamInfoParcel& infoParcel) { +#ifdef HITRACE_NATIVE_ENABLE + PRIVACY_SYNC_TRACE; +#endif + LOGI(PRI_DOMAIN, PRI_TAG, "Entry!"); + uint32_t callingTokenID = IPCSkeleton::GetCallingTokenID(); if ((AccessTokenKit::GetTokenTypeFlag(callingTokenID) == TOKEN_HAP) && (!IsSystemAppCalling())) { return PrivacyError::ERR_NOT_SYSTEM_APP; @@ -98,11 +108,10 @@ int32_t PrivacyManagerService::AddPermissionUsedRecord(const AddPermParamInfoPar return PrivacyError::ERR_PERMISSION_DENIED; } - LOGD(PRI_DOMAIN, PRI_TAG, "id: %{public}d, perm: %{public}s, succCnt: %{public}d," - " failCnt: %{public}d, type: %{public}d", infoParcel.info.tokenId, infoParcel.info.permissionName.c_str(), - infoParcel.info.successCount, infoParcel.info.failCount, infoParcel.info.type); AddPermParamInfo info = infoParcel.info; - return PermissionRecordManager::GetInstance().AddPermissionUsedRecord(info); + int32_t res = PermissionRecordManager::GetInstance().AddPermissionUsedRecord(info); + LOGI(PRI_DOMAIN, PRI_TAG, "Exit!"); + return res; } int32_t PrivacyManagerService::AddPermissionUsedRecordAsync(const AddPermParamInfoParcel& infoParcel) @@ -201,6 +210,10 @@ int32_t PrivacyManagerService::StartUsingPermission( int32_t PrivacyManagerService::StartUsingPermissionCallback(const PermissionUsedTypeInfoParcel &infoParcel, const sptr& callback, const sptr& anonyStub) { +#ifdef HITRACE_NATIVE_ENABLE + PRIVACY_SYNC_TRACE; +#endif + LOGI(PRI_DOMAIN, PRI_TAG, "Entry!"); uint32_t callingTokenID = IPCSkeleton::GetCallingTokenID(); if ((AccessTokenKit::GetTokenTypeFlag(callingTokenID) == TOKEN_HAP) && (!IsSystemAppCalling())) { return PrivacyError::ERR_NOT_SYSTEM_APP; @@ -210,9 +223,10 @@ int32_t PrivacyManagerService::StartUsingPermissionCallback(const PermissionUsed } int32_t callerPid = IPCSkeleton::GetCallingPid(); - LOGI(PRI_DOMAIN, PRI_TAG, "Caller pid = %{public}d.", callerPid); ProcessProxyDeathStub(anonyStub, callerPid); - return PermissionRecordManager::GetInstance().StartUsingPermission(infoParcel.info, callback, callerPid); + int32_t res = PermissionRecordManager::GetInstance().StartUsingPermission(infoParcel.info, callback, callerPid); + LOGI(PRI_DOMAIN, PRI_TAG, "Exit!"); + return res; } int32_t PrivacyManagerService::StopUsingPermission( @@ -408,6 +422,10 @@ int32_t PrivacyManagerService::UnRegisterPermActiveStatusCallback(const sptr