Loading src/com/android/server/NetworkStackService.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -277,9 +277,9 @@ public class NetworkStackService extends Service { } } @Override @Override public void notifyAcceptPartialConnectivity() { public void setAcceptPartialConnectivity() { checkNetworkStackCallingPermission(); checkNetworkStackCallingPermission(); mNm.notifyAcceptPartialConnectivity(); mNm.setAcceptPartialConnectivity(); } } @Override @Override Loading src/com/android/server/connectivity/NetworkMonitor.java +24 −7 Original line number Original line Diff line number Diff line Loading @@ -319,7 +319,8 @@ public class NetworkMonitor extends StateMachine { private final DnsStallDetector mDnsStallDetector; private final DnsStallDetector mDnsStallDetector; private long mLastProbeTime; private long mLastProbeTime; // Set to true if data stall is suspected and reset to false after metrics are sent to statsd. // Set to true if data stall is suspected and reset to false after metrics are sent to statsd. private boolean mCollectDataStallMetrics = false; private boolean mCollectDataStallMetrics; private boolean mAcceptPartialConnectivity; public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, SharedLog validationLog) { SharedLog validationLog) { Loading Loading @@ -386,10 +387,11 @@ public class NetworkMonitor extends StateMachine { } } /** /** * ConnectivityService notifies NetworkMonitor that the user accepts partial connectivity and * ConnectivityService notifies NetworkMonitor that the user already accepted partial * NetworkMonitor should ignore the https probe. * connectivity previously, so NetworkMonitor can validate the network even if it has partial * connectivity. */ */ public void notifyAcceptPartialConnectivity() { public void setAcceptPartialConnectivity() { sendMessage(EVENT_ACCEPT_PARTIAL_CONNECTIVITY); sendMessage(EVENT_ACCEPT_PARTIAL_CONNECTIVITY); } } Loading Loading @@ -651,9 +653,11 @@ public class NetworkMonitor extends StateMachine { case EVENT_DNS_NOTIFICATION: case EVENT_DNS_NOTIFICATION: mDnsStallDetector.accumulateConsecutiveDnsTimeoutCount(message.arg1); mDnsStallDetector.accumulateConsecutiveDnsTimeoutCount(message.arg1); break; break; // Set mAcceptPartialConnectivity to true and if network start evaluating or // re-evaluating and get the result of partial connectivity, ProbingState will // disable HTTPS probe and transition to EvaluatingPrivateDnsState. case EVENT_ACCEPT_PARTIAL_CONNECTIVITY: case EVENT_ACCEPT_PARTIAL_CONNECTIVITY: mUseHttps = false; mAcceptPartialConnectivity = true; transitionTo(mEvaluatingPrivateDnsState); break; break; default: default: break; break; Loading Loading @@ -849,6 +853,14 @@ public class NetworkMonitor extends StateMachine { // ignore any re-evaluation requests. After, restart the // ignore any re-evaluation requests. After, restart the // evaluation process via EvaluatingState#enter. // evaluation process via EvaluatingState#enter. return (mEvaluateAttempts < IGNORE_REEVALUATE_ATTEMPTS) ? HANDLED : NOT_HANDLED; return (mEvaluateAttempts < IGNORE_REEVALUATE_ATTEMPTS) ? HANDLED : NOT_HANDLED; // Disable HTTPS probe and transition to EvaluatingPrivateDnsState because: // 1. Network is connected and finish the network validation. // 2. NetworkMonitor detects network is partial connectivity and user accepts it. case EVENT_ACCEPT_PARTIAL_CONNECTIVITY: mAcceptPartialConnectivity = true; mUseHttps = false; transitionTo(mEvaluatingPrivateDnsState); return HANDLED; default: default: return NOT_HANDLED; return NOT_HANDLED; } } Loading Loading @@ -1081,7 +1093,12 @@ public class NetworkMonitor extends StateMachine { logNetworkEvent(NetworkEvent.NETWORK_PARTIAL_CONNECTIVITY); logNetworkEvent(NetworkEvent.NETWORK_PARTIAL_CONNECTIVITY); notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, probeResult.redirectUrl); probeResult.redirectUrl); if (mAcceptPartialConnectivity) { mUseHttps = false; transitionTo(mEvaluatingPrivateDnsState); } else { transitionTo(mWaitingForNextProbeState); transitionTo(mWaitingForNextProbeState); } } else { } else { logNetworkEvent(NetworkEvent.NETWORK_VALIDATION_FAILED); logNetworkEvent(NetworkEvent.NETWORK_VALIDATION_FAILED); notifyNetworkTested(NETWORK_TEST_RESULT_INVALID, probeResult.redirectUrl); notifyNetworkTested(NETWORK_TEST_RESULT_INVALID, probeResult.redirectUrl); Loading tests/src/com/android/server/connectivity/NetworkMonitorTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -583,7 +583,7 @@ public class NetworkMonitorTest { verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, null); .notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, null); nm.notifyAcceptPartialConnectivity(); nm.setAcceptPartialConnectivity(); verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .notifyNetworkTested(NETWORK_TEST_RESULT_VALID, null); .notifyNetworkTested(NETWORK_TEST_RESULT_VALID, null); } } Loading Loading
src/com/android/server/NetworkStackService.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -277,9 +277,9 @@ public class NetworkStackService extends Service { } } @Override @Override public void notifyAcceptPartialConnectivity() { public void setAcceptPartialConnectivity() { checkNetworkStackCallingPermission(); checkNetworkStackCallingPermission(); mNm.notifyAcceptPartialConnectivity(); mNm.setAcceptPartialConnectivity(); } } @Override @Override Loading
src/com/android/server/connectivity/NetworkMonitor.java +24 −7 Original line number Original line Diff line number Diff line Loading @@ -319,7 +319,8 @@ public class NetworkMonitor extends StateMachine { private final DnsStallDetector mDnsStallDetector; private final DnsStallDetector mDnsStallDetector; private long mLastProbeTime; private long mLastProbeTime; // Set to true if data stall is suspected and reset to false after metrics are sent to statsd. // Set to true if data stall is suspected and reset to false after metrics are sent to statsd. private boolean mCollectDataStallMetrics = false; private boolean mCollectDataStallMetrics; private boolean mAcceptPartialConnectivity; public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, public NetworkMonitor(Context context, INetworkMonitorCallbacks cb, Network network, SharedLog validationLog) { SharedLog validationLog) { Loading Loading @@ -386,10 +387,11 @@ public class NetworkMonitor extends StateMachine { } } /** /** * ConnectivityService notifies NetworkMonitor that the user accepts partial connectivity and * ConnectivityService notifies NetworkMonitor that the user already accepted partial * NetworkMonitor should ignore the https probe. * connectivity previously, so NetworkMonitor can validate the network even if it has partial * connectivity. */ */ public void notifyAcceptPartialConnectivity() { public void setAcceptPartialConnectivity() { sendMessage(EVENT_ACCEPT_PARTIAL_CONNECTIVITY); sendMessage(EVENT_ACCEPT_PARTIAL_CONNECTIVITY); } } Loading Loading @@ -651,9 +653,11 @@ public class NetworkMonitor extends StateMachine { case EVENT_DNS_NOTIFICATION: case EVENT_DNS_NOTIFICATION: mDnsStallDetector.accumulateConsecutiveDnsTimeoutCount(message.arg1); mDnsStallDetector.accumulateConsecutiveDnsTimeoutCount(message.arg1); break; break; // Set mAcceptPartialConnectivity to true and if network start evaluating or // re-evaluating and get the result of partial connectivity, ProbingState will // disable HTTPS probe and transition to EvaluatingPrivateDnsState. case EVENT_ACCEPT_PARTIAL_CONNECTIVITY: case EVENT_ACCEPT_PARTIAL_CONNECTIVITY: mUseHttps = false; mAcceptPartialConnectivity = true; transitionTo(mEvaluatingPrivateDnsState); break; break; default: default: break; break; Loading Loading @@ -849,6 +853,14 @@ public class NetworkMonitor extends StateMachine { // ignore any re-evaluation requests. After, restart the // ignore any re-evaluation requests. After, restart the // evaluation process via EvaluatingState#enter. // evaluation process via EvaluatingState#enter. return (mEvaluateAttempts < IGNORE_REEVALUATE_ATTEMPTS) ? HANDLED : NOT_HANDLED; return (mEvaluateAttempts < IGNORE_REEVALUATE_ATTEMPTS) ? HANDLED : NOT_HANDLED; // Disable HTTPS probe and transition to EvaluatingPrivateDnsState because: // 1. Network is connected and finish the network validation. // 2. NetworkMonitor detects network is partial connectivity and user accepts it. case EVENT_ACCEPT_PARTIAL_CONNECTIVITY: mAcceptPartialConnectivity = true; mUseHttps = false; transitionTo(mEvaluatingPrivateDnsState); return HANDLED; default: default: return NOT_HANDLED; return NOT_HANDLED; } } Loading Loading @@ -1081,7 +1093,12 @@ public class NetworkMonitor extends StateMachine { logNetworkEvent(NetworkEvent.NETWORK_PARTIAL_CONNECTIVITY); logNetworkEvent(NetworkEvent.NETWORK_PARTIAL_CONNECTIVITY); notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, probeResult.redirectUrl); probeResult.redirectUrl); if (mAcceptPartialConnectivity) { mUseHttps = false; transitionTo(mEvaluatingPrivateDnsState); } else { transitionTo(mWaitingForNextProbeState); transitionTo(mWaitingForNextProbeState); } } else { } else { logNetworkEvent(NetworkEvent.NETWORK_VALIDATION_FAILED); logNetworkEvent(NetworkEvent.NETWORK_VALIDATION_FAILED); notifyNetworkTested(NETWORK_TEST_RESULT_INVALID, probeResult.redirectUrl); notifyNetworkTested(NETWORK_TEST_RESULT_INVALID, probeResult.redirectUrl); Loading
tests/src/com/android/server/connectivity/NetworkMonitorTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -583,7 +583,7 @@ public class NetworkMonitorTest { verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, null); .notifyNetworkTested(NETWORK_TEST_RESULT_PARTIAL_CONNECTIVITY, null); nm.notifyAcceptPartialConnectivity(); nm.setAcceptPartialConnectivity(); verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) verify(mCallbacks, timeout(HANDLER_TIMEOUT_MS).times(1)) .notifyNetworkTested(NETWORK_TEST_RESULT_VALID, null); .notifyNetworkTested(NETWORK_TEST_RESULT_VALID, null); } } Loading