transcoding: pass package name from client to service

bug: 159172726

Change-Id: I9c35c23f3d6eb5b03092813c891f9cc98a4c6fc8
diff --git a/media/libmediatranscoding/TranscodingSessionController.cpp b/media/libmediatranscoding/TranscodingSessionController.cpp
index 2306395..1c3ee7e 100644
--- a/media/libmediatranscoding/TranscodingSessionController.cpp
+++ b/media/libmediatranscoding/TranscodingSessionController.cpp
@@ -66,6 +66,7 @@
     mUidSortedList.push_back(OFFLINE_UID);
     mOfflineUidIterator = mUidSortedList.begin();
     mSessionQueues.emplace(OFFLINE_UID, SessionQueueType());
+    mUidPackageNames[OFFLINE_UID] = "(offline)";
 }
 
 TranscodingSessionController::~TranscodingSessionController() {}
@@ -83,13 +84,6 @@
     result.append(buffer);
 
     std::vector<int32_t> uids(mUidSortedList.begin(), mUidSortedList.end());
-    // Exclude last uid, which is for offline queue
-    uids.pop_back();
-    std::vector<std::string> packageNames;
-    if (TranscodingUidPolicy::getNamesForUids(uids, &packageNames)) {
-        uids.push_back(OFFLINE_UID);
-        packageNames.push_back("(offline)");
-    }
 
     for (int32_t i = 0; i < uids.size(); i++) {
         const uid_t uid = uids[i];
@@ -98,7 +92,7 @@
             continue;
         }
         snprintf(buffer, SIZE, "    Uid: %d, pkg: %s\n", uid,
-                 packageNames.empty() ? "(unknown)" : packageNames[i].c_str());
+                 mUidPackageNames.count(uid) > 0 ? mUidPackageNames[uid].c_str() : "(unknown)");
         result.append(buffer);
         snprintf(buffer, SIZE, "      Num of sessions: %zu\n", mSessionQueues[uid].size());
         result.append(buffer);
@@ -120,6 +114,12 @@
             result.append(buffer);
             snprintf(buffer, SIZE, "        Dst: %s\n", request.destinationFilePath.c_str());
             result.append(buffer);
+            // For the offline queue, print out the original client.
+            if (uid == OFFLINE_UID) {
+                snprintf(buffer, SIZE, "        Original Client: %s\n",
+                         request.clientPackageName.c_str());
+                result.append(buffer);
+            }
         }
     }
 
@@ -274,6 +274,11 @@
         return false;
     }
 
+    // Add the uid package name to the store of package names we already know.
+    if (mUidPackageNames.count(uid) == 0) {
+        mUidPackageNames.emplace(uid, request.clientPackageName);
+    }
+
     // TODO(chz): only support offline vs real-time for now. All kUnspecified sessions
     // go to offline queue.
     if (request.priority == TranscodingSessionPriority::kUnspecified) {
diff --git a/media/libmediatranscoding/TranscodingUidPolicy.cpp b/media/libmediatranscoding/TranscodingUidPolicy.cpp
index 9763921..084a871 100644
--- a/media/libmediatranscoding/TranscodingUidPolicy.cpp
+++ b/media/libmediatranscoding/TranscodingUidPolicy.cpp
@@ -114,28 +114,6 @@
 ////////////////////////////////////////////////////////////////////////////
 
 //static
-bool TranscodingUidPolicy::getNamesForUids(const std::vector<int32_t>& uids,
-                                           std::vector<std::string>* names) {
-    names->clear();
-    sp<IServiceManager> sm(defaultServiceManager());
-    sp<IBinder> binder(sm->getService(String16("package_native")));
-    if (binder == nullptr) {
-        ALOGE("getService package_native failed");
-        return false;
-    }
-
-    sp<content::pm::IPackageManagerNative> packageMgr =
-            interface_cast<content::pm::IPackageManagerNative>(binder);
-    binder::Status status = packageMgr->getNamesForUids(uids, names);
-
-    if (!status.isOk() || names->size() != uids.size()) {
-        names->clear();
-        return false;
-    }
-    return true;
-}
-
-//static
 status_t TranscodingUidPolicy::getUidForPackage(String16 packageName, /*inout*/ uid_t& uid) {
     PermissionController pc;
     uid = pc.getPackageUid(packageName, 0);
diff --git a/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl b/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
index 03c24f0..4b19f6a 100644
--- a/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
+++ b/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
@@ -53,6 +53,11 @@
     int clientPid = -1;
 
     /**
+     * The package name of the client whom this transcoding request is for.
+     */
+    @utf8InCpp String clientPackageName;
+
+    /**
      * Type of the transcoding.
      */
     TranscodingType transcodingType;
diff --git a/media/libmediatranscoding/include/media/TranscodingRequest.h b/media/libmediatranscoding/include/media/TranscodingRequest.h
index aae621f..485403f 100644
--- a/media/libmediatranscoding/include/media/TranscodingRequest.h
+++ b/media/libmediatranscoding/include/media/TranscodingRequest.h
@@ -39,6 +39,7 @@
         destinationFilePath = parcel.destinationFilePath;
         clientUid = parcel.clientUid;
         clientPid = parcel.clientPid;
+        clientPackageName = parcel.clientPackageName;
         transcodingType = parcel.transcodingType;
         requestedVideoTrackFormat = parcel.requestedVideoTrackFormat;
         priority = parcel.priority;
diff --git a/media/libmediatranscoding/include/media/TranscodingSessionController.h b/media/libmediatranscoding/include/media/TranscodingSessionController.h
index 9ab3518..c082074 100644
--- a/media/libmediatranscoding/include/media/TranscodingSessionController.h
+++ b/media/libmediatranscoding/include/media/TranscodingSessionController.h
@@ -107,6 +107,7 @@
     // previous top app, etc.
     std::list<uid_t> mUidSortedList;
     std::list<uid_t>::iterator mOfflineUidIterator;
+    std::map<uid_t, std::string> mUidPackageNames;
 
     std::shared_ptr<TranscoderInterface> mTranscoder;
     std::shared_ptr<UidPolicyInterface> mUidPolicy;
diff --git a/media/libmediatranscoding/include/media/TranscodingUidPolicy.h b/media/libmediatranscoding/include/media/TranscodingUidPolicy.h
index 946770c..4c642de 100644
--- a/media/libmediatranscoding/include/media/TranscodingUidPolicy.h
+++ b/media/libmediatranscoding/include/media/TranscodingUidPolicy.h
@@ -49,7 +49,6 @@
     void setCallback(const std::shared_ptr<UidPolicyCallbackInterface>& cb) override;
     // ~UidPolicyInterface
 
-    static bool getNamesForUids(const std::vector<int32_t>& uids, std::vector<std::string>* names);
     static status_t getUidForPackage(String16 packageName, /*inout*/ uid_t& uid);
 
 private:
diff --git a/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h b/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h
index 5f4f645..f4d3ff8 100644
--- a/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h
+++ b/services/mediatranscoding/tests/MediaTranscodingServiceTestHelper.h
@@ -368,6 +368,7 @@
         request.priority = priority;
         request.clientPid = (overridePid == -1) ? mClientPid : overridePid;
         request.clientUid = (overrideUid == -1) ? mClientUid : overrideUid;
+        request.clientPackageName = (overrideUid == -1) ? mPackageName : "";
         if (bitrateBps > 0) {
             request.requestedVideoTrackFormat.emplace(TranscodingVideoTrackFormat());
             request.requestedVideoTrackFormat->bitrateBps = bitrateBps;