Merge "Separate NetworkMonitor/framework portal URL"

am: bcd3bed561

Change-Id: I1926527f7875e459b4d3c84bfcd8b3aac9562cae
This commit is contained in:
Remi NGUYEN VAN
2019-03-24 20:02:39 -07:00
committed by android-build-merger
7 changed files with 32 additions and 9 deletions

View File

@@ -1345,12 +1345,15 @@ public class ConnectivityManager {
}
/**
* Gets the URL that should be used for resolving whether a captive portal is present.
* Gets a URL that can be used for resolving whether a captive portal is present.
* 1. This URL should respond with a 204 response to a GET request to indicate no captive
* portal is present.
* 2. This URL must be HTTP as redirect responses are used to find captive portal
* sign-in pages. Captive portals cannot respond to HTTPS requests with redirects.
*
* The system network validation may be using different strategies to detect captive portals,
* so this method does not necessarily return a URL used by the system. It only returns a URL
* that may be relevant for other components trying to detect captive portals.
* @hide
*/
@SystemApi

View File

@@ -302,6 +302,15 @@
Settings.Global.NETWORK_AVOID_BAD_WIFI. This is the default value of that setting. -->
<integer translatable="false" name="config_networkAvoidBadWifi">1</integer>
<!-- The URL returned by ConnectivityManager#getCaptivePortalServerUrl. The actual returned
value is controlled by Settings.Global.CAPTIVE_PORTAL_HTTP_URL. This is the default value
used if that setting is unset.
This is *NOT* a URL that will always be used by the system network validation to detect
captive portals: NetworkMonitor may use different strategies and will not necessarily use
this URL. NetworkMonitor behaviour should be configured with NetworkStack resource overlays
instead. -->
<string translatable="false" name="config_networkDefaultCaptivePortalServerUrl">http://connectivitycheck.gstatic.com/generate_204</string>
<!-- If the hardware supports specially marking packets that caused a wakeup of the
main CPU, set this value to the mark used. -->
<integer name="config_networkWakeupPacketMark">0</integer>

View File

@@ -1945,6 +1945,7 @@
<java-symbol type="integer" name="config_networkNotifySwitchType" />
<java-symbol type="array" name="config_networkNotifySwitches" />
<java-symbol type="integer" name="config_networkAvoidBadWifi" />
<java-symbol type="string" name="config_networkDefaultCaptivePortalServerUrl" />
<java-symbol type="integer" name="config_networkWakeupPacketMark" />
<java-symbol type="integer" name="config_networkWakeupPacketMask" />
<java-symbol type="bool" name="config_apfDrop802_3Frames" />

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Captive portal http url -->
<string name="config_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.com/generate_204</string>
</resources>

View File

@@ -83,6 +83,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.RingBufferIndices;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
import com.android.networkstack.R;
import java.io.IOException;
import java.net.HttpURLConnection;
@@ -1710,9 +1711,15 @@ public class NetworkMonitor extends StateMachine {
/**
* Get the captive portal server HTTP URL that is configured on the device.
*
* NetworkMonitor does not use {@link ConnectivityManager#getCaptivePortalServerUrl()} as
* it has its own updatable strategies to detect captive portals. The framework only advises
* on one URL that can be used, while NetworkMonitor may implement more complex logic.
*/
public String getCaptivePortalServerHttpUrl(Context context) {
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(context);
final String defaultUrl =
context.getResources().getString(R.string.config_captive_portal_http_url);
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(context, defaultUrl);
}
/**

View File

@@ -6692,7 +6692,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
@Override
public String getCaptivePortalServerUrl() {
enforceConnectivityInternalPermission();
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(mContext);
final String defaultUrl = mContext.getResources().getString(
R.string.config_networkDefaultCaptivePortalServerUrl);
return NetworkMonitorUtils.getCaptivePortalServerHttpUrl(mContext, defaultUrl);
}
@Override

View File

@@ -44,18 +44,14 @@ public class NetworkMonitorUtils {
public static final String PERMISSION_ACCESS_NETWORK_CONDITIONS =
"android.permission.ACCESS_NETWORK_CONDITIONS";
// TODO: once the URL is a resource overlay, remove and have the resource define the default
private static final String DEFAULT_HTTP_URL =
"http://connectivitycheck.gstatic.com/generate_204";
/**
* Get the captive portal server HTTP URL that is configured on the device.
*/
public static String getCaptivePortalServerHttpUrl(Context context) {
public static String getCaptivePortalServerHttpUrl(Context context, String defaultUrl) {
final String settingUrl = Settings.Global.getString(
context.getContentResolver(),
Settings.Global.CAPTIVE_PORTAL_HTTP_URL);
return settingUrl != null ? settingUrl : DEFAULT_HTTP_URL;
return settingUrl != null ? settingUrl : defaultUrl;
}
/**