ScoredNetworkNominator: Set scorer uid + package on wificonfig created

This will get propagated to the NetworkCapabilities.setOwnerUid() in
ClientModeImpl after connection.

Bug: 151842117
Test: atest com.android.server.wifi
Change-Id: Ib2b6c3823a60b53445a271d08a1bb396b50f0d9d
diff --git a/service/java/com/android/server/wifi/ScoredNetworkNominator.java b/service/java/com/android/server/wifi/ScoredNetworkNominator.java
index cf20253..b2b28c0 100644
--- a/service/java/com/android/server/wifi/ScoredNetworkNominator.java
+++ b/service/java/com/android/server/wifi/ScoredNetworkNominator.java
@@ -26,11 +26,11 @@
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConfiguration;
 import android.os.Handler;
-import android.os.Process;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.LocalLog;
 import android.util.Log;
+import android.util.Pair;
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.wifi.util.ScanResultUtil;
@@ -113,20 +113,26 @@
         }
     }
 
-    private boolean activeScorerAllowedtoSeeScanResults() {
+    private Pair<Integer, String> getActiveScorerUidAndPackage() {
         String packageName = mNetworkScoreManager.getActiveScorerPackage();
-        if (packageName == null) return false;
+        if (packageName == null) return null;
         int uid = -1;
         try {
             uid = mPackageManager.getApplicationInfo(packageName, 0).uid;
         } catch (PackageManager.NameNotFoundException e) {
             Log.e(TAG, "Failed to retrieve package uid", e);
-            return false;
+            return null;
         }
+        return Pair.create(uid, packageName);
+    }
+
+    private boolean activeScorerAllowedtoSeeScanResults() {
+        Pair<Integer, String> scorerUidAndPackage = getActiveScorerUidAndPackage();
+        if (scorerUidAndPackage == null) return false;
         try {
             // TODO moltmann: Can we set a featureID here instead of null?
-            mWifiPermissionsUtil.enforceCanAccessScanResults(packageName, null, uid,
-                    null);
+            mWifiPermissionsUtil.enforceCanAccessScanResults(
+                    scorerUidAndPackage.second, null, scorerUidAndPackage.first, null);
             return true;
         } catch (SecurityException e) {
             return false;
@@ -299,6 +305,11 @@
                                 mEphemeralConfig.meteredHint));
                         break;
                     }
+                    Pair<Integer, String> scorerUidAndPackage = getActiveScorerUidAndPackage();
+                    if (scorerUidAndPackage == null) {
+                        mLocalLog.log("Can't find active scorer uid and package");
+                        break;
+                    }
 
                     mEphemeralConfig =
                             ScanResultUtil.createNetworkFromScanResult(mScanResultCandidate);
@@ -309,7 +320,7 @@
                     mEphemeralConfig.meteredHint = mScoreCache.getMeteredHint(mScanResultCandidate);
                     NetworkUpdateResult result =
                             mWifiConfigManager.addOrUpdateNetwork(mEphemeralConfig,
-                                    Process.WIFI_UID);
+                                    scorerUidAndPackage.first, scorerUidAndPackage.second);
                     if (!result.isSuccess()) {
                         mLocalLog.log("Failed to add ephemeral network");
                         break;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java b/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java
index 1147d06..c9cad7d 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ScoredNetworkNominatorTest.java
@@ -29,7 +29,6 @@
 import android.database.ContentObserver;
 import android.net.NetworkKey;
 import android.net.NetworkScoreManager;
-import android.net.NetworkScorerAppData;
 import android.net.Uri;
 import android.net.wifi.ScanResult;
 import android.net.wifi.WifiConfiguration;
@@ -63,8 +62,6 @@
 public class ScoredNetworkNominatorTest extends WifiBaseTest {
     private static final String TEST_PACKAGE_NAME = "name.package.test";
     private static final int TEST_UID = 12345;
-    private static final NetworkScorerAppData TEST_APP_DATA = new NetworkScorerAppData(
-            TEST_UID, null, null, null, null);
     private ContentObserver mContentObserver;
     private int mThresholdQualifiedRssi2G;
     private int mThresholdQualifiedRssi5G;
@@ -95,8 +92,10 @@
                 .thenReturn("test");
         ApplicationInfo appInfo = new ApplicationInfo();
         appInfo.uid = TEST_UID;
-        when(mPackageManager.getApplicationInfo(any(), anyInt()))
+        when(mPackageManager.getApplicationInfo(eq(TEST_PACKAGE_NAME), anyInt()))
                 .thenReturn(appInfo);
+        when(mNetworkScoreManager.getActiveScorerPackage())
+                .thenReturn(TEST_PACKAGE_NAME);
 
         ArgumentCaptor<ContentObserver> observerCaptor =
                 ArgumentCaptor.forClass(ContentObserver.class);
@@ -109,12 +108,6 @@
                 observerCaptor.capture());
         mContentObserver = observerCaptor.getValue();
 
-        reset(mNetworkScoreManager);
-        when(mNetworkScoreManager.getActiveScorer())
-                .thenReturn(TEST_APP_DATA);
-        when(mNetworkScoreManager.getActiveScorerPackage())
-                .thenReturn(TEST_PACKAGE_NAME);
-
         when(mClock.getElapsedSinceBootMillis()).thenReturn(SystemClock.elapsedRealtime());
     }
 
@@ -307,7 +300,7 @@
         when(mWifiConfigManager.getConfiguredNetworkForScanDetailAndCache(any(ScanDetail.class)))
                 .thenReturn(null);
         // But when we create one, this is should be it.
-        when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt()))
+        when(mWifiConfigManager.addOrUpdateNetwork(any(), eq(TEST_UID), eq(TEST_PACKAGE_NAME)))
                 .thenReturn(new NetworkUpdateResult(1));
         // Untrusted networks allowed.
         mScoredNetworkNominator.nominateNetworks(scanDetails,