summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Jiang <qiangjiang@google.com>2020-05-01 14:36:50 -0700
committerNate Jiang <qiangjiang@google.com>2020-05-01 15:52:41 -0700
commit4c783d941d4b7dd4c22dc94bcd7bd338678bf59a (patch)
treed10b5fc2005a77eb40c4c9f188b26a4c174ebb5b
parent11f1b3d49fc0c96e73eae0c993edda46228bba13 (diff)
[Suggestion] Add or remove suggestion before userData loaded will fail.
Bug: 155416628 Test: atest com.android.server.wifi Change-Id: I302b6513e1ac359ad7aedc5097cb6e880cfa39ba
-rw-r--r--service/java/com/android/server/wifi/WifiCarrierInfoManager.java3
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java16
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java21
3 files changed, 38 insertions, 2 deletions
diff --git a/service/java/com/android/server/wifi/WifiCarrierInfoManager.java b/service/java/com/android/server/wifi/WifiCarrierInfoManager.java
index a0dcfe9f5..f35f59047 100644
--- a/service/java/com/android/server/wifi/WifiCarrierInfoManager.java
+++ b/service/java/com/android/server/wifi/WifiCarrierInfoManager.java
@@ -176,8 +176,9 @@ public class WifiCarrierInfoManager {
@Override
public void fromDeserialized(Map<Integer, Boolean> imsiProtectionExemptionMap) {
- mUserDataLoaded = true;
+ mImsiPrivacyProtectionExemptionMap.clear();
mImsiPrivacyProtectionExemptionMap.putAll(imsiProtectionExemptionMap);
+ mUserDataLoaded = true;
}
@Override
diff --git a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
index 685df0757..fdaf11b7e 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
@@ -372,6 +372,7 @@ public class WifiNetworkSuggestionsManager {
*/
private boolean mUserApprovalUiActive = false;
+ private boolean mUserDataLoaded = false;
/**
* Listener for app-ops changes for active suggestor apps.
*/
@@ -434,6 +435,7 @@ public class WifiNetworkSuggestionsManager {
@Override
public void fromDeserialized(Map<String, PerAppInfo> networkSuggestionsMap) {
+ mActiveNetworkSuggestionsPerApp.clear();
mActiveNetworkSuggestionsPerApp.putAll(networkSuggestionsMap);
// Build the scan cache.
for (Map.Entry<String, PerAppInfo> entry : networkSuggestionsMap.entrySet()) {
@@ -457,10 +459,12 @@ public class WifiNetworkSuggestionsManager {
}
}
}
+ mUserDataLoaded = true;
}
@Override
public void reset() {
+ mUserDataLoaded = false;
mActiveNetworkSuggestionsPerApp.clear();
mActiveScanResultMatchInfoWithBssid.clear();
mActiveScanResultMatchInfoWithNoBssid.clear();
@@ -802,6 +806,10 @@ public class WifiNetworkSuggestionsManager {
public @WifiManager.NetworkSuggestionsStatusCode int add(
List<WifiNetworkSuggestion> networkSuggestions, int uid, String packageName,
@Nullable String featureId) {
+ if (!mUserDataLoaded) {
+ Log.e(TAG, "Add Network suggestion before boot complete is not allowed.");
+ return WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL;
+ }
if (networkSuggestions == null || networkSuggestions.isEmpty()) {
Log.w(TAG, "Empty list of network suggestions for " + packageName + ". Ignoring");
return WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS;
@@ -1067,6 +1075,10 @@ public class WifiNetworkSuggestionsManager {
*/
public @WifiManager.NetworkSuggestionsStatusCode int remove(
List<WifiNetworkSuggestion> networkSuggestions, int uid, String packageName) {
+ if (!mUserDataLoaded) {
+ Log.e(TAG, "Remove Network suggestion before boot complete is not allowed.");
+ return WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL;
+ }
if (networkSuggestions == null) {
Log.w(TAG, "Null list of network suggestions for " + packageName + ". Ignoring");
return WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS;
@@ -1123,6 +1135,10 @@ public class WifiNetworkSuggestionsManager {
*/
public @NonNull List<WifiNetworkSuggestion> get(@NonNull String packageName) {
List<WifiNetworkSuggestion> networkSuggestionList = new ArrayList<>();
+ if (!mUserDataLoaded) {
+ Log.e(TAG, "Get Network suggestion before boot complete is not allowed.");
+ return networkSuggestionList;
+ }
PerAppInfo perAppInfo = mActiveNetworkSuggestionsPerApp.get(packageName);
// if App never suggested return empty list.
if (perAppInfo == null) return networkSuggestionList;
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
index 8fa2fa1aa..17670a440 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
@@ -262,6 +262,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
verify(mWifiInjector).makeNetworkSuggestionStoreData(dataSourceArgumentCaptor.capture());
mDataSource = dataSourceArgumentCaptor.getValue();
assertNotNull(mDataSource);
+ mDataSource.fromDeserialized(Collections.EMPTY_MAP);
verify(mWifiCarrierInfoManager).addImsiExemptionUserApprovalListener(
mUserApproveCarrierListenerArgumentCaptor.capture());
@@ -374,6 +375,24 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
assertEquals(maxSizesCaptor.getValue(), new ArrayList<Integer>() {{ add(1); add(1); }});
}
+ /**
+ * Add or remove suggestion before user data store loaded will fail.
+ */
+ @Test
+ public void testAddRemoveSuggestionBeforeUserDataLoaded() {
+ // Clear the data source, and user data store is not loaded
+ mDataSource.reset();
+ WifiNetworkSuggestion networkSuggestion = new WifiNetworkSuggestion(
+ WifiConfigurationTestUtil.createOpenNetwork(), null, false, false, true, true);
+ List<WifiNetworkSuggestion> networkSuggestionList = Arrays.asList(networkSuggestion);
+ assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL,
+ mWifiNetworkSuggestionsManager.add(networkSuggestionList, TEST_UID_1,
+ TEST_PACKAGE_1, TEST_FEATURE));
+ assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL,
+ mWifiNetworkSuggestionsManager.remove(networkSuggestionList, TEST_UID_1,
+ TEST_PACKAGE_1));
+ }
+
@Test
public void testAddRemoveEnterpriseNetworkSuggestion() {
WifiNetworkSuggestion networkSuggestion1 = new WifiNetworkSuggestion(
@@ -3676,7 +3695,7 @@ public class WifiNetworkSuggestionsManagerTest extends WifiBaseTest {
.add(networkSuggestionList, TEST_UID_1, TEST_PACKAGE_1, TEST_FEATURE));
mWifiNetworkSuggestionsManager.setHasUserApprovedForApp(true, TEST_PACKAGE_1);
when(mLruConnectionTracker.isMostRecentlyConnected(any())).thenReturn(true);
- Map<String, PerAppInfo> suggestionStore = mDataSource.toSerialize();
+ Map<String, PerAppInfo> suggestionStore = new HashMap<>(mDataSource.toSerialize());
PerAppInfo perAppInfo = suggestionStore.get(TEST_PACKAGE_1);
ExtendedWifiNetworkSuggestion ewns = perAppInfo.extNetworkSuggestions.iterator().next();
assertTrue(ewns.wns.wifiConfiguration.isMostRecentlyConnected);