Merge "Do not revalidate before network is ready"
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index 486b226..63aedab 100755
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -793,6 +793,11 @@
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 20480a2..4b20015 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.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;
@@ -1230,6 +1231,32 @@
}
@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);