Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 920d2b48 authored by Hangyu Kuang's avatar Hangyu Kuang Committed by Android (Google) Code Review
Browse files

Merge "transcoding: change getClientUids to return nullable int[]" into sc-dev

parents ecc690d5 18ec5322
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -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;
};
@@ -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) {
@@ -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();
}

+2 −1
Original line number Diff line number Diff line
@@ -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.
+20 −20
Original line number Diff line number Diff line
@@ -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();
@@ -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();
}
@@ -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();
@@ -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());
@@ -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);
+8 −4
Original line number Diff line number Diff line
@@ -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;