diff options
author | Nate Jiang <qiangjiang@google.com> | 2020-05-01 14:36:50 -0700 |
---|---|---|
committer | Nate Jiang <qiangjiang@google.com> | 2020-05-01 15:52:41 -0700 |
commit | 4c783d941d4b7dd4c22dc94bcd7bd338678bf59a (patch) | |
tree | d10b5fc2005a77eb40c4c9f188b26a4c174ebb5b | |
parent | 11f1b3d49fc0c96e73eae0c993edda46228bba13 (diff) |
[Suggestion] Add or remove suggestion before userData loaded will fail.
Bug: 155416628
Test: atest com.android.server.wifi
Change-Id: I302b6513e1ac359ad7aedc5097cb6e880cfa39ba
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); |