Loading media/libmediatranscoding/TranscodingClientManager.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -97,8 +97,8 @@ struct TranscodingClientManager::ClientImpl : public BnTranscodingClient { Status addClientUid(int32_t /*in_sessionId*/, int32_t /*in_clientUid*/, bool* /*_aidl_return*/) override; Status getClientUids(int32_t /*in_sessionId*/, std::vector<int32_t>* /*out_clientUids*/, bool* /*_aidl_return*/) override; Status getClientUids(int32_t /*in_sessionId*/, std::optional<std::vector<int32_t>>* /*_aidl_return*/) override; Status unregister() override; }; Loading Loading @@ -259,10 +259,9 @@ Status TranscodingClientManager::ClientImpl::addClientUid(int32_t in_sessionId, return Status::ok(); } Status TranscodingClientManager::ClientImpl::getClientUids(int32_t in_sessionId, std::vector<int32_t>* out_clientUids, bool* _aidl_return) { *_aidl_return = false; Status TranscodingClientManager::ClientImpl::getClientUids( int32_t in_sessionId, std::optional<std::vector<int32_t>>* _aidl_return) { *_aidl_return = std::nullopt; std::shared_ptr<TranscodingClientManager> owner; if (mAbandoned || (owner = mOwner.lock()) == nullptr) { Loading @@ -273,8 +272,11 @@ Status TranscodingClientManager::ClientImpl::getClientUids(int32_t in_sessionId, return Status::ok(); } *_aidl_return = owner->mSessionController->getClientUids(mClientId, in_sessionId, out_clientUids); std::vector<int32_t> result; if (owner->mSessionController->getClientUids(mClientId, in_sessionId, &result)) { *_aidl_return = result; } return Status::ok(); } Loading media/libmediatranscoding/aidl/android/media/ITranscodingClient.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,8 @@ interface ITranscodingClient { * @clientUids array to hold the retrieved client uid list. * @return false if the session doesn't exist, true otherwise. */ boolean getClientUids(in int sessionId, out int[] clientUids); @nullable int[] getClientUids(in int sessionId); /** * Unregister the client with the MediaTranscodingService. Loading media/libmediatranscoding/tests/TranscodingClientManager_tests.cpp +20 −20 Original line number Diff line number Diff line Loading @@ -577,7 +577,7 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUidsInvalidArgs) { addMultipleClients(); bool result; std::vector<int32_t> clientUids; std::optional<std::vector<int32_t>> clientUids; TranscodingRequestParcel request; TranscodingSessionParcel session; uid_t ownUid = ::getuid(); Loading @@ -587,10 +587,10 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUidsInvalidArgs) { EXPECT_FALSE(result); EXPECT_TRUE(mClient1->addClientUid(SESSION(0), ownUid, &result).isOk()); EXPECT_FALSE(result); EXPECT_TRUE(mClient1->getClientUids(-1, &clientUids, &result).isOk()); EXPECT_FALSE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids, &result).isOk()); EXPECT_FALSE(result); EXPECT_TRUE(mClient1->getClientUids(-1, &clientUids).isOk()); EXPECT_EQ(clientUids, std::nullopt); EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids).isOk()); EXPECT_EQ(clientUids, std::nullopt); unregisterMultipleClients(); } Loading @@ -599,7 +599,7 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUids) { addMultipleClients(); bool result; std::vector<int32_t> clientUids; std::optional<std::vector<int32_t>> clientUids; TranscodingRequestParcel request; TranscodingSessionParcel session; uid_t ownUid = ::getuid(); Loading @@ -612,10 +612,10 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUids) { EXPECT_TRUE(result); // Should have own uid in client uid list. EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_EQ(clientUids.size(), 1); EXPECT_EQ(clientUids[0], ownUid); EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); EXPECT_EQ(clientUids->size(), 1); EXPECT_EQ((*clientUids)[0], ownUid); // Adding invalid client uid should fail. EXPECT_TRUE(mClient1->addClientUid(SESSION(0), kInvalidClientUid, &result).isOk()); Loading @@ -633,28 +633,28 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUids) { EXPECT_TRUE(result); // Should not have own uid in client uid list. EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_EQ(clientUids.size(), 0); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); EXPECT_EQ(clientUids->size(), 0); // Add own uid (with IMediaTranscodingService::USE_CALLING_UID) again, should succeed. EXPECT_TRUE( mClient1->addClientUid(SESSION(1), IMediaTranscodingService::USE_CALLING_UID, &result) .isOk()); EXPECT_TRUE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_EQ(clientUids.size(), 1); EXPECT_EQ(clientUids[0], ownUid); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); EXPECT_EQ(clientUids->size(), 1); EXPECT_EQ((*clientUids)[0], ownUid); // Add more uids, should succeed. int32_t kFakeUid = ::getuid() ^ 0x1; EXPECT_TRUE(mClient1->addClientUid(SESSION(1), kFakeUid, &result).isOk()); EXPECT_TRUE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); std::unordered_set<uid_t> uidSet; uidSet.insert(clientUids.begin(), clientUids.end()); uidSet.insert(clientUids->begin(), clientUids->end()); EXPECT_EQ(uidSet.size(), 2); EXPECT_EQ(uidSet.count(ownUid), 1); EXPECT_EQ(uidSet.count(kFakeUid), 1); Loading services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h +8 −4 Original line number Diff line number Diff line Loading @@ -449,13 +449,17 @@ struct TestClientCallback : public BnTranscodingClientCallback, template <bool expectation = success> bool getClientUids(int32_t sessionId, std::vector<int32_t>* clientUids) { constexpr bool shouldSucceed = (expectation == success); bool result; Status status = mClient->getClientUids(sessionId, clientUids, &result); std::optional<std::vector<int32_t>> aidl_return; Status status = mClient->getClientUids(sessionId, &aidl_return); EXPECT_TRUE(status.isOk()); EXPECT_EQ(result, shouldSucceed); bool success = (aidl_return != std::nullopt); if (success) { *clientUids = *aidl_return; } EXPECT_EQ(success, shouldSucceed); return status.isOk() && (result == shouldSucceed); return status.isOk() && (success == shouldSucceed); } int32_t mClientId; Loading Loading
media/libmediatranscoding/TranscodingClientManager.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -97,8 +97,8 @@ struct TranscodingClientManager::ClientImpl : public BnTranscodingClient { Status addClientUid(int32_t /*in_sessionId*/, int32_t /*in_clientUid*/, bool* /*_aidl_return*/) override; Status getClientUids(int32_t /*in_sessionId*/, std::vector<int32_t>* /*out_clientUids*/, bool* /*_aidl_return*/) override; Status getClientUids(int32_t /*in_sessionId*/, std::optional<std::vector<int32_t>>* /*_aidl_return*/) override; Status unregister() override; }; Loading Loading @@ -259,10 +259,9 @@ Status TranscodingClientManager::ClientImpl::addClientUid(int32_t in_sessionId, return Status::ok(); } Status TranscodingClientManager::ClientImpl::getClientUids(int32_t in_sessionId, std::vector<int32_t>* out_clientUids, bool* _aidl_return) { *_aidl_return = false; Status TranscodingClientManager::ClientImpl::getClientUids( int32_t in_sessionId, std::optional<std::vector<int32_t>>* _aidl_return) { *_aidl_return = std::nullopt; std::shared_ptr<TranscodingClientManager> owner; if (mAbandoned || (owner = mOwner.lock()) == nullptr) { Loading @@ -273,8 +272,11 @@ Status TranscodingClientManager::ClientImpl::getClientUids(int32_t in_sessionId, return Status::ok(); } *_aidl_return = owner->mSessionController->getClientUids(mClientId, in_sessionId, out_clientUids); std::vector<int32_t> result; if (owner->mSessionController->getClientUids(mClientId, in_sessionId, &result)) { *_aidl_return = result; } return Status::ok(); } Loading
media/libmediatranscoding/aidl/android/media/ITranscodingClient.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,8 @@ interface ITranscodingClient { * @clientUids array to hold the retrieved client uid list. * @return false if the session doesn't exist, true otherwise. */ boolean getClientUids(in int sessionId, out int[] clientUids); @nullable int[] getClientUids(in int sessionId); /** * Unregister the client with the MediaTranscodingService. Loading
media/libmediatranscoding/tests/TranscodingClientManager_tests.cpp +20 −20 Original line number Diff line number Diff line Loading @@ -577,7 +577,7 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUidsInvalidArgs) { addMultipleClients(); bool result; std::vector<int32_t> clientUids; std::optional<std::vector<int32_t>> clientUids; TranscodingRequestParcel request; TranscodingSessionParcel session; uid_t ownUid = ::getuid(); Loading @@ -587,10 +587,10 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUidsInvalidArgs) { EXPECT_FALSE(result); EXPECT_TRUE(mClient1->addClientUid(SESSION(0), ownUid, &result).isOk()); EXPECT_FALSE(result); EXPECT_TRUE(mClient1->getClientUids(-1, &clientUids, &result).isOk()); EXPECT_FALSE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids, &result).isOk()); EXPECT_FALSE(result); EXPECT_TRUE(mClient1->getClientUids(-1, &clientUids).isOk()); EXPECT_EQ(clientUids, std::nullopt); EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids).isOk()); EXPECT_EQ(clientUids, std::nullopt); unregisterMultipleClients(); } Loading @@ -599,7 +599,7 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUids) { addMultipleClients(); bool result; std::vector<int32_t> clientUids; std::optional<std::vector<int32_t>> clientUids; TranscodingRequestParcel request; TranscodingSessionParcel session; uid_t ownUid = ::getuid(); Loading @@ -612,10 +612,10 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUids) { EXPECT_TRUE(result); // Should have own uid in client uid list. EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_EQ(clientUids.size(), 1); EXPECT_EQ(clientUids[0], ownUid); EXPECT_TRUE(mClient1->getClientUids(SESSION(0), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); EXPECT_EQ(clientUids->size(), 1); EXPECT_EQ((*clientUids)[0], ownUid); // Adding invalid client uid should fail. EXPECT_TRUE(mClient1->addClientUid(SESSION(0), kInvalidClientUid, &result).isOk()); Loading @@ -633,28 +633,28 @@ TEST_F(TranscodingClientManagerTest, TestAddGetClientUids) { EXPECT_TRUE(result); // Should not have own uid in client uid list. EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_EQ(clientUids.size(), 0); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); EXPECT_EQ(clientUids->size(), 0); // Add own uid (with IMediaTranscodingService::USE_CALLING_UID) again, should succeed. EXPECT_TRUE( mClient1->addClientUid(SESSION(1), IMediaTranscodingService::USE_CALLING_UID, &result) .isOk()); EXPECT_TRUE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_EQ(clientUids.size(), 1); EXPECT_EQ(clientUids[0], ownUid); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); EXPECT_EQ(clientUids->size(), 1); EXPECT_EQ((*clientUids)[0], ownUid); // Add more uids, should succeed. int32_t kFakeUid = ::getuid() ^ 0x1; EXPECT_TRUE(mClient1->addClientUid(SESSION(1), kFakeUid, &result).isOk()); EXPECT_TRUE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids, &result).isOk()); EXPECT_TRUE(result); EXPECT_TRUE(mClient1->getClientUids(SESSION(1), &clientUids).isOk()); EXPECT_NE(clientUids, std::nullopt); std::unordered_set<uid_t> uidSet; uidSet.insert(clientUids.begin(), clientUids.end()); uidSet.insert(clientUids->begin(), clientUids->end()); EXPECT_EQ(uidSet.size(), 2); EXPECT_EQ(uidSet.count(ownUid), 1); EXPECT_EQ(uidSet.count(kFakeUid), 1); Loading
services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h +8 −4 Original line number Diff line number Diff line Loading @@ -449,13 +449,17 @@ struct TestClientCallback : public BnTranscodingClientCallback, template <bool expectation = success> bool getClientUids(int32_t sessionId, std::vector<int32_t>* clientUids) { constexpr bool shouldSucceed = (expectation == success); bool result; Status status = mClient->getClientUids(sessionId, clientUids, &result); std::optional<std::vector<int32_t>> aidl_return; Status status = mClient->getClientUids(sessionId, &aidl_return); EXPECT_TRUE(status.isOk()); EXPECT_EQ(result, shouldSucceed); bool success = (aidl_return != std::nullopt); if (success) { *clientUids = *aidl_return; } EXPECT_EQ(success, shouldSucceed); return status.isOk() && (result == shouldSucceed); return status.isOk() && (success == shouldSucceed); } int32_t mClientId; Loading