diff options
author | Remi NGUYEN VAN <reminv@google.com> | 2020-06-10 01:10:39 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-06-10 01:10:39 +0000 |
commit | 7f6e36fc33ad0ffc3a361b40d030a1b0fb514763 (patch) | |
tree | f479b385e7c760c014fbd4ae65e42a5db1b4d49b | |
parent | 0219125e707a126b2a108be6f3cc00da25e9ec59 (diff) | |
parent | 265b4007cc9163eb8335c7cb2957cc5f30e27389 (diff) |
Do not revalidate before network is ready am: 9572aa10c2 am: 265b4007cc
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/11807299
Change-Id: If2704f44e2ee16fb709e21c0660de534a074450a
-rwxr-xr-x | src/com/android/server/connectivity/NetworkMonitor.java | 5 | ||||
-rw-r--r-- | tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java | 27 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java index d0f62b2..8493816 100755 --- a/src/com/android/server/connectivity/NetworkMonitor.java +++ b/src/com/android/server/connectivity/NetworkMonitor.java @@ -792,6 +792,11 @@ public class NetworkMonitor extends StateMachine { return HANDLED; case CMD_FORCE_REEVALUATION: case CMD_CAPTIVE_PORTAL_RECHECK: + if (getCurrentState() == mDefaultState) { + // Before receiving CMD_NETWORK_CONNECTED (when still in mDefaultState), + // requests to reevaluate are not valid: drop them. + return HANDLED; + } String msg = "Forcing reevaluation for UID " + message.arg1; final DnsStallDetector dsd = getDnsStallDetector(); if (dsd != null) { diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java index 2422b77..00fe17c 100644 --- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java +++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java @@ -69,6 +69,7 @@ import static org.junit.Assume.assumeTrue; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.after; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.atLeastOnce; @@ -1206,6 +1207,32 @@ public class NetworkMonitorTest { } @Test + public void testIsCaptivePortal_NoRevalidationBeforeNetworkConnected() throws Exception { + assumeTrue(CaptivePortalDataShimImpl.isSupported()); + + final NetworkMonitor nm = makeCellMeteredNetworkMonitor(); + + final LinkProperties lp = makeCapportLPs(); + + // LinkProperties changed, but NM should not revalidate before notifyNetworkConnected + nm.notifyLinkPropertiesChanged(lp); + verify(mHttpConnection, after(100).never()).getResponseCode(); + verify(mHttpsConnection, never()).getResponseCode(); + verify(mCapportApiConnection, never()).getResponseCode(); + + setValidProbes(); + setApiContent(mCapportApiConnection, "{'captive': true, " + + "'user-portal-url': '" + TEST_LOGIN_URL + "'}"); + + // After notifyNetworkConnected, validation uses the capport API contents + nm.notifyNetworkConnected(lp, CELL_METERED_CAPABILITIES); + verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, TEST_LOGIN_URL); + + verify(mHttpConnection, never()).getResponseCode(); + verify(mCapportApiConnection).getResponseCode(); + } + + @Test public void testIsCaptivePortal_CapportApiNotPortalNotValidated() throws Exception { assumeTrue(CaptivePortalDataShimImpl.isSupported()); setSslException(mHttpsConnection); |